@semacode/cli 2.3.0 → 3.0.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.
Files changed (267) hide show
  1. package/LICENSE +39 -39
  2. package/README.md +112 -41
  3. package/dist/agentContextPack.js +14 -10
  4. package/dist/agentEntryPoints.d.ts +5 -0
  5. package/dist/agentEntryPoints.js +102 -91
  6. package/dist/angular-consumer-standalone.d.ts +3 -1
  7. package/dist/angular-consumer-standalone.js +12 -8
  8. package/dist/bin.d.ts +6 -0
  9. package/dist/bin.js +130 -0
  10. package/dist/cliArgs.js +4 -4
  11. package/dist/cliControlError.d.ts +12 -0
  12. package/dist/cliControlError.js +47 -0
  13. package/dist/cliGrammar.d.ts +11 -0
  14. package/dist/cliGrammar.js +551 -0
  15. package/dist/cliHelp.d.ts +13 -0
  16. package/dist/cliHelp.js +19 -0
  17. package/dist/cliHelpTexto.d.ts +3 -0
  18. package/dist/cliHelpTexto.js +168 -0
  19. package/dist/cliRuntime.d.ts +2 -0
  20. package/dist/cliRuntime.js +31 -0
  21. package/dist/comandos.js +9 -22
  22. package/dist/contexto.js +5 -5
  23. package/dist/dev/index.d.ts +1 -0
  24. package/dist/dev/index.js +51 -9
  25. package/dist/discovery/catalog.js +3 -3
  26. package/dist/distribuicao/filesystemGlobal.d.ts +63 -0
  27. package/dist/distribuicao/filesystemGlobal.js +701 -0
  28. package/dist/distribuicao/index.d.ts +7 -0
  29. package/dist/distribuicao/index.js +227 -0
  30. package/dist/distribuicao/launcherGlobal.d.ts +53 -0
  31. package/dist/distribuicao/launcherGlobal.js +643 -0
  32. package/dist/distribuicao/launcherWindows.d.ts +28 -0
  33. package/dist/distribuicao/launcherWindows.js +326 -0
  34. package/dist/distribuicao/lockContextGlobal.d.ts +10 -0
  35. package/dist/distribuicao/lockContextGlobal.js +17 -0
  36. package/dist/distribuicao/lockGlobal.d.ts +6 -0
  37. package/dist/distribuicao/lockGlobal.js +520 -0
  38. package/dist/distribuicao/skillGlobal.d.ts +48 -0
  39. package/dist/distribuicao/skillGlobal.js +652 -0
  40. package/dist/distribuicao/skillIntentPolicy.d.ts +21 -0
  41. package/dist/distribuicao/skillIntentPolicy.js +115 -0
  42. package/dist/distribuicao/tipos.d.ts +50 -0
  43. package/dist/distribuicao/tipos.js +10 -0
  44. package/dist/distribuicao/versaoSemantica.d.ts +3 -0
  45. package/dist/distribuicao/versaoSemantica.js +62 -0
  46. package/dist/drift.part01.d.ts +34 -2
  47. package/dist/drift.part01.js +3 -0
  48. package/dist/drift.part04.d.ts +12 -2
  49. package/dist/drift.part04.js +89 -15
  50. package/dist/drift.part05.d.ts +2 -1
  51. package/dist/drift.part05.js +9 -6
  52. package/dist/drift.part06.d.ts +2 -1
  53. package/dist/drift.part06.js +115 -24
  54. package/dist/drift.part07.d.ts +11 -10
  55. package/dist/drift.part07.js +261 -255
  56. package/dist/drift.part08.d.ts +2 -1
  57. package/dist/drift.part08.js +35 -25
  58. package/dist/drift.part11.js +279 -32
  59. package/dist/drift.part12.d.ts +1 -1
  60. package/dist/drift.part12.js +196 -11
  61. package/dist/drift.part13.d.ts +18 -2
  62. package/dist/drift.part13.js +654 -76
  63. package/dist/drift.part14.js +21 -7
  64. package/dist/driftCacheCas.d.ts +43 -0
  65. package/dist/driftCacheCas.js +351 -0
  66. package/dist/driftCacheFilesystem.d.ts +64 -0
  67. package/dist/driftCacheFilesystem.js +313 -0
  68. package/dist/driftCacheModes.d.ts +38 -0
  69. package/dist/driftCacheModes.js +147 -0
  70. package/dist/driftCacheStore.d.ts +80 -0
  71. package/dist/driftCacheStore.js +603 -0
  72. package/dist/driftCatalogo.d.ts +65 -0
  73. package/dist/driftCatalogo.js +516 -0
  74. package/dist/driftEscopo.d.ts +21 -0
  75. package/dist/driftEscopo.js +647 -0
  76. package/dist/driftEscopoReferencias.d.ts +8 -0
  77. package/dist/driftEscopoReferencias.js +612 -0
  78. package/dist/driftOrcamento.d.ts +6 -0
  79. package/dist/driftOrcamento.js +20 -3
  80. package/dist/geracaoCore.js +4 -6
  81. package/dist/iaPrompts.d.ts +3 -3
  82. package/dist/iaPrompts.js +13 -14
  83. package/dist/index.d.ts +4 -1
  84. package/dist/index.js +6 -25
  85. package/dist/index.part01.d.ts +21 -14
  86. package/dist/index.part01.js +20 -165
  87. package/dist/index.part02.js +57 -43
  88. package/dist/index.part03.d.ts +23 -1
  89. package/dist/index.part03.js +83 -8
  90. package/dist/index.part04.d.ts +10 -2
  91. package/dist/index.part04.js +48 -14
  92. package/dist/index.part05.d.ts +1 -1
  93. package/dist/index.part05.js +109 -30
  94. package/dist/index.part06.js +34 -16
  95. package/dist/index.part07.js +31 -27
  96. package/dist/index.part08.d.ts +1 -1
  97. package/dist/index.part08.js +23 -28
  98. package/dist/init/templates.part01.js +393 -393
  99. package/dist/init/templates.part02.js +189 -189
  100. package/dist/initCommand.js +5 -1
  101. package/dist/initTemplatesBackend.js +73 -73
  102. package/dist/initTemplatesBase.js +7 -5
  103. package/dist/initTemplatesFlutter.js +137 -137
  104. package/dist/initTemplatesRuntime.js +350 -350
  105. package/dist/initTemplatesWeb.js +309 -309
  106. package/dist/pipelineConteudo/command.d.ts +1 -0
  107. package/dist/pipelineConteudo/command.js +4 -32
  108. package/dist/pipelineConteudo/help.d.ts +2 -0
  109. package/dist/pipelineConteudo/help.js +33 -0
  110. package/dist/profileAuthorCommand.js +3 -7
  111. package/dist/profileCommand.js +3 -7
  112. package/dist/projeto.d.ts +1 -1
  113. package/dist/projetoCarregar.d.ts +2 -2
  114. package/dist/projetoCarregar.js +69 -28
  115. package/dist/projetoCatalogo.d.ts +8 -0
  116. package/dist/projetoCatalogo.js +164 -0
  117. package/dist/projetoOrigens.d.ts +2 -0
  118. package/dist/projetoOrigens.js +65 -9
  119. package/dist/projetoTipos.d.ts +15 -5
  120. package/dist/resultadoCli.d.ts +20 -0
  121. package/dist/resultadoCli.js +57 -0
  122. package/dist/saidaCli.d.ts +35 -0
  123. package/dist/saidaCli.js +118 -0
  124. package/dist/sistemasInterativos/acceptanceEvidence.d.ts +22 -0
  125. package/dist/sistemasInterativos/acceptanceEvidence.js +345 -0
  126. package/dist/sistemasInterativos/engineObservation.d.ts +12 -0
  127. package/dist/sistemasInterativos/engineObservation.js +438 -0
  128. package/dist/sistemasInterativos/jobOrchestration.d.ts +2 -0
  129. package/dist/sistemasInterativos/jobOrchestration.js +204 -0
  130. package/dist/sistemasInterativos/operationPrimitives.d.ts +21 -0
  131. package/dist/sistemasInterativos/operationPrimitives.js +194 -0
  132. package/dist/sistemasInterativos/operations.d.ts +4 -39
  133. package/dist/sistemasInterativos/operations.js +5 -1164
  134. package/dist/skillCommand.d.ts +5 -0
  135. package/dist/skillCommand.js +88 -0
  136. package/dist/sync/index.js +35 -35
  137. package/docs/README.md +11 -7
  138. package/docs/ai-integration.md +18 -11
  139. package/docs/ai-onboarding.md +81 -62
  140. package/docs/ai-workflow.md +10 -4
  141. package/docs/auth.md +26 -26
  142. package/docs/cli.md +197 -79
  143. package/docs/commands.md +30 -6
  144. package/docs/database.md +15 -15
  145. package/docs/deploy.md +54 -41
  146. package/docs/documentation.md +11 -10
  147. package/docs/drift-cache.md +108 -0
  148. package/docs/env.md +16 -16
  149. package/docs/frontend.md +41 -41
  150. package/docs/getting-started.md +82 -57
  151. package/docs/i18n.md +15 -15
  152. package/docs/repositories.md +60 -43
  153. package/docs/rollback.md +38 -31
  154. package/docs/security.md +54 -32
  155. package/docs/sistemas-interativos.md +27 -27
  156. package/docs/support.md +8 -8
  157. package/docs/testing.md +123 -17
  158. package/docs/vocabulary.md +29 -29
  159. package/exemplos/agendamento.sema +1 -1
  160. package/exemplos/assinatura.sema +1 -1
  161. package/exemplos/auditoria.sema +1 -1
  162. package/exemplos/autenticacao.sema +1 -1
  163. package/exemplos/author_obra_comum.sema +1 -1
  164. package/exemplos/author_tema_sensivel.sema +1 -1
  165. package/exemplos/automacao.sema +1 -1
  166. package/exemplos/cadastro_usuario.sema +1 -1
  167. package/exemplos/calculadora.sema +1 -1
  168. package/exemplos/crud_simples.sema +1 -1
  169. package/exemplos/estoque.sema +1 -1
  170. package/exemplos/exportacao.sema +1 -1
  171. package/exemplos/fila.sema +1 -1
  172. package/exemplos/integracao_externa.sema +1 -1
  173. package/exemplos/multi_tenant.sema +1 -1
  174. package/exemplos/notificacao.sema +1 -1
  175. package/exemplos/operacao_estrategia.sema +132 -132
  176. package/exemplos/operacao_estrategia_discovery.sema +220 -220
  177. package/exemplos/operacao_estrategia_fluxo.sema +114 -114
  178. package/exemplos/operacao_estrategia_gates.sema +106 -106
  179. package/exemplos/operacao_estrategia_quarentena.sema +133 -133
  180. package/exemplos/operacao_estrategia_rollout.sema +124 -124
  181. package/exemplos/pagamento.sema +1 -1
  182. package/exemplos/pagamento_dominio.sema +1 -1
  183. package/exemplos/pedido.sema +1 -1
  184. package/exemplos/permissao.sema +1 -1
  185. package/exemplos/persistencia_vendor_first.sema +1 -1
  186. package/exemplos/profile_conversas.sema +165 -165
  187. package/exemplos/profile_game.sema +1 -1
  188. package/exemplos/profile_legal.sema +1 -1
  189. package/exemplos/profile_ops.sema +1 -1
  190. package/exemplos/profile_research.sema +1 -1
  191. package/exemplos/profile_software.sema +1 -1
  192. package/exemplos/profile_workflow_n8n.sema +1 -1
  193. package/exemplos/relatorio.sema +1 -1
  194. package/exemplos/replica_analitica_erp.sema +1 -1
  195. package/exemplos/testes_embutidos.sema +1 -1
  196. package/exemplos/tratamento_erro.sema +1 -1
  197. package/exemplos/upload_arquivo.sema +1 -1
  198. package/exemplos/webhook.sema +1 -1
  199. package/node_modules/@sema/gerador-cpp/dist/index.js +176 -176
  200. package/node_modules/@sema/gerador-css/dist/index.part01.js +10 -10
  201. package/node_modules/@sema/gerador-css/dist/index.part02.js +460 -460
  202. package/node_modules/@sema/gerador-dotnet/dist/index.js +169 -169
  203. package/node_modules/@sema/gerador-html/dist/index.js +17 -17
  204. package/node_modules/@sema/gerador-python/dist/index.part02.js +3 -3
  205. package/node_modules/@sema/gerador-typescript/dist/index.part02.js +11 -11
  206. package/node_modules/@sema/nucleo/dist/diagnosticos/melhorador.js +42 -42
  207. package/node_modules/@sema/nucleo/dist/semantico/analisador.d.ts +1 -0
  208. package/node_modules/@sema/nucleo/dist/semantico/analisador.js +1 -0
  209. package/package.json +7 -2
  210. package/scripts/postinstall.mjs +148 -0
  211. package/skills/sema/SKILL.md +199 -0
  212. package/skills/sema/agents/openai.yaml +4 -0
  213. package/node_modules/@sema/gerador-cpp/dist/index.js.map +0 -1
  214. package/node_modules/@sema/gerador-css/dist/index.js.map +0 -1
  215. package/node_modules/@sema/gerador-css/dist/index.part01.js.map +0 -1
  216. package/node_modules/@sema/gerador-css/dist/index.part02.js.map +0 -1
  217. package/node_modules/@sema/gerador-dart/dist/index.js.map +0 -1
  218. package/node_modules/@sema/gerador-dotnet/dist/index.js.map +0 -1
  219. package/node_modules/@sema/gerador-html/dist/index.js.map +0 -1
  220. package/node_modules/@sema/gerador-javascript/dist/index.js.map +0 -1
  221. package/node_modules/@sema/gerador-lua/dist/index.js.map +0 -1
  222. package/node_modules/@sema/gerador-php/dist/index.js.map +0 -1
  223. package/node_modules/@sema/gerador-python/dist/index.js.map +0 -1
  224. package/node_modules/@sema/gerador-python/dist/index.part01.js.map +0 -1
  225. package/node_modules/@sema/gerador-python/dist/index.part02.js.map +0 -1
  226. package/node_modules/@sema/gerador-typescript/dist/index.js.map +0 -1
  227. package/node_modules/@sema/gerador-typescript/dist/index.part01.js.map +0 -1
  228. package/node_modules/@sema/gerador-typescript/dist/index.part02.js.map +0 -1
  229. package/node_modules/@sema/gerador-typescript/dist/index.part03.js.map +0 -1
  230. package/node_modules/@sema/nucleo/dist/ast/tipos.js.map +0 -1
  231. package/node_modules/@sema/nucleo/dist/diagnosticos/index.js.map +0 -1
  232. package/node_modules/@sema/nucleo/dist/diagnosticos/melhorador.js.map +0 -1
  233. package/node_modules/@sema/nucleo/dist/diagnosticos/snippets.js.map +0 -1
  234. package/node_modules/@sema/nucleo/dist/formatador/index.js.map +0 -1
  235. package/node_modules/@sema/nucleo/dist/formatador/index.part01.js.map +0 -1
  236. package/node_modules/@sema/nucleo/dist/formatador/index.part02.js.map +0 -1
  237. package/node_modules/@sema/nucleo/dist/index.js.map +0 -1
  238. package/node_modules/@sema/nucleo/dist/ir/conversor.js.map +0 -1
  239. package/node_modules/@sema/nucleo/dist/ir/conversor.part01.js.map +0 -1
  240. package/node_modules/@sema/nucleo/dist/ir/conversor.part02.js.map +0 -1
  241. package/node_modules/@sema/nucleo/dist/ir/conversor.part03.js.map +0 -1
  242. package/node_modules/@sema/nucleo/dist/ir/modelos.js.map +0 -1
  243. package/node_modules/@sema/nucleo/dist/lexer/lexer.js.map +0 -1
  244. package/node_modules/@sema/nucleo/dist/lexer/tokens.js.map +0 -1
  245. package/node_modules/@sema/nucleo/dist/parser/parser.declaracoes.js.map +0 -1
  246. package/node_modules/@sema/nucleo/dist/parser/parser.js.map +0 -1
  247. package/node_modules/@sema/nucleo/dist/parser/parser.modulo.js.map +0 -1
  248. package/node_modules/@sema/nucleo/dist/parser/parser.part01.js.map +0 -1
  249. package/node_modules/@sema/nucleo/dist/parser/parser.part02.js.map +0 -1
  250. package/node_modules/@sema/nucleo/dist/parser/parser.part03.js.map +0 -1
  251. package/node_modules/@sema/nucleo/dist/persistencia/contratos.js.map +0 -1
  252. package/node_modules/@sema/nucleo/dist/semantico/analisador.js.map +0 -1
  253. package/node_modules/@sema/nucleo/dist/semantico/analisador.part01.js.map +0 -1
  254. package/node_modules/@sema/nucleo/dist/semantico/analisador.part02.js.map +0 -1
  255. package/node_modules/@sema/nucleo/dist/semantico/analisador.part03.js.map +0 -1
  256. package/node_modules/@sema/nucleo/dist/semantico/analisador.part04.js.map +0 -1
  257. package/node_modules/@sema/nucleo/dist/semantico/analisador.part05.js.map +0 -1
  258. package/node_modules/@sema/nucleo/dist/semantico/analisador.part06.js.map +0 -1
  259. package/node_modules/@sema/nucleo/dist/semantico/analisador.part07.js.map +0 -1
  260. package/node_modules/@sema/nucleo/dist/semantico/analisador.part08.js.map +0 -1
  261. package/node_modules/@sema/nucleo/dist/semantico/estruturas.js.map +0 -1
  262. package/node_modules/@sema/nucleo/dist/semantico/estruturas.part01.js.map +0 -1
  263. package/node_modules/@sema/nucleo/dist/semantico/estruturas.part02.js.map +0 -1
  264. package/node_modules/@sema/nucleo/dist/semantico/orcamentoSemantico.js.map +0 -1
  265. package/node_modules/@sema/nucleo/dist/semantico/seguranca.js.map +0 -1
  266. package/node_modules/@sema/nucleo/dist/util/arquivos.js.map +0 -1
  267. package/node_modules/@sema/padroes/dist/index.js.map +0 -1
@@ -8,122 +8,122 @@ export function arquivosInitTemplatesWeb(template, arquivosBase) {
8
8
  arquivos = [
9
9
  {
10
10
  caminhoRelativo: "sema.config.json",
11
- conteudo: `{
12
- "origens": ["./contratos"],
13
- "saida": "./generated",
14
- "alvos": ["typescript"],
15
- "alvoPadrao": "typescript",
16
- "estruturaSaida": "modulos",
17
- "framework": "base",
18
- "modoEstrito": true,
19
- "diretoriosCodigo": ["./src"],
20
- "fontesLegado": ["nextjs-consumer", "typescript"],
21
- "diretoriosSaidaPorAlvo": {
22
- "typescript": "./generated/typescript"
23
- },
24
- "convencoesGeracaoPorProjeto": "base"
25
- }
11
+ conteudo: `{
12
+ "origens": ["./contratos"],
13
+ "saida": "./generated",
14
+ "alvos": ["typescript"],
15
+ "alvoPadrao": "typescript",
16
+ "estruturaSaida": "modulos",
17
+ "framework": "base",
18
+ "modoEstrito": true,
19
+ "diretoriosCodigo": ["./src"],
20
+ "fontesLegado": ["nextjs-consumer", "typescript"],
21
+ "diretoriosSaidaPorAlvo": {
22
+ "typescript": "./generated/typescript"
23
+ },
24
+ "convencoesGeracaoPorProjeto": "base"
25
+ }
26
26
  `,
27
27
  },
28
28
  {
29
29
  caminhoRelativo: "contratos/showroom_consumer.sema",
30
- conteudo: `module showroom.consumer {
31
- task fetch_showroom_ranking {
32
- input {
33
- }
34
- output {
35
- ranking: Json
36
- }
37
- impl {
38
- ts: src.lib.sema_consumer_bridge.semaFetchShowroomRanking
39
- }
40
- vinculos {
41
- arquivo: "src/lib/sema_consumer_bridge.ts"
42
- simbolo: src.lib.sema_consumer_bridge.semaFetchShowroomRanking
43
- superficie: "/ranking"
44
- arquivo: "src/app/ranking/page.tsx"
45
- arquivo: "src/app/ranking/loading.tsx"
46
- arquivo: "src/app/ranking/error.tsx"
47
- }
48
- guarantees {
49
- ranking existe
50
- }
51
- }
52
- }
30
+ conteudo: `module showroom.consumer {
31
+ task fetch_showroom_ranking {
32
+ input {
33
+ }
34
+ output {
35
+ ranking: Json
36
+ }
37
+ impl {
38
+ ts: src.lib.sema_consumer_bridge.semaFetchShowroomRanking
39
+ }
40
+ vinculos {
41
+ arquivo: "src/lib/sema_consumer_bridge.ts"
42
+ simbolo: src.lib.sema_consumer_bridge.semaFetchShowroomRanking
43
+ superficie: "/ranking"
44
+ arquivo: "src/app/ranking/page.tsx"
45
+ arquivo: "src/app/ranking/loading.tsx"
46
+ arquivo: "src/app/ranking/error.tsx"
47
+ }
48
+ guarantees {
49
+ ranking existe
50
+ }
51
+ }
52
+ }
53
53
  `,
54
54
  },
55
55
  {
56
56
  caminhoRelativo: "src/lib/sema_consumer_bridge.ts",
57
- conteudo: `export async function semaFetchShowroomRanking() {
58
- return {
59
- ranking: [
60
- { clube: "Tigres do Norte", pontos: 33 },
61
- { clube: "Porto Azul", pontos: 31 },
62
- { clube: "Galo de Ouro", pontos: 28 },
63
- ],
64
- };
65
- }
57
+ conteudo: `export async function semaFetchShowroomRanking() {
58
+ return {
59
+ ranking: [
60
+ { clube: "Tigres do Norte", pontos: 33 },
61
+ { clube: "Porto Azul", pontos: 31 },
62
+ { clube: "Galo de Ouro", pontos: 28 },
63
+ ],
64
+ };
65
+ }
66
66
  `,
67
67
  },
68
68
  {
69
69
  caminhoRelativo: "src/app/ranking/page.tsx",
70
- conteudo: `import { semaFetchShowroomRanking } from "../../lib/sema_consumer_bridge";
71
-
72
- export default async function RankingPage() {
73
- const { ranking } = await semaFetchShowroomRanking();
74
-
75
- return (
76
- <main>
77
- <h1>Ranking showroom</h1>
78
- <ul>
79
- {ranking.map((item) => (
80
- <li key={item.clube}>
81
- {item.clube} - {item.pontos} pts
82
- </li>
83
- ))}
84
- </ul>
85
- </main>
86
- );
87
- }
70
+ conteudo: `import { semaFetchShowroomRanking } from "../../lib/sema_consumer_bridge";
71
+
72
+ export default async function RankingPage() {
73
+ const { ranking } = await semaFetchShowroomRanking();
74
+
75
+ return (
76
+ <main>
77
+ <h1>Ranking showroom</h1>
78
+ <ul>
79
+ {ranking.map((item) => (
80
+ <li key={item.clube}>
81
+ {item.clube} - {item.pontos} pts
82
+ </li>
83
+ ))}
84
+ </ul>
85
+ </main>
86
+ );
87
+ }
88
88
  `,
89
89
  },
90
90
  {
91
91
  caminhoRelativo: "src/app/ranking/loading.tsx",
92
- conteudo: `export default function Loading() {
93
- return <p>Carregando ranking...</p>;
94
- }
92
+ conteudo: `export default function Loading() {
93
+ return <p>Carregando ranking...</p>;
94
+ }
95
95
  `,
96
96
  },
97
97
  {
98
98
  caminhoRelativo: "src/app/ranking/error.tsx",
99
- conteudo: `"use client";
100
-
101
- export default function Error({
102
- error,
103
- reset,
104
- }: {
105
- error: Error;
106
- reset: () => void;
107
- }) {
108
- return (
109
- <main>
110
- <h1>Falha ao carregar ranking</h1>
111
- <p>{error.message}</p>
112
- <button type="button" onClick={reset}>Tentar novamente</button>
113
- </main>
114
- );
115
- }
99
+ conteudo: `"use client";
100
+
101
+ export default function Error({
102
+ error,
103
+ reset,
104
+ }: {
105
+ error: Error;
106
+ reset: () => void;
107
+ }) {
108
+ return (
109
+ <main>
110
+ <h1>Falha ao carregar ranking</h1>
111
+ <p>{error.message}</p>
112
+ <button type="button" onClick={reset}>Tentar novamente</button>
113
+ </main>
114
+ );
115
+ }
116
116
  `,
117
117
  },
118
118
  {
119
119
  caminhoRelativo: "README.md",
120
- conteudo: `# Starter Next.js Consumer + Sema
121
-
122
- - Contratos em \`contratos/\`
123
- - Bridge consumer canonico em \`src/lib/sema_consumer_bridge.ts\`
124
- - Superficies App Router em \`src/app/\`
125
- - O slice oficial desta fase e \`consumer bridge + App Router surfaces\`
126
- - \`drift\` valida \`impl\`, \`vinculos\`, bridge e superficies, sem prometer visual drift
120
+ conteudo: `# Starter Next.js Consumer + Sema
121
+
122
+ - Contratos em \`contratos/\`
123
+ - Bridge consumer canonico em \`src/lib/sema_consumer_bridge.ts\`
124
+ - Superficies App Router em \`src/app/\`
125
+ - O slice oficial desta fase e \`consumer bridge + App Router surfaces\`
126
+ - \`drift\` valida \`impl\`, \`vinculos\`, bridge e superficies, sem prometer visual drift
127
127
  `,
128
128
  },
129
129
  ];
@@ -132,135 +132,135 @@ export function arquivosInitTemplatesWeb(template, arquivosBase) {
132
132
  arquivos = [
133
133
  {
134
134
  caminhoRelativo: "sema.config.json",
135
- conteudo: `{
136
- "origens": ["./contratos"],
137
- "saida": "./generated",
138
- "alvos": ["typescript"],
139
- "alvoPadrao": "typescript",
140
- "estruturaSaida": "modulos",
141
- "framework": "base",
142
- "modoEstrito": true,
143
- "diretoriosCodigo": ["./src"],
144
- "fontesLegado": ["react-vite-consumer", "typescript"],
145
- "diretoriosSaidaPorAlvo": {
146
- "typescript": "./generated/typescript"
147
- },
148
- "convencoesGeracaoPorProjeto": "base"
149
- }
135
+ conteudo: `{
136
+ "origens": ["./contratos"],
137
+ "saida": "./generated",
138
+ "alvos": ["typescript"],
139
+ "alvoPadrao": "typescript",
140
+ "estruturaSaida": "modulos",
141
+ "framework": "base",
142
+ "modoEstrito": true,
143
+ "diretoriosCodigo": ["./src"],
144
+ "fontesLegado": ["react-vite-consumer", "typescript"],
145
+ "diretoriosSaidaPorAlvo": {
146
+ "typescript": "./generated/typescript"
147
+ },
148
+ "convencoesGeracaoPorProjeto": "base"
149
+ }
150
150
  `,
151
151
  },
152
152
  {
153
153
  caminhoRelativo: "contratos/showroom_consumer.sema",
154
- conteudo: `module showroom.consumer {
155
- task fetch_showroom_ranking {
156
- input {
157
- }
158
- output {
159
- ranking: Json
160
- }
161
- impl {
162
- ts: src.lib.sema_consumer_bridge.semaFetchShowroomRanking
163
- }
164
- vinculos {
165
- arquivo: "src/lib/sema_consumer_bridge.ts"
166
- simbolo: src.lib.sema_consumer_bridge.semaFetchShowroomRanking
167
- superficie: "/ranking"
168
- arquivo: "src/router.tsx"
169
- arquivo: "src/pages/ranking.tsx"
170
- }
171
- guarantees {
172
- ranking existe
173
- }
174
- }
175
- }
154
+ conteudo: `module showroom.consumer {
155
+ task fetch_showroom_ranking {
156
+ input {
157
+ }
158
+ output {
159
+ ranking: Json
160
+ }
161
+ impl {
162
+ ts: src.lib.sema_consumer_bridge.semaFetchShowroomRanking
163
+ }
164
+ vinculos {
165
+ arquivo: "src/lib/sema_consumer_bridge.ts"
166
+ simbolo: src.lib.sema_consumer_bridge.semaFetchShowroomRanking
167
+ superficie: "/ranking"
168
+ arquivo: "src/router.tsx"
169
+ arquivo: "src/pages/ranking.tsx"
170
+ }
171
+ guarantees {
172
+ ranking existe
173
+ }
174
+ }
175
+ }
176
176
  `,
177
177
  },
178
178
  {
179
179
  caminhoRelativo: "src/lib/sema_consumer_bridge.ts",
180
- conteudo: `export async function semaFetchShowroomRanking() {
181
- return {
182
- ranking: [
183
- { clube: "Tigres do Norte", pontos: 33 },
184
- { clube: "Porto Azul", pontos: 31 },
185
- { clube: "Galo de Ouro", pontos: 28 },
186
- ],
187
- };
188
- }
180
+ conteudo: `export async function semaFetchShowroomRanking() {
181
+ return {
182
+ ranking: [
183
+ { clube: "Tigres do Norte", pontos: 33 },
184
+ { clube: "Porto Azul", pontos: 31 },
185
+ { clube: "Galo de Ouro", pontos: 28 },
186
+ ],
187
+ };
188
+ }
189
189
  `,
190
190
  },
191
191
  {
192
192
  caminhoRelativo: "src/pages/ranking.tsx",
193
- conteudo: `import { useEffect, useState } from "react";
194
- import { semaFetchShowroomRanking } from "../lib/sema_consumer_bridge";
195
-
196
- export function RankingPage() {
197
- const [ranking, setRanking] = useState<Array<{ clube: string; pontos: number }>>([]);
198
-
199
- useEffect(() => {
200
- void semaFetchShowroomRanking().then((payload) => setRanking(payload.ranking ?? []));
201
- }, []);
202
-
203
- return (
204
- <main>
205
- <h1>Ranking showroom</h1>
206
- <ul>
207
- {ranking.map((item) => (
208
- <li key={item.clube}>
209
- {item.clube} - {item.pontos} pts
210
- </li>
211
- ))}
212
- </ul>
213
- </main>
214
- );
215
- }
193
+ conteudo: `import { useEffect, useState } from "react";
194
+ import { semaFetchShowroomRanking } from "../lib/sema_consumer_bridge";
195
+
196
+ export function RankingPage() {
197
+ const [ranking, setRanking] = useState<Array<{ clube: string; pontos: number }>>([]);
198
+
199
+ useEffect(() => {
200
+ void semaFetchShowroomRanking().then((payload) => setRanking(payload.ranking ?? []));
201
+ }, []);
202
+
203
+ return (
204
+ <main>
205
+ <h1>Ranking showroom</h1>
206
+ <ul>
207
+ {ranking.map((item) => (
208
+ <li key={item.clube}>
209
+ {item.clube} - {item.pontos} pts
210
+ </li>
211
+ ))}
212
+ </ul>
213
+ </main>
214
+ );
215
+ }
216
216
  `,
217
217
  },
218
218
  {
219
219
  caminhoRelativo: "src/router.tsx",
220
- conteudo: `import { createBrowserRouter } from "react-router-dom";
221
- import { RankingPage } from "./pages/ranking";
222
-
223
- export const appRouter = createBrowserRouter([
224
- {
225
- path: "/ranking",
226
- Component: RankingPage,
227
- },
228
- ]);
220
+ conteudo: `import { createBrowserRouter } from "react-router-dom";
221
+ import { RankingPage } from "./pages/ranking";
222
+
223
+ export const appRouter = createBrowserRouter([
224
+ {
225
+ path: "/ranking",
226
+ Component: RankingPage,
227
+ },
228
+ ]);
229
229
  `,
230
230
  },
231
231
  {
232
232
  caminhoRelativo: "src/App.tsx",
233
- conteudo: `import { RouterProvider } from "react-router-dom";
234
- import { appRouter } from "./router";
235
-
236
- export default function App() {
237
- return <RouterProvider router={appRouter} />;
238
- }
233
+ conteudo: `import { RouterProvider } from "react-router-dom";
234
+ import { appRouter } from "./router";
235
+
236
+ export default function App() {
237
+ return <RouterProvider router={appRouter} />;
238
+ }
239
239
  `,
240
240
  },
241
241
  {
242
242
  caminhoRelativo: "src/main.tsx",
243
- conteudo: `import React from "react";
244
- import ReactDOM from "react-dom/client";
245
- import App from "./App";
246
-
247
- ReactDOM.createRoot(document.getElementById("root") as HTMLElement).render(
248
- <React.StrictMode>
249
- <App />
250
- </React.StrictMode>,
251
- );
243
+ conteudo: `import React from "react";
244
+ import ReactDOM from "react-dom/client";
245
+ import App from "./App";
246
+
247
+ ReactDOM.createRoot(document.getElementById("root") as HTMLElement).render(
248
+ <React.StrictMode>
249
+ <App />
250
+ </React.StrictMode>,
251
+ );
252
252
  `,
253
253
  },
254
254
  {
255
255
  caminhoRelativo: "README.md",
256
- conteudo: `# Starter React Vite Consumer + Sema
257
-
258
- - Contratos em \`contratos/\`
259
- - Bridge consumer canonico em \`src/lib/sema_consumer_bridge.ts\`
260
- - Rotas explicitas em \`src/router.tsx\`
261
- - Superficies consumer em \`src/pages/\`
262
- - O slice oficial desta fase e \`consumer bridge + react-router surfaces\`
263
- - \`drift\` valida \`impl\`, \`vinculos\`, bridge e superficies, sem prometer visual drift
256
+ conteudo: `# Starter React Vite Consumer + Sema
257
+
258
+ - Contratos em \`contratos/\`
259
+ - Bridge consumer canonico em \`src/lib/sema_consumer_bridge.ts\`
260
+ - Rotas explicitas em \`src/router.tsx\`
261
+ - Superficies consumer em \`src/pages/\`
262
+ - O slice oficial desta fase e \`consumer bridge + react-router surfaces\`
263
+ - \`drift\` valida \`impl\`, \`vinculos\`, bridge e superficies, sem prometer visual drift
264
264
  `,
265
265
  },
266
266
  ];
@@ -269,154 +269,154 @@ export function arquivosInitTemplatesWeb(template, arquivosBase) {
269
269
  arquivos = [
270
270
  {
271
271
  caminhoRelativo: "sema.config.json",
272
- conteudo: `{
273
- "origens": ["./contratos"],
274
- "saida": "./generated",
275
- "alvos": ["typescript"],
276
- "alvoPadrao": "typescript",
277
- "estruturaSaida": "modulos",
278
- "framework": "base",
279
- "modoEstrito": true,
280
- "diretoriosCodigo": ["./src"],
281
- "fontesLegado": ["angular-consumer", "typescript"],
282
- "diretoriosSaidaPorAlvo": {
283
- "typescript": "./generated/typescript"
284
- },
285
- "convencoesGeracaoPorProjeto": "base"
286
- }
272
+ conteudo: `{
273
+ "origens": ["./contratos"],
274
+ "saida": "./generated",
275
+ "alvos": ["typescript"],
276
+ "alvoPadrao": "typescript",
277
+ "estruturaSaida": "modulos",
278
+ "framework": "base",
279
+ "modoEstrito": true,
280
+ "diretoriosCodigo": ["./src"],
281
+ "fontesLegado": ["angular-consumer", "typescript"],
282
+ "diretoriosSaidaPorAlvo": {
283
+ "typescript": "./generated/typescript"
284
+ },
285
+ "convencoesGeracaoPorProjeto": "base"
286
+ }
287
287
  `,
288
288
  },
289
289
  {
290
290
  caminhoRelativo: "contratos/showroom_consumer.sema",
291
- conteudo: `module showroom.consumer {
292
- task fetch_showroom_ranking {
293
- input {
294
- }
295
- output {
296
- ranking: Json
297
- }
298
- impl {
299
- ts: src.app.sema_consumer_bridge.semaFetchShowroomRanking
300
- }
301
- vinculos {
302
- arquivo: "src/app/sema_consumer_bridge.ts"
303
- simbolo: src.app.sema_consumer_bridge.semaFetchShowroomRanking
304
- superficie: "/ranking"
305
- arquivo: "src/app/app.routes.ts"
306
- arquivo: "src/app/features/ranking/ranking.routes.ts"
307
- arquivo: "src/app/features/ranking/ranking-page.component.ts"
308
- }
309
- guarantees {
310
- ranking existe
311
- }
312
- }
313
- }
291
+ conteudo: `module showroom.consumer {
292
+ task fetch_showroom_ranking {
293
+ input {
294
+ }
295
+ output {
296
+ ranking: Json
297
+ }
298
+ impl {
299
+ ts: src.app.sema_consumer_bridge.semaFetchShowroomRanking
300
+ }
301
+ vinculos {
302
+ arquivo: "src/app/sema_consumer_bridge.ts"
303
+ simbolo: src.app.sema_consumer_bridge.semaFetchShowroomRanking
304
+ superficie: "/ranking"
305
+ arquivo: "src/app/app.routes.ts"
306
+ arquivo: "src/app/features/ranking/ranking.routes.ts"
307
+ arquivo: "src/app/features/ranking/ranking-page.component.ts"
308
+ }
309
+ guarantees {
310
+ ranking existe
311
+ }
312
+ }
313
+ }
314
314
  `,
315
315
  },
316
316
  {
317
317
  caminhoRelativo: "src/app/sema_consumer_bridge.ts",
318
- conteudo: `export async function semaFetchShowroomRanking() {
319
- return {
320
- ranking: [
321
- { clube: "Tigres do Norte", pontos: 33 },
322
- { clube: "Porto Azul", pontos: 31 },
323
- { clube: "Galo de Ouro", pontos: 28 },
324
- ],
325
- };
326
- }
318
+ conteudo: `export async function semaFetchShowroomRanking() {
319
+ return {
320
+ ranking: [
321
+ { clube: "Tigres do Norte", pontos: 33 },
322
+ { clube: "Porto Azul", pontos: 31 },
323
+ { clube: "Galo de Ouro", pontos: 28 },
324
+ ],
325
+ };
326
+ }
327
327
  `,
328
328
  },
329
329
  {
330
330
  caminhoRelativo: "src/app/app.routes.ts",
331
- conteudo: `import { Routes } from "@angular/router";
332
-
333
- export const routes: Routes = [
334
- {
335
- path: "ranking",
336
- loadChildren: () => import("./features/ranking/ranking.routes").then((m) => m.RANKING_ROUTES),
337
- },
338
- ];
331
+ conteudo: `import { Routes } from "@angular/router";
332
+
333
+ export const routes: Routes = [
334
+ {
335
+ path: "ranking",
336
+ loadChildren: () => import("./features/ranking/ranking.routes").then((m) => m.RANKING_ROUTES),
337
+ },
338
+ ];
339
339
  `,
340
340
  },
341
341
  {
342
342
  caminhoRelativo: "src/app/features/ranking/ranking.routes.ts",
343
- conteudo: `import { Routes } from "@angular/router";
344
-
345
- export const RANKING_ROUTES: Routes = [
346
- {
347
- path: "",
348
- loadComponent: () => import("./ranking-page.component").then((m) => m.RankingPageComponent),
349
- },
350
- ];
343
+ conteudo: `import { Routes } from "@angular/router";
344
+
345
+ export const RANKING_ROUTES: Routes = [
346
+ {
347
+ path: "",
348
+ loadComponent: () => import("./ranking-page.component").then((m) => m.RankingPageComponent),
349
+ },
350
+ ];
351
351
  `,
352
352
  },
353
353
  {
354
354
  caminhoRelativo: "src/app/features/ranking/ranking-page.component.ts",
355
- conteudo: `import { Component, OnInit } from "@angular/core";
356
- import { CommonModule } from "@angular/common";
357
- import { semaFetchShowroomRanking } from "../../sema_consumer_bridge";
358
-
359
- @Component({
360
- selector: "app-ranking-page",
361
- standalone: true,
362
- imports: [CommonModule],
363
- template: \`
364
- <main>
365
- <h1>Ranking showroom</h1>
366
- <ul>
367
- <li *ngFor="let item of ranking">
368
- {{ item.clube }} - {{ item.pontos }} pts
369
- </li>
370
- </ul>
371
- </main>
372
- \`,
373
- })
374
- export class RankingPageComponent implements OnInit {
375
- ranking: Array<{ clube: string; pontos: number }> = [];
376
-
377
- async ngOnInit() {
378
- const payload = await semaFetchShowroomRanking();
379
- this.ranking = payload.ranking ?? [];
380
- }
381
- }
355
+ conteudo: `import { Component, OnInit } from "@angular/core";
356
+ import { CommonModule } from "@angular/common";
357
+ import { semaFetchShowroomRanking } from "../../sema_consumer_bridge";
358
+
359
+ @Component({
360
+ selector: "app-ranking-page",
361
+ standalone: true,
362
+ imports: [CommonModule],
363
+ template: \`
364
+ <main>
365
+ <h1>Ranking showroom</h1>
366
+ <ul>
367
+ <li *ngFor="let item of ranking">
368
+ {{ item.clube }} - {{ item.pontos }} pts
369
+ </li>
370
+ </ul>
371
+ </main>
372
+ \`,
373
+ })
374
+ export class RankingPageComponent implements OnInit {
375
+ ranking: Array<{ clube: string; pontos: number }> = [];
376
+
377
+ async ngOnInit() {
378
+ const payload = await semaFetchShowroomRanking();
379
+ this.ranking = payload.ranking ?? [];
380
+ }
381
+ }
382
382
  `,
383
383
  },
384
384
  {
385
385
  caminhoRelativo: "src/app/app.component.ts",
386
- conteudo: `import { Component } from "@angular/core";
387
- import { RouterOutlet } from "@angular/router";
388
-
389
- @Component({
390
- selector: "app-root",
391
- standalone: true,
392
- imports: [RouterOutlet],
393
- template: "<router-outlet />",
394
- })
395
- export class AppComponent {}
386
+ conteudo: `import { Component } from "@angular/core";
387
+ import { RouterOutlet } from "@angular/router";
388
+
389
+ @Component({
390
+ selector: "app-root",
391
+ standalone: true,
392
+ imports: [RouterOutlet],
393
+ template: "<router-outlet />",
394
+ })
395
+ export class AppComponent {}
396
396
  `,
397
397
  },
398
398
  {
399
399
  caminhoRelativo: "src/main.ts",
400
- conteudo: `import { bootstrapApplication } from "@angular/platform-browser";
401
- import { provideRouter } from "@angular/router";
402
- import { AppComponent } from "./app/app.component";
403
- import { routes } from "./app/app.routes";
404
-
405
- void bootstrapApplication(AppComponent, {
406
- providers: [provideRouter(routes)],
407
- });
400
+ conteudo: `import { bootstrapApplication } from "@angular/platform-browser";
401
+ import { provideRouter } from "@angular/router";
402
+ import { AppComponent } from "./app/app.component";
403
+ import { routes } from "./app/app.routes";
404
+
405
+ void bootstrapApplication(AppComponent, {
406
+ providers: [provideRouter(routes)],
407
+ });
408
408
  `,
409
409
  },
410
410
  {
411
411
  caminhoRelativo: "README.md",
412
- conteudo: `# Starter Angular Consumer + Sema
413
-
414
- - Contratos em \`contratos/\`
415
- - Bridge consumer canonico em \`src/app/sema_consumer_bridge.ts\`
416
- - Rotas lazy em \`src/app/app.routes.ts\`
417
- - Feature folders em \`src/app/features/\`
418
- - O slice oficial desta fase e \`consumer bridge + route config surfaces\`
419
- - \`drift\` valida \`impl\`, \`vinculos\`, bridge e superficies, sem prometer visual drift
412
+ conteudo: `# Starter Angular Consumer + Sema
413
+
414
+ - Contratos em \`contratos/\`
415
+ - Bridge consumer canonico em \`src/app/sema_consumer_bridge.ts\`
416
+ - Rotas lazy em \`src/app/app.routes.ts\`
417
+ - Feature folders em \`src/app/features/\`
418
+ - O slice oficial desta fase e \`consumer bridge + route config surfaces\`
419
+ - \`drift\` valida \`impl\`, \`vinculos\`, bridge e superficies, sem prometer visual drift
420
420
  `,
421
421
  },
422
422
  ];