@semacode/cli 1.5.46 → 1.5.47
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/AGENTS.md +324 -324
- package/AGENT_CONTEXT_PACK.json +17 -5
- package/SEMA_BRIEF.curto.txt +4 -4
- package/SEMA_BRIEF.md +96 -96
- package/SEMA_BRIEF.micro.txt +3 -3
- package/SEMA_INDEX.json +539 -397
- package/dist/agentContext.d.ts +2 -2
- package/dist/agentContextPack.js +16 -5
- package/dist/agentContextPack.js.map +1 -1
- package/dist/agentContextTipos.d.ts +1 -1
- package/dist/agentContextTipos.js +1 -0
- package/dist/agentContextTipos.js.map +1 -1
- package/dist/agentEntryPoints.js +240 -0
- package/dist/agentEntryPoints.js.map +1 -1
- package/dist/initCommand.js +20 -0
- package/dist/initCommand.js.map +1 -1
- package/dist/initTemplatesBase.js +50 -2
- package/dist/initTemplatesBase.js.map +1 -1
- package/docs/AGENT_STARTER.md +13 -13
- package/docs/cli.md +3 -0
- package/docs/comandos.md +702 -0
- package/docs/env.md +2 -2
- package/docs/extensao-vscode.md +1 -1
- package/node_modules/@sema/gerador-css/package.json +1 -1
- package/node_modules/@sema/gerador-dart/package.json +1 -1
- package/node_modules/@sema/gerador-html/package.json +1 -1
- package/node_modules/@sema/gerador-javascript/package.json +1 -1
- package/node_modules/@sema/gerador-lua/package.json +1 -1
- package/node_modules/@sema/gerador-python/package.json +1 -1
- package/node_modules/@sema/gerador-typescript/package.json +1 -1
- package/node_modules/@sema/nucleo/package.json +1 -1
- package/node_modules/@sema/padroes/package.json +1 -1
- package/package.json +10 -10
package/AGENTS.md
CHANGED
|
@@ -1,324 +1,324 @@
|
|
|
1
|
-
# Sema — Regras obrigatorias para IA
|
|
2
|
-
|
|
3
|
-
O Sema e o contrato semantico IA-first deste projeto.
|
|
4
|
-
Toda IA deve consultar o Sema antes de qualquer acao sobre codigo ou contratos. Humanos escrevem e aprovam; agentes consomem o contrato para operar software vivo.
|
|
5
|
-
|
|
6
|
-
## Boot obrigatório para qualquer IA
|
|
7
|
-
|
|
8
|
-
Antes de abrir código cru, leia `SEMA_BOOT.md`. Se a IA tiver pouco contexto, pouca disciplina de tool use ou for um agente secundário, leia também `SEMA_SMALL_MODEL.md`.
|
|
9
|
-
|
|
10
|
-
Capacidade operacional:
|
|
11
|
-
|
|
12
|
-
- IA fraca: use `SEMA_BOOT.md`, `SEMA_SMALL_MODEL.md`, `SEMA_BRIEF.micro.txt` e falhe fechado se Sema não responder.
|
|
13
|
-
- IA média: use `SEMA_BOOT.md`, `AGENT_CONTEXT_PACK.json`, `SEMA_BRIEF.curto.txt` e `SEMA_INDEX.json`.
|
|
14
|
-
- IA forte: pode subir para `SEMA_BRIEF.md`, AST, IR e drift completo, mas continua obrigada a passar pelos gates Sema.
|
|
15
|
-
|
|
16
|
-
Timeout operacional: timeout definido pelo agente não é falha do Sema. Se `sema resumo`, `sema_drift`, `sema_docs_impacto` ou outro gate estourar timeout local, aumente o timeout e tente de novo. Para projeto grande, prefira escopar para o contrato ou arquivo alvo; se o ambiente impedir continuar, pare bloqueado e não avance sem Sema.
|
|
17
|
-
|
|
18
|
-
Idioma humano: responda no idioma falado pelo usuário. Em PT-BR, use acentos, cedilha, pontuação e símbolos normais. A DSL `.sema` pode usar palavras-chave ASCII; isso não autoriza texto humano sem acentos.
|
|
19
|
-
|
|
20
|
-
## Regras
|
|
21
|
-
|
|
22
|
-
1. Em IDE/local com workspace no disco, use a Sema CLI. Antes de qualquer leitura de projeto, rode `sema --version`; se o comando não existir, pare. A IA não acessa o painel Sema: peça ao humano para abrir o painel, baixar/rodar o instalador de chave e repetir `sema --version`.
|
|
23
|
-
2. Depois rode `sema preflight resumo --json`; se `decisao` não for `use_cli_local`, pare bloqueado.
|
|
24
|
-
3. Com CLI autorizada, rode `sema resumo`, depois `sema docs-impacto --intencao "<ação declarada>" --json`, leia as docs obrigatórias e só então avance.
|
|
25
|
-
4. Em web/chat/remoto sem workspace local, use MCP remoto: `sema_chat_contexto`, depois `sema_sync` inline com contrato `.sema`, código selecionado, documentação e índice. Use o `projeto` retornado nas chamadas seguintes.
|
|
26
|
-
5. É proibido usar MCP remoto, `sema_sync`, `sema_contratos_sincronizar` ou `sema mcp-client` para ler workspace local quando a CLI estiver operacional.
|
|
27
|
-
6. Antes de criar qualquer módulo, rota, task ou contrato, chame `sema inspecionar` ou `sema_inspecionar` no arquivo `.sema` mais próximo.
|
|
28
|
-
7. Antes de editar código existente, em IDE/local chame `sema drift` e `sema impacto`. Em web/remoto, use `sema_drift` e `sema_impacto` somente sobre o projeto remoto sincronizado.
|
|
29
|
-
8. Ao criar ou editar um arquivo `.sema`, chame `sema validar` ou `sema_validar` ao final.
|
|
30
|
-
9. Nunca invente contratos — use o Sema para descobrir o que já existe.
|
|
31
|
-
10. Se qualquer ferramenta Sema retornar erro, corrija o problema antes de prosseguir — não avance com código enquanto houver erros Sema pendentes.
|
|
32
|
-
11. Contrato vem antes de qualquer ação: crie, edite ou remova o `.sema` aplicável antes de código, deploy, docs operacionais, workflow, texto Author, game, legal, research ou ops.
|
|
33
|
-
|
|
34
|
-
## MCP
|
|
35
|
-
|
|
36
|
-
O servidor MCP do Sema e uma superficie privada/comercial acessada por endpoint remoto autorizado; ele nao e instalado pelo pacote npm do instalador neste repositorio.
|
|
37
|
-
Use as ferramentas quando o endpoint privado estiver configurado: sema_resumo, sema_validar, sema_drift, sema_impacto, sema_renomear_semantico, sema_inspecionar, sema_ir, sema_verificar, sema_contexto_ia, sema_prompt_ia, sema_author_iniciar, sema_author_validar, sema_author_briefing, sema_author_revisar_cliches, sema_sync_ai_entrypoints, sema_exemplos, sema_instalar_exemplos, sema_docs_impacto, sema_finalizar_mudanca.
|
|
38
|
-
|
|
39
|
-
Em IDE/local, a superfície principal é a Sema CLI. A IA deve provar a CLI com `sema --version`; se falhar, deve parar. A IA não acessa o painel Sema: peça ao humano para instalar pelo painel. A CLI deve ter `SEMA_CLI_AUTH_TOKEN` e deve chamar `sema preflight <comando> --json` antes de operar. Se `decisao` não for `use_cli_local`, pare. Não use MCP remoto, `sema_sync`, `sema_contratos_sincronizar` nem `sema mcp-client` para ler workspace local quando a CLI estiver operacional.
|
|
40
|
-
|
|
41
|
-
Em web/chat/remoto sem workspace local, use MCP remoto: `sema_chat_contexto`, depois `sema_sync` inline com contrato, código selecionado, documentação e índice, e então use o `projeto` retornado.
|
|
42
|
-
|
|
43
|
-
O MCP deve deixar claro em toda orientacao: se nao existe contrato, crie; se a intencao mudou, edite; se a capacidade saiu, remova ou aposente. Isso vale para todo tipo de Sema: Software, Author, Workflow, Ops, Game, Legal, Research e profiles futuros.
|
|
44
|
-
|
|
45
|
-
## Plataformas e Interfaces
|
|
46
|
-
|
|
47
|
-
### IDEs locais (Codex, Roo Code, VS Code, Cursor, Windsurf, etc.)
|
|
48
|
-
Quando houver workspace local:
|
|
49
|
-
1. Rode `sema --version`; se falhar, pare. A IA não acessa o painel Sema: peça ao humano para abrir o painel, baixar/rodar o instalador de chave e repetir `sema --version`.
|
|
50
|
-
2. Rode `sema preflight resumo --json`; se `decisao` não for `use_cli_local`, pare.
|
|
51
|
-
3. Rode `sema resumo` para entender o estado atual.
|
|
52
|
-
4. **ANTES DE QUALQUER AÇÃO**: rode `sema docs-impacto --intencao "<acao>" --json`.
|
|
53
|
-
5. Leia as docs obrigatórias antes de agir.
|
|
54
|
-
6. Rode `sema inspecionar`, `sema drift` e `sema impacto` antes de editar.
|
|
55
|
-
7. Use `sema finalizar-mudanca` para comprovar que leu as docs.
|
|
56
|
-
|
|
57
|
-
### Web / Chat (ChatGPT, Lovable, etc.)
|
|
58
|
-
Quando usar Sema via MCP remoto sem workspace local:
|
|
59
|
-
1. Chame `sema_chat_contexto` para confirmar conexão e orientação.
|
|
60
|
-
2. **ANTES DE QUALQUER AÇÃO**: declare sua intenção ao usuário.
|
|
61
|
-
3. Chame `sema_sync` com contrato `.sema`, código selecionado, documentação e índice.
|
|
62
|
-
4. Use obrigatoriamente o `projeto` retornado por `sema_sync`.
|
|
63
|
-
5. Chame `sema_resumo`, `sema_docs_impacto`, `sema_inspecionar`, `sema_drift` e `sema_impacto` usando esse `projeto`.
|
|
64
|
-
6. Leia as docs antes de agir e finalize com `sema_finalizar_mudanca`.
|
|
65
|
-
|
|
66
|
-
### CLI / Terminal
|
|
67
|
-
Quando usar Sema via CLI:
|
|
68
|
-
1. Execute `sema preflight <comando> --json` antes de operar; se bloquear, pare.
|
|
69
|
-
2. Execute `sema resumo` para entender o estado atual.
|
|
70
|
-
3. Execute `sema docs-impacto` antes de qualquer ação.
|
|
71
|
-
4. Leia as docs recomendadas antes de editar/criar/deletar.
|
|
72
|
-
5. Execute `sema finalizar-mudanca` ao concluir.
|
|
73
|
-
|
|
74
|
-
## Contratos e exemplos
|
|
75
|
-
|
|
76
|
-
- Sempre salve arquivos .sema na pasta `contratos/` do projeto.
|
|
77
|
-
- Crie um arquivo .sema por modulo ou contexto de negocio. Exemplo: `contratos/pedido.sema`, `contratos/pagamento.sema`, `contratos/usuario.sema`. Nunca coloque modulos de contextos diferentes no mesmo arquivo.
|
|
78
|
-
- Antes de criar qualquer arquivo .sema, leia os exemplos oficiais para entender o formato correto da linguagem.
|
|
79
|
-
- Em MCP remoto/cliente web, use `sema_exemplos` para listar ou ler exemplos oficiais. Nao peca para o MCP ler `C:\GitHub\Sema\exemplos` nem qualquer pasta local do usuario.
|
|
80
|
-
- Em CLI/local repo, a pasta `exemplos/` pode ser lida ou materializada localmente quando necessario.
|
|
81
|
-
- Nunca edite os arquivos da pasta `exemplos/`.
|
|
82
|
-
|
|
83
|
-
## Quando o projeto nao tem .sema
|
|
84
|
-
|
|
85
|
-
Pergunte ao usuario se deseja semantizar o projeto e sugira: sema iniciar
|
|
86
|
-
|
|
87
|
-
## Exemplos de arquivos .sema (referencia de formato)
|
|
88
|
-
|
|
89
|
-
### 1. Task simples com testes
|
|
90
|
-
```
|
|
91
|
-
module exemplos.calculadora {
|
|
92
|
-
task somar {
|
|
93
|
-
input {
|
|
94
|
-
a: Numero required
|
|
95
|
-
b: Numero required
|
|
96
|
-
}
|
|
97
|
-
output {
|
|
98
|
-
resultado: Numero
|
|
99
|
-
}
|
|
100
|
-
rules {
|
|
101
|
-
a deve_ser numero_valido
|
|
102
|
-
b deve_ser numero_valido
|
|
103
|
-
}
|
|
104
|
-
effects {
|
|
105
|
-
auditoria operacao soma
|
|
106
|
-
}
|
|
107
|
-
guarantees {
|
|
108
|
-
resultado existe
|
|
109
|
-
}
|
|
110
|
-
error {
|
|
111
|
-
entrada_invalida: "Os valores precisam ser numericos."
|
|
112
|
-
}
|
|
113
|
-
tests {
|
|
114
|
-
caso "soma basica" {
|
|
115
|
-
given { a: 2 b: 3 }
|
|
116
|
-
expect { sucesso: verdadeiro }
|
|
117
|
-
}
|
|
118
|
-
}
|
|
119
|
-
}
|
|
120
|
-
}
|
|
121
|
-
```
|
|
122
|
-
|
|
123
|
-
### 2. Entity + CRUD com route
|
|
124
|
-
```
|
|
125
|
-
module exemplos.crud.simples {
|
|
126
|
-
entity Produto {
|
|
127
|
-
fields {
|
|
128
|
-
id: Id
|
|
129
|
-
nome: Texto
|
|
130
|
-
preco: Decimal
|
|
131
|
-
ativo: Booleano
|
|
132
|
-
}
|
|
133
|
-
}
|
|
134
|
-
|
|
135
|
-
task criar_produto {
|
|
136
|
-
input {
|
|
137
|
-
nome: Texto required
|
|
138
|
-
preco: Decimal required
|
|
139
|
-
}
|
|
140
|
-
output {
|
|
141
|
-
produto: Produto
|
|
142
|
-
}
|
|
143
|
-
rules {
|
|
144
|
-
nome deve_ser preenchido
|
|
145
|
-
preco deve_ser positivo
|
|
146
|
-
}
|
|
147
|
-
effects {
|
|
148
|
-
persistencia Produto
|
|
149
|
-
auditoria produto_criado
|
|
150
|
-
}
|
|
151
|
-
guarantees {
|
|
152
|
-
produto existe
|
|
153
|
-
}
|
|
154
|
-
tests {
|
|
155
|
-
caso "cria produto" {
|
|
156
|
-
given { nome: "Caneca" preco: 39.9 }
|
|
157
|
-
expect { sucesso: verdadeiro }
|
|
158
|
-
}
|
|
159
|
-
}
|
|
160
|
-
}
|
|
161
|
-
|
|
162
|
-
route produtos {
|
|
163
|
-
metodo: POST
|
|
164
|
-
caminho: /produtos
|
|
165
|
-
task: criar_produto
|
|
166
|
-
finalidade: cadastro_produto
|
|
167
|
-
input { nome: Texto preco: Decimal }
|
|
168
|
-
output { produto: Produto }
|
|
169
|
-
}
|
|
170
|
-
}
|
|
171
|
-
```
|
|
172
|
-
|
|
173
|
-
### 3. Cadastro com validacoes e unicidade
|
|
174
|
-
```
|
|
175
|
-
module exemplos.cadastro.usuario {
|
|
176
|
-
entity Usuario {
|
|
177
|
-
fields {
|
|
178
|
-
id: Id
|
|
179
|
-
nome: Texto
|
|
180
|
-
email: Email
|
|
181
|
-
ativo: Booleano
|
|
182
|
-
}
|
|
183
|
-
}
|
|
184
|
-
|
|
185
|
-
task criar_usuario {
|
|
186
|
-
input {
|
|
187
|
-
nome: Texto required
|
|
188
|
-
email: Email required
|
|
189
|
-
}
|
|
190
|
-
output {
|
|
191
|
-
usuario: Usuario
|
|
192
|
-
}
|
|
193
|
-
rules {
|
|
194
|
-
nome deve_ser preenchido
|
|
195
|
-
email deve_ser email_valido
|
|
196
|
-
email deve_ser unico em Usuario.email
|
|
197
|
-
}
|
|
198
|
-
effects {
|
|
199
|
-
persistencia Usuario
|
|
200
|
-
evento usuario_criado
|
|
201
|
-
auditoria cadastro_usuario
|
|
202
|
-
}
|
|
203
|
-
guarantees {
|
|
204
|
-
usuario existe
|
|
205
|
-
persistencia concluida
|
|
206
|
-
}
|
|
207
|
-
error {
|
|
208
|
-
email_duplicado: "Ja existe usuario com este email."
|
|
209
|
-
entrada_invalida: "Os dados informados nao atendem as regras."
|
|
210
|
-
}
|
|
211
|
-
tests {
|
|
212
|
-
caso "cria usuario valido" {
|
|
213
|
-
given { nome: "Ana" email: "ana@empresa.com" }
|
|
214
|
-
expect { sucesso: verdadeiro }
|
|
215
|
-
}
|
|
216
|
-
}
|
|
217
|
-
}
|
|
218
|
-
}
|
|
219
|
-
```
|
|
220
|
-
|
|
221
|
-
### 4. Pagamento com state e flow
|
|
222
|
-
```
|
|
223
|
-
module exemplos.pagamento {
|
|
224
|
-
task processar_pagamento {
|
|
225
|
-
input {
|
|
226
|
-
pagamento_id: Id required
|
|
227
|
-
valor: Decimal required
|
|
228
|
-
token: Texto required
|
|
229
|
-
}
|
|
230
|
-
output {
|
|
231
|
-
pagamento: Pagamento
|
|
232
|
-
status: StatusPagamento
|
|
233
|
-
}
|
|
234
|
-
rules {
|
|
235
|
-
valor > 0
|
|
236
|
-
token deve_ser valido
|
|
237
|
-
}
|
|
238
|
-
effects {
|
|
239
|
-
consulta gateway_pagamento criticidade = alta
|
|
240
|
-
persistencia Pagamento criticidade = alta
|
|
241
|
-
evento pagamento_autorizado criticidade = media
|
|
242
|
-
auditoria pagamento criticidade = alta
|
|
243
|
-
}
|
|
244
|
-
state ciclo_pagamento {
|
|
245
|
-
transitions {
|
|
246
|
-
PENDENTE -> AUTORIZADO
|
|
247
|
-
AUTORIZADO -> PROCESSADO
|
|
248
|
-
}
|
|
249
|
-
}
|
|
250
|
-
guarantees {
|
|
251
|
-
pagamento existe
|
|
252
|
-
status em [AUTORIZADO, PROCESSADO]
|
|
253
|
-
}
|
|
254
|
-
error {
|
|
255
|
-
autorizacao_negada: "Recusado pelo gateway."
|
|
256
|
-
timeout_gateway: "Gateway nao respondeu."
|
|
257
|
-
}
|
|
258
|
-
tests {
|
|
259
|
-
caso "pagamento autorizado" {
|
|
260
|
-
given { pagamento_id: "pag_1" valor: 199.9 token: "tok_ok" }
|
|
261
|
-
expect { sucesso: verdadeiro }
|
|
262
|
-
}
|
|
263
|
-
caso "pagamento recusado" {
|
|
264
|
-
given { pagamento_id: "pag_err" valor: 10 token: "tok_recusado" }
|
|
265
|
-
expect { sucesso: falso }
|
|
266
|
-
error { tipo: "autorizacao_negada" }
|
|
267
|
-
}
|
|
268
|
-
}
|
|
269
|
-
}
|
|
270
|
-
|
|
271
|
-
flow orquestracao_pagamento {
|
|
272
|
-
pagamento_id: Id
|
|
273
|
-
valor: Decimal
|
|
274
|
-
token: Texto
|
|
275
|
-
etapa autorizar usa processar_pagamento com pagamento_id = pagamento_id, valor = valor, token = token em_sucesso confirmar em_erro registrar_falha
|
|
276
|
-
etapa confirmar usa confirmar_pagamento com pagamento_id = pagamento_id depende_de autorizar
|
|
277
|
-
etapa registrar_falha usa registrar_timeout_pagamento com pagamento_id = pagamento_id depende_de autorizar
|
|
278
|
-
}
|
|
279
|
-
}
|
|
280
|
-
```
|
|
281
|
-
|
|
282
|
-
### 5. Tratamento de erro com flow ramificado
|
|
283
|
-
```
|
|
284
|
-
module exemplos.tratamento.erro {
|
|
285
|
-
task executar_operacao_sensivel {
|
|
286
|
-
input {
|
|
287
|
-
chave: Texto required
|
|
288
|
-
}
|
|
289
|
-
output {
|
|
290
|
-
protocolo: Id
|
|
291
|
-
}
|
|
292
|
-
rules {
|
|
293
|
-
chave deve_ser preenchida
|
|
294
|
-
}
|
|
295
|
-
effects {
|
|
296
|
-
consulta cofre
|
|
297
|
-
auditoria falha_operacao_sensivel
|
|
298
|
-
}
|
|
299
|
-
guarantees {
|
|
300
|
-
protocolo existe
|
|
301
|
-
}
|
|
302
|
-
error {
|
|
303
|
-
acesso_negado: "A chave nao tem permissao."
|
|
304
|
-
recurso_indisponivel: "Servico temporariamente indisponivel."
|
|
305
|
-
}
|
|
306
|
-
tests {
|
|
307
|
-
caso "falha por acesso negado" {
|
|
308
|
-
given { chave: "sem_permissao" }
|
|
309
|
-
expect { sucesso: falso }
|
|
310
|
-
error { tipo: "acesso_negado" }
|
|
311
|
-
}
|
|
312
|
-
}
|
|
313
|
-
}
|
|
314
|
-
|
|
315
|
-
flow resposta_segura {
|
|
316
|
-
chave: Texto
|
|
317
|
-
etapa tentar usa executar_operacao_sensivel com chave = chave em_sucesso concluir em_erro registrar_falha por_erro acesso_negado = tratar_acesso_negado, recurso_indisponivel = agendar_retentativa
|
|
318
|
-
etapa tratar_acesso_negado usa responder_acesso_negado com chave = chave depende_de tentar
|
|
319
|
-
etapa agendar_retentativa usa responder_retentativa com chave = chave depende_de tentar
|
|
320
|
-
etapa registrar_falha usa registrar_auditoria_falha com chave = chave depende_de tentar
|
|
321
|
-
etapa concluir usa registrar_sucesso com protocolo = tentar.protocolo depende_de tentar
|
|
322
|
-
}
|
|
323
|
-
}
|
|
324
|
-
```
|
|
1
|
+
# Sema — Regras obrigatorias para IA
|
|
2
|
+
|
|
3
|
+
O Sema e o contrato semantico IA-first deste projeto.
|
|
4
|
+
Toda IA deve consultar o Sema antes de qualquer acao sobre codigo ou contratos. Humanos escrevem e aprovam; agentes consomem o contrato para operar software vivo.
|
|
5
|
+
|
|
6
|
+
## Boot obrigatório para qualquer IA
|
|
7
|
+
|
|
8
|
+
Antes de abrir código cru, leia `SEMA_BOOT.md`. Se a IA tiver pouco contexto, pouca disciplina de tool use ou for um agente secundário, leia também `SEMA_SMALL_MODEL.md`.
|
|
9
|
+
|
|
10
|
+
Capacidade operacional:
|
|
11
|
+
|
|
12
|
+
- IA fraca: use `SEMA_BOOT.md`, `SEMA_SMALL_MODEL.md`, `SEMA_BRIEF.micro.txt` e falhe fechado se Sema não responder.
|
|
13
|
+
- IA média: use `SEMA_BOOT.md`, `AGENT_CONTEXT_PACK.json`, `SEMA_BRIEF.curto.txt` e `SEMA_INDEX.json`.
|
|
14
|
+
- IA forte: pode subir para `SEMA_BRIEF.md`, AST, IR e drift completo, mas continua obrigada a passar pelos gates Sema.
|
|
15
|
+
|
|
16
|
+
Timeout operacional: timeout definido pelo agente não é falha do Sema. Se `sema resumo`, `sema_drift`, `sema_docs_impacto` ou outro gate estourar timeout local, aumente o timeout e tente de novo. Para projeto grande, prefira escopar para o contrato ou arquivo alvo; se o ambiente impedir continuar, pare bloqueado e não avance sem Sema.
|
|
17
|
+
|
|
18
|
+
Idioma humano: responda no idioma falado pelo usuário. Em PT-BR, use acentos, cedilha, pontuação e símbolos normais. A DSL `.sema` pode usar palavras-chave ASCII; isso não autoriza texto humano sem acentos.
|
|
19
|
+
|
|
20
|
+
## Regras
|
|
21
|
+
|
|
22
|
+
1. Em IDE/local com workspace no disco, use a Sema CLI. Antes de qualquer leitura de projeto, rode `sema --version`; se o comando não existir, pare. A IA não acessa o painel Sema: peça ao humano para abrir o painel, baixar/rodar o instalador de chave e repetir `sema --version`.
|
|
23
|
+
2. Depois rode `sema preflight resumo --json`; se `decisao` não for `use_cli_local`, pare bloqueado.
|
|
24
|
+
3. Com CLI autorizada, rode `sema resumo`, depois `sema docs-impacto --intencao "<ação declarada>" --json`, leia as docs obrigatórias e só então avance.
|
|
25
|
+
4. Em web/chat/remoto sem workspace local, use MCP remoto: `sema_chat_contexto`, depois `sema_sync` inline com contrato `.sema`, código selecionado, documentação e índice. Use o `projeto` retornado nas chamadas seguintes.
|
|
26
|
+
5. É proibido usar MCP remoto, `sema_sync`, `sema_contratos_sincronizar` ou `sema mcp-client` para ler workspace local quando a CLI estiver operacional.
|
|
27
|
+
6. Antes de criar qualquer módulo, rota, task ou contrato, chame `sema inspecionar` ou `sema_inspecionar` no arquivo `.sema` mais próximo.
|
|
28
|
+
7. Antes de editar código existente, em IDE/local chame `sema drift` e `sema impacto`. Em web/remoto, use `sema_drift` e `sema_impacto` somente sobre o projeto remoto sincronizado.
|
|
29
|
+
8. Ao criar ou editar um arquivo `.sema`, chame `sema validar` ou `sema_validar` ao final.
|
|
30
|
+
9. Nunca invente contratos — use o Sema para descobrir o que já existe.
|
|
31
|
+
10. Se qualquer ferramenta Sema retornar erro, corrija o problema antes de prosseguir — não avance com código enquanto houver erros Sema pendentes.
|
|
32
|
+
11. Contrato vem antes de qualquer ação: crie, edite ou remova o `.sema` aplicável antes de código, deploy, docs operacionais, workflow, texto Author, game, legal, research ou ops.
|
|
33
|
+
|
|
34
|
+
## MCP
|
|
35
|
+
|
|
36
|
+
O servidor MCP do Sema e uma superficie privada/comercial acessada por endpoint remoto autorizado; ele nao e instalado pelo pacote npm do instalador neste repositorio.
|
|
37
|
+
Use as ferramentas quando o endpoint privado estiver configurado: sema_resumo, sema_validar, sema_drift, sema_impacto, sema_renomear_semantico, sema_inspecionar, sema_ir, sema_verificar, sema_contexto_ia, sema_prompt_ia, sema_author_iniciar, sema_author_validar, sema_author_briefing, sema_author_revisar_cliches, sema_sync_ai_entrypoints, sema_exemplos, sema_instalar_exemplos, sema_docs_impacto, sema_finalizar_mudanca.
|
|
38
|
+
|
|
39
|
+
Em IDE/local, a superfície principal é a Sema CLI. A IA deve provar a CLI com `sema --version`; se falhar, deve parar. A IA não acessa o painel Sema: peça ao humano para instalar pelo painel. A CLI deve ter `SEMA_CLI_AUTH_TOKEN` e deve chamar `sema preflight <comando> --json` antes de operar. Se `decisao` não for `use_cli_local`, pare. Não use MCP remoto, `sema_sync`, `sema_contratos_sincronizar` nem `sema mcp-client` para ler workspace local quando a CLI estiver operacional.
|
|
40
|
+
|
|
41
|
+
Em web/chat/remoto sem workspace local, use MCP remoto: `sema_chat_contexto`, depois `sema_sync` inline com contrato, código selecionado, documentação e índice, e então use o `projeto` retornado.
|
|
42
|
+
|
|
43
|
+
O MCP deve deixar claro em toda orientacao: se nao existe contrato, crie; se a intencao mudou, edite; se a capacidade saiu, remova ou aposente. Isso vale para todo tipo de Sema: Software, Author, Workflow, Ops, Game, Legal, Research e profiles futuros.
|
|
44
|
+
|
|
45
|
+
## Plataformas e Interfaces
|
|
46
|
+
|
|
47
|
+
### IDEs locais (Codex, Roo Code, VS Code, Cursor, Windsurf, etc.)
|
|
48
|
+
Quando houver workspace local:
|
|
49
|
+
1. Rode `sema --version`; se falhar, pare. A IA não acessa o painel Sema: peça ao humano para abrir o painel, baixar/rodar o instalador de chave e repetir `sema --version`.
|
|
50
|
+
2. Rode `sema preflight resumo --json`; se `decisao` não for `use_cli_local`, pare.
|
|
51
|
+
3. Rode `sema resumo` para entender o estado atual.
|
|
52
|
+
4. **ANTES DE QUALQUER AÇÃO**: rode `sema docs-impacto --intencao "<acao>" --json`.
|
|
53
|
+
5. Leia as docs obrigatórias antes de agir.
|
|
54
|
+
6. Rode `sema inspecionar`, `sema drift` e `sema impacto` antes de editar.
|
|
55
|
+
7. Use `sema finalizar-mudanca` para comprovar que leu as docs.
|
|
56
|
+
|
|
57
|
+
### Web / Chat (ChatGPT, Lovable, etc.)
|
|
58
|
+
Quando usar Sema via MCP remoto sem workspace local:
|
|
59
|
+
1. Chame `sema_chat_contexto` para confirmar conexão e orientação.
|
|
60
|
+
2. **ANTES DE QUALQUER AÇÃO**: declare sua intenção ao usuário.
|
|
61
|
+
3. Chame `sema_sync` com contrato `.sema`, código selecionado, documentação e índice.
|
|
62
|
+
4. Use obrigatoriamente o `projeto` retornado por `sema_sync`.
|
|
63
|
+
5. Chame `sema_resumo`, `sema_docs_impacto`, `sema_inspecionar`, `sema_drift` e `sema_impacto` usando esse `projeto`.
|
|
64
|
+
6. Leia as docs antes de agir e finalize com `sema_finalizar_mudanca`.
|
|
65
|
+
|
|
66
|
+
### CLI / Terminal
|
|
67
|
+
Quando usar Sema via CLI:
|
|
68
|
+
1. Execute `sema preflight <comando> --json` antes de operar; se bloquear, pare.
|
|
69
|
+
2. Execute `sema resumo` para entender o estado atual.
|
|
70
|
+
3. Execute `sema docs-impacto` antes de qualquer ação.
|
|
71
|
+
4. Leia as docs recomendadas antes de editar/criar/deletar.
|
|
72
|
+
5. Execute `sema finalizar-mudanca` ao concluir.
|
|
73
|
+
|
|
74
|
+
## Contratos e exemplos
|
|
75
|
+
|
|
76
|
+
- Sempre salve arquivos .sema na pasta `contratos/` do projeto.
|
|
77
|
+
- Crie um arquivo .sema por modulo ou contexto de negocio. Exemplo: `contratos/pedido.sema`, `contratos/pagamento.sema`, `contratos/usuario.sema`. Nunca coloque modulos de contextos diferentes no mesmo arquivo.
|
|
78
|
+
- Antes de criar qualquer arquivo .sema, leia os exemplos oficiais para entender o formato correto da linguagem.
|
|
79
|
+
- Em MCP remoto/cliente web, use `sema_exemplos` para listar ou ler exemplos oficiais. Nao peca para o MCP ler `C:\GitHub\Sema\exemplos` nem qualquer pasta local do usuario.
|
|
80
|
+
- Em CLI/local repo, a pasta `exemplos/` pode ser lida ou materializada localmente quando necessario.
|
|
81
|
+
- Nunca edite os arquivos da pasta `exemplos/`.
|
|
82
|
+
|
|
83
|
+
## Quando o projeto nao tem .sema
|
|
84
|
+
|
|
85
|
+
Pergunte ao usuario se deseja semantizar o projeto e sugira: sema iniciar
|
|
86
|
+
|
|
87
|
+
## Exemplos de arquivos .sema (referencia de formato)
|
|
88
|
+
|
|
89
|
+
### 1. Task simples com testes
|
|
90
|
+
```
|
|
91
|
+
module exemplos.calculadora {
|
|
92
|
+
task somar {
|
|
93
|
+
input {
|
|
94
|
+
a: Numero required
|
|
95
|
+
b: Numero required
|
|
96
|
+
}
|
|
97
|
+
output {
|
|
98
|
+
resultado: Numero
|
|
99
|
+
}
|
|
100
|
+
rules {
|
|
101
|
+
a deve_ser numero_valido
|
|
102
|
+
b deve_ser numero_valido
|
|
103
|
+
}
|
|
104
|
+
effects {
|
|
105
|
+
auditoria operacao soma
|
|
106
|
+
}
|
|
107
|
+
guarantees {
|
|
108
|
+
resultado existe
|
|
109
|
+
}
|
|
110
|
+
error {
|
|
111
|
+
entrada_invalida: "Os valores precisam ser numericos."
|
|
112
|
+
}
|
|
113
|
+
tests {
|
|
114
|
+
caso "soma basica" {
|
|
115
|
+
given { a: 2 b: 3 }
|
|
116
|
+
expect { sucesso: verdadeiro }
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
### 2. Entity + CRUD com route
|
|
124
|
+
```
|
|
125
|
+
module exemplos.crud.simples {
|
|
126
|
+
entity Produto {
|
|
127
|
+
fields {
|
|
128
|
+
id: Id
|
|
129
|
+
nome: Texto
|
|
130
|
+
preco: Decimal
|
|
131
|
+
ativo: Booleano
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
task criar_produto {
|
|
136
|
+
input {
|
|
137
|
+
nome: Texto required
|
|
138
|
+
preco: Decimal required
|
|
139
|
+
}
|
|
140
|
+
output {
|
|
141
|
+
produto: Produto
|
|
142
|
+
}
|
|
143
|
+
rules {
|
|
144
|
+
nome deve_ser preenchido
|
|
145
|
+
preco deve_ser positivo
|
|
146
|
+
}
|
|
147
|
+
effects {
|
|
148
|
+
persistencia Produto
|
|
149
|
+
auditoria produto_criado
|
|
150
|
+
}
|
|
151
|
+
guarantees {
|
|
152
|
+
produto existe
|
|
153
|
+
}
|
|
154
|
+
tests {
|
|
155
|
+
caso "cria produto" {
|
|
156
|
+
given { nome: "Caneca" preco: 39.9 }
|
|
157
|
+
expect { sucesso: verdadeiro }
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
route produtos {
|
|
163
|
+
metodo: POST
|
|
164
|
+
caminho: /produtos
|
|
165
|
+
task: criar_produto
|
|
166
|
+
finalidade: cadastro_produto
|
|
167
|
+
input { nome: Texto preco: Decimal }
|
|
168
|
+
output { produto: Produto }
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
### 3. Cadastro com validacoes e unicidade
|
|
174
|
+
```
|
|
175
|
+
module exemplos.cadastro.usuario {
|
|
176
|
+
entity Usuario {
|
|
177
|
+
fields {
|
|
178
|
+
id: Id
|
|
179
|
+
nome: Texto
|
|
180
|
+
email: Email
|
|
181
|
+
ativo: Booleano
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
task criar_usuario {
|
|
186
|
+
input {
|
|
187
|
+
nome: Texto required
|
|
188
|
+
email: Email required
|
|
189
|
+
}
|
|
190
|
+
output {
|
|
191
|
+
usuario: Usuario
|
|
192
|
+
}
|
|
193
|
+
rules {
|
|
194
|
+
nome deve_ser preenchido
|
|
195
|
+
email deve_ser email_valido
|
|
196
|
+
email deve_ser unico em Usuario.email
|
|
197
|
+
}
|
|
198
|
+
effects {
|
|
199
|
+
persistencia Usuario
|
|
200
|
+
evento usuario_criado
|
|
201
|
+
auditoria cadastro_usuario
|
|
202
|
+
}
|
|
203
|
+
guarantees {
|
|
204
|
+
usuario existe
|
|
205
|
+
persistencia concluida
|
|
206
|
+
}
|
|
207
|
+
error {
|
|
208
|
+
email_duplicado: "Ja existe usuario com este email."
|
|
209
|
+
entrada_invalida: "Os dados informados nao atendem as regras."
|
|
210
|
+
}
|
|
211
|
+
tests {
|
|
212
|
+
caso "cria usuario valido" {
|
|
213
|
+
given { nome: "Ana" email: "ana@empresa.com" }
|
|
214
|
+
expect { sucesso: verdadeiro }
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
```
|
|
220
|
+
|
|
221
|
+
### 4. Pagamento com state e flow
|
|
222
|
+
```
|
|
223
|
+
module exemplos.pagamento {
|
|
224
|
+
task processar_pagamento {
|
|
225
|
+
input {
|
|
226
|
+
pagamento_id: Id required
|
|
227
|
+
valor: Decimal required
|
|
228
|
+
token: Texto required
|
|
229
|
+
}
|
|
230
|
+
output {
|
|
231
|
+
pagamento: Pagamento
|
|
232
|
+
status: StatusPagamento
|
|
233
|
+
}
|
|
234
|
+
rules {
|
|
235
|
+
valor > 0
|
|
236
|
+
token deve_ser valido
|
|
237
|
+
}
|
|
238
|
+
effects {
|
|
239
|
+
consulta gateway_pagamento criticidade = alta
|
|
240
|
+
persistencia Pagamento criticidade = alta
|
|
241
|
+
evento pagamento_autorizado criticidade = media
|
|
242
|
+
auditoria pagamento criticidade = alta
|
|
243
|
+
}
|
|
244
|
+
state ciclo_pagamento {
|
|
245
|
+
transitions {
|
|
246
|
+
PENDENTE -> AUTORIZADO
|
|
247
|
+
AUTORIZADO -> PROCESSADO
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
guarantees {
|
|
251
|
+
pagamento existe
|
|
252
|
+
status em [AUTORIZADO, PROCESSADO]
|
|
253
|
+
}
|
|
254
|
+
error {
|
|
255
|
+
autorizacao_negada: "Recusado pelo gateway."
|
|
256
|
+
timeout_gateway: "Gateway nao respondeu."
|
|
257
|
+
}
|
|
258
|
+
tests {
|
|
259
|
+
caso "pagamento autorizado" {
|
|
260
|
+
given { pagamento_id: "pag_1" valor: 199.9 token: "tok_ok" }
|
|
261
|
+
expect { sucesso: verdadeiro }
|
|
262
|
+
}
|
|
263
|
+
caso "pagamento recusado" {
|
|
264
|
+
given { pagamento_id: "pag_err" valor: 10 token: "tok_recusado" }
|
|
265
|
+
expect { sucesso: falso }
|
|
266
|
+
error { tipo: "autorizacao_negada" }
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
flow orquestracao_pagamento {
|
|
272
|
+
pagamento_id: Id
|
|
273
|
+
valor: Decimal
|
|
274
|
+
token: Texto
|
|
275
|
+
etapa autorizar usa processar_pagamento com pagamento_id = pagamento_id, valor = valor, token = token em_sucesso confirmar em_erro registrar_falha
|
|
276
|
+
etapa confirmar usa confirmar_pagamento com pagamento_id = pagamento_id depende_de autorizar
|
|
277
|
+
etapa registrar_falha usa registrar_timeout_pagamento com pagamento_id = pagamento_id depende_de autorizar
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
```
|
|
281
|
+
|
|
282
|
+
### 5. Tratamento de erro com flow ramificado
|
|
283
|
+
```
|
|
284
|
+
module exemplos.tratamento.erro {
|
|
285
|
+
task executar_operacao_sensivel {
|
|
286
|
+
input {
|
|
287
|
+
chave: Texto required
|
|
288
|
+
}
|
|
289
|
+
output {
|
|
290
|
+
protocolo: Id
|
|
291
|
+
}
|
|
292
|
+
rules {
|
|
293
|
+
chave deve_ser preenchida
|
|
294
|
+
}
|
|
295
|
+
effects {
|
|
296
|
+
consulta cofre
|
|
297
|
+
auditoria falha_operacao_sensivel
|
|
298
|
+
}
|
|
299
|
+
guarantees {
|
|
300
|
+
protocolo existe
|
|
301
|
+
}
|
|
302
|
+
error {
|
|
303
|
+
acesso_negado: "A chave nao tem permissao."
|
|
304
|
+
recurso_indisponivel: "Servico temporariamente indisponivel."
|
|
305
|
+
}
|
|
306
|
+
tests {
|
|
307
|
+
caso "falha por acesso negado" {
|
|
308
|
+
given { chave: "sem_permissao" }
|
|
309
|
+
expect { sucesso: falso }
|
|
310
|
+
error { tipo: "acesso_negado" }
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
|
|
315
|
+
flow resposta_segura {
|
|
316
|
+
chave: Texto
|
|
317
|
+
etapa tentar usa executar_operacao_sensivel com chave = chave em_sucesso concluir em_erro registrar_falha por_erro acesso_negado = tratar_acesso_negado, recurso_indisponivel = agendar_retentativa
|
|
318
|
+
etapa tratar_acesso_negado usa responder_acesso_negado com chave = chave depende_de tentar
|
|
319
|
+
etapa agendar_retentativa usa responder_retentativa com chave = chave depende_de tentar
|
|
320
|
+
etapa registrar_falha usa registrar_auditoria_falha com chave = chave depende_de tentar
|
|
321
|
+
etapa concluir usa registrar_sucesso com protocolo = tentar.protocolo depende_de tentar
|
|
322
|
+
}
|
|
323
|
+
}
|
|
324
|
+
```
|