codesentry 0.1.2

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 (4) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +161 -0
  3. package/dist/index.js +2502 -0
  4. package/package.json +74 -0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Ivan Reis
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,161 @@
1
+ # CodeSentry
2
+
3
+ CLI de verificação de vulnerabilidades e qualidade de código. O scanner
4
+ combina regras próprias para JavaScript/TypeScript e o ruleset OWASP do
5
+ Semgrep CE para as linguagens suportadas por ele.
6
+
7
+ ## O que o CodeSentry faz
8
+
9
+ Rodando `codesentry scan` num projeto, dois motores de análise trabalham
10
+ juntos e o resultado sai unificado em um único relatório:
11
+
12
+ - **Motor nativo** — regras próprias em TypeScript, sem dependências
13
+ externas, cobrindo JS/TS/JSX/TSX: segredos hardcoded, SQL injection,
14
+ XSS, command injection, JWT mal configurado, CORS permissivo, hash/
15
+ cifra fracos, promises sem tratamento de erro, complexidade excessiva
16
+ (funções longas, aninhamento profundo, muitos `if`/`for`/`try`), entre
17
+ outras. A lista completa e sempre atualizada está em `codesentry rules`.
18
+ - **Semgrep CE embutido** — roda o ruleset `p/owasp-top-ten` sobre todas
19
+ as linguagens que o Semgrep suporta (não só JS/TS), cobrindo os riscos
20
+ do OWASP Top 10 de forma mais ampla que regras hand-rolled sozinhas
21
+ conseguiriam.
22
+
23
+ Cada achado no relatório mostra o arquivo, a linha, a severidade e qual
24
+ motor encontrou o problema (prefixo `semgrep/` para achados do Semgrep).
25
+ Saídas disponíveis: tabela no console, JSON (`--json`) e, quando há mais
26
+ de 20 problemas, um relatório Markdown detalhado é gerado automaticamente.
27
+
28
+ ## Como funciona por baixo dos panos
29
+
30
+ O ponto central do design é **zero fricção de instalação**: o usuário final
31
+ roda `npm install -g codesentry` e não precisa instalar Python, Docker,
32
+ Semgrep, nem criar conta em lugar nenhum.
33
+
34
+ Isso é possível porque o Semgrep CE e um Python portátil vêm empacotados
35
+ como **dependências opcionais** específicas da plataforma
36
+ (`codesentry-semgrep-linux-x64` / `-win32-x64`), resolvidas
37
+ automaticamente pelo npm na instalação. O ruleset OWASP também é
38
+ distribuído como pacote próprio (`codesentry-semgrep-rules`), como um
39
+ snapshot local fixado por versão — o scan nunca consulta a Semgrep
40
+ Registry nem envia métricas, e funciona 100% offline depois de instalado.
41
+ O racional completo está na [ADR 0004](docs/adr/0004-bundled-semgrep-runtime.md).
42
+
43
+ ## Instalação
44
+
45
+ Em uma release publicada, basta uma instalação:
46
+
47
+ ```bash
48
+ npm install -g codesentry
49
+ ```
50
+
51
+ O pacote compatível de Semgrep CE e Python portátil é instalado como
52
+ dependência opcional automaticamente. Não é necessário instalar Python,
53
+ Docker, Semgrep, criar conta ou autenticar em um site.
54
+
55
+ As plataformas inicialmente suportadas são Linux x64 e Windows x64. Os
56
+ pacotes têm tamanho de dezenas de MB porque incluem o runtime; essa é a troca
57
+ para o scan funcionar offline após a instalação. Durante o desenvolvimento,
58
+ use `npm link`:
59
+
60
+ ```bash
61
+ git clone git@github.com:Ivan-ReisDev/code-sentry.git
62
+ cd code-sentry
63
+ npm install
64
+ npm run build
65
+ npm link
66
+ ```
67
+
68
+ Depois disso, o comando `codesentry` fica disponível em qualquer
69
+ diretório do seu terminal.
70
+
71
+ ## Uso
72
+
73
+ ### `codesentry scan [path]`
74
+
75
+ Analisa um diretório (padrão: diretório atual) em busca de
76
+ vulnerabilidades e problemas de qualidade.
77
+
78
+ ```bash
79
+ codesentry scan .
80
+ codesentry scan ./src
81
+ codesentry scan . --json
82
+ codesentry scan . --concurrency 4
83
+ codesentry scan . --config ./rules/security.yml
84
+ ```
85
+
86
+ O Semgrep CE embutido é executado automaticamente depois das regras nativas,
87
+ usando um snapshot local do ruleset OWASP e `--metrics=off`. O comando não
88
+ consulta a Semgrep Registry, não envia métricas e não requer internet após a
89
+ instalação.
90
+
91
+ `--concurrency <n>` limita o processamento paralelo do scanner nativo; use
92
+ apenas inteiros positivos. Sem valor, o limite é ajustado para a máquina
93
+ (`min(8, availableParallelism())`). Não há `--config` remoto: atualizações de
94
+ Semgrep e das regras OWASP chegam em novas releases do CodeSentry. Quando
95
+ necessário, `--config` aceita exclusivamente um arquivo YAML local.
96
+
97
+ Em macOS, ARM e plataformas sem runtime publicado, o comando interrompe
98
+ explicitamente em vez de declarar uma análise parcial como completa.
99
+
100
+ ### `codesentry rules`
101
+
102
+ Lista as regras de análise disponíveis.
103
+
104
+ ```bash
105
+ codesentry rules
106
+ ```
107
+
108
+ ### `codesentry long-functions [path]`
109
+
110
+ Analisa um diretório (padrão: diretório atual) em busca apenas de
111
+ funções com mais de 30 linhas (severidade `low`). Essa mesma regra
112
+ também roda automaticamente como parte do `codesentry scan`.
113
+
114
+ ```bash
115
+ codesentry long-functions .
116
+ codesentry long-functions ./src --json
117
+ ```
118
+
119
+ ### `codesentry help`
120
+
121
+ Lista os comandos disponíveis.
122
+
123
+ ```bash
124
+ codesentry help
125
+ ```
126
+
127
+ ### `codesentry init`
128
+
129
+ Assistente interativo para configurar o CodeSentry no projeto atual.
130
+
131
+ ```bash
132
+ codesentry init
133
+ ```
134
+
135
+ > A persistência da configuração em arquivo ainda não está implementada
136
+ > (ver `src/config/config.ts`).
137
+
138
+ ## Desenvolvimento
139
+
140
+ ```bash
141
+ npm install # instala as dependências
142
+ npm run dev # roda a CLI direto do TypeScript (via tsx)
143
+ npm run build # gera o build de produção em dist/
144
+ npm run typecheck # checagem de tipos (tsc --noEmit)
145
+ npm test # roda a suíte de testes uma vez
146
+ npm run test:watch # roda os testes em modo watch
147
+ ```
148
+
149
+ Este projeto segue **TDD obrigatório**: toda nova regra, comando ou
150
+ comportamento do scanner/reporter deve começar por um teste que falha,
151
+ em `tests/`, antes de qualquer implementação.
152
+
153
+ Para entender a estrutura de pastas e o fluxo de dados
154
+ (`command → scanner → rules → reporter`), veja
155
+ [docs/architecture.md](docs/architecture.md). Para o racional por trás
156
+ das bibliotecas usadas na CLI, veja
157
+ [docs/adr/0001-cli-libs.md](docs/adr/0001-cli-libs.md).
158
+
159
+ ## Licença
160
+
161
+ [MIT](LICENSE)