@ds9-solutions/mcp 0.2.0 → 0.4.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/LICENSE +43 -0
- package/README.md +53 -0
- package/content/agents/code-reviewer.agent.md +20 -0
- package/content/agents/db-analyser.agent.md +18 -2
- package/content/agents/security-reviewer.agent.md +21 -1
- package/content/agents/test-writer.agent.md +17 -8
- package/content/skills/dart/SKILL.md +19 -0
- package/content/skills/dart-frog/SKILL.md +22 -1
- package/content/skills/debugger/SKILL.md +144 -0
- package/content/skills/debugger/references/red-flags.md +32 -0
- package/content/skills/debugger/references/report-format.md +65 -0
- package/content/skills/debugger/references/root-cause-tracing.md +42 -0
- package/content/skills/debugger/references/safe-diagnostics.md +47 -0
- package/content/skills/driftorm/SKILL.md +59 -225
- package/content/skills/driftorm/examples/connection_postgres.dart +25 -0
- package/content/skills/driftorm/examples/connection_sqlite.dart +13 -0
- package/content/skills/driftorm/examples/database.dart +25 -0
- package/content/skills/driftorm/examples/migration_manual.dart +24 -0
- package/content/skills/driftorm/examples/migration_step_by_step.dart +24 -0
- package/content/skills/driftorm/examples/pagination.dart +48 -0
- package/content/skills/driftorm/examples/queries.dart +34 -0
- package/content/skills/driftorm/examples/repository_hex.dart +63 -0
- package/content/skills/driftorm/examples/table.dart +25 -0
- package/content/skills/driftorm/examples/test.dart +33 -0
- package/content/skills/driftorm/postgres/connection.md +9 -0
- package/content/skills/driftorm/postgres/migrations.md +11 -0
- package/content/skills/driftorm/postgres/types-and-defaults.md +10 -0
- package/content/skills/driftorm/references/anti-patterns.md +20 -0
- package/content/skills/driftorm/references/checklist.md +17 -0
- package/content/skills/driftorm/references/database-and-connection.md +22 -0
- package/content/skills/driftorm/references/dialects.md +17 -0
- package/content/skills/driftorm/references/drift-files.md +20 -0
- package/content/skills/driftorm/references/migrations.md +26 -0
- package/content/skills/driftorm/references/performance.md +10 -0
- package/content/skills/driftorm/references/queries-and-pagination.md +46 -0
- package/content/skills/driftorm/references/repositories-taskeither.md +29 -0
- package/content/skills/driftorm/references/setup.md +37 -0
- package/content/skills/driftorm/references/tables-and-columns.md +43 -0
- package/content/skills/driftorm/references/testing.md +12 -0
- package/content/skills/driftorm/references/transactions.md +23 -0
- package/content/skills/driftorm/sqlite/connection.md +11 -0
- package/content/skills/driftorm/sqlite/types-and-pragmas.md +9 -0
- package/content/skills/flutter/SKILL.md +19 -0
- package/content/skills/hex-pattern-dart/SKILL.md +21 -0
- package/content/skills/hex-pattern-dart/examples/adapter-in.md +4 -5
- package/content/skills/hex-pattern-dart/references/persistence.md +2 -2
- package/package.json +1 -1
- package/content/skills/docker/SKILL.md +0 -104
- package/content/skills/mysql/SKILL.md +0 -94
- package/content/skills/typescript/SKILL.md +0 -75
|
@@ -1,94 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: mysql
|
|
3
|
-
description: Diretrizes de modelagem, indexação, migrations, performance e segurança para bancos MySQL/MariaDB usados pelos projetos DS9. Use ao criar/alterar tabelas, escrever migrations, definir índices, revisar queries lentas, ou quando o usuário pedir "schema MySQL", "migration", "índice" ou "otimizar query".
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# MySQL — Diretrizes DS9
|
|
7
|
-
|
|
8
|
-
Convenções obrigatórias para schema, queries e migrations em MySQL (compatível com MariaDB), usadas com a camada de persistência do projeto.
|
|
9
|
-
|
|
10
|
-
## Engine e charset
|
|
11
|
-
|
|
12
|
-
- Engine padrão: `InnoDB` (suporta transações e FKs). Nunca usar `MyISAM` para tabelas transacionais.
|
|
13
|
-
- Charset/collation padrão: `utf8mb4` / `utf8mb4_unicode_ci` (ou `utf8mb4_0900_ai_ci` em MySQL 8+). Nunca `utf8` puro (não suporta 4 bytes/emojis).
|
|
14
|
-
|
|
15
|
-
## Convenções de nomenclatura
|
|
16
|
-
|
|
17
|
-
- Tabelas: `snake_case`, plural (`orders`, `order_items`).
|
|
18
|
-
- Colunas: `snake_case` (`created_at`, `customer_id`).
|
|
19
|
-
- Chave primária: `id` (`BIGINT UNSIGNED AUTO_INCREMENT` ou `CHAR(36)`/`BINARY(16)` para UUID — definir por projeto e manter consistente).
|
|
20
|
-
- Chave estrangeira: `<tabela_singular>_id` (`customer_id` referenciando `customers.id`).
|
|
21
|
-
- Índices: `idx_<tabela>_<colunas>`; únicos: `uq_<tabela>_<colunas>`; FKs: `fk_<tabela>_<tabela_referenciada>`.
|
|
22
|
-
|
|
23
|
-
## Colunas obrigatórias
|
|
24
|
-
|
|
25
|
-
Toda tabela transacional deve ter:
|
|
26
|
-
|
|
27
|
-
```sql
|
|
28
|
-
created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
|
29
|
-
updated_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3),
|
|
30
|
-
deleted_at DATETIME(3) NULL -- se o domínio usa soft delete
|
|
31
|
-
```
|
|
32
|
-
|
|
33
|
-
- Use `DATETIME` (não `TIMESTAMP`) para evitar o limite de ano 2038 e problemas de fuso; grave sempre em UTC na aplicação.
|
|
34
|
-
- Nunca armazene datas/horas como `VARCHAR`.
|
|
35
|
-
|
|
36
|
-
## Tipos de dados
|
|
37
|
-
|
|
38
|
-
- Dinheiro/valores monetários: `DECIMAL(19,4)` (nunca `FLOAT`/`DOUBLE`).
|
|
39
|
-
- Texto curto com tamanho conhecido: `VARCHAR(n)` com `n` justificado pelo domínio (evitar `VARCHAR(255)` por padrão sem pensar).
|
|
40
|
-
- Texto longo: `TEXT`/`LONGTEXT` apenas quando necessário (impacta performance de index/row size).
|
|
41
|
-
- Enums de domínio fixo e pequeno: `VARCHAR` + `CHECK` constraint (MySQL 8.0.16+) ou tabela de referência; evite `ENUM` nativo do MySQL (dificulta `ALTER` e não é portável).
|
|
42
|
-
- Booleanos: `TINYINT(1)` (convenção do MySQL; mapeie como `boolean` na aplicação).
|
|
43
|
-
- JSON: tipo nativo `JSON` apenas para dados verdadeiramente semiestruturados, nunca para modelar relações que deveriam ser colunas/tabelas.
|
|
44
|
-
|
|
45
|
-
## Índices
|
|
46
|
-
|
|
47
|
-
- Toda FK **precisa** de índice (MySQL não cria automaticamente para colunas de FK em alguns casos — sempre declare explicitamente).
|
|
48
|
-
- Índices compostos: ordem das colunas segue o padrão de consulta (coluna de igualdade antes de coluna de range/order).
|
|
49
|
-
- Evite índices redundantes (um índice composto `(a, b)` já cobre buscas por `a` sozinho).
|
|
50
|
-
- Toda query de produção recorrente deve ter `EXPLAIN` validado antes do merge — sem `type: ALL` (full table scan) em tabelas grandes.
|
|
51
|
-
- Use índice único (`UNIQUE KEY`) para garantir invariantes de negócio no banco (ex.: `email` único), nunca confie só em validação da aplicação.
|
|
52
|
-
|
|
53
|
-
## Migrations
|
|
54
|
-
|
|
55
|
-
- Toda alteração de schema é uma migration versionada (via o mecanismo de migrations do projeto), nunca alteração manual direto no banco de produção.
|
|
56
|
-
- Migrations são **imutáveis** após merge/deploy: para corrigir, crie uma nova migration (nunca edite uma já aplicada em outro ambiente).
|
|
57
|
-
- Toda migration precisa de `up` e `down` reversível. Se o `down` não for possível com segurança (ex.: `DROP COLUMN`), documente explicitamente no corpo da migration.
|
|
58
|
-
- Alterações em tabelas grandes (`ADD COLUMN`, `ADD INDEX`) em produção devem considerar lock de tabela: preferir `ALGORITHM=INPLACE, LOCK=NONE` quando suportado, e avaliar janela de manutenção para tabelas muito grandes.
|
|
59
|
-
- Nunca faça `DROP TABLE`/`DROP COLUMN` na mesma migration que ainda está em uso por código em produção (deploy em etapas: parar de usar → migration de remoção).
|
|
60
|
-
|
|
61
|
-
## Transações
|
|
62
|
-
|
|
63
|
-
- Operações que alteram múltiplas tabelas com invariantes relacionadas (ex.: criar pedido + baixar estoque) **devem** rodar em uma transação explícita.
|
|
64
|
-
- Nível de isolamento padrão do InnoDB é `REPEATABLE READ`; use `SELECT ... FOR UPDATE` quando precisar de lock pessimista para evitar race conditions em concorrência (ex.: controle de estoque, saldo).
|
|
65
|
-
- Mantenha transações curtas: nunca faça chamadas de rede (HTTP, fila) dentro de uma transação de banco aberta.
|
|
66
|
-
|
|
67
|
-
## Queries
|
|
68
|
-
|
|
69
|
-
- Nunca concatene valores de usuário diretamente em SQL — sempre use *prepared statements*/query builder parametrizado (via a biblioteca de acesso a dados do projeto). Isso é mandatório contra SQL Injection.
|
|
70
|
-
- Evite `SELECT *`; liste as colunas necessárias, especialmente em tabelas largas.
|
|
71
|
-
- Pagine toda listagem (`LIMIT`/`OFFSET` ou keyset pagination para datasets grandes); nunca retorne uma tabela inteira sem limite.
|
|
72
|
-
- Prefira keyset pagination (`WHERE id > :lastId ORDER BY id LIMIT :n`) a `OFFSET` alto em tabelas grandes (OFFSET grande é O(n)).
|
|
73
|
-
|
|
74
|
-
## Segurança e acesso
|
|
75
|
-
|
|
76
|
-
- Usuário da aplicação nunca deve ter privilégio `SUPER`, `GRANT OPTION` ou DDL (`CREATE`/`DROP`/`ALTER`) em produção — apenas `SELECT`, `INSERT`, `UPDATE`, `DELETE` nas tabelas do próprio schema. Migrations rodam com usuário/privilégio separado (pipeline de deploy).
|
|
77
|
-
- Nunca commitar credenciais de conexão; usar variáveis de ambiente/secret manager (ver README do MCP).
|
|
78
|
-
- Dados sensíveis (PII, senha, token) nunca em texto plano: hash (ex.: `bcrypt`/`argon2`) para senha, criptografia em nível de aplicação para PII quando exigido por compliance.
|
|
79
|
-
|
|
80
|
-
## Checklist ao revisar schema/migration/query
|
|
81
|
-
|
|
82
|
-
1. Engine `InnoDB`, charset `utf8mb4`?
|
|
83
|
-
2. Nomenclatura `snake_case` consistente e FKs com índice?
|
|
84
|
-
3. Tipos corretos (`DECIMAL` para dinheiro, sem `ENUM` nativo, sem `VARCHAR` para datas)?
|
|
85
|
-
4. Migration tem `up`/`down`, é aditiva/segura para produção?
|
|
86
|
-
5. Query usa parâmetros (sem concatenação), tem `LIMIT`, e passou por `EXPLAIN`?
|
|
87
|
-
6. Alterações concorrentes têm transação e/ou lock explícito quando necessário?
|
|
88
|
-
|
|
89
|
-
## Não fazer
|
|
90
|
-
|
|
91
|
-
- Não usar `SELECT *` em código de produção.
|
|
92
|
-
- Não usar `FLOAT`/`DOUBLE` para valores monetários.
|
|
93
|
-
- Não rodar DDL manual direto em produção fora de migration versionada.
|
|
94
|
-
- Não deixar queries sem paginação em endpoints de listagem.
|
|
@@ -1,75 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: typescript
|
|
3
|
-
description: Convenções de TypeScript da DS9 — tipagem estrita, modelagem de domínio, tratamento de erros, imports e estilo de código. Use ao escrever ou revisar qualquer código TypeScript (independente de framework), definir tipos/interfaces, ou quando o usuário pedir "tipagem", "strict mode" ou "boas práticas TypeScript".
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# TypeScript — Diretrizes DS9
|
|
7
|
-
|
|
8
|
-
Convenções de código TypeScript aplicáveis a qualquer projeto da empresa, incluindo os que seguem arquitetura hexagonal em geral.
|
|
9
|
-
|
|
10
|
-
## Configuração do compilador
|
|
11
|
-
|
|
12
|
-
- `strict: true` obrigatório no `tsconfig.json` (ativa `strictNullChecks`, `noImplicitAny`, etc.). Não desative flags de strict mode isoladamente sem justificativa documentada.
|
|
13
|
-
- `noUnusedLocals` e `noUnusedParameters` ativados — código morto não compila.
|
|
14
|
-
- `noImplicitReturns` e `noFallthroughCasesInSwitch` ativados para evitar bugs de controle de fluxo.
|
|
15
|
-
|
|
16
|
-
## Tipagem
|
|
17
|
-
|
|
18
|
-
- Proibido `any` explícito em código novo. Quando o tipo é genuinamente desconhecido (ex.: payload externo não tipado), use `unknown` e faça *narrowing* explícito antes de usar.
|
|
19
|
-
- Prefira `interface` para formas de objeto/contratos públicos (ports, DTOs) e `type` para unions, intersections e tipos utilitários.
|
|
20
|
-
- Nunca use type assertion (`as Tipo`) para "calar" o compilador sem validação real; prefira type guards (`function isOrder(x: unknown): x is Order`).
|
|
21
|
-
- Habilite e respeite `readonly` em propriedades que não devem mudar após criação (especialmente em entidades de domínio e DTOs).
|
|
22
|
-
|
|
23
|
-
```typescript
|
|
24
|
-
// Evitar
|
|
25
|
-
function handle(payload: any) { return payload.items.map((i: any) => i.id); }
|
|
26
|
-
|
|
27
|
-
// Preferir
|
|
28
|
-
interface OrderPayload { items: Array<{ id: string }>; }
|
|
29
|
-
function handle(payload: OrderPayload) { return payload.items.map((i) => i.id); }
|
|
30
|
-
```
|
|
31
|
-
|
|
32
|
-
## Modelagem de domínio
|
|
33
|
-
|
|
34
|
-
- Use *value objects* para conceitos com regras próprias (ex.: `Email`, `Money`), em vez de `string`/`number` soltos, quando o projeto já segue esse padrão.
|
|
35
|
-
- Invariantes de negócio são validadas no construtor/factory da entidade (`Order.create(...)`), lançando erro de domínio em vez de permitir estado inválido existir.
|
|
36
|
-
- Prefira classes/funções imutáveis (métodos retornam uma nova instância) para entidades de domínio sensíveis a concorrência, salvo quando o projeto adota mutação controlada por padrão.
|
|
37
|
-
|
|
38
|
-
## Tratamento de erros
|
|
39
|
-
|
|
40
|
-
- Erros de domínio são classes que estendem `Error`, com nome específico (`class OrderNotFoundError extends Error`), nunca `throw` de string ou objeto genérico (`throw 'erro'` é proibido).
|
|
41
|
-
- Nunca capture um erro (`catch`) só para logar e relançar sem adicionar contexto; se não for tratar, deixe propagar.
|
|
42
|
-
- Funções assíncronas que podem falhar previsivelmente (ex.: "não encontrado") devem deixar isso explícito no tipo de retorno (`Promise<Order | null>`) quando fizer sentido, em vez de forçar o chamador a sempre usar `try/catch`.
|
|
43
|
-
|
|
44
|
-
## Imports e organização de módulos
|
|
45
|
-
|
|
46
|
-
- Imports absolutos/com alias (`@app/domain/...`) para cruzar camadas, imports relativos (`./`, `../`) dentro do mesmo módulo/camada — configurar via `paths` no `tsconfig.json`.
|
|
47
|
-
- Nunca import circular entre módulos; se ocorrer, é sinal de fronteira de módulo mal definida (revisar a organização dos módulos).
|
|
48
|
-
- Um export principal por arquivo quando possível (facilita navegação e testes); evite arquivos "barril" (`index.ts`) gigantes que reexportam dezenas de símbolos sem necessidade.
|
|
49
|
-
|
|
50
|
-
## Nulidade e valores opcionais
|
|
51
|
-
|
|
52
|
-
- Prefira `T | null` para "ausência de valor conhecida" e `T | undefined`/parâmetro opcional (`param?: T`) para "valor não fornecido". Seja consistente dentro do mesmo módulo.
|
|
53
|
-
- Nunca use `!` (non-null assertion) para contornar `strictNullChecks` sem uma garantia real logo acima no código (ex.: dentro de um `if` que já checou).
|
|
54
|
-
|
|
55
|
-
## Nomenclatura
|
|
56
|
-
|
|
57
|
-
- Classes/interfaces/tipos: `PascalCase`. Variáveis/funções: `camelCase`. Constantes verdadeiramente globais/imutáveis: `UPPER_SNAKE_CASE`.
|
|
58
|
-
- Nomes de função descrevem a ação (`calculateTotal`, não `total` ou `doIt`); booleanos começam com `is`/`has`/`should` (`isValid`, `hasDiscount`).
|
|
59
|
-
- Evite abreviações não óbvias (`qty` ok se for convenção do domínio; `tmp`, `data2` não).
|
|
60
|
-
- Nome de **arquivo**: `kebab-case`, com sufixo que indica o papel do arquivo quando aplicável (`order-repository.port.ts`, `create-order.use-case.ts`, `order.repository.ts`, `order.entity.ts`, `order.controller.ts`, `order.module.ts`). Arquivo de teste usa o mesmo nome base + `.spec.ts`/`.e2e-spec.ts` (seguindo a convenção de testes do projeto).
|
|
61
|
-
|
|
62
|
-
## Checklist ao escrever/revisar código TypeScript
|
|
63
|
-
|
|
64
|
-
1. Existe algum `any` que poderia ser `unknown` + narrowing, ou um tipo concreto?
|
|
65
|
-
2. Erros são classes nomeadas, não strings/objetos genéricos?
|
|
66
|
-
3. Nenhum `as Tipo`/`!` sem uma garantia lógica imediatamente visível?
|
|
67
|
-
4. Nomes de variáveis/funções comunicam intenção sem precisar ler a implementação?
|
|
68
|
-
5. O `tsconfig.json` do projeto mantém `strict: true` e nenhuma flag de strict foi desabilitada pontualmente?
|
|
69
|
-
|
|
70
|
-
## Não fazer
|
|
71
|
-
|
|
72
|
-
- Não usar `any` em código novo.
|
|
73
|
-
- Não usar `// @ts-ignore` para silenciar erro de tipo sem comentário explicando o motivo e um plano de correção.
|
|
74
|
-
- Não lançar (`throw`) valores que não sejam instância de `Error`.
|
|
75
|
-
- Não criar imports circulares entre módulos/camadas.
|