@justmpm/ai-tool 0.4.0 → 0.5.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/dist/cli.js CHANGED
@@ -10,21 +10,22 @@ import {
10
10
  impact,
11
11
  map,
12
12
  suggest
13
- } from "./chunk-33DHCY2H.js";
13
+ } from "./chunk-IIUNJRGG.js";
14
14
 
15
15
  // src/cli.ts
16
16
  var HELP = `
17
17
  ai-tool v${VERSION} - Analise de dependencias e impacto
18
18
 
19
19
  COMANDOS:
20
- map Mapa completo do projeto (usa Skott)
20
+ map Resumo do projeto: contagens e areas
21
+ map --full Mapa completo com lista de arquivos
21
22
  dead Detecta codigo morto (usa Knip)
22
23
  dead --fix Remove codigo morto automaticamente
23
24
  impact <arquivo> Analise de impacto antes de modificar
24
25
  suggest <arquivo> Sugere arquivos para ler antes de modificar
25
26
  context <arquivo> Extrai assinaturas de um arquivo (funcoes, tipos)
26
27
 
27
- AREAS (NOVO):
28
+ AREAS:
28
29
  areas Lista todas as areas/dominios do projeto
29
30
  areas init Gera arquivo de configuracao .analyze/areas.config.json
30
31
  areas init --force Sobrescreve configuracao existente
@@ -41,7 +42,7 @@ OPCOES:
41
42
  --no-cache Ignora cache e forca regeneracao
42
43
  --limit=<n> Limite de sugestoes (default: 10, apenas suggest)
43
44
  --type=<categoria> Filtra por categoria (apenas area)
44
- --full Mostra todos os arquivos (apenas area)
45
+ --full Lista completa (map: lista arquivos, area: todos arquivos)
45
46
  --help, -h Mostra esta ajuda
46
47
  --version, -v Mostra versao
47
48
 
@@ -51,7 +52,8 @@ CACHE:
51
52
  Use --no-cache para forcar regeneracao.
52
53
 
53
54
  EXEMPLOS:
54
- ai-tool map
55
+ ai-tool map # Resumo compacto
56
+ ai-tool map --full # Lista completa de arquivos
55
57
  ai-tool map --format=json
56
58
  ai-tool dead
57
59
  ai-tool dead --fix
@@ -85,7 +87,7 @@ async function main() {
85
87
  }
86
88
  }
87
89
  if (flags.mcp) {
88
- const { startMcpServer } = await import("./server-62WVGNJD.js");
90
+ const { startMcpServer } = await import("./server-FG4LYSEG.js");
89
91
  await startMcpServer();
90
92
  return;
91
93
  }
@@ -106,7 +108,7 @@ async function main() {
106
108
  let result;
107
109
  switch (command) {
108
110
  case "map":
109
- result = await map({ format, cwd, cache });
111
+ result = await map({ format, cwd, cache, full: !!flags.full });
110
112
  break;
111
113
  case "dead":
112
114
  if (flags.fix) {
package/dist/index.d.ts CHANGED
@@ -11,6 +11,7 @@ interface CommandOptions {
11
11
  }
12
12
  interface MapOptions extends CommandOptions {
13
13
  trackDependencies?: boolean;
14
+ full?: boolean;
14
15
  }
15
16
  interface DeadOptions extends CommandOptions {
16
17
  include?: string[];
@@ -501,6 +502,6 @@ declare const AREA_DESCRIPTIONS: Record<string, string>;
501
502
  * ```
502
503
  */
503
504
 
504
- declare const VERSION = "0.4.0";
505
+ declare const VERSION: string;
505
506
 
506
507
  export { AREA_DESCRIPTIONS, AREA_NAMES, type AreaConfig, type AreaDetailResult, type AreaFile, type AreaOptions, type AreasConfigFile, type AreasOptions, type AreasResult, type CommandOptions, type ContextOptions, type ContextResult, type DeadFile, type DeadOptions, type DeadResult, type DetectedArea, FOLDER_PATTERNS, type FileCategory, type FileInfo, type FolderStats, type FunctionInfo, type ImpactFile, type ImpactOptions, type ImpactResult, type ImportInfo, KEYWORD_PATTERNS, type MapOptions, type MapResult, type OutputFormat, type ParamInfo, type RiskInfo, type SuggestOptions, type SuggestResult, type Suggestion, type SuggestionPriority, type TypeInfo, type TypeKind, VERSION, area, areas, areasInit, categoryIcons, clearFirebaseCache, configExists, context, dead, deadFix, detectCategory, detectFileAreas, filterCloudFunctionsFalsePositives, getAreaDescription, getAreaName, getCacheDir, getFileDescription, hasFirebaseFunctions, impact, inferFileDescription, invalidateCache, isCacheValid, isCodeFile, isEntryPoint, isExportedCloudFunction, isFirebaseProject, map, readConfig, removeArea, setArea, setFileDescription, suggest, writeConfig };
package/dist/index.js CHANGED
@@ -36,7 +36,7 @@ import {
36
36
  setFileDescription,
37
37
  suggest,
38
38
  writeConfig
39
- } from "./chunk-33DHCY2H.js";
39
+ } from "./chunk-IIUNJRGG.js";
40
40
  export {
41
41
  AREA_DESCRIPTIONS,
42
42
  AREA_NAMES,
@@ -8,7 +8,7 @@ import {
8
8
  impact,
9
9
  map,
10
10
  suggest
11
- } from "./chunk-33DHCY2H.js";
11
+ } from "./chunk-IIUNJRGG.js";
12
12
 
13
13
  // src/mcp/server.ts
14
14
  import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
@@ -22,27 +22,8 @@ server.registerTool(
22
22
  "aitool_project_map",
23
23
  {
24
24
  title: "Project Map",
25
- description: `Gera um mapa completo do projeto com categorias de arquivos e estrutura de pastas.
26
-
27
- FUNCIONALIDADES:
28
- - Lista todos os arquivos TypeScript/JavaScript do projeto
29
- - Categoriza automaticamente: page, layout, route, component, hook, service, store, util, type, config, test
30
- - Agrupa estatisticas por pasta
31
- - Detecta dependencias circulares
32
-
33
- PARAMETROS:
34
- - format: "text" (legivel) ou "json" (estruturado)
35
- - cwd: Diretorio do projeto (default: diretorio atual)
36
-
37
- RETORNA:
38
- - Sumario com total de arquivos e pastas
39
- - Distribuicao por categoria
40
- - Lista de pastas com contagem
41
- - Lista de arquivos com categoria
42
- - Dependencias circulares detectadas
43
-
44
- EXEMPLO DE USO:
45
- Chamar para entender a estrutura de um projeto antes de modificar.`,
25
+ description: `Mapeia projeto e retorna resumo: contagens por categoria, areas detectadas, alertas.
26
+ Use no inicio da sessao. Para detalhes: area_detail, file_context, suggest_reads.`,
46
27
  inputSchema: {
47
28
  format: z.enum(["text", "json"]).default("text").describe("Formato de saida: text (legivel) ou json (estruturado)"),
48
29
  cwd: z.string().optional().describe("Diretorio do projeto a analisar")
@@ -59,7 +40,8 @@ Chamar para entender a estrutura de um projeto antes de modificar.`,
59
40
  try {
60
41
  const result = await map({
61
42
  format: params.format,
62
- cwd: params.cwd
43
+ cwd: params.cwd,
44
+ full: false
63
45
  });
64
46
  return { content: [{ type: "text", text: result }] };
65
47
  } catch (error) {
@@ -79,28 +61,8 @@ server.registerTool(
79
61
  "aitool_dead_code",
80
62
  {
81
63
  title: "Dead Code Detector",
82
- description: `Detecta codigo morto no projeto usando Knip.
83
-
84
- DETECTA:
85
- - Arquivos orfaos (nao importados por ninguem)
86
- - Exports nao utilizados
87
- - Dependencias npm nao usadas
88
-
89
- PARAMETROS:
90
- - format: "text" (legivel) ou "json" (estruturado)
91
- - cwd: Diretorio do projeto (default: diretorio atual)
92
-
93
- RETORNA:
94
- - Sumario com total de codigo morto por tipo
95
- - Lista de arquivos orfaos com categoria
96
- - Lista de exports nao usados (arquivo + nome)
97
- - Lista de dependencias npm nao usadas
98
-
99
- EXEMPLO DE USO:
100
- Chamar periodicamente para manter o projeto limpo.
101
- Chamar antes de refatoracoes para identificar codigo removivel.
102
-
103
- NOTA: Requer que o projeto tenha knip configurado ou use defaults.`,
64
+ description: `Detecta codigo morto: arquivos orfaos, exports nao usados, deps npm mortas.
65
+ Use antes de refatoracoes ou periodicamente para limpeza.`,
104
66
  inputSchema: {
105
67
  format: z.enum(["text", "json"]).default("text").describe("Formato de saida: text (legivel) ou json (estruturado)"),
106
68
  cwd: z.string().optional().describe("Diretorio do projeto a analisar")
@@ -137,34 +99,8 @@ server.registerTool(
137
99
  "aitool_impact_analysis",
138
100
  {
139
101
  title: "Impact Analysis",
140
- description: `Analisa o impacto de modificar um arquivo especifico.
141
-
142
- ANALISA:
143
- - UPSTREAM: Quem importa este arquivo (direto e indireto)
144
- - DOWNSTREAM: O que este arquivo importa (direto e indireto)
145
- - RISCOS: Arquivo critico, dependencias circulares, cadeia profunda
146
- - SUGESTOES: O que verificar antes de modificar
147
-
148
- PARAMETROS:
149
- - target: Nome ou caminho do arquivo a analisar (obrigatorio)
150
- - format: "text" (legivel) ou "json" (estruturado)
151
- - cwd: Diretorio do projeto (default: diretorio atual)
152
-
153
- O TARGET pode ser:
154
- - Caminho completo: "src/components/Button.tsx"
155
- - Caminho parcial: "components/Button"
156
- - Nome do arquivo: "Button"
157
-
158
- RETORNA:
159
- - Categoria do arquivo target
160
- - Lista de arquivos upstream (quem importa)
161
- - Lista de arquivos downstream (o que importa)
162
- - Alertas de risco com severidade
163
- - Sugestoes de como proceder
164
-
165
- EXEMPLO DE USO:
166
- Chamar ANTES de modificar um arquivo para entender o impacto.
167
- Usar para planejar refatoracoes seguras.`,
102
+ description: `Analisa impacto de modificar um arquivo: upstream (quem importa), downstream (o que importa), riscos.
103
+ Use ANTES de editar arquivos para planejar mudancas seguras.`,
168
104
  inputSchema: {
169
105
  target: z.string().min(1).describe(
170
106
  "Arquivo a analisar: caminho completo, parcial ou nome do arquivo"
@@ -204,31 +140,8 @@ server.registerTool(
204
140
  "aitool_suggest_reads",
205
141
  {
206
142
  title: "Suggest Files to Read",
207
- description: `Sugere arquivos que devem ser lidos ANTES de modificar um arquivo especifico.
208
-
209
- PRIORIZA (nesta ordem):
210
- 1. CRITICAL: Arquivos de tipos/interfaces usados pelo target
211
- 2. HIGH: Dependencias diretas (arquivos importados pelo target)
212
- 3. MEDIUM: Upstream (arquivos que importam o target)
213
- 4. LOW: Testes relacionados
214
-
215
- PARAMETROS:
216
- - target: Nome ou caminho do arquivo que sera modificado (obrigatorio)
217
- - limit: Numero maximo de sugestoes (default: 10, max: 50)
218
- - cwd: Diretorio do projeto (default: diretorio atual)
219
-
220
- O TARGET pode ser:
221
- - Caminho completo: "src/components/Button.tsx"
222
- - Caminho parcial: "components/Button"
223
- - Nome do arquivo: "Button"
224
-
225
- RETORNA:
226
- - Lista ordenada de arquivos para ler
227
- - Cada sugestao tem: path, categoria, razao, prioridade
228
-
229
- EXEMPLO DE USO:
230
- Chamar ANTES de modificar um arquivo para saber o que ler primeiro.
231
- Util para entender o contexto completo antes de fazer mudancas.`,
143
+ description: `Sugere arquivos para ler ANTES de modificar um arquivo.
144
+ Prioriza: tipos usados, dependencias diretas, upstream, testes.`,
232
145
  inputSchema: {
233
146
  target: z.string().min(1).describe(
234
147
  "Arquivo que sera modificado: caminho completo, parcial ou nome"
@@ -269,39 +182,8 @@ server.registerTool(
269
182
  "aitool_file_context",
270
183
  {
271
184
  title: "Extract File Context",
272
- description: `Extrai assinaturas de funcoes e tipos de um arquivo SEM a implementacao.
273
-
274
- EXTRAI:
275
- - IMPORTS: Todos os imports com specifiers e se sao type-only
276
- - EXPORTS: Lista de tudo que e exportado
277
- - FUNCOES: Nome, parametros (com tipos), retorno, async, arrow, JSDoc
278
- - TIPOS: Interfaces, types e enums com suas definicoes completas
279
-
280
- NAO INCLUI:
281
- - Corpo das funcoes (implementacao)
282
- - Logica interna
283
- - Comentarios inline
284
-
285
- PARAMETROS:
286
- - target: Nome ou caminho do arquivo (obrigatorio)
287
- - cwd: Diretorio do projeto (default: diretorio atual)
288
-
289
- O TARGET pode ser:
290
- - Caminho completo: "src/components/Button.tsx"
291
- - Caminho parcial: "components/Button"
292
- - Nome do arquivo: "Button"
293
-
294
- RETORNA:
295
- - Arquivo com categoria detectada
296
- - Lista de imports estruturada
297
- - Lista de exports
298
- - Lista de funcoes com assinaturas completas
299
- - Lista de tipos com definicoes
300
-
301
- EXEMPLO DE USO:
302
- Chamar para entender a API publica de um arquivo antes de usa-lo.
303
- Util para saber quais funcoes/tipos um arquivo exporta.
304
- Eficiente: retorna apenas assinaturas, nao o codigo completo.`,
185
+ description: `Extrai assinaturas de funcoes e tipos de um arquivo (sem implementacao).
186
+ Use para entender a API publica antes de usar ou modificar.`,
305
187
  inputSchema: {
306
188
  target: z.string().min(1).describe(
307
189
  "Arquivo para extrair contexto: caminho completo, parcial ou nome"
@@ -340,39 +222,8 @@ server.registerTool(
340
222
  "aitool_list_areas",
341
223
  {
342
224
  title: "List Project Areas",
343
- description: `Lista todas as areas/dominios funcionais do projeto.
344
-
345
- IMPORTANTE - AREAS vs CATEGORIAS:
346
- - CATEGORIA = tipo tecnico (hook, component, page, service...)
347
- \u2192 Use aitool_project_map para ver categorias
348
- - AREA = dominio funcional (auth, meus-pets, stripe, dashboard...)
349
- \u2192 Use ESTA tool para ver areas
350
- \u2192 Use aitool_area_detail para ver arquivos de uma area especifica
351
-
352
- Um arquivo pode pertencer a MULTIPLAS areas!
353
-
354
- FUNCIONALIDADES:
355
- - Detecta areas automaticamente baseado em padroes de pasta e keywords
356
- - Agrupa arquivos por dominio funcional
357
- - Mostra distribuicao de categorias por area
358
- - Identifica arquivos sem area definida
359
-
360
- PARAMETROS:
361
- - format: "text" (legivel) ou "json" (estruturado)
362
- - cwd: Diretorio do projeto (default: diretorio atual)
363
-
364
- RETORNA:
365
- - Lista de areas com nome, descricao e contagem
366
- - Distribuicao de categorias por area
367
- - Lista de arquivos sem area (para configurar manualmente)
368
-
369
- EXEMPLO DE USO:
370
- Chamar no inicio da sessao para entender os dominios do projeto.
371
- Usar antes de trabalhar em uma feature especifica.
372
-
373
- CONFIGURACAO MANUAL:
374
- Se houver arquivos sem area ou areas incorretas, use aitool_areas_init
375
- para gerar .analyze/areas.config.json e edite manualmente.`,
225
+ description: `Lista areas/dominios funcionais do projeto (auth, pets, stripe...).
226
+ Diferente de categorias (hook, component). Use area_detail para ver arquivos.`,
376
227
  inputSchema: {
377
228
  format: z.enum(["text", "json"]).default("text").describe("Formato de saida: text (legivel) ou json (estruturado)"),
378
229
  cwd: z.string().optional().describe("Diretorio do projeto a analisar")
@@ -409,36 +260,8 @@ server.registerTool(
409
260
  "aitool_area_detail",
410
261
  {
411
262
  title: "Area Detail",
412
- description: `Mostra todos os arquivos de uma area/dominio especifica.
413
-
414
- USE ESTA TOOL QUANDO:
415
- - Usuario pedir para trabalhar em uma feature (ex: "vou mexer em auth")
416
- - Precisar listar todos os arquivos de um dominio
417
- - Quiser ver apenas hooks, components, etc de uma area especifica
418
-
419
- FUNCIONALIDADES:
420
- - Lista arquivos agrupados por categoria (page, component, hook...)
421
- - Mostra descricao de cada arquivo (inferida ou manual)
422
- - Permite filtrar por categoria especifica (type="hook")
423
- - Mostra resumo de distribuicao
424
-
425
- PARAMETROS:
426
- - target: Nome da area (OBRIGATORIO - ex: "meus-pets", "auth", "stripe")
427
- - type: Filtrar por categoria (opcional - ex: "hook", "component")
428
- - full: Mostrar todos os arquivos (default: false = resumido)
429
- - cwd: Diretorio do projeto
430
-
431
- RETORNA:
432
- - Nome e descricao da area
433
- - Lista de arquivos por categoria
434
- - Descricao de cada arquivo
435
-
436
- EXEMPLOS DE USO:
437
- - Ver tudo de auth: target="auth"
438
- - Ver apenas hooks de auth: target="auth", type="hook"
439
- - Ver todos os arquivos de stripe: target="stripe", full=true
440
-
441
- DICA: Use aitool_list_areas primeiro para ver quais areas existem.`,
263
+ description: `Mostra arquivos de uma area especifica, agrupados por categoria.
264
+ Parametros: target (nome da area), type (filtrar categoria), full (todos arquivos).`,
442
265
  inputSchema: {
443
266
  target: z.string().min(1).describe("Nome da area: meus-pets, auth, stripe, etc"),
444
267
  type: z.enum([
@@ -492,60 +315,8 @@ server.registerTool(
492
315
  "aitool_areas_init",
493
316
  {
494
317
  title: "Initialize Areas Config",
495
- description: `Gera arquivo de configuracao de areas (.analyze/areas.config.json).
496
-
497
- QUANDO USAR:
498
- - Quando aitool_list_areas mostrar arquivos sem area definida
499
- - Quando precisar personalizar deteccao de areas
500
- - Quando quiser adicionar areas que nao sao detectadas automaticamente
501
-
502
- O QUE FAZ:
503
- - Escaneia o projeto e detecta areas automaticamente
504
- - Infere patterns glob para cada area detectada
505
- - Gera arquivo editavel em .analyze/areas.config.json
506
- - NAO sobrescreve config existente (use force=true para sobrescrever)
507
-
508
- PARAMETROS:
509
- - force: Sobrescrever config existente (default: false)
510
- - cwd: Diretorio do projeto (default: diretorio atual)
511
-
512
- RETORNA:
513
- - Confirmacao do arquivo criado
514
- - Lista de areas detectadas com contagem
515
- - Arquivos sem area (para configurar manualmente)
516
- - Instrucoes de como editar o arquivo
517
-
518
- ESTRUTURA DO ARQUIVO GERADO:
519
- {
520
- "areas": {
521
- "auth": {
522
- "name": "Autenticacao",
523
- "description": "Sistema de login e sessao",
524
- "patterns": ["components/auth/**", "hooks/useAuth.ts"],
525
- "keywords": ["auth", "login", "session"]
526
- }
527
- },
528
- "descriptions": {
529
- "components/pets/PetForm.tsx": "Formulario multi-step de pets"
530
- },
531
- "settings": {
532
- "autoDetect": true,
533
- "inferDescriptions": true
534
- }
535
- }
536
-
537
- COMO EDITAR MANUALMENTE:
538
- 1. Adicionar areas nao detectadas: adicione entrada em "areas"
539
- 2. Renomear areas: altere "name" da area
540
- 3. Ajustar deteccao: modifique "patterns" e "keywords"
541
- 4. Excluir arquivos: adicione "exclude" com patterns
542
- 5. Descrever arquivos: adicione entrada em "descriptions"
543
-
544
- EXEMPLO DE USO:
545
- 1. Rode aitool_list_areas para ver areas atuais
546
- 2. Se houver arquivos sem area, rode aitool_areas_init
547
- 3. Edite .analyze/areas.config.json conforme necessario
548
- 4. Rode aitool_list_areas novamente para ver mudancas`,
318
+ description: `Gera .analyze/areas.config.json para customizar deteccao de areas.
319
+ Use quando houver arquivos sem area ou precisar ajustar deteccao.`,
549
320
  inputSchema: {
550
321
  force: z.boolean().default(false).describe("Sobrescrever config existente"),
551
322
  cwd: z.string().optional().describe("Diretorio do projeto")
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@justmpm/ai-tool",
3
- "version": "0.4.0",
3
+ "version": "0.5.0",
4
4
  "description": "Ferramenta de análise de dependências e impacto para projetos TypeScript/JavaScript. Usa Skott + Knip internamente.",
5
5
  "keywords": [
6
6
  "dependency-analysis",