eslint-plugin-firebase-ai-logic 1.0.0 → 1.1.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 +515 -0
  2. package/dist/index.d.ts.map +1 -1
  3. package/dist/index.js +53 -1
  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,515 @@
1
+ # ESLint Plugin: Firebase AI Logic
2
+
3
+ Plugin ESLint oficial para **Firebase AI Logic** com 24 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 24 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
+
151
+ ### Functions (3 regras)
152
+
153
+ | Regra | Descrição |
154
+ |-------|-----------|
155
+ | `require-function-description` | Função precisa de descrição detalhada |
156
+ | `require-function-response-handling` | Function calling requer loop completo |
157
+ | `no-unsupported-function-params` | Alguns atributos não são suportados |
158
+
159
+ ### Performance & Optimization (5 regras)
160
+
161
+ | Regra | Descrição |
162
+ |-------|-----------|
163
+ | `prefer-batch-requests` | Agrupe requisições em Promise.all() |
164
+ | `prefer-count-tokens` | Use countTokens() para prompts grandes |
165
+ | `prefer-streaming-long-responses` | Streaming para respostas > 1000 chars |
166
+ | `prefer-concise-property-names` | Nomes curtos economizam tokens |
167
+ | `prefer-cloud-storage-large-files` | Use Cloud Storage pra arquivos > 10MB |
168
+
169
+ ### Configuration (4 regras)
170
+
171
+ | Regra | Descrição |
172
+ |-------|-----------|
173
+ | `require-backend` | Backend (GoogleAI ou VertexAI) é obrigatório |
174
+ | `require-ai-before-model` | Crie AI antes de usar getGenerativeModel |
175
+ | `require-app-check-production` | Use App Check em produção |
176
+ | `require-error-handling` | Envolva chamadas em try/catch |
177
+
178
+ ### Best Practices (3 regras)
179
+
180
+ | Regra | Descrição |
181
+ |-------|-----------|
182
+ | `no-thinking-simple-tasks` | Thinking mode é overhead pra tarefas simples |
183
+ | `no-unlimited-chat-history` | Limpe histórico do chat regularmente |
184
+ | `no-verbose-prompts` | Prompts verbosos = mais tokens e custo |
185
+ | `require-thought-signature` | Gemini 3: preserve thoughtSignature |
186
+ | `no-sensitive-system-instruction` | Não coloque dados sensíveis no system prompt |
187
+
188
+ ---
189
+
190
+ ## 🎯 Configuração Avançada
191
+
192
+ ### Ativar Apenas Algumas Regras
193
+
194
+ ```javascript
195
+ // ESLint 9+ (flat config)
196
+ import firebaseAiLogicPlugin from 'eslint-plugin-firebase-ai-logic';
197
+
198
+ export default [
199
+ {
200
+ plugins: { 'firebase-ai-logic': firebaseAiLogicPlugin },
201
+ rules: {
202
+ 'firebase-ai-logic/no-deprecated-models': 'error',
203
+ 'firebase-ai-logic/require-backend': 'error',
204
+ 'firebase-ai-logic/require-json-validation': 'warn',
205
+ // desabilitar regra
206
+ 'firebase-ai-logic/no-verbose-prompts': 'off',
207
+ },
208
+ },
209
+ ];
210
+ ```
211
+
212
+ ```javascript
213
+ // ESLint 8.x (legacy)
214
+ module.exports = {
215
+ plugins: ['firebase-ai-logic'],
216
+ rules: {
217
+ 'firebase-ai-logic/no-deprecated-models': 'error',
218
+ 'firebase-ai-logic/require-backend': 'error',
219
+ 'firebase-ai-logic/require-json-validation': 'warn',
220
+ 'firebase-ai-logic/no-verbose-prompts': 'off',
221
+ },
222
+ };
223
+ ```
224
+
225
+ ### Regras por Severity
226
+
227
+ **Error** (deve corrigir):
228
+ - Imports deprecated
229
+ - Modelos obsoletos
230
+ - Backend obrigatório
231
+ - Function calling incompleto
232
+ - Schema com streaming
233
+
234
+ **Warning** (considere corrigir):
235
+ - Falta de validation JSON
236
+ - Sem error handling
237
+ - Historico de chat ilimitado
238
+ - Prompts verbose
239
+
240
+ **Suggestion** (dicas opcionais):
241
+ - Nomes de propriedades longos
242
+ - Sem countTokens
243
+ - Sem streaming em respostas longas
244
+
245
+ ---
246
+
247
+ ## 💡 Exemplos Práticos
248
+
249
+ ### Setup Completo
250
+
251
+ ```typescript
252
+ import { initializeApp } from 'firebase/app';
253
+ import { getAI, getGenerativeModel, GoogleAIBackend } from 'firebase/ai';
254
+ import { initializeAppCheck, ReCaptchaV3Provider } from 'firebase/app-check';
255
+ import { z } from 'zod';
256
+
257
+ // ✅ App Check habilitado
258
+ const app = initializeApp(firebaseConfig);
259
+ initializeAppCheck(app, {
260
+ provider: new ReCaptchaV3Provider('YOUR_SITE_KEY'),
261
+ });
262
+
263
+ // ✅ AI com backend explícito
264
+ const ai = getAI(app, { backend: new GoogleAIBackend() });
265
+
266
+ // ✅ Model com config correto
267
+ const model = getGenerativeModel(ai, {
268
+ model: 'gemini-3-flash-preview', // ✅ Modelo atual
269
+ systemInstruction: 'Você é um assistente amigável',
270
+ });
271
+
272
+ // ✅ Validação com Zod
273
+ const ResponseValidator = z.object({
274
+ sentiment: z.enum(['positive', 'negative', 'neutral']),
275
+ confidence: z.number().min(0).max(1),
276
+ });
277
+
278
+ // ✅ Try/catch para error handling
279
+ async function analyzeReview(review: string) {
280
+ try {
281
+ // ✅ countTokens para prompt grande
282
+ const tokens = await model.countTokens(review);
283
+ if (tokens.totalTokens > 5000) {
284
+ console.warn('Prompt grande:', tokens.totalTokens);
285
+ }
286
+
287
+ // ✅ generateContent (NÃO stream) para JSON
288
+ const result = await model.generateContent(review, {
289
+ responseMimeType: 'application/json',
290
+ responseSchema: ReviewSchema,
291
+ });
292
+
293
+ // ✅ Validar antes de usar
294
+ const data = JSON.parse(result.response.text());
295
+ return ResponseValidator.parse(data);
296
+ } catch (error) {
297
+ if (error instanceof Error && 'status' in error) {
298
+ if ((error as any).status === 429) {
299
+ // Rate limit - implementar exponential backoff
300
+ console.error('Rate limited, aguarde antes de tentar novamente');
301
+ }
302
+ }
303
+ throw error;
304
+ }
305
+ }
306
+ ```
307
+
308
+ ### Function Calling Correto
309
+
310
+ ```typescript
311
+ // ✅ Setup com tools
312
+ const model = getGenerativeModel(ai, {
313
+ model: 'gemini-3-flash-preview',
314
+ tools: [{
315
+ name: 'search_web',
316
+ description: 'Busca na web por informações recentes', // ✅ Descrição clara
317
+ parameters: {
318
+ type: 'object',
319
+ properties: {
320
+ query: { type: 'string' },
321
+ },
322
+ },
323
+ }],
324
+ });
325
+
326
+ async function chatWithFunctionCalling(userMessage: string) {
327
+ const chat = model.startChat();
328
+
329
+ try {
330
+ let response = await chat.sendMessage(userMessage);
331
+
332
+ // ✅ Loop completo de function calling
333
+ while (response.response.functionCalls().length > 0) {
334
+ const calls = response.response.functionCalls();
335
+
336
+ for (const call of calls) {
337
+ console.log(`Executando: ${call.name}(${JSON.stringify(call.args)})`);
338
+
339
+ // Executar a função
340
+ const result = await executeFunction(call.name, call.args);
341
+
342
+ // ✅ IMPORTANTE: Enviar resposta de volta
343
+ response = await chat.sendMessage({
344
+ role: 'user',
345
+ parts: [{
346
+ functionResponse: {
347
+ name: call.name,
348
+ response: result,
349
+ },
350
+ }],
351
+ });
352
+ }
353
+ }
354
+
355
+ return response.response.text();
356
+ } catch (error) {
357
+ console.error('Erro em function calling:', error);
358
+ throw error;
359
+ }
360
+ }
361
+ ```
362
+
363
+ ### Chat com Histórico Limitado
364
+
365
+ ```typescript
366
+ // ✅ Limitar histórico para economizar tokens
367
+ const MAX_HISTORY = 10;
368
+
369
+ async function maintainChatHistory(
370
+ messages: Array<{ role: string; text: string }>
371
+ ) {
372
+ // ✅ Manter apenas últimas N mensagens
373
+ const recentMessages = messages.slice(-MAX_HISTORY);
374
+
375
+ const chat = model.startChat({
376
+ history: recentMessages.map((msg) => ({
377
+ role: msg.role as 'user' | 'model',
378
+ parts: [{ text: msg.text }],
379
+ })),
380
+ });
381
+
382
+ return chat;
383
+ }
384
+ ```
385
+
386
+ ---
387
+
388
+ ## 🔧 Troubleshooting
389
+
390
+ ### "Plugin não está sendo carregado"
391
+
392
+ **Erro:**
393
+ ```
394
+ Cannot find module 'eslint-plugin-firebase-ai-logic'
395
+ ```
396
+
397
+ **Solução:**
398
+ ```bash
399
+ # Verifique se está instalado
400
+ npm list eslint-plugin-firebase-ai-logic
401
+
402
+ # Se não, instale
403
+ npm install --save-dev eslint-plugin-firebase-ai-logic
404
+
405
+ # ESLint 9 precisa de nome qualificado
406
+ import firebaseAiLogicPlugin from 'eslint-plugin-firebase-ai-logic';
407
+ ```
408
+
409
+ ### "Regra não reconhecida"
410
+
411
+ **Erro:**
412
+ ```
413
+ "firebase-ai-logic/no-deprecated-models" was not found
414
+ ```
415
+
416
+ **Solução:**
417
+ - Verifique o nome exato da regra
418
+ - Use com prefixo: `firebase-ai-logic/`
419
+ - Certifique-se que a regra está ativa na config
420
+
421
+ ### "Config recommended não existe"
422
+
423
+ **Solução para ESLint 9:**
424
+ ```javascript
425
+ // ✅ CERTO
426
+ import firebaseAiLogicPlugin from 'eslint-plugin-firebase-ai-logic';
427
+ export default [
428
+ firebaseAiLogicPlugin.configs.recommended,
429
+ ];
430
+ ```
431
+
432
+ **Solução para ESLint 8:**
433
+ ```javascript
434
+ // ✅ CERTO
435
+ module.exports = {
436
+ extends: ['plugin:firebase-ai-logic/recommended'],
437
+ };
438
+ ```
439
+
440
+ ---
441
+
442
+ ## 📖 Documentação Completa
443
+
444
+ Cada regra tem documentação detalhada no GitHub:
445
+
446
+ https://github.com/Just-mpm/eslint-plugin-firebase-ai-logic
447
+
448
+ Veja o diretório `docs/rules/` para:
449
+ - Exemplos de código bom e ruim
450
+ - Razão por trás da regra
451
+ - Como corrigir automaticamente
452
+ - Exceções e edge cases
453
+
454
+ ---
455
+
456
+ ## 🐛 Encontrou um Bug?
457
+
458
+ Abra uma issue no GitHub:
459
+ https://github.com/Just-mpm/eslint-plugin-firebase-ai-logic/issues
460
+
461
+ Inclua:
462
+ - Versão do plugin
463
+ - Versão do ESLint
464
+ - Configuração ESLint
465
+ - Código que causa o problema
466
+ - Output esperado vs atual
467
+
468
+ ---
469
+
470
+ ## 📝 License
471
+
472
+ MIT © [Matheus Pimenta](https://kodaai.app)
473
+
474
+ ---
475
+
476
+ ## 🤝 Contribuindo
477
+
478
+ Contribuições são bem-vindas! O projeto está em:
479
+ https://github.com/Just-mpm/eslint-plugin-firebase-ai-logic
480
+
481
+ ### Setup para Desenvolvimento
482
+
483
+ ```bash
484
+ # Clone o repo
485
+ git clone https://github.com/Just-mpm/eslint-plugin-firebase-ai-logic.git
486
+ cd eslint-plugin-firebase-ai-logic
487
+
488
+ # Instale dependências
489
+ npm install
490
+
491
+ # Rode os testes
492
+ npm test
493
+
494
+ # Build TypeScript
495
+ npm run build
496
+
497
+ # Watch mode para desenvolvimento
498
+ npm run test:watch
499
+ ```
500
+
501
+ ---
502
+
503
+ ## 📚 Recursos Adicionais
504
+
505
+ - **Firebase AI Logic Docs**: https://firebase.google.com/docs/ai-logic
506
+ - **Gemini API Reference**: https://ai.google.dev/gemini-api/docs
507
+ - **ESLint Plugin Dev Guide**: https://eslint.org/docs/latest/extend/plugins
508
+ - **Skill firebase-ai-logic**: Guia prático no Claude Code
509
+
510
+ ---
511
+
512
+ Feito com ❤️ para developers Firebase AI Logic
513
+
514
+ **Versão:** 1.0.0
515
+ **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 = {
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"}