@semacode/cli 1.5.18 → 1.5.19

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 (93) hide show
  1. package/AGENTS.md +268 -260
  2. package/LICENSE +22 -22
  3. package/README.md +144 -104
  4. package/SEMA_BRIEF.curto.txt +7 -5
  5. package/SEMA_BRIEF.md +60 -4
  6. package/SEMA_BRIEF.micro.txt +6 -4
  7. package/SEMA_INDEX.json +917 -41
  8. package/dist/controleComercialSupabase.d.ts +326 -0
  9. package/dist/controleComercialSupabase.js +310 -0
  10. package/dist/controleComercialSupabase.js.map +1 -0
  11. package/dist/docs.js +48 -20
  12. package/dist/docs.js.map +1 -1
  13. package/dist/drift.d.ts +5 -3
  14. package/dist/drift.js +123 -14
  15. package/dist/drift.js.map +1 -1
  16. package/dist/index.js +1889 -38
  17. package/dist/index.js.map +1 -1
  18. package/dist/mcpRemoto.d.ts +32 -0
  19. package/dist/mcpRemoto.js +61 -0
  20. package/dist/mcpRemoto.js.map +1 -0
  21. package/dist/projeto.js +3 -1
  22. package/dist/projeto.js.map +1 -1
  23. package/docs/AGENT_STARTER.md +103 -97
  24. package/docs/cli.md +175 -106
  25. package/docs/como-ensinar-a-sema-para-ia.md +41 -35
  26. package/docs/deploy.md +231 -43
  27. package/docs/documentacao.md +61 -36
  28. package/docs/env.md +105 -56
  29. package/docs/extensao-vscode.md +12 -4
  30. package/docs/fluxo-pratico-ia-sema.md +182 -176
  31. package/docs/instalacao-e-primeiro-uso.md +52 -30
  32. package/docs/integracao-com-ia.md +108 -101
  33. package/docs/mcp.md +292 -51
  34. package/docs/pagamento-ponta-a-ponta.md +34 -28
  35. package/docs/persistencia-vendor-first.md +11 -5
  36. package/docs/prompt-base-ia-sema.md +13 -7
  37. package/docs/rollback.md +17 -15
  38. package/docs/sintaxe.md +180 -174
  39. package/exemplos/agendamento.sema +105 -105
  40. package/exemplos/assinatura.sema +133 -133
  41. package/exemplos/auditoria.sema +89 -89
  42. package/exemplos/autenticacao.sema +125 -125
  43. package/exemplos/author_obra_comum.sema +294 -0
  44. package/exemplos/author_tema_sensivel.sema +264 -0
  45. package/exemplos/automacao.sema +107 -107
  46. package/exemplos/cadastro_usuario.sema +54 -54
  47. package/exemplos/calculadora.sema +78 -78
  48. package/exemplos/crud_simples.sema +89 -89
  49. package/exemplos/estoque.sema +127 -127
  50. package/exemplos/exportacao.sema +94 -94
  51. package/exemplos/fila.sema +130 -130
  52. package/exemplos/integracao_externa.sema +94 -94
  53. package/exemplos/multi_tenant.sema +140 -140
  54. package/exemplos/notificacao.sema +149 -149
  55. package/exemplos/operacao_estrategia.sema +633 -633
  56. package/exemplos/pagamento.sema +434 -434
  57. package/exemplos/pagamento_dominio.sema +35 -35
  58. package/exemplos/pedido.sema +255 -255
  59. package/exemplos/permissao.sema +121 -121
  60. package/exemplos/persistencia_vendor_first.sema +86 -86
  61. package/exemplos/profile_game.sema +114 -0
  62. package/exemplos/profile_legal.sema +105 -0
  63. package/exemplos/profile_ops.sema +110 -0
  64. package/exemplos/profile_research.sema +104 -0
  65. package/exemplos/profile_software.sema +123 -0
  66. package/exemplos/profile_workflow_n8n.sema +99 -0
  67. package/exemplos/relatorio.sema +93 -93
  68. package/exemplos/replica_analitica_erp.sema +160 -160
  69. package/exemplos/testes_embutidos.sema +45 -45
  70. package/exemplos/tratamento_erro.sema +157 -157
  71. package/exemplos/upload_arquivo.sema +93 -93
  72. package/exemplos/webhook.sema +94 -94
  73. package/llms-full.txt +34 -34
  74. package/llms.txt +17 -17
  75. package/node_modules/@sema/gerador-css/dist/index.js +563 -563
  76. package/node_modules/@sema/gerador-css/package.json +1 -1
  77. package/node_modules/@sema/gerador-dart/package.json +1 -1
  78. package/node_modules/@sema/gerador-html/dist/index.js +90 -90
  79. package/node_modules/@sema/gerador-html/package.json +1 -1
  80. package/node_modules/@sema/gerador-javascript/dist/index.js +92 -92
  81. package/node_modules/@sema/gerador-javascript/package.json +1 -1
  82. package/node_modules/@sema/gerador-lua/dist/index.js +53 -53
  83. package/node_modules/@sema/gerador-lua/package.json +1 -1
  84. package/node_modules/@sema/gerador-python/dist/index.js +122 -96
  85. package/node_modules/@sema/gerador-python/dist/index.js.map +1 -1
  86. package/node_modules/@sema/gerador-python/package.json +1 -1
  87. package/node_modules/@sema/gerador-typescript/dist/index.js +153 -153
  88. package/node_modules/@sema/gerador-typescript/package.json +1 -1
  89. package/node_modules/@sema/nucleo/dist/formatador/index.js +12 -4
  90. package/node_modules/@sema/nucleo/dist/formatador/index.js.map +1 -1
  91. package/node_modules/@sema/nucleo/package.json +1 -1
  92. package/node_modules/@sema/padroes/package.json +1 -1
  93. package/package.json +11 -11
@@ -1,140 +1,140 @@
1
- module exemplos.multi.tenant {
2
- docs {
3
- resumo: "Isolamento de dados por tenant com provisionamento e controle de limites."
4
- }
5
-
6
- entity Tenant {
7
- fields {
8
- id: Id
9
- nome: Texto
10
- slug: Texto
11
- plano: Texto
12
- ativo: Booleano
13
- criado_em: Timestamp
14
- }
15
- }
16
-
17
- entity LimiteTenant {
18
- fields {
19
- tenant_id: Id
20
- recurso: Texto
21
- limite: Inteiro
22
- utilizado: Inteiro
23
- }
24
- }
25
-
26
- task provisionar_tenant {
27
- input {
28
- nome: Texto required
29
- slug: Texto required
30
- plano: Texto required
31
- email_admin: Email required
32
- }
33
- output {
34
- tenant: Tenant
35
- }
36
- rules {
37
- slug deve_ser unico em Tenant.slug
38
- slug deve_ser formato_slug_valido
39
- plano em [FREE, PRO, ENTERPRISE]
40
- email_admin deve_ser email_valido
41
- }
42
- effects {
43
- persistencia Tenant
44
- persistencia LimiteTenant
45
- persistencia Usuario
46
- evento tenant_provisionado criticidade = alta
47
- notificacao admin boas_vindas criticidade = media
48
- auditoria provisionamento_tenant criticidade = alta
49
- }
50
- guarantees {
51
- tenant existe
52
- tenant.ativo == verdadeiro
53
- }
54
- error {
55
- slug_duplicado: "Este slug ja esta em uso."
56
- plano_invalido: "Plano selecionado nao existe."
57
- email_invalido: "Email do administrador invalido."
58
- }
59
- tests {
60
- caso "provisiona tenant pro" {
61
- given { nome: "Empresa X" slug: "empresa-x" plano: "PRO" email_admin: "admin@x.com" }
62
- expect { sucesso: verdadeiro }
63
- }
64
- }
65
- }
66
-
67
- task verificar_limite {
68
- input {
69
- tenant_id: Id required
70
- recurso: Texto required
71
- quantidade: Inteiro required
72
- }
73
- output {
74
- permitido: Booleano
75
- utilizado: Inteiro
76
- limite: Inteiro
77
- }
78
- rules {
79
- tenant_id deve_ser valido
80
- recurso deve_ser preenchido
81
- quantidade > 0
82
- }
83
- effects {
84
- consulta LimiteTenant por tenant_id e recurso
85
- auditoria verificacao_limite
86
- }
87
- guarantees {
88
- permitido existe
89
- }
90
- error {
91
- tenant_nao_encontrado: "Tenant nao localizado."
92
- recurso_desconhecido: "Recurso nao rastreado para este tenant."
93
- }
94
- tests {
95
- caso "dentro do limite" {
96
- given { tenant_id: "ten_1" recurso: "usuarios" quantidade: 5 }
97
- expect { sucesso: verdadeiro }
98
- }
99
- }
100
- }
101
-
102
- task suspender_tenant {
103
- input {
104
- tenant_id: Id required
105
- motivo: Texto required
106
- }
107
- output {
108
- protocolo: Id
109
- tenant_ativo: Booleano
110
- }
111
- rules {
112
- tenant_id deve_ser valido
113
- motivo deve_ser preenchido
114
- }
115
- effects {
116
- persistencia Tenant
117
- evento tenant_suspenso criticidade = alta
118
- notificacao admin suspensao_tenant criticidade = alta
119
- auditoria suspensao_tenant criticidade = alta
120
- }
121
- state ciclo_tenant {
122
- transitions {
123
- ATIVO -> SUSPENSO
124
- }
125
- }
126
- guarantees {
127
- protocolo existe
128
- tenant_ativo == falso
129
- }
130
- error {
131
- tenant_ja_suspenso: "Tenant ja esta suspenso."
132
- }
133
- tests {
134
- caso "suspende tenant ativo" {
135
- given { tenant_id: "ten_1" motivo: "Inadimplencia" }
136
- expect { sucesso: verdadeiro }
137
- }
138
- }
139
- }
140
- }
1
+ module exemplos.multi.tenant {
2
+ docs {
3
+ resumo: "Isolamento de dados por tenant com provisionamento e controle de limites."
4
+ }
5
+
6
+ entity Tenant {
7
+ fields {
8
+ id: Id
9
+ nome: Texto
10
+ slug: Texto
11
+ plano: Texto
12
+ ativo: Booleano
13
+ criado_em: Timestamp
14
+ }
15
+ }
16
+
17
+ entity LimiteTenant {
18
+ fields {
19
+ tenant_id: Id
20
+ recurso: Texto
21
+ limite: Inteiro
22
+ utilizado: Inteiro
23
+ }
24
+ }
25
+
26
+ task provisionar_tenant {
27
+ input {
28
+ nome: Texto required
29
+ slug: Texto required
30
+ plano: Texto required
31
+ email_admin: Email required
32
+ }
33
+ output {
34
+ tenant: Tenant
35
+ }
36
+ rules {
37
+ slug deve_ser unico em Tenant.slug
38
+ slug deve_ser formato_slug_valido
39
+ plano em [FREE, PRO, ENTERPRISE]
40
+ email_admin deve_ser email_valido
41
+ }
42
+ effects {
43
+ persistencia Tenant
44
+ persistencia LimiteTenant
45
+ persistencia Usuario
46
+ evento tenant_provisionado criticidade = alta
47
+ notificacao admin boas_vindas criticidade = media
48
+ auditoria provisionamento_tenant criticidade = alta
49
+ }
50
+ guarantees {
51
+ tenant existe
52
+ tenant.ativo == verdadeiro
53
+ }
54
+ error {
55
+ slug_duplicado: "Este slug ja esta em uso."
56
+ plano_invalido: "Plano selecionado nao existe."
57
+ email_invalido: "Email do administrador invalido."
58
+ }
59
+ tests {
60
+ caso "provisiona tenant pro" {
61
+ given { nome: "Empresa X" slug: "empresa-x" plano: "PRO" email_admin: "admin@x.com" }
62
+ expect { sucesso: verdadeiro }
63
+ }
64
+ }
65
+ }
66
+
67
+ task verificar_limite {
68
+ input {
69
+ tenant_id: Id required
70
+ recurso: Texto required
71
+ quantidade: Inteiro required
72
+ }
73
+ output {
74
+ permitido: Booleano
75
+ utilizado: Inteiro
76
+ limite: Inteiro
77
+ }
78
+ rules {
79
+ tenant_id deve_ser valido
80
+ recurso deve_ser preenchido
81
+ quantidade > 0
82
+ }
83
+ effects {
84
+ consulta LimiteTenant por tenant_id e recurso
85
+ auditoria verificacao_limite
86
+ }
87
+ guarantees {
88
+ permitido existe
89
+ }
90
+ error {
91
+ tenant_nao_encontrado: "Tenant nao localizado."
92
+ recurso_desconhecido: "Recurso nao rastreado para este tenant."
93
+ }
94
+ tests {
95
+ caso "dentro do limite" {
96
+ given { tenant_id: "ten_1" recurso: "usuarios" quantidade: 5 }
97
+ expect { sucesso: verdadeiro }
98
+ }
99
+ }
100
+ }
101
+
102
+ task suspender_tenant {
103
+ input {
104
+ tenant_id: Id required
105
+ motivo: Texto required
106
+ }
107
+ output {
108
+ protocolo: Id
109
+ tenant_ativo: Booleano
110
+ }
111
+ rules {
112
+ tenant_id deve_ser valido
113
+ motivo deve_ser preenchido
114
+ }
115
+ effects {
116
+ persistencia Tenant
117
+ evento tenant_suspenso criticidade = alta
118
+ notificacao admin suspensao_tenant criticidade = alta
119
+ auditoria suspensao_tenant criticidade = alta
120
+ }
121
+ state ciclo_tenant {
122
+ transitions {
123
+ ATIVO -> SUSPENSO
124
+ }
125
+ }
126
+ guarantees {
127
+ protocolo existe
128
+ tenant_ativo == falso
129
+ }
130
+ error {
131
+ tenant_ja_suspenso: "Tenant ja esta suspenso."
132
+ }
133
+ tests {
134
+ caso "suspende tenant ativo" {
135
+ given { tenant_id: "ten_1" motivo: "Inadimplencia" }
136
+ expect { sucesso: verdadeiro }
137
+ }
138
+ }
139
+ }
140
+ }
@@ -1,149 +1,149 @@
1
- module exemplos.notificacao {
2
- docs {
3
- resumo: "Envio de notificacoes por email, SMS e push com rastreamento."
4
- }
5
-
6
- entity Notificacao {
7
- fields {
8
- id: Id
9
- destinatario_id: Id
10
- canal: Texto
11
- titulo: Texto
12
- corpo: Texto
13
- status: Texto
14
- enviada_em: Timestamp
15
- }
16
- }
17
-
18
- task enviar_email {
19
- input {
20
- destinatario: Email required
21
- titulo: Texto required
22
- corpo: Texto required
23
- template: Texto
24
- }
25
- output {
26
- notificacao_id: Id
27
- }
28
- rules {
29
- destinatario deve_ser email_valido
30
- titulo deve_ser preenchido
31
- corpo deve_ser preenchido
32
- }
33
- effects {
34
- consulta provedor_email criticidade = alta
35
- persistencia Notificacao
36
- auditoria email_enviado
37
- }
38
- guarantees {
39
- notificacao_id existe
40
- }
41
- error {
42
- destinatario_invalido: "Endereco de email invalido."
43
- provedor_indisponivel: "Servico de email temporariamente indisponivel."
44
- limite_excedido: "Limite de envios por hora atingido."
45
- }
46
- tests {
47
- caso "envia email valido" {
48
- given { destinatario: "user@app.com" titulo: "Bem vindo" corpo: "Ola!" }
49
- expect { sucesso: verdadeiro }
50
- }
51
- }
52
- }
53
-
54
- task enviar_push {
55
- input {
56
- device_token: Texto required
57
- titulo: Texto required
58
- corpo: Texto required
59
- dados: Objeto
60
- }
61
- output {
62
- notificacao_id: Id
63
- }
64
- rules {
65
- device_token deve_ser preenchido
66
- titulo deve_ser preenchido
67
- }
68
- effects {
69
- consulta provedor_push criticidade = media
70
- persistencia Notificacao
71
- auditoria push_enviado
72
- }
73
- guarantees {
74
- notificacao_id existe
75
- }
76
- error {
77
- token_invalido: "Token de dispositivo invalido ou expirado."
78
- provedor_indisponivel: "Servico push indisponivel."
79
- }
80
- tests {
81
- caso "envia push valido" {
82
- given { device_token: "tok_123" titulo: "Alerta" corpo: "Nova mensagem" }
83
- expect { sucesso: verdadeiro }
84
- }
85
- }
86
- }
87
-
88
- task registrar_falha_notificacao {
89
- input {
90
- canal: Texto required
91
- }
92
- output {
93
- protocolo_falha: Id
94
- }
95
- rules {
96
- canal deve_ser preenchido
97
- }
98
- effects {
99
- auditoria falha_notificacao
100
- persistencia Notificacao
101
- }
102
- guarantees {
103
- protocolo_falha existe
104
- }
105
- tests {
106
- caso "registra falha de canal" {
107
- given { canal: "email" }
108
- expect { sucesso: verdadeiro }
109
- }
110
- }
111
- }
112
-
113
- task confirmar_notificacao {
114
- input {
115
- destinatario_id: Id required
116
- }
117
- output {
118
- protocolo: Id
119
- }
120
- rules {
121
- destinatario_id deve_ser valido
122
- }
123
- effects {
124
- auditoria notificacao_concluida
125
- }
126
- guarantees {
127
- protocolo existe
128
- }
129
- tests {
130
- caso "confirma notificacao multicanal" {
131
- given { destinatario_id: "usr_1" }
132
- expect { sucesso: verdadeiro }
133
- }
134
- }
135
- }
136
-
137
- flow notificar_multicanal {
138
- destinatario_id: Id
139
- titulo: Texto
140
- corpo: Texto
141
- canal_email: Texto
142
- canal_push: Texto
143
- etapa email usa enviar_email com destinatario = destinatario_id, titulo = titulo, corpo = corpo em_sucesso concluir em_erro registrar_falha_email
144
- etapa push usa enviar_push com device_token = destinatario_id, titulo = titulo, corpo = corpo em_sucesso concluir em_erro registrar_falha_push
145
- etapa registrar_falha_email usa registrar_falha_notificacao com canal = canal_email depende_de email
146
- etapa registrar_falha_push usa registrar_falha_notificacao com canal = canal_push depende_de push
147
- etapa concluir usa confirmar_notificacao com destinatario_id = destinatario_id depende_de email
148
- }
149
- }
1
+ module exemplos.notificacao {
2
+ docs {
3
+ resumo: "Envio de notificacoes por email, SMS e push com rastreamento."
4
+ }
5
+
6
+ entity Notificacao {
7
+ fields {
8
+ id: Id
9
+ destinatario_id: Id
10
+ canal: Texto
11
+ titulo: Texto
12
+ corpo: Texto
13
+ status: Texto
14
+ enviada_em: Timestamp
15
+ }
16
+ }
17
+
18
+ task enviar_email {
19
+ input {
20
+ destinatario: Email required
21
+ titulo: Texto required
22
+ corpo: Texto required
23
+ template: Texto
24
+ }
25
+ output {
26
+ notificacao_id: Id
27
+ }
28
+ rules {
29
+ destinatario deve_ser email_valido
30
+ titulo deve_ser preenchido
31
+ corpo deve_ser preenchido
32
+ }
33
+ effects {
34
+ consulta provedor_email criticidade = alta
35
+ persistencia Notificacao
36
+ auditoria email_enviado
37
+ }
38
+ guarantees {
39
+ notificacao_id existe
40
+ }
41
+ error {
42
+ destinatario_invalido: "Endereco de email invalido."
43
+ provedor_indisponivel: "Servico de email temporariamente indisponivel."
44
+ limite_excedido: "Limite de envios por hora atingido."
45
+ }
46
+ tests {
47
+ caso "envia email valido" {
48
+ given { destinatario: "user@app.com" titulo: "Bem vindo" corpo: "Ola!" }
49
+ expect { sucesso: verdadeiro }
50
+ }
51
+ }
52
+ }
53
+
54
+ task enviar_push {
55
+ input {
56
+ device_token: Texto required
57
+ titulo: Texto required
58
+ corpo: Texto required
59
+ dados: Objeto
60
+ }
61
+ output {
62
+ notificacao_id: Id
63
+ }
64
+ rules {
65
+ device_token deve_ser preenchido
66
+ titulo deve_ser preenchido
67
+ }
68
+ effects {
69
+ consulta provedor_push criticidade = media
70
+ persistencia Notificacao
71
+ auditoria push_enviado
72
+ }
73
+ guarantees {
74
+ notificacao_id existe
75
+ }
76
+ error {
77
+ token_invalido: "Token de dispositivo invalido ou expirado."
78
+ provedor_indisponivel: "Servico push indisponivel."
79
+ }
80
+ tests {
81
+ caso "envia push valido" {
82
+ given { device_token: "tok_123" titulo: "Alerta" corpo: "Nova mensagem" }
83
+ expect { sucesso: verdadeiro }
84
+ }
85
+ }
86
+ }
87
+
88
+ task registrar_falha_notificacao {
89
+ input {
90
+ canal: Texto required
91
+ }
92
+ output {
93
+ protocolo_falha: Id
94
+ }
95
+ rules {
96
+ canal deve_ser preenchido
97
+ }
98
+ effects {
99
+ auditoria falha_notificacao
100
+ persistencia Notificacao
101
+ }
102
+ guarantees {
103
+ protocolo_falha existe
104
+ }
105
+ tests {
106
+ caso "registra falha de canal" {
107
+ given { canal: "email" }
108
+ expect { sucesso: verdadeiro }
109
+ }
110
+ }
111
+ }
112
+
113
+ task confirmar_notificacao {
114
+ input {
115
+ destinatario_id: Id required
116
+ }
117
+ output {
118
+ protocolo: Id
119
+ }
120
+ rules {
121
+ destinatario_id deve_ser valido
122
+ }
123
+ effects {
124
+ auditoria notificacao_concluida
125
+ }
126
+ guarantees {
127
+ protocolo existe
128
+ }
129
+ tests {
130
+ caso "confirma notificacao multicanal" {
131
+ given { destinatario_id: "usr_1" }
132
+ expect { sucesso: verdadeiro }
133
+ }
134
+ }
135
+ }
136
+
137
+ flow notificar_multicanal {
138
+ destinatario_id: Id
139
+ titulo: Texto
140
+ corpo: Texto
141
+ canal_email: Texto
142
+ canal_push: Texto
143
+ etapa email usa enviar_email com destinatario = destinatario_id, titulo = titulo, corpo = corpo em_sucesso concluir em_erro registrar_falha_email
144
+ etapa push usa enviar_push com device_token = destinatario_id, titulo = titulo, corpo = corpo em_sucesso concluir em_erro registrar_falha_push
145
+ etapa registrar_falha_email usa registrar_falha_notificacao com canal = canal_email depende_de email
146
+ etapa registrar_falha_push usa registrar_falha_notificacao com canal = canal_push depende_de push
147
+ etapa concluir usa confirmar_notificacao com destinatario_id = destinatario_id depende_de email
148
+ }
149
+ }