eslint-plugin-firebase-ai-logic 1.0.0 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (57) hide show
  1. package/README.md +539 -0
  2. package/dist/index.d.ts.map +1 -1
  3. package/dist/index.js +54 -2
  4. package/dist/index.js.map +1 -1
  5. package/dist/rules/check-media-resolution.d.ts +4 -0
  6. package/dist/rules/check-media-resolution.d.ts.map +1 -0
  7. package/dist/rules/check-media-resolution.js +47 -0
  8. package/dist/rules/check-media-resolution.js.map +1 -0
  9. package/dist/rules/check-temperature-defaults.d.ts +4 -0
  10. package/dist/rules/check-temperature-defaults.d.ts.map +1 -0
  11. package/dist/rules/check-temperature-defaults.js +56 -0
  12. package/dist/rules/check-temperature-defaults.js.map +1 -0
  13. package/dist/rules/no-code-execution-creative-tasks.d.ts +4 -0
  14. package/dist/rules/no-code-execution-creative-tasks.d.ts.map +1 -0
  15. package/dist/rules/no-code-execution-creative-tasks.js +75 -0
  16. package/dist/rules/no-code-execution-creative-tasks.js.map +1 -0
  17. package/dist/rules/no-file-uri-with-code-execution.d.ts +4 -0
  18. package/dist/rules/no-file-uri-with-code-execution.d.ts.map +1 -0
  19. package/dist/rules/no-file-uri-with-code-execution.js +44 -0
  20. package/dist/rules/no-file-uri-with-code-execution.js.map +1 -0
  21. package/dist/rules/no-thinking-simple-tasks.d.ts +1 -1
  22. package/dist/rules/no-thinking-simple-tasks.d.ts.map +1 -1
  23. package/dist/rules/no-thinking-simple-tasks.js +122 -102
  24. package/dist/rules/no-thinking-simple-tasks.js.map +1 -1
  25. package/dist/rules/require-code-execution-handling.d.ts +4 -0
  26. package/dist/rules/require-code-execution-handling.d.ts.map +1 -0
  27. package/dist/rules/require-code-execution-handling.js +66 -0
  28. package/dist/rules/require-code-execution-handling.js.map +1 -0
  29. package/dist/rules/require-google-ai-backend-for-grounding.d.ts +4 -0
  30. package/dist/rules/require-google-ai-backend-for-grounding.d.ts.map +1 -0
  31. package/dist/rules/require-google-ai-backend-for-grounding.js +63 -0
  32. package/dist/rules/require-google-ai-backend-for-grounding.js.map +1 -0
  33. package/dist/rules/require-grounding-compliance.d.ts +4 -0
  34. package/dist/rules/require-grounding-compliance.d.ts.map +1 -0
  35. package/dist/rules/require-grounding-compliance.js +51 -0
  36. package/dist/rules/require-grounding-compliance.js.map +1 -0
  37. package/dist/rules/validate-code-execution-config.d.ts +4 -0
  38. package/dist/rules/validate-code-execution-config.d.ts.map +1 -0
  39. package/dist/rules/validate-code-execution-config.js +38 -0
  40. package/dist/rules/validate-code-execution-config.js.map +1 -0
  41. package/dist/rules/validate-multimodal-config.d.ts +4 -0
  42. package/dist/rules/validate-multimodal-config.d.ts.map +1 -0
  43. package/dist/rules/validate-multimodal-config.js +54 -0
  44. package/dist/rules/validate-multimodal-config.js.map +1 -0
  45. package/dist/rules/validate-response-mime-type.d.ts +4 -0
  46. package/dist/rules/validate-response-mime-type.d.ts.map +1 -0
  47. package/dist/rules/validate-response-mime-type.js +67 -0
  48. package/dist/rules/validate-response-mime-type.js.map +1 -0
  49. package/dist/rules/validate-schema-structure.d.ts +4 -0
  50. package/dist/rules/validate-schema-structure.d.ts.map +1 -0
  51. package/dist/rules/validate-schema-structure.js +42 -0
  52. package/dist/rules/validate-schema-structure.js.map +1 -0
  53. package/dist/utils/ast-helpers.d.ts +7 -3
  54. package/dist/utils/ast-helpers.d.ts.map +1 -1
  55. package/dist/utils/ast-helpers.js +8 -1
  56. package/dist/utils/ast-helpers.js.map +1 -1
  57. package/package.json +2 -2
package/README.md ADDED
@@ -0,0 +1,539 @@
1
+ # ESLint Plugin: Firebase AI Logic
2
+
3
+ Plugin ESLint oficial para **Firebase AI Logic** com 39 regras que detectam anti-padrões, imports obsoletos, configs inválidas e best practices.
4
+
5
+ ```bash
6
+ npm install --save-dev eslint-plugin-firebase-ai-logic
7
+ ```
8
+
9
+ ## 🚀 Início Rápido (5 min)
10
+
11
+ ### 1️⃣ Instalar o Plugin
12
+
13
+ ```bash
14
+ npm install --save-dev eslint-plugin-firebase-ai-logic
15
+ ```
16
+
17
+ ### 2️⃣ Configurar ESLint 9+ (Flat Config)
18
+
19
+ Edite `eslint.config.js`:
20
+
21
+ ```javascript
22
+ import firebaseAiLogicPlugin from "eslint-plugin-firebase-ai-logic";
23
+
24
+ export default [
25
+ firebaseAiLogicPlugin.configs.recommended,
26
+ // suas outras configs...
27
+ ];
28
+ ```
29
+
30
+ ### 3️⃣ Configurar ESLint 8.x (Legacy)
31
+
32
+ Edite `.eslintrc.js` ou `.eslintrc.json`:
33
+
34
+ ```javascript
35
+ module.exports = {
36
+ plugins: ["firebase-ai-logic"],
37
+ extends: ["plugin:firebase-ai-logic/recommended"],
38
+ };
39
+ ```
40
+
41
+ ### 4️⃣ Rodar ESLint
42
+
43
+ ```bash
44
+ npx eslint src --fix
45
+ ```
46
+
47
+ Pronto! O plugin agora vai detectar problemas no seu código Firebase AI Logic.
48
+
49
+ ---
50
+
51
+ ## 📋 Exemplos de Regras
52
+
53
+ ### ❌ Imports Deprecated
54
+
55
+ ```typescript
56
+ // ❌ ERRADO - Usando import antigo
57
+ import { getVertexAI } from "firebase/vertexai-preview";
58
+
59
+ // ❌ ERRADO - Importando direto da Google Cloud
60
+ import { VertexAI } from "@google-cloud/vertexai";
61
+
62
+ // ✅ CERTO - Use firebase/ai
63
+ import { getAI, GoogleAIBackend } from "firebase/ai";
64
+ ```
65
+
66
+ ### ❌ Modelo Obsoleto
67
+
68
+ ```typescript
69
+ // ❌ ERRADO - gemini-2.5-pro é deprecated
70
+ const model = getGenerativeModel(ai, {
71
+ model: "gemini-2.5-pro",
72
+ });
73
+
74
+ // ✅ CERTO - Use gemini-3-flash-preview
75
+ const model = getGenerativeModel(ai, {
76
+ model: "gemini-3-flash-preview",
77
+ });
78
+ ```
79
+
80
+ ### ❌ JSON Schema com Streaming
81
+
82
+ ```typescript
83
+ // ❌ ERRADO - Não funciona junto
84
+ const result = await model.generateContentStream(prompt, {
85
+ responseMimeType: "application/json",
86
+ responseSchema: mySchema,
87
+ });
88
+
89
+ // ✅ CERTO - Use generateContent (sem stream)
90
+ const result = await model.generateContent(prompt, {
91
+ responseMimeType: "application/json",
92
+ responseSchema: mySchema,
93
+ });
94
+ ```
95
+
96
+ ### ❌ Falta Backend
97
+
98
+ ```typescript
99
+ // ❌ ERRADO - Backend é obrigatório
100
+ const ai = getAI(app);
101
+
102
+ // ✅ CERTO - Sempre especifique o backend
103
+ const ai = getAI(app, {
104
+ backend: new GoogleAIBackend(),
105
+ });
106
+ ```
107
+
108
+ ### ❌ Function Calling sem Response
109
+
110
+ ```typescript
111
+ // ❌ ERRADO - Falta tratar resposta
112
+ const result = await model.generateContent(prompt);
113
+ const calls = result.response.functionCalls();
114
+ // ... executou a função mas não enviou de volta
115
+
116
+ // ✅ CERTO - Complete o loop
117
+ const result = await model.generateContent(prompt);
118
+ const calls = result.response.functionCalls();
119
+ for (const call of calls) {
120
+ const response = await executeFunction(call.name, call.args);
121
+ await chat.sendMessage({
122
+ role: "user",
123
+ parts: [{ functionResponse: response }],
124
+ });
125
+ }
126
+ ```
127
+
128
+ ---
129
+
130
+ ## 📚 Todas as 39 Regras
131
+
132
+ ### Imports & Models (5 regras)
133
+
134
+ | Regra | Descrição |
135
+ | --------------------------------- | ------------------------------------------------------- |
136
+ | `no-deprecated-firebase-vertexai` | Não use `firebase/vertexai-preview` → use `firebase/ai` |
137
+ | `no-vertexai-only-import` | Não use `firebase/vertexai` → use `firebase/ai` |
138
+ | `no-vertex-ai-direct-import` | Não use `@google-cloud/vertexai` → use `firebase/ai` |
139
+ | `no-google-genai-import` | Não use `@google/generative-ai` → use `firebase/ai` |
140
+ | `no-deprecated-models` | Detecta modelos obsoletos (gemini-2.5-pro, etc) |
141
+
142
+ ### Schema & Validation (4 regras)
143
+
144
+ | Regra | Descrição |
145
+ | -------------------------------- | --------------------------------------------------------- |
146
+ | `no-streaming-with-schema` | JSON schema NÃO funciona com streaming |
147
+ | `no-unsupported-schema-features` | union types, constraints não são suportados |
148
+ | `no-schema-in-prompt` | Remova instruções JSON do prompt se usar `responseSchema` |
149
+ | `require-json-validation` | Valide JSON parseado com Zod após receber |
150
+ | `validate-schema-structure` | Detecta erros estruturais no objeto de schema |
151
+ | `validate-response-mime-type` | Garante que `responseMimeType` é compatível com o schema |
152
+
153
+ ### Functions & Code Execution (7 regras)
154
+
155
+ | Regra | Descrição |
156
+ | ------------------------------------ | ---------------------------------------------------------------------------- |
157
+ | `require-function-description` | Função precisa de descrição detalhada |
158
+ | `require-function-response-handling` | Function calling requer loop completo |
159
+ | `no-unsupported-function-params` | Alguns atributos não são suportados |
160
+ | `validate-code-execution-config` | Valida configuração de Code Execution |
161
+ | `require-code-execution-handling` | Code execution requer tratamento de `executableCode` / `codeExecutionResult` |
162
+ | `no-file-uri-with-code-execution` | Bloqueia `fileUri` em ferramentas com Code Execution |
163
+ | `no-code-execution-creative-tasks` | Sugere desativar Code Execution para tarefas puramente criativas |
164
+
165
+ ### Performance, Cost & Limits (6 regras)
166
+
167
+ | Regra | Descrição |
168
+ | ---------------------------------- | ---------------------------------------- |
169
+ | `prefer-batch-requests` | Agrupe requisições em `Promise.all()` |
170
+ | `prefer-count-tokens` | Use `countTokens()` para prompts grandes |
171
+ | `prefer-streaming-long-responses` | Streaming para respostas > 1000 chars |
172
+ | `prefer-concise-property-names` | Nomes curtos economizam tokens |
173
+ | `prefer-cloud-storage-large-files` | Use Cloud Storage pra arquivos > 10MB |
174
+ | `no-unlimited-chat-history` | Limpe histórico do chat regularmente |
175
+
176
+ ### Security & Compliance (5 regras)
177
+
178
+ | Regra | Descrição |
179
+ | ----------------------------------------- | ------------------------------------------------------------ |
180
+ | `no-sensitive-system-instruction` | Não coloque dados sensíveis no system prompt |
181
+ | `require-app-check-production` | Use App Check em produção |
182
+ | `require-grounding-compliance` | Garante que Grounding segue regras de exibição e links |
183
+ | `require-google-ai-backend-for-grounding` | Google Search Grounding requer GoogleAIBackend |
184
+ | `validate-multimodal-config` | Valida segurança de arquivos multimídia (limites de tamanho) |
185
+
186
+ ### Gemini 3 & Best Practices (8 regras)
187
+
188
+ | Regra | Descrição |
189
+ | ---------------------------- | --------------------------------------------------------- |
190
+ | `require-thought-signature` | Gemini 3: preserve `thoughtSignature` para coerência |
191
+ | `check-temperature-defaults` | Alertas sobre temperaturas extremas no Gemini 3 |
192
+ | `check-media-resolution` | Garante resolução compatível com as capacidades do modelo |
193
+ | `no-thinking-simple-tasks` | Thinking mode é overhead pra tarefas simples |
194
+ | `no-verbose-prompts` | Prompts verbosos = mais tokens e custo |
195
+ | `require-backend` | Backend (GoogleAI ou VertexAI) é obrigatório |
196
+ | `require-ai-before-model` | Crie AI antes de usar `getGenerativeModel` |
197
+ | `require-error-handling` | Envolva chamadas em try/catch |
198
+
199
+ ---
200
+
201
+ ## 🎯 Configuração Avançada
202
+
203
+ ### Ativar Apenas Algumas Regras
204
+
205
+ ```javascript
206
+ // ESLint 9+ (flat config)
207
+ import firebaseAiLogicPlugin from "eslint-plugin-firebase-ai-logic";
208
+
209
+ export default [
210
+ {
211
+ plugins: { "firebase-ai-logic": firebaseAiLogicPlugin },
212
+ rules: {
213
+ "firebase-ai-logic/no-deprecated-models": "error",
214
+ "firebase-ai-logic/require-backend": "error",
215
+ "firebase-ai-logic/require-json-validation": "warn",
216
+ // desabilitar regra
217
+ "firebase-ai-logic/no-verbose-prompts": "off",
218
+ },
219
+ },
220
+ ];
221
+ ```
222
+
223
+ ```javascript
224
+ // ESLint 8.x (legacy)
225
+ module.exports = {
226
+ plugins: ["firebase-ai-logic"],
227
+ rules: {
228
+ "firebase-ai-logic/no-deprecated-models": "error",
229
+ "firebase-ai-logic/require-backend": "error",
230
+ "firebase-ai-logic/require-json-validation": "warn",
231
+ "firebase-ai-logic/no-verbose-prompts": "off",
232
+ },
233
+ };
234
+ ```
235
+
236
+ ### Regras por Severity
237
+
238
+ **Error** (deve corrigir):
239
+
240
+ - Imports deprecated
241
+ - Modelos obsoletos
242
+ - Backend obrigatório
243
+ - Function calling incompleto
244
+ - Schema com streaming
245
+
246
+ **Warning** (considere corrigir):
247
+
248
+ - Falta de validation JSON
249
+ - Sem error handling
250
+ - Historico de chat ilimitado
251
+ - Prompts verbose
252
+
253
+ **Suggestion** (dicas opcionais):
254
+
255
+ - Nomes de propriedades longos
256
+ - Sem countTokens
257
+ - Sem streaming em respostas longas
258
+
259
+ ---
260
+
261
+ ## 💡 Exemplos Práticos
262
+
263
+ ### Setup Completo
264
+
265
+ ```typescript
266
+ import { initializeApp } from "firebase/app";
267
+ import { getAI, getGenerativeModel, GoogleAIBackend } from "firebase/ai";
268
+ import { initializeAppCheck, ReCaptchaV3Provider } from "firebase/app-check";
269
+ import { z } from "zod";
270
+
271
+ // ✅ App Check habilitado
272
+ const app = initializeApp(firebaseConfig);
273
+ initializeAppCheck(app, {
274
+ provider: new ReCaptchaV3Provider("YOUR_SITE_KEY"),
275
+ });
276
+
277
+ // ✅ AI com backend explícito
278
+ const ai = getAI(app, { backend: new GoogleAIBackend() });
279
+
280
+ // ✅ Model com config correto
281
+ const model = getGenerativeModel(ai, {
282
+ model: "gemini-3-flash-preview", // ✅ Modelo atual
283
+ systemInstruction: "Você é um assistente amigável",
284
+ });
285
+
286
+ // ✅ Validação com Zod
287
+ const ResponseValidator = z.object({
288
+ sentiment: z.enum(["positive", "negative", "neutral"]),
289
+ confidence: z.number().min(0).max(1),
290
+ });
291
+
292
+ // ✅ Try/catch para error handling
293
+ async function analyzeReview(review: string) {
294
+ try {
295
+ // ✅ countTokens para prompt grande
296
+ const tokens = await model.countTokens(review);
297
+ if (tokens.totalTokens > 5000) {
298
+ console.warn("Prompt grande:", tokens.totalTokens);
299
+ }
300
+
301
+ // ✅ generateContent (NÃO stream) para JSON
302
+ const result = await model.generateContent(review, {
303
+ responseMimeType: "application/json",
304
+ responseSchema: ReviewSchema,
305
+ });
306
+
307
+ // ✅ Validar antes de usar
308
+ const data = JSON.parse(result.response.text());
309
+ return ResponseValidator.parse(data);
310
+ } catch (error) {
311
+ if (error instanceof Error && "status" in error) {
312
+ if ((error as any).status === 429) {
313
+ // Rate limit - implementar exponential backoff
314
+ console.error("Rate limited, aguarde antes de tentar novamente");
315
+ }
316
+ }
317
+ throw error;
318
+ }
319
+ }
320
+ ```
321
+
322
+ ### Function Calling Correto
323
+
324
+ ```typescript
325
+ // ✅ Setup com tools
326
+ const model = getGenerativeModel(ai, {
327
+ model: "gemini-3-flash-preview",
328
+ tools: [
329
+ {
330
+ name: "search_web",
331
+ description: "Busca na web por informações recentes", // ✅ Descrição clara
332
+ parameters: {
333
+ type: "object",
334
+ properties: {
335
+ query: { type: "string" },
336
+ },
337
+ },
338
+ },
339
+ ],
340
+ });
341
+
342
+ async function chatWithFunctionCalling(userMessage: string) {
343
+ const chat = model.startChat();
344
+
345
+ try {
346
+ let response = await chat.sendMessage(userMessage);
347
+
348
+ // ✅ Loop completo de function calling
349
+ while (response.response.functionCalls().length > 0) {
350
+ const calls = response.response.functionCalls();
351
+
352
+ for (const call of calls) {
353
+ console.log(`Executando: ${call.name}(${JSON.stringify(call.args)})`);
354
+
355
+ // Executar a função
356
+ const result = await executeFunction(call.name, call.args);
357
+
358
+ // ✅ IMPORTANTE: Enviar resposta de volta
359
+ response = await chat.sendMessage({
360
+ role: "user",
361
+ parts: [
362
+ {
363
+ functionResponse: {
364
+ name: call.name,
365
+ response: result,
366
+ },
367
+ },
368
+ ],
369
+ });
370
+ }
371
+ }
372
+
373
+ return response.response.text();
374
+ } catch (error) {
375
+ console.error("Erro em function calling:", error);
376
+ throw error;
377
+ }
378
+ }
379
+ ```
380
+
381
+ ### Chat com Histórico Limitado
382
+
383
+ ```typescript
384
+ // ✅ Limitar histórico para economizar tokens
385
+ const MAX_HISTORY = 10;
386
+
387
+ async function maintainChatHistory(
388
+ messages: Array<{ role: string; text: string }>,
389
+ ) {
390
+ // ✅ Manter apenas últimas N mensagens
391
+ const recentMessages = messages.slice(-MAX_HISTORY);
392
+
393
+ const chat = model.startChat({
394
+ history: recentMessages.map((msg) => ({
395
+ role: msg.role as "user" | "model",
396
+ parts: [{ text: msg.text }],
397
+ })),
398
+ });
399
+
400
+ return chat;
401
+ }
402
+ ```
403
+
404
+ ---
405
+
406
+ ## 🔧 Troubleshooting
407
+
408
+ ### "Plugin não está sendo carregado"
409
+
410
+ **Erro:**
411
+
412
+ ```
413
+ Cannot find module 'eslint-plugin-firebase-ai-logic'
414
+ ```
415
+
416
+ **Solução:**
417
+
418
+ ```bash
419
+ # Verifique se está instalado
420
+ npm list eslint-plugin-firebase-ai-logic
421
+
422
+ # Se não, instale
423
+ npm install --save-dev eslint-plugin-firebase-ai-logic
424
+
425
+ # ESLint 9 precisa de nome qualificado
426
+ import firebaseAiLogicPlugin from 'eslint-plugin-firebase-ai-logic';
427
+ ```
428
+
429
+ ### "Regra não reconhecida"
430
+
431
+ **Erro:**
432
+
433
+ ```
434
+ "firebase-ai-logic/no-deprecated-models" was not found
435
+ ```
436
+
437
+ **Solução:**
438
+
439
+ - Verifique o nome exato da regra
440
+ - Use com prefixo: `firebase-ai-logic/`
441
+ - Certifique-se que a regra está ativa na config
442
+
443
+ ### "Config recommended não existe"
444
+
445
+ **Solução para ESLint 9:**
446
+
447
+ ```javascript
448
+ // ✅ CERTO
449
+ import firebaseAiLogicPlugin from "eslint-plugin-firebase-ai-logic";
450
+ export default [firebaseAiLogicPlugin.configs.recommended];
451
+ ```
452
+
453
+ **Solução para ESLint 8:**
454
+
455
+ ```javascript
456
+ // ✅ CERTO
457
+ module.exports = {
458
+ extends: ["plugin:firebase-ai-logic/recommended"],
459
+ };
460
+ ```
461
+
462
+ ---
463
+
464
+ ## 📖 Documentação Completa
465
+
466
+ Cada regra tem documentação detalhada no GitHub:
467
+
468
+ https://github.com/Just-mpm/eslint-plugin-firebase-ai-logic
469
+
470
+ Veja o diretório `docs/rules/` para:
471
+
472
+ - Exemplos de código bom e ruim
473
+ - Razão por trás da regra
474
+ - Como corrigir automaticamente
475
+ - Exceções e edge cases
476
+
477
+ ---
478
+
479
+ ## 🐛 Encontrou um Bug?
480
+
481
+ Abra uma issue no GitHub:
482
+ https://github.com/Just-mpm/eslint-plugin-firebase-ai-logic/issues
483
+
484
+ Inclua:
485
+
486
+ - Versão do plugin
487
+ - Versão do ESLint
488
+ - Configuração ESLint
489
+ - Código que causa o problema
490
+ - Output esperado vs atual
491
+
492
+ ---
493
+
494
+ ## 📝 License
495
+
496
+ MIT © [Matheus Pimenta](https://kodaai.app)
497
+
498
+ ---
499
+
500
+ ## 🤝 Contribuindo
501
+
502
+ Contribuições são bem-vindas! O projeto está em:
503
+ https://github.com/Just-mpm/eslint-plugin-firebase-ai-logic
504
+
505
+ ### Setup para Desenvolvimento
506
+
507
+ ```bash
508
+ # Clone o repo
509
+ git clone https://github.com/Just-mpm/eslint-plugin-firebase-ai-logic.git
510
+ cd eslint-plugin-firebase-ai-logic
511
+
512
+ # Instale dependências
513
+ npm install
514
+
515
+ # Rode os testes
516
+ npm test
517
+
518
+ # Build TypeScript
519
+ npm run build
520
+
521
+ # Watch mode para desenvolvimento
522
+ npm run test:watch
523
+ ```
524
+
525
+ ---
526
+
527
+ ## 📚 Recursos Adicionais
528
+
529
+ - **Firebase AI Logic Docs**: https://firebase.google.com/docs/ai-logic
530
+ - **Gemini API Reference**: https://ai.google.dev/gemini-api/docs
531
+ - **ESLint Plugin Dev Guide**: https://eslint.org/docs/latest/extend/plugins
532
+ - **Skill firebase-ai-logic**: Guia prático no Claude Code
533
+
534
+ ---
535
+
536
+ Feito com ❤️ para developers Firebase AI Logic
537
+
538
+ **Versão:** 1.1.0
539
+ **NPM:** https://www.npmjs.com/package/eslint-plugin-firebase-ai-logic
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAU,MAAM,QAAQ,CAAC;AA+N7C,QAAA,MAAM,MAAM,EAAE,MAAM,CAAC,MAOpB,CAAC;AAEF,SAAS,MAAM,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAU,MAAM,QAAQ,CAAC;AAwR7C,QAAA,MAAM,MAAM,EAAE,MAAM,CAAC,MAOpB,CAAC;AAEF,SAAS,MAAM,CAAC"}
package/dist/index.js CHANGED
@@ -31,6 +31,17 @@ const prefer_streaming_long_responses_js_1 = __importDefault(require("./rules/pr
31
31
  const no_thinking_simple_tasks_js_1 = __importDefault(require("./rules/no-thinking-simple-tasks.js"));
32
32
  const prefer_concise_property_names_js_1 = __importDefault(require("./rules/prefer-concise-property-names.js"));
33
33
  const require_thought_signature_js_1 = __importDefault(require("./rules/require-thought-signature.js"));
34
+ const check_temperature_defaults_js_1 = __importDefault(require("./rules/check-temperature-defaults.js"));
35
+ const check_media_resolution_js_1 = __importDefault(require("./rules/check-media-resolution.js"));
36
+ const validate_response_mime_type_js_1 = __importDefault(require("./rules/validate-response-mime-type.js"));
37
+ const validate_code_execution_config_js_1 = __importDefault(require("./rules/validate-code-execution-config.js"));
38
+ const validate_schema_structure_js_1 = __importDefault(require("./rules/validate-schema-structure.js"));
39
+ const require_code_execution_handling_js_1 = __importDefault(require("./rules/require-code-execution-handling.js"));
40
+ const require_grounding_compliance_js_1 = __importDefault(require("./rules/require-grounding-compliance.js"));
41
+ const no_file_uri_with_code_execution_js_1 = __importDefault(require("./rules/no-file-uri-with-code-execution.js"));
42
+ const no_code_execution_creative_tasks_js_1 = __importDefault(require("./rules/no-code-execution-creative-tasks.js"));
43
+ const require_google_ai_backend_for_grounding_js_1 = __importDefault(require("./rules/require-google-ai-backend-for-grounding.js"));
44
+ const validate_multimodal_config_js_1 = __importDefault(require("./rules/validate-multimodal-config.js"));
34
45
  const rules = {
35
46
  // Import rules (4)
36
47
  'no-google-genai-import': no_google_genai_import_js_1.default,
@@ -69,8 +80,22 @@ const rules = {
69
80
  'prefer-streaming-long-responses': prefer_streaming_long_responses_js_1.default,
70
81
  'no-thinking-simple-tasks': no_thinking_simple_tasks_js_1.default,
71
82
  'prefer-concise-property-names': prefer_concise_property_names_js_1.default,
72
- // Gemini 3 specific rules (1)
83
+ // Gemini 3 specific rules (3)
73
84
  'require-thought-signature': require_thought_signature_js_1.default,
85
+ 'check-temperature-defaults': check_temperature_defaults_js_1.default,
86
+ 'check-media-resolution': check_media_resolution_js_1.default,
87
+ // Validation rules (3)
88
+ 'validate-response-mime-type': validate_response_mime_type_js_1.default,
89
+ 'validate-code-execution-config': validate_code_execution_config_js_1.default,
90
+ 'validate-schema-structure': validate_schema_structure_js_1.default,
91
+ // Compliance (2)
92
+ 'require-code-execution-handling': require_code_execution_handling_js_1.default,
93
+ 'require-grounding-compliance': require_grounding_compliance_js_1.default,
94
+ // Additional rules (2)
95
+ 'no-file-uri-with-code-execution': no_file_uri_with_code_execution_js_1.default,
96
+ 'no-code-execution-creative-tasks': no_code_execution_creative_tasks_js_1.default,
97
+ 'require-google-ai-backend-for-grounding': require_google_ai_backend_for_grounding_js_1.default,
98
+ 'validate-multimodal-config': validate_multimodal_config_js_1.default,
74
99
  };
75
100
  // Rule configurations
76
101
  const recommendedRules = {
@@ -89,10 +114,17 @@ const recommendedRules = {
89
114
  'firebase-ai-logic/no-unsupported-schema-features': 'error',
90
115
  'firebase-ai-logic/no-schema-in-prompt': 'warn',
91
116
  'firebase-ai-logic/prefer-optional-properties': 'warn',
117
+ 'firebase-ai-logic/validate-response-mime-type': 'error',
118
+ 'firebase-ai-logic/validate-schema-structure': 'warn',
92
119
  // Function calling - warnings
93
120
  'firebase-ai-logic/require-function-description': 'warn',
94
121
  'firebase-ai-logic/no-unsupported-function-params': 'error',
95
122
  'firebase-ai-logic/require-function-response-handling': 'warn',
123
+ 'firebase-ai-logic/validate-code-execution-config': 'error',
124
+ 'firebase-ai-logic/require-code-execution-handling': 'warn',
125
+ 'firebase-ai-logic/no-file-uri-with-code-execution': 'error',
126
+ 'firebase-ai-logic/no-code-execution-creative-tasks': 'warn',
127
+ 'firebase-ai-logic/require-grounding-compliance': 'error',
96
128
  // Error handling - warnings
97
129
  'firebase-ai-logic/require-error-handling': 'warn',
98
130
  'firebase-ai-logic/require-json-validation': 'warn',
@@ -103,9 +135,12 @@ const recommendedRules = {
103
135
  'firebase-ai-logic/require-app-check-production': 'warn',
104
136
  // Multimodal - errors
105
137
  'firebase-ai-logic/no-unsupported-mime-type': 'error',
138
+ 'firebase-ai-logic/validate-multimodal-config': 'error',
106
139
  'firebase-ai-logic/prefer-cloud-storage-large-files': 'warn',
107
140
  // Gemini 3 specific - error (causes 400 errors if missing)
108
141
  'firebase-ai-logic/require-thought-signature': 'error',
142
+ 'firebase-ai-logic/check-temperature-defaults': 'warn',
143
+ 'firebase-ai-logic/check-media-resolution': 'error',
109
144
  };
110
145
  const strictRules = {
111
146
  ...recommendedRules,
@@ -119,6 +154,12 @@ const strictRules = {
119
154
  'firebase-ai-logic/no-unlimited-chat-history': 'error',
120
155
  'firebase-ai-logic/require-app-check-production': 'error',
121
156
  'firebase-ai-logic/prefer-cloud-storage-large-files': 'error',
157
+ 'firebase-ai-logic/check-temperature-defaults': 'error',
158
+ 'firebase-ai-logic/validate-schema-structure': 'error',
159
+ 'firebase-ai-logic/require-code-execution-handling': 'error',
160
+ 'firebase-ai-logic/no-file-uri-with-code-execution': 'error',
161
+ 'firebase-ai-logic/no-code-execution-creative-tasks': 'error',
162
+ 'firebase-ai-logic/require-grounding-compliance': 'error',
122
163
  // Add optional rules
123
164
  'firebase-ai-logic/prefer-count-tokens': 'warn',
124
165
  'firebase-ai-logic/prefer-batch-requests': 'warn',
@@ -156,6 +197,17 @@ const allRules = {
156
197
  'firebase-ai-logic/no-thinking-simple-tasks': 'error',
157
198
  'firebase-ai-logic/prefer-concise-property-names': 'error',
158
199
  'firebase-ai-logic/require-thought-signature': 'error',
200
+ 'firebase-ai-logic/check-temperature-defaults': 'error',
201
+ 'firebase-ai-logic/check-media-resolution': 'error',
202
+ 'firebase-ai-logic/validate-response-mime-type': 'error',
203
+ 'firebase-ai-logic/validate-code-execution-config': 'error',
204
+ 'firebase-ai-logic/validate-schema-structure': 'error',
205
+ 'firebase-ai-logic/require-code-execution-handling': 'error',
206
+ 'firebase-ai-logic/no-file-uri-with-code-execution': 'error',
207
+ 'firebase-ai-logic/no-code-execution-creative-tasks': 'error',
208
+ 'firebase-ai-logic/require-grounding-compliance': 'error',
209
+ 'firebase-ai-logic/require-google-ai-backend-for-grounding': 'error',
210
+ 'firebase-ai-logic/validate-multimodal-config': 'error',
159
211
  };
160
212
  // Flat config format (ESLint 9+)
161
213
  const configs = {
@@ -187,7 +239,7 @@ const configs = {
187
239
  const plugin = {
188
240
  meta: {
189
241
  name: 'eslint-plugin-firebase-ai-logic',
190
- version: '1.0.0',
242
+ version: '1.2.0',
191
243
  },
192
244
  rules,
193
245
  configs,
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { Rule } from 'eslint';
2
+ declare const rule: Rule.RuleModule;
3
+ export default rule;
4
+ //# sourceMappingURL=check-media-resolution.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"check-media-resolution.d.ts","sourceRoot":"","sources":["../../src/rules/check-media-resolution.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAQnC,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,UA6ChB,CAAC;AAEF,eAAe,IAAI,CAAC"}