@justmpm/ai-tool 0.7.10 → 0.8.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.
- package/README.md +138 -108
- package/dist/{chunk-MWM2INVY.js → chunk-FO7NK3UM.js} +224 -539
- package/dist/cli.js +2 -2
- package/dist/index.d.ts +16 -61
- package/dist/index.js +3 -9
- package/dist/{server-IBNLXRUS.js → server-VTMQAF6Z.js} +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
# ai-tool
|
|
2
2
|
|
|
3
|
-
Ferramenta de
|
|
3
|
+
Ferramenta de análise de dependências e impacto para projetos TypeScript/JavaScript.
|
|
4
4
|
|
|
5
5
|
Usa [Skott](https://github.com/antoine-coulon/skott) + [Knip](https://knip.dev) + [ts-morph](https://ts-morph.com) internamente.
|
|
6
6
|
|
|
7
|
-
##
|
|
7
|
+
## Instalação
|
|
8
8
|
|
|
9
9
|
```bash
|
|
10
10
|
# Via npx (sem instalar)
|
|
@@ -21,7 +21,7 @@ npm install -D @justmpm/ai-tool
|
|
|
21
21
|
|
|
22
22
|
### `map` - Mapa do Projeto
|
|
23
23
|
|
|
24
|
-
Gera um resumo compacto do projeto com contagens,
|
|
24
|
+
Gera um resumo compacto do projeto com contagens, áreas e alertas.
|
|
25
25
|
|
|
26
26
|
```bash
|
|
27
27
|
ai-tool map # Resumo compacto (otimizado para tokens)
|
|
@@ -48,11 +48,11 @@ ai-tool map --format=json
|
|
|
48
48
|
**Output (--full):**
|
|
49
49
|
- Lista completa de arquivos por pasta
|
|
50
50
|
- Estrutura detalhada de pastas
|
|
51
|
-
-
|
|
51
|
+
- Dependências circulares listadas
|
|
52
52
|
|
|
53
|
-
### `dead` -
|
|
53
|
+
### `dead` - Código Morto
|
|
54
54
|
|
|
55
|
-
Detecta arquivos, exports e
|
|
55
|
+
Detecta arquivos, exports e dependências não utilizados.
|
|
56
56
|
|
|
57
57
|
```bash
|
|
58
58
|
ai-tool dead
|
|
@@ -61,13 +61,13 @@ ai-tool dead --fix # Remove automaticamente
|
|
|
61
61
|
```
|
|
62
62
|
|
|
63
63
|
**Detecta:**
|
|
64
|
-
- Arquivos
|
|
65
|
-
- Exports
|
|
66
|
-
-
|
|
64
|
+
- Arquivos órfãos (ninguém importa)
|
|
65
|
+
- Exports não utilizados
|
|
66
|
+
- Dependências npm não usadas
|
|
67
67
|
|
|
68
|
-
### `impact` -
|
|
68
|
+
### `impact` - Análise de Impacto
|
|
69
69
|
|
|
70
|
-
Analisa o impacto de modificar um arquivo
|
|
70
|
+
Analisa o impacto de modificar um arquivo específico.
|
|
71
71
|
|
|
72
72
|
```bash
|
|
73
73
|
ai-tool impact Button
|
|
@@ -76,12 +76,12 @@ ai-tool impact useAuth --format=json
|
|
|
76
76
|
```
|
|
77
77
|
|
|
78
78
|
**Output:**
|
|
79
|
-
- **Upstream**: Quem importa este arquivo (afetados por
|
|
80
|
-
- **Downstream**: O que este arquivo importa (
|
|
81
|
-
- **Riscos**: Arquivo
|
|
82
|
-
- **
|
|
79
|
+
- **Upstream**: Quem importa este arquivo (afetados por mudanças)
|
|
80
|
+
- **Downstream**: O que este arquivo importa (dependências)
|
|
81
|
+
- **Riscos**: Arquivo crítico, dependências circulares, etc.
|
|
82
|
+
- **Sugestões**: Recomendações para modificação segura
|
|
83
83
|
|
|
84
|
-
### `suggest` -
|
|
84
|
+
### `suggest` - Sugestão de Leitura
|
|
85
85
|
|
|
86
86
|
Sugere arquivos para ler ANTES de modificar um arquivo.
|
|
87
87
|
|
|
@@ -92,59 +92,59 @@ ai-tool suggest src/hooks/useAuth.ts --limit=5
|
|
|
92
92
|
|
|
93
93
|
**Prioridades:**
|
|
94
94
|
- **Critical**: Tipos/interfaces usados pelo arquivo
|
|
95
|
-
- **High**:
|
|
95
|
+
- **High**: Dependências diretas (imports)
|
|
96
96
|
- **Medium**: Upstream (quem usa o arquivo)
|
|
97
97
|
- **Low**: Testes relacionados
|
|
98
98
|
|
|
99
99
|
### `context` - Contexto do Arquivo
|
|
100
100
|
|
|
101
|
-
Extrai assinaturas de
|
|
101
|
+
Extrai assinaturas de funções e tipos SEM a implementação.
|
|
102
102
|
|
|
103
103
|
```bash
|
|
104
104
|
ai-tool context Button
|
|
105
105
|
ai-tool context src/hooks/useAuth.ts --format=json
|
|
106
|
-
ai-tool context --area=auth # Contexto consolidado de toda uma
|
|
106
|
+
ai-tool context --area=auth # Contexto consolidado de toda uma área
|
|
107
107
|
```
|
|
108
108
|
|
|
109
109
|
**Extrai:**
|
|
110
110
|
- Imports com specifiers
|
|
111
111
|
- Exports do arquivo
|
|
112
|
-
-
|
|
113
|
-
- Interfaces, types e enums com
|
|
112
|
+
- Funções com parâmetros e tipos de retorno
|
|
113
|
+
- Interfaces, types e enums com definições
|
|
114
114
|
|
|
115
|
-
Ideal para entender rapidamente a API
|
|
115
|
+
Ideal para entender rapidamente a API pública de um arquivo.
|
|
116
116
|
|
|
117
|
-
**Contexto de
|
|
118
|
-
- Tipos e interfaces da
|
|
119
|
-
- Hooks com
|
|
120
|
-
-
|
|
117
|
+
**Contexto de Área** (`--area=<nome>`):
|
|
118
|
+
- Tipos e interfaces da área
|
|
119
|
+
- Hooks com parâmetros e retornos
|
|
120
|
+
- Funções principais
|
|
121
121
|
- Componentes React
|
|
122
122
|
- Services e stores
|
|
123
123
|
- Uma chamada = entender toda a feature
|
|
124
124
|
|
|
125
|
-
### `find` - Busca de
|
|
125
|
+
### `find` - Busca de Símbolos
|
|
126
126
|
|
|
127
|
-
Busca
|
|
127
|
+
Busca símbolos no código (funções, tipos, componentes, hooks, constantes, triggers).
|
|
128
128
|
|
|
129
129
|
```bash
|
|
130
|
-
ai-tool find useAuth #
|
|
130
|
+
ai-tool find useAuth # Definição + usos
|
|
131
131
|
ai-tool find User --type=type # Busca apenas tipos
|
|
132
|
-
ai-tool find login --area=auth # Busca na
|
|
133
|
-
ai-tool find submit --def # Apenas
|
|
134
|
-
ai-tool find submit --refs # Apenas
|
|
132
|
+
ai-tool find login --area=auth # Busca na área auth
|
|
133
|
+
ai-tool find submit --def # Apenas definições
|
|
134
|
+
ai-tool find submit --refs # Apenas referências/usos
|
|
135
135
|
ai-tool find createUser --type=trigger # Busca Cloud Functions
|
|
136
136
|
```
|
|
137
137
|
|
|
138
|
-
**Tipos de
|
|
139
|
-
- `function` -
|
|
138
|
+
**Tipos de símbolos:**
|
|
139
|
+
- `function` - Funções e arrow functions (inclui triggers)
|
|
140
140
|
- `type` - Types, interfaces e enums
|
|
141
|
-
- `const` - Constantes e
|
|
142
|
-
- `component` - Componentes React (
|
|
143
|
-
- `hook` - React hooks (
|
|
141
|
+
- `const` - Constantes e variáveis
|
|
142
|
+
- `component` - Componentes React (função que retorna JSX)
|
|
143
|
+
- `hook` - React hooks (função que começa com `use`)
|
|
144
144
|
- `trigger` - Firebase Cloud Functions (onCall, onDocumentCreated, etc.)
|
|
145
145
|
- `all` - Todos os tipos (default)
|
|
146
146
|
|
|
147
|
-
**Diferente de grep:** Entende o AST do TypeScript, encontra
|
|
147
|
+
**Diferente de grep:** Entende o AST do TypeScript, encontra definições reais e onde são usados.
|
|
148
148
|
|
|
149
149
|
### `functions` - Firebase Cloud Functions
|
|
150
150
|
|
|
@@ -189,9 +189,9 @@ ai-tool functions --format=json
|
|
|
189
189
|
- Identity: `beforeUserCreated`, `beforeUserSignedIn`, `beforeEmailSent`, `beforeSmsSent`
|
|
190
190
|
- E mais: Crashlytics, Performance, Remote Config, Eventarc, Tasks, Test Lab
|
|
191
191
|
|
|
192
|
-
### `areas` -
|
|
192
|
+
### `areas` - Áreas/Domínios Funcionais
|
|
193
193
|
|
|
194
|
-
Lista todas as
|
|
194
|
+
Lista todas as áreas funcionais do projeto (auth, dashboard, stripe, etc).
|
|
195
195
|
|
|
196
196
|
```bash
|
|
197
197
|
ai-tool areas
|
|
@@ -199,13 +199,13 @@ ai-tool areas --format=json
|
|
|
199
199
|
```
|
|
200
200
|
|
|
201
201
|
**Output:**
|
|
202
|
-
- Lista de
|
|
203
|
-
- Contagem de arquivos por
|
|
204
|
-
-
|
|
202
|
+
- Lista de áreas configuradas manualmente
|
|
203
|
+
- Contagem de arquivos por área
|
|
204
|
+
- Distribuição de categorias por área
|
|
205
205
|
|
|
206
|
-
### `area` - Detalhe de uma
|
|
206
|
+
### `area` - Detalhe de uma Área
|
|
207
207
|
|
|
208
|
-
Mostra todos os arquivos de uma
|
|
208
|
+
Mostra todos os arquivos de uma área específica.
|
|
209
209
|
|
|
210
210
|
```bash
|
|
211
211
|
ai-tool area auth
|
|
@@ -215,11 +215,11 @@ ai-tool area stripe --full # Mostra todos os arquivos
|
|
|
215
215
|
|
|
216
216
|
**Output:**
|
|
217
217
|
- Arquivos agrupados por categoria
|
|
218
|
-
-
|
|
218
|
+
- Descrição inferida de cada arquivo
|
|
219
219
|
|
|
220
|
-
### `areas init` -
|
|
220
|
+
### `areas init` - Configuração de Áreas
|
|
221
221
|
|
|
222
|
-
Gera arquivo de
|
|
222
|
+
Gera arquivo de configuração editável para áreas.
|
|
223
223
|
|
|
224
224
|
```bash
|
|
225
225
|
ai-tool areas init
|
|
@@ -227,15 +227,17 @@ ai-tool areas init --force # Sobrescreve config existente
|
|
|
227
227
|
```
|
|
228
228
|
|
|
229
229
|
Cria `.analyze/areas.config.json` com:
|
|
230
|
-
-
|
|
231
|
-
- Patterns glob para cada
|
|
232
|
-
- Keywords de
|
|
233
|
-
-
|
|
234
|
-
-
|
|
230
|
+
- Template de áreas baseado no framework detectado
|
|
231
|
+
- Patterns glob para cada área
|
|
232
|
+
- Keywords de detecção
|
|
233
|
+
- Descrições manuais de arquivos
|
|
234
|
+
- Padrões de ignore global
|
|
235
235
|
|
|
236
|
-
###
|
|
236
|
+
### Configuração de Áreas
|
|
237
237
|
|
|
238
|
-
O arquivo `.analyze/areas.config.json`
|
|
238
|
+
O arquivo `.analyze/areas.config.json` é a **fonte de verdade** para organização do projeto por domínios funcionais.
|
|
239
|
+
|
|
240
|
+
**Estrutura completa:**
|
|
239
241
|
|
|
240
242
|
```json
|
|
241
243
|
{
|
|
@@ -248,29 +250,57 @@ O arquivo `.analyze/areas.config.json` suporta:
|
|
|
248
250
|
],
|
|
249
251
|
"areas": {
|
|
250
252
|
"auth": {
|
|
251
|
-
"name": "
|
|
252
|
-
"description": "Sistema de login e
|
|
253
|
+
"name": "Autenticação",
|
|
254
|
+
"description": "Sistema de login e sessão",
|
|
253
255
|
"patterns": ["**/auth/**", "**/login/**"],
|
|
254
256
|
"keywords": ["auth", "login", "session"]
|
|
257
|
+
},
|
|
258
|
+
"meus-pets": {
|
|
259
|
+
"name": "Meus Pets",
|
|
260
|
+
"description": "Gerenciamento de pets do usuário",
|
|
261
|
+
"patterns": [
|
|
262
|
+
"app/meus-pets/**",
|
|
263
|
+
"components/pets/**",
|
|
264
|
+
"hooks/usePets.*",
|
|
265
|
+
"services/petService.*"
|
|
266
|
+
],
|
|
267
|
+
"keywords": ["pet", "animal"],
|
|
268
|
+
"exclude": ["components/pets/shared/**"]
|
|
255
269
|
}
|
|
256
270
|
},
|
|
257
271
|
"descriptions": {
|
|
258
|
-
"src/hooks/useAuth.ts": "Hook principal de
|
|
272
|
+
"src/hooks/useAuth.ts": "Hook principal de autenticação",
|
|
273
|
+
"src/services/petService.ts": "Serviço de gerenciamento de pets"
|
|
259
274
|
},
|
|
260
275
|
"settings": {
|
|
261
|
-
"autoDetect":
|
|
262
|
-
"inferDescriptions": true
|
|
276
|
+
"autoDetect": false,
|
|
277
|
+
"inferDescriptions": true,
|
|
278
|
+
"groupByCategory": true
|
|
263
279
|
}
|
|
264
280
|
}
|
|
265
281
|
```
|
|
266
282
|
|
|
267
|
-
| Campo |
|
|
283
|
+
| Campo | Descrição |
|
|
268
284
|
|-------|-----------|
|
|
269
|
-
| `ignore` |
|
|
270
|
-
| `areas` |
|
|
271
|
-
| `
|
|
272
|
-
| `
|
|
273
|
-
| `
|
|
285
|
+
| `ignore` | Padrões glob para ignorar arquivos/pastas globalmente |
|
|
286
|
+
| `areas` | Definição manual de áreas com patterns e keywords |
|
|
287
|
+
| `areas.<id>.name` | Nome amigável da área |
|
|
288
|
+
| `areas.<id>.description` | Descrição do domínio de negócio |
|
|
289
|
+
| `areas.<id>.patterns` | Padrões glob que identificam arquivos da área |
|
|
290
|
+
| `areas.<id>.keywords` | Keywords no caminho do arquivo |
|
|
291
|
+
| `areas.<id>.exclude` | Padrões para excluir arquivos específicos |
|
|
292
|
+
| `descriptions` | Descrições manuais para arquivos específicos |
|
|
293
|
+
| `settings.autoDetect` | **Sempre `false`** - configuração manual obrigatória |
|
|
294
|
+
| `settings.inferDescriptions` | Infere descrições automaticamente baseado no nome |
|
|
295
|
+
| `settings.groupByCategory` | Agrupa arquivos por categoria nos comandos |
|
|
296
|
+
|
|
297
|
+
**Boas práticas:**
|
|
298
|
+
|
|
299
|
+
- Ideal: 5-15 áreas (muitas áreas é difícil de navegar)
|
|
300
|
+
- Use patterns para pastas: `"app/dashboard/**"`
|
|
301
|
+
- Use keywords para arquivos espalhados: `["auth", "login"]`
|
|
302
|
+
- Um arquivo pode pertencer a múltiplas áreas
|
|
303
|
+
- Use `exclude` para remover arquivos específicos de uma área
|
|
274
304
|
|
|
275
305
|
## Servidor MCP
|
|
276
306
|
|
|
@@ -282,18 +312,18 @@ ai-tool --mcp
|
|
|
282
312
|
|
|
283
313
|
**Tools expostas:**
|
|
284
314
|
- `aitool_project_map` - Mapa do projeto (resumo compacto)
|
|
285
|
-
- `aitool_dead_code` - Detecta
|
|
286
|
-
- `aitool_impact_analysis` -
|
|
315
|
+
- `aitool_dead_code` - Detecta código morto
|
|
316
|
+
- `aitool_impact_analysis` - Análise de impacto antes de modificar
|
|
287
317
|
- `aitool_suggest_reads` - Sugere arquivos para ler antes de editar
|
|
288
318
|
- `aitool_file_context` - Extrai assinaturas de um arquivo
|
|
289
|
-
- `aitool_list_areas` - Lista
|
|
290
|
-
- `aitool_area_detail` - Arquivos de uma
|
|
291
|
-
- `aitool_areas_init` - Gera config de
|
|
292
|
-
- `aitool_area_context` - Contexto consolidado de toda uma
|
|
293
|
-
- `aitool_find` - Busca
|
|
319
|
+
- `aitool_list_areas` - Lista áreas funcionais do projeto
|
|
320
|
+
- `aitool_area_detail` - Arquivos de uma área específica
|
|
321
|
+
- `aitool_areas_init` - Gera config de áreas
|
|
322
|
+
- `aitool_area_context` - Contexto consolidado de toda uma área
|
|
323
|
+
- `aitool_find` - Busca símbolos no código (definição + usos)
|
|
294
324
|
- `aitool_list_functions` - Lista Cloud Functions Firebase
|
|
295
325
|
|
|
296
|
-
###
|
|
326
|
+
### Configuração Claude Code
|
|
297
327
|
|
|
298
328
|
Adicione ao `.mcp.json` do projeto ou ao arquivo global `~/.claude/settings.json`:
|
|
299
329
|
|
|
@@ -308,7 +338,7 @@ Adicione ao `.mcp.json` do projeto ou ao arquivo global `~/.claude/settings.json
|
|
|
308
338
|
}
|
|
309
339
|
```
|
|
310
340
|
|
|
311
|
-
###
|
|
341
|
+
### Configuração Claude Desktop
|
|
312
342
|
|
|
313
343
|
Adicione ao `claude_desktop_config.json`:
|
|
314
344
|
|
|
@@ -326,86 +356,86 @@ Adicione ao `claude_desktop_config.json`:
|
|
|
326
356
|
}
|
|
327
357
|
```
|
|
328
358
|
|
|
329
|
-
## Uso
|
|
359
|
+
## Uso Programático
|
|
330
360
|
|
|
331
361
|
```typescript
|
|
332
362
|
import { map, dead, impact, suggest, context, areaContext, find, functions, areas, area, areasInit } from "@justmpm/ai-tool";
|
|
333
363
|
|
|
334
|
-
// Mapa do projeto (resumo por
|
|
364
|
+
// Mapa do projeto (resumo por padrão, full: true para lista completa)
|
|
335
365
|
const projectMap = await map({ format: "json" });
|
|
336
366
|
const fullMap = await map({ format: "json", full: true });
|
|
337
367
|
|
|
338
|
-
//
|
|
368
|
+
// Código morto
|
|
339
369
|
const deadCode = await dead({ format: "json" });
|
|
340
370
|
|
|
341
|
-
//
|
|
371
|
+
// Análise de impacto
|
|
342
372
|
const analysis = await impact("Button", { format: "json" });
|
|
343
373
|
|
|
344
|
-
//
|
|
374
|
+
// Sugestão de leitura
|
|
345
375
|
const suggestions = await suggest("Button", { limit: 5 });
|
|
346
376
|
|
|
347
377
|
// Contexto do arquivo
|
|
348
378
|
const fileContext = await context("Button", { format: "json" });
|
|
349
379
|
|
|
350
|
-
// Contexto de uma
|
|
380
|
+
// Contexto de uma área inteira
|
|
351
381
|
const authContext = await areaContext("auth", { format: "json" });
|
|
352
382
|
|
|
353
|
-
// Busca de
|
|
383
|
+
// Busca de símbolos
|
|
354
384
|
const symbolSearch = await find("useAuth", { type: "hook", area: "auth" });
|
|
355
385
|
|
|
356
386
|
// Cloud Functions Firebase
|
|
357
387
|
const cloudFunctions = await functions({ trigger: "onCall" });
|
|
358
388
|
|
|
359
|
-
//
|
|
389
|
+
// Áreas funcionais
|
|
360
390
|
const projectAreas = await areas({ format: "json" });
|
|
361
391
|
|
|
362
|
-
// Detalhe de uma
|
|
392
|
+
// Detalhe de uma área
|
|
363
393
|
const authArea = await area("auth", { type: "hook" });
|
|
364
394
|
|
|
365
|
-
// Gerar config de
|
|
395
|
+
// Gerar config de áreas
|
|
366
396
|
await areasInit({ force: false });
|
|
367
397
|
```
|
|
368
398
|
|
|
369
|
-
##
|
|
399
|
+
## Opções
|
|
370
400
|
|
|
371
|
-
|
|
|
401
|
+
| Opção | Descrição | Default |
|
|
372
402
|
|-------|-----------|---------|
|
|
373
|
-
| `--format=text\|json` | Formato de
|
|
374
|
-
| `--cwd=<path>` |
|
|
403
|
+
| `--format=text\|json` | Formato de saída | `text` |
|
|
404
|
+
| `--cwd=<path>` | Diretório do projeto | `process.cwd()` |
|
|
375
405
|
| `--no-cache` | Ignora cache | `false` |
|
|
376
406
|
| `--full` | Lista completa (`map`: arquivos, `area`: todos) | `false` |
|
|
377
|
-
| `--fix` | Remove
|
|
378
|
-
| `--limit=<n>` | Limite de
|
|
379
|
-
| `--type=<cat>` | Filtra por categoria (`area`) ou tipo de
|
|
380
|
-
| `--area=<nome>` | Filtra por
|
|
381
|
-
| `--def` | Mostra apenas
|
|
382
|
-
| `--refs` | Mostra apenas
|
|
407
|
+
| `--fix` | Remove código morto (só `dead`) | `false` |
|
|
408
|
+
| `--limit=<n>` | Limite de sugestões (só `suggest`) | `10` |
|
|
409
|
+
| `--type=<cat>` | Filtra por categoria (`area`) ou tipo de símbolo (`find`) | - |
|
|
410
|
+
| `--area=<nome>` | Filtra por área (`context`, `find`) | - |
|
|
411
|
+
| `--def` | Mostra apenas definições (só `find`) | `false` |
|
|
412
|
+
| `--refs` | Mostra apenas referências/usos (só `find`) | `false` |
|
|
383
413
|
| `--mcp` | Inicia servidor MCP | - |
|
|
384
414
|
|
|
385
415
|
## Categorias de Arquivos
|
|
386
416
|
|
|
387
|
-
| Categoria |
|
|
417
|
+
| Categoria | Descrição |
|
|
388
418
|
|-----------|-----------|
|
|
389
|
-
| `page` |
|
|
419
|
+
| `page` | Páginas (Next.js, etc.) |
|
|
390
420
|
| `layout` | Layouts |
|
|
391
421
|
| `route` | Rotas de API |
|
|
392
422
|
| `component` | Componentes React/Vue |
|
|
393
423
|
| `hook` | React Hooks |
|
|
394
|
-
| `service` |
|
|
424
|
+
| `service` | Serviços/API |
|
|
395
425
|
| `store` | Estado global |
|
|
396
|
-
| `util` |
|
|
426
|
+
| `util` | Utilitários |
|
|
397
427
|
| `type` | Tipos TypeScript |
|
|
398
|
-
| `config` |
|
|
428
|
+
| `config` | Configurações |
|
|
399
429
|
| `test` | Testes |
|
|
400
430
|
| `cloud-function` | Firebase Cloud Functions |
|
|
401
431
|
| `other` | Outros |
|
|
402
432
|
|
|
403
433
|
## Cache
|
|
404
434
|
|
|
405
|
-
Resultados
|
|
435
|
+
Resultados são salvos em `.analyze/` para acelerar execuções futuras.
|
|
406
436
|
|
|
407
|
-
- Cache
|
|
408
|
-
- Use `--no-cache` para forcar
|
|
437
|
+
- Cache é invalidado automaticamente quando arquivos mudam
|
|
438
|
+
- Use `--no-cache` para forcar regeneração
|
|
409
439
|
- Adicione `.analyze/` ao `.gitignore`
|
|
410
440
|
|
|
411
441
|
## Requisitos
|
|
@@ -413,12 +443,12 @@ Resultados sao salvos em `.analyze/` para acelerar execucoes futuras.
|
|
|
413
443
|
- Node.js >= 18.0.0
|
|
414
444
|
- Projeto TypeScript/JavaScript
|
|
415
445
|
|
|
416
|
-
##
|
|
446
|
+
## Créditos
|
|
417
447
|
|
|
418
|
-
- [Skott](https://github.com/antoine-coulon/skott) -
|
|
419
|
-
- [Knip](https://knip.dev) -
|
|
420
|
-
- [ts-morph](https://ts-morph.com) -
|
|
448
|
+
- [Skott](https://github.com/antoine-coulon/skott) - Análise de dependências
|
|
449
|
+
- [Knip](https://knip.dev) - Detecção de código morto
|
|
450
|
+
- [ts-morph](https://ts-morph.com) - Análise AST
|
|
421
451
|
|
|
422
|
-
##
|
|
452
|
+
## Licença
|
|
423
453
|
|
|
424
454
|
MIT - [Koda AI Studio](https://kodaai.app)
|