@semacode/cli 1.5.28 → 1.5.29
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 +279 -265
- package/AGENT_CONTEXT_PACK.json +164 -0
- package/README.md +144 -144
- package/SEMA_BRIEF.curto.txt +7 -7
- package/SEMA_BRIEF.md +464 -65
- package/SEMA_BRIEF.micro.txt +6 -6
- package/SEMA_INDEX.json +6723 -669
- package/dist/bridge.d.ts +52 -0
- package/dist/bridge.js +318 -0
- package/dist/bridge.js.map +1 -0
- package/dist/comandos.d.ts +11 -0
- package/dist/comandos.js +110 -0
- package/dist/comandos.js.map +1 -0
- package/dist/contexto.d.ts +34 -0
- package/dist/contexto.js +197 -0
- package/dist/contexto.js.map +1 -0
- package/dist/drift.d.ts +1 -1
- package/dist/drift.js +32 -5
- package/dist/drift.js.map +1 -1
- package/dist/index.js +391 -64
- package/dist/index.js.map +1 -1
- package/dist/lua-symbols.d.ts +0 -6
- package/dist/lua-symbols.js +11 -78
- package/dist/lua-symbols.js.map +1 -1
- package/dist/projeto.js +6 -0
- package/dist/projeto.js.map +1 -1
- package/dist/tipos.d.ts +1 -1
- package/docs/AGENT_STARTER.md +109 -109
- package/docs/api.md +82 -0
- package/docs/cli.md +175 -175
- package/docs/como-ensinar-a-sema-para-ia.md +155 -155
- package/docs/deploy.md +93 -93
- package/docs/documentacao.md +88 -88
- package/docs/env.md +105 -105
- package/docs/extensao-vscode.md +53 -53
- package/docs/fluxo-pratico-ia-sema.md +187 -187
- package/docs/instalacao-e-primeiro-uso.md +134 -134
- package/docs/integracao-com-ia.md +110 -110
- package/docs/mcp.md +292 -292
- package/docs/pagamento-ponta-a-ponta.md +171 -171
- package/docs/persistencia-vendor-first.md +151 -151
- package/docs/prompt-base-ia-sema.md +111 -111
- package/docs/repositories.md +54 -54
- package/docs/rollback.md +49 -49
- package/docs/seguranca.md +126 -126
- package/docs/sintaxe.md +218 -218
- package/exemplos/author_obra_comum.sema +294 -294
- package/exemplos/author_tema_sensivel.sema +264 -264
- package/exemplos/profile_game.sema +114 -114
- package/exemplos/profile_legal.sema +105 -105
- package/exemplos/profile_ops.sema +110 -110
- package/exemplos/profile_research.sema +104 -104
- package/exemplos/profile_software.sema +123 -123
- package/exemplos/profile_workflow_n8n.sema +99 -99
- package/llms-full.txt +10 -9
- package/llms.txt +8 -7
- 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/dist/ast/tipos.d.ts +1 -1
- package/node_modules/@sema/nucleo/dist/index.d.ts +17 -0
- package/node_modules/@sema/nucleo/dist/index.js +28 -0
- package/node_modules/@sema/nucleo/dist/index.js.map +1 -1
- package/node_modules/@sema/nucleo/dist/ir/conversor.js +4 -0
- package/node_modules/@sema/nucleo/dist/ir/conversor.js.map +1 -1
- package/node_modules/@sema/nucleo/dist/ir/modelos.d.ts +3 -3
- package/node_modules/@sema/nucleo/dist/parser/parser.js +2 -0
- package/node_modules/@sema/nucleo/dist/parser/parser.js.map +1 -1
- package/node_modules/@sema/nucleo/dist/semantico/analisador.d.ts +2 -2
- package/node_modules/@sema/nucleo/dist/semantico/analisador.js +3 -1
- package/node_modules/@sema/nucleo/dist/semantico/analisador.js.map +1 -1
- package/node_modules/@sema/nucleo/package.json +1 -1
- package/node_modules/@sema/padroes/package.json +1 -1
- package/package.json +11 -10
- package/dist/php-symbols.d.ts +0 -24
- package/dist/php-symbols.js +0 -375
- package/dist/php-symbols.js.map +0 -1
package/docs/sintaxe.md
CHANGED
|
@@ -1,218 +1,218 @@
|
|
|
1
|
-
# Sintaxe Canonica
|
|
2
|
-
|
|
3
|
-
<!-- sema:i18n -->
|
|
4
|
-
> EN: English first. The canonical operational body below may still be in Portuguese until full translation lands.
|
|
5
|
-
> PT: Português depois, com acentos preservados.
|
|
6
|
-
> ES: Español al final; não traduza comandos, rotas nem sómbolos `.sema` sem contrato.
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
A Sema usa blocos declarativos previsiveis para reduzir ambiguidade no parser, na IR, no drift e no contexto de IA. A escrita humana pode ser legivel, mas o alvo principal da sintaxe e gerar contrato consumivel por agente.
|
|
10
|
-
|
|
11
|
-
## Regras basicas
|
|
12
|
-
|
|
13
|
-
- um arquivo `.sema` contem um `module` principal
|
|
14
|
-
- cada bloco abre com palavra-chave e fecha com `}`
|
|
15
|
-
- campos usam `nome: valor`
|
|
16
|
-
- blocos declarativos podem aparecer aninhados quando o contrato exigir
|
|
17
|
-
- `tests` usa blocos `caso`
|
|
18
|
-
|
|
19
|
-
## Blocos de primeira classe
|
|
20
|
-
|
|
21
|
-
- `module`
|
|
22
|
-
- `use`
|
|
23
|
-
- `database`
|
|
24
|
-
- `type`
|
|
25
|
-
- `entity`
|
|
26
|
-
- `enum`
|
|
27
|
-
- `state`
|
|
28
|
-
- `task`
|
|
29
|
-
- `flow`
|
|
30
|
-
- `route`
|
|
31
|
-
- `worker`
|
|
32
|
-
- `evento`
|
|
33
|
-
- `fila`
|
|
34
|
-
- `cron`
|
|
35
|
-
- `webhook`
|
|
36
|
-
- `cache`
|
|
37
|
-
- `storage`
|
|
38
|
-
- `policy`
|
|
39
|
-
- `tests`
|
|
40
|
-
- `docs`
|
|
41
|
-
- `comments`
|
|
42
|
-
|
|
43
|
-
## Subblocos comuns
|
|
44
|
-
|
|
45
|
-
- `input`
|
|
46
|
-
- `output`
|
|
47
|
-
- `rules`
|
|
48
|
-
- `effects`
|
|
49
|
-
- `auth`
|
|
50
|
-
- `authz`
|
|
51
|
-
- `dados`
|
|
52
|
-
- `audit`
|
|
53
|
-
- `segredos`
|
|
54
|
-
- `forbidden`
|
|
55
|
-
- `impl`
|
|
56
|
-
- `vinculos`
|
|
57
|
-
- `execucao`
|
|
58
|
-
- `guarantees`
|
|
59
|
-
- `error`
|
|
60
|
-
- `fields`
|
|
61
|
-
- `invariants`
|
|
62
|
-
- `transitions`
|
|
63
|
-
- `given`
|
|
64
|
-
- `when`
|
|
65
|
-
- `expect`
|
|
66
|
-
|
|
67
|
-
## Tipos primitivos
|
|
68
|
-
|
|
69
|
-
Tipos primitivos reconhecidos diretamente:
|
|
70
|
-
|
|
71
|
-
- `Texto`
|
|
72
|
-
- `Numero`
|
|
73
|
-
- `Inteiro`
|
|
74
|
-
- `Decimal`
|
|
75
|
-
- `Booleano`
|
|
76
|
-
- `Data`
|
|
77
|
-
- `Timestamp`
|
|
78
|
-
- `Objeto`
|
|
79
|
-
- `Id`
|
|
80
|
-
- `Email`
|
|
81
|
-
- `Json`
|
|
82
|
-
|
|
83
|
-
`Timestamp` e `Objeto` funcionam como aliases primitivos suportados e preservam o texto original na IR.
|
|
84
|
-
|
|
85
|
-
## Tipos compostos
|
|
86
|
-
|
|
87
|
-
```sema
|
|
88
|
-
input {
|
|
89
|
-
ids: Lista<Id> required
|
|
90
|
-
metadata: Mapa<Texto, Texto>
|
|
91
|
-
responsavel: Opcional<Usuario>
|
|
92
|
-
chave_publica: Texto|Id
|
|
93
|
-
}
|
|
94
|
-
```
|
|
95
|
-
|
|
96
|
-
Formas suportadas:
|
|
97
|
-
|
|
98
|
-
- `Lista<T>`
|
|
99
|
-
- `Mapa<K, V>`
|
|
100
|
-
- `Opcional<T>`
|
|
101
|
-
- `T1|T2`
|
|
102
|
-
- `T?`
|
|
103
|
-
|
|
104
|
-
## Predicados normalizados
|
|
105
|
-
|
|
106
|
-
Predicados escritos em contrato preservam o texto original em `predicado`. Quando a CLI reconhece uma forma comum, a expressao estruturada pode expor também `predicadoCanonico`.
|
|
107
|
-
|
|
108
|
-
Exemplo:
|
|
109
|
-
|
|
110
|
-
```sema
|
|
111
|
-
rules {
|
|
112
|
-
email deve_ser email_valido
|
|
113
|
-
nome deve_ser preenchido
|
|
114
|
-
}
|
|
115
|
-
```
|
|
116
|
-
|
|
117
|
-
Na IR, `email_valido` continua existindo como escrito e pode receber uma normalizacao como `valid_email`; `preenchido` pode receber `filled`. Esse campo e opcional e serve a agente/automacao, não muda a sintaxe pública.
|
|
118
|
-
|
|
119
|
-
## Persistência vendor-first
|
|
120
|
-
|
|
121
|
-
O bloco `database` modela banco e recursos persistidos sem apagar as diferenças entre engines.
|
|
122
|
-
|
|
123
|
-
Estrutura base:
|
|
124
|
-
|
|
125
|
-
```sema
|
|
126
|
-
database principal_postgres {
|
|
127
|
-
engine: postgres
|
|
128
|
-
consistency: forte
|
|
129
|
-
durability: alta
|
|
130
|
-
transaction_model: mvcc
|
|
131
|
-
query_model: sql
|
|
132
|
-
}
|
|
133
|
-
```
|
|
134
|
-
|
|
135
|
-
Recursos canonicamente suportados:
|
|
136
|
-
|
|
137
|
-
- `table`
|
|
138
|
-
- `index`
|
|
139
|
-
- `relationship`
|
|
140
|
-
- `query`
|
|
141
|
-
- `retention`
|
|
142
|
-
- `lock`
|
|
143
|
-
- `replication`
|
|
144
|
-
- `collection`
|
|
145
|
-
- `document`
|
|
146
|
-
- `keyspace`
|
|
147
|
-
- `stream`
|
|
148
|
-
- `capabilities`
|
|
149
|
-
|
|
150
|
-
Exemplo relacional:
|
|
151
|
-
|
|
152
|
-
```sema
|
|
153
|
-
database principal_postgres {
|
|
154
|
-
engine: postgres
|
|
155
|
-
schema: public
|
|
156
|
-
capabilities {
|
|
157
|
-
joins
|
|
158
|
-
views
|
|
159
|
-
foreign_keys
|
|
160
|
-
}
|
|
161
|
-
table pedidos {
|
|
162
|
-
entity: Pedido
|
|
163
|
-
}
|
|
164
|
-
relationship pedido_cliente {
|
|
165
|
-
from: Pedido
|
|
166
|
-
to: Cliente
|
|
167
|
-
}
|
|
168
|
-
query buscar_pedidos {
|
|
169
|
-
mode: sql
|
|
170
|
-
}
|
|
171
|
-
}
|
|
172
|
-
```
|
|
173
|
-
|
|
174
|
-
Exemplo documental:
|
|
175
|
-
|
|
176
|
-
```sema
|
|
177
|
-
database principal_mongodb {
|
|
178
|
-
engine: mongodb
|
|
179
|
-
query_model: documento
|
|
180
|
-
collection pedidos {
|
|
181
|
-
collection: pedidos
|
|
182
|
-
}
|
|
183
|
-
document pedido_snapshot {
|
|
184
|
-
entity: PedidoSnapshot
|
|
185
|
-
}
|
|
186
|
-
query pipeline_pedido {
|
|
187
|
-
mode: pipeline
|
|
188
|
-
}
|
|
189
|
-
}
|
|
190
|
-
```
|
|
191
|
-
|
|
192
|
-
Exemplo key-value:
|
|
193
|
-
|
|
194
|
-
```sema
|
|
195
|
-
database principal_redis {
|
|
196
|
-
engine: redis
|
|
197
|
-
query_model: chave_valor
|
|
198
|
-
keyspace cache_pedidos {
|
|
199
|
-
ttl: "300s"
|
|
200
|
-
}
|
|
201
|
-
stream eventos_pedido {
|
|
202
|
-
surface: fila
|
|
203
|
-
}
|
|
204
|
-
}
|
|
205
|
-
```
|
|
206
|
-
|
|
207
|
-
## Compatibilidade declarada
|
|
208
|
-
|
|
209
|
-
O IR de persistência calcula compatibilidade por recurso com quatro estados:
|
|
210
|
-
|
|
211
|
-
- `nativo`
|
|
212
|
-
- `adaptado`
|
|
213
|
-
- `parcial`
|
|
214
|
-
- `invalido`
|
|
215
|
-
|
|
216
|
-
Isso existe para deixar explícito quando um contrato está pedindo de um banco algo que ele não entrega do mesmo jeito.
|
|
217
|
-
|
|
218
|
-
O mesmo principio vale para runtime de orquestração. Superfícies como `webhook`, `cron`, `worker`, `evento` e `fila` podem ser medidas contra famílias como `n8n`, mas o contrato continua canonicamente modelado em Sema, sem rebaixar a linguagem para a sintaxe do adapter alvo.
|
|
1
|
+
# Sintaxe Canonica
|
|
2
|
+
|
|
3
|
+
<!-- sema:i18n -->
|
|
4
|
+
> EN: English first. The canonical operational body below may still be in Portuguese until full translation lands.
|
|
5
|
+
> PT: Português depois, com acentos preservados.
|
|
6
|
+
> ES: Español al final; não traduza comandos, rotas nem sómbolos `.sema` sem contrato.
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
A Sema usa blocos declarativos previsiveis para reduzir ambiguidade no parser, na IR, no drift e no contexto de IA. A escrita humana pode ser legivel, mas o alvo principal da sintaxe e gerar contrato consumivel por agente.
|
|
10
|
+
|
|
11
|
+
## Regras basicas
|
|
12
|
+
|
|
13
|
+
- um arquivo `.sema` contem um `module` principal
|
|
14
|
+
- cada bloco abre com palavra-chave e fecha com `}`
|
|
15
|
+
- campos usam `nome: valor`
|
|
16
|
+
- blocos declarativos podem aparecer aninhados quando o contrato exigir
|
|
17
|
+
- `tests` usa blocos `caso`
|
|
18
|
+
|
|
19
|
+
## Blocos de primeira classe
|
|
20
|
+
|
|
21
|
+
- `module`
|
|
22
|
+
- `use`
|
|
23
|
+
- `database`
|
|
24
|
+
- `type`
|
|
25
|
+
- `entity`
|
|
26
|
+
- `enum`
|
|
27
|
+
- `state`
|
|
28
|
+
- `task`
|
|
29
|
+
- `flow`
|
|
30
|
+
- `route`
|
|
31
|
+
- `worker`
|
|
32
|
+
- `evento`
|
|
33
|
+
- `fila`
|
|
34
|
+
- `cron`
|
|
35
|
+
- `webhook`
|
|
36
|
+
- `cache`
|
|
37
|
+
- `storage`
|
|
38
|
+
- `policy`
|
|
39
|
+
- `tests`
|
|
40
|
+
- `docs`
|
|
41
|
+
- `comments`
|
|
42
|
+
|
|
43
|
+
## Subblocos comuns
|
|
44
|
+
|
|
45
|
+
- `input`
|
|
46
|
+
- `output`
|
|
47
|
+
- `rules`
|
|
48
|
+
- `effects`
|
|
49
|
+
- `auth`
|
|
50
|
+
- `authz`
|
|
51
|
+
- `dados`
|
|
52
|
+
- `audit`
|
|
53
|
+
- `segredos`
|
|
54
|
+
- `forbidden`
|
|
55
|
+
- `impl`
|
|
56
|
+
- `vinculos`
|
|
57
|
+
- `execucao`
|
|
58
|
+
- `guarantees`
|
|
59
|
+
- `error`
|
|
60
|
+
- `fields`
|
|
61
|
+
- `invariants`
|
|
62
|
+
- `transitions`
|
|
63
|
+
- `given`
|
|
64
|
+
- `when`
|
|
65
|
+
- `expect`
|
|
66
|
+
|
|
67
|
+
## Tipos primitivos
|
|
68
|
+
|
|
69
|
+
Tipos primitivos reconhecidos diretamente:
|
|
70
|
+
|
|
71
|
+
- `Texto`
|
|
72
|
+
- `Numero`
|
|
73
|
+
- `Inteiro`
|
|
74
|
+
- `Decimal`
|
|
75
|
+
- `Booleano`
|
|
76
|
+
- `Data`
|
|
77
|
+
- `Timestamp`
|
|
78
|
+
- `Objeto`
|
|
79
|
+
- `Id`
|
|
80
|
+
- `Email`
|
|
81
|
+
- `Json`
|
|
82
|
+
|
|
83
|
+
`Timestamp` e `Objeto` funcionam como aliases primitivos suportados e preservam o texto original na IR.
|
|
84
|
+
|
|
85
|
+
## Tipos compostos
|
|
86
|
+
|
|
87
|
+
```sema
|
|
88
|
+
input {
|
|
89
|
+
ids: Lista<Id> required
|
|
90
|
+
metadata: Mapa<Texto, Texto>
|
|
91
|
+
responsavel: Opcional<Usuario>
|
|
92
|
+
chave_publica: Texto|Id
|
|
93
|
+
}
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
Formas suportadas:
|
|
97
|
+
|
|
98
|
+
- `Lista<T>`
|
|
99
|
+
- `Mapa<K, V>`
|
|
100
|
+
- `Opcional<T>`
|
|
101
|
+
- `T1|T2`
|
|
102
|
+
- `T?`
|
|
103
|
+
|
|
104
|
+
## Predicados normalizados
|
|
105
|
+
|
|
106
|
+
Predicados escritos em contrato preservam o texto original em `predicado`. Quando a CLI reconhece uma forma comum, a expressao estruturada pode expor também `predicadoCanonico`.
|
|
107
|
+
|
|
108
|
+
Exemplo:
|
|
109
|
+
|
|
110
|
+
```sema
|
|
111
|
+
rules {
|
|
112
|
+
email deve_ser email_valido
|
|
113
|
+
nome deve_ser preenchido
|
|
114
|
+
}
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
Na IR, `email_valido` continua existindo como escrito e pode receber uma normalizacao como `valid_email`; `preenchido` pode receber `filled`. Esse campo e opcional e serve a agente/automacao, não muda a sintaxe pública.
|
|
118
|
+
|
|
119
|
+
## Persistência vendor-first
|
|
120
|
+
|
|
121
|
+
O bloco `database` modela banco e recursos persistidos sem apagar as diferenças entre engines.
|
|
122
|
+
|
|
123
|
+
Estrutura base:
|
|
124
|
+
|
|
125
|
+
```sema
|
|
126
|
+
database principal_postgres {
|
|
127
|
+
engine: postgres
|
|
128
|
+
consistency: forte
|
|
129
|
+
durability: alta
|
|
130
|
+
transaction_model: mvcc
|
|
131
|
+
query_model: sql
|
|
132
|
+
}
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
Recursos canonicamente suportados:
|
|
136
|
+
|
|
137
|
+
- `table`
|
|
138
|
+
- `index`
|
|
139
|
+
- `relationship`
|
|
140
|
+
- `query`
|
|
141
|
+
- `retention`
|
|
142
|
+
- `lock`
|
|
143
|
+
- `replication`
|
|
144
|
+
- `collection`
|
|
145
|
+
- `document`
|
|
146
|
+
- `keyspace`
|
|
147
|
+
- `stream`
|
|
148
|
+
- `capabilities`
|
|
149
|
+
|
|
150
|
+
Exemplo relacional:
|
|
151
|
+
|
|
152
|
+
```sema
|
|
153
|
+
database principal_postgres {
|
|
154
|
+
engine: postgres
|
|
155
|
+
schema: public
|
|
156
|
+
capabilities {
|
|
157
|
+
joins
|
|
158
|
+
views
|
|
159
|
+
foreign_keys
|
|
160
|
+
}
|
|
161
|
+
table pedidos {
|
|
162
|
+
entity: Pedido
|
|
163
|
+
}
|
|
164
|
+
relationship pedido_cliente {
|
|
165
|
+
from: Pedido
|
|
166
|
+
to: Cliente
|
|
167
|
+
}
|
|
168
|
+
query buscar_pedidos {
|
|
169
|
+
mode: sql
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
Exemplo documental:
|
|
175
|
+
|
|
176
|
+
```sema
|
|
177
|
+
database principal_mongodb {
|
|
178
|
+
engine: mongodb
|
|
179
|
+
query_model: documento
|
|
180
|
+
collection pedidos {
|
|
181
|
+
collection: pedidos
|
|
182
|
+
}
|
|
183
|
+
document pedido_snapshot {
|
|
184
|
+
entity: PedidoSnapshot
|
|
185
|
+
}
|
|
186
|
+
query pipeline_pedido {
|
|
187
|
+
mode: pipeline
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
Exemplo key-value:
|
|
193
|
+
|
|
194
|
+
```sema
|
|
195
|
+
database principal_redis {
|
|
196
|
+
engine: redis
|
|
197
|
+
query_model: chave_valor
|
|
198
|
+
keyspace cache_pedidos {
|
|
199
|
+
ttl: "300s"
|
|
200
|
+
}
|
|
201
|
+
stream eventos_pedido {
|
|
202
|
+
surface: fila
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
```
|
|
206
|
+
|
|
207
|
+
## Compatibilidade declarada
|
|
208
|
+
|
|
209
|
+
O IR de persistência calcula compatibilidade por recurso com quatro estados:
|
|
210
|
+
|
|
211
|
+
- `nativo`
|
|
212
|
+
- `adaptado`
|
|
213
|
+
- `parcial`
|
|
214
|
+
- `invalido`
|
|
215
|
+
|
|
216
|
+
Isso existe para deixar explícito quando um contrato está pedindo de um banco algo que ele não entrega do mesmo jeito.
|
|
217
|
+
|
|
218
|
+
O mesmo principio vale para runtime de orquestração. Superfícies como `webhook`, `cron`, `worker`, `evento` e `fila` podem ser medidas contra famílias como `n8n`, mas o contrato continua canonicamente modelado em Sema, sem rebaixar a linguagem para a sintaxe do adapter alvo.
|