@semacode/cli 1.5.30 → 1.5.32

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 (176) hide show
  1. package/AGENTS.md +294 -0
  2. package/AGENT_CONTEXT_PACK.json +164 -0
  3. package/LICENSE +22 -0
  4. package/README.md +85 -144
  5. package/SEMA_BRIEF.curto.txt +11 -0
  6. package/SEMA_BRIEF.md +616 -0
  7. package/SEMA_BRIEF.micro.txt +9 -0
  8. package/SEMA_INDEX.json +9393 -0
  9. package/dist/billing/index.d.ts +46 -0
  10. package/dist/billing/index.js +143 -0
  11. package/dist/billing/index.js.map +1 -0
  12. package/dist/comandos.js +33 -0
  13. package/dist/comandos.js.map +1 -1
  14. package/dist/controleComercialSupabase.d.ts +7 -0
  15. package/dist/controleComercialSupabase.js +6 -0
  16. package/dist/controleComercialSupabase.js.map +1 -0
  17. package/dist/controleComercialSupabaseAdmin.d.ts +7 -0
  18. package/dist/controleComercialSupabaseAdmin.js +138 -0
  19. package/dist/controleComercialSupabaseAdmin.js.map +1 -0
  20. package/dist/controleComercialSupabaseCadastro.d.ts +4 -0
  21. package/dist/controleComercialSupabaseCadastro.js +85 -0
  22. package/dist/controleComercialSupabaseCadastro.js.map +1 -0
  23. package/dist/controleComercialSupabaseConstantes.d.ts +28 -0
  24. package/dist/controleComercialSupabaseConstantes.js +44 -0
  25. package/dist/controleComercialSupabaseConstantes.js.map +1 -0
  26. package/dist/controleComercialSupabaseConsumo.d.ts +2 -0
  27. package/dist/controleComercialSupabaseConsumo.js +77 -0
  28. package/dist/controleComercialSupabaseConsumo.js.map +1 -0
  29. package/dist/controleComercialSupabaseConta.d.ts +11 -0
  30. package/dist/controleComercialSupabaseConta.js +157 -0
  31. package/dist/controleComercialSupabaseConta.js.map +1 -0
  32. package/dist/controleComercialSupabaseProfiles.d.ts +4 -0
  33. package/dist/controleComercialSupabaseProfiles.js +55 -0
  34. package/dist/controleComercialSupabaseProfiles.js.map +1 -0
  35. package/dist/controleComercialSupabaseTipos.d.ts +3 -0
  36. package/dist/controleComercialSupabaseTipos.js +2 -0
  37. package/dist/controleComercialSupabaseTipos.js.map +1 -0
  38. package/dist/controleComercialSupabaseTiposAdmin.d.ts +152 -0
  39. package/dist/controleComercialSupabaseTiposAdmin.js +2 -0
  40. package/dist/controleComercialSupabaseTiposAdmin.js.map +1 -0
  41. package/dist/controleComercialSupabaseTiposBase.d.ts +169 -0
  42. package/dist/controleComercialSupabaseTiposBase.js +2 -0
  43. package/dist/controleComercialSupabaseTiposBase.js.map +1 -0
  44. package/dist/controleComercialSupabaseTiposConta.d.ts +220 -0
  45. package/dist/controleComercialSupabaseTiposConta.js +2 -0
  46. package/dist/controleComercialSupabaseTiposConta.js.map +1 -0
  47. package/dist/dev/index.d.ts +18 -0
  48. package/dist/dev/index.js +143 -0
  49. package/dist/dev/index.js.map +1 -0
  50. package/dist/index.js +222 -46
  51. package/dist/index.js.map +1 -1
  52. package/dist/init/index.d.ts +23 -0
  53. package/dist/init/index.js +112 -0
  54. package/dist/init/index.js.map +1 -0
  55. package/dist/init/templates.d.ts +11 -0
  56. package/dist/init/templates.js +660 -0
  57. package/dist/init/templates.js.map +1 -0
  58. package/dist/runnerValidacaoRemota.d.ts +9 -0
  59. package/dist/runnerValidacaoRemota.js +9 -0
  60. package/dist/runnerValidacaoRemota.js.map +1 -0
  61. package/dist/runnerValidacaoRemotaBateria.d.ts +10 -0
  62. package/dist/runnerValidacaoRemotaBateria.js +115 -0
  63. package/dist/runnerValidacaoRemotaBateria.js.map +1 -0
  64. package/dist/runnerValidacaoRemotaCli.d.ts +4 -0
  65. package/dist/runnerValidacaoRemotaCli.js +86 -0
  66. package/dist/runnerValidacaoRemotaCli.js.map +1 -0
  67. package/dist/runnerValidacaoRemotaComandos.d.ts +7 -0
  68. package/dist/runnerValidacaoRemotaComandos.js +123 -0
  69. package/dist/runnerValidacaoRemotaComandos.js.map +1 -0
  70. package/dist/runnerValidacaoRemotaEscopo.d.ts +4 -0
  71. package/dist/runnerValidacaoRemotaEscopo.js +79 -0
  72. package/dist/runnerValidacaoRemotaEscopo.js.map +1 -0
  73. package/dist/runnerValidacaoRemotaExecucao.d.ts +2 -0
  74. package/dist/runnerValidacaoRemotaExecucao.js +102 -0
  75. package/dist/runnerValidacaoRemotaExecucao.js.map +1 -0
  76. package/dist/runnerValidacaoRemotaRelatorio.d.ts +3 -0
  77. package/dist/runnerValidacaoRemotaRelatorio.js +93 -0
  78. package/dist/runnerValidacaoRemotaRelatorio.js.map +1 -0
  79. package/dist/runnerValidacaoRemotaServidor.d.ts +3 -0
  80. package/dist/runnerValidacaoRemotaServidor.js +157 -0
  81. package/dist/runnerValidacaoRemotaServidor.js.map +1 -0
  82. package/dist/runnerValidacaoRemotaSnapshot.d.ts +10 -0
  83. package/dist/runnerValidacaoRemotaSnapshot.js +217 -0
  84. package/dist/runnerValidacaoRemotaSnapshot.js.map +1 -0
  85. package/dist/runnerValidacaoRemotaTipos.d.ts +158 -0
  86. package/dist/runnerValidacaoRemotaTipos.js +35 -0
  87. package/dist/runnerValidacaoRemotaTipos.js.map +1 -0
  88. package/dist/runnerValidacaoRemotaUtil.d.ts +3 -0
  89. package/dist/runnerValidacaoRemotaUtil.js +18 -0
  90. package/dist/runnerValidacaoRemotaUtil.js.map +1 -0
  91. package/dist/runnerValidacaoRemotaWorkspace.d.ts +2 -0
  92. package/dist/runnerValidacaoRemotaWorkspace.js +110 -0
  93. package/dist/runnerValidacaoRemotaWorkspace.js.map +1 -0
  94. package/dist/sync/index.d.ts +24 -0
  95. package/dist/sync/index.js +174 -0
  96. package/dist/sync/index.js.map +1 -0
  97. package/docs/AGENT_STARTER.md +109 -0
  98. package/docs/api.md +82 -0
  99. package/docs/cli.md +93 -0
  100. package/docs/como-ensinar-a-sema-para-ia.md +30 -0
  101. package/docs/deploy.md +45 -0
  102. package/docs/documentacao.md +88 -0
  103. package/docs/env.md +115 -0
  104. package/docs/extensao-vscode.md +42 -0
  105. package/docs/fluxo-pratico-ia-sema.md +187 -0
  106. package/docs/instalacao-e-primeiro-uso.md +48 -0
  107. package/docs/integracao-com-ia.md +24 -0
  108. package/docs/mcp.md +48 -0
  109. package/docs/pagamento-ponta-a-ponta.md +171 -0
  110. package/docs/persistencia-vendor-first.md +151 -0
  111. package/docs/prompt-base-ia-sema.md +111 -0
  112. package/docs/repositories.md +69 -0
  113. package/docs/rollback.md +24 -0
  114. package/docs/seguranca.md +126 -0
  115. package/docs/sintaxe.md +218 -0
  116. package/exemplos/profile_conversas.sema +165 -0
  117. package/llms-full.txt +35 -0
  118. package/llms.txt +18 -0
  119. package/node_modules/@sema/gerador-css/package.json +7 -14
  120. package/node_modules/@sema/gerador-dart/package.json +7 -14
  121. package/node_modules/@sema/gerador-html/package.json +7 -14
  122. package/node_modules/@sema/gerador-javascript/package.json +7 -14
  123. package/node_modules/@sema/gerador-lua/package.json +7 -14
  124. package/node_modules/@sema/gerador-python/package.json +7 -14
  125. package/node_modules/@sema/gerador-typescript/package.json +7 -14
  126. package/node_modules/@sema/nucleo/dist/diagnosticos/melhorador.d.ts +22 -0
  127. package/node_modules/@sema/nucleo/dist/diagnosticos/melhorador.js +97 -0
  128. package/node_modules/@sema/nucleo/dist/diagnosticos/melhorador.js.map +1 -0
  129. package/node_modules/@sema/nucleo/dist/index.d.ts +1 -0
  130. package/node_modules/@sema/nucleo/dist/index.js +1 -0
  131. package/node_modules/@sema/nucleo/dist/index.js.map +1 -1
  132. package/node_modules/@sema/nucleo/package.json +7 -10
  133. package/node_modules/@sema/padroes/package.json +7 -10
  134. package/package.json +75 -74
  135. package/exemplos/.prepack-generated +0 -1
  136. package/node_modules/@sema/gerador-css/src/index.ts +0 -605
  137. package/node_modules/@sema/gerador-css/tsconfig.json +0 -13
  138. package/node_modules/@sema/gerador-css/tsconfig.tsbuildinfo +0 -1
  139. package/node_modules/@sema/gerador-dart/src/index.ts +0 -52
  140. package/node_modules/@sema/gerador-dart/tsconfig.json +0 -13
  141. package/node_modules/@sema/gerador-dart/tsconfig.tsbuildinfo +0 -1
  142. package/node_modules/@sema/gerador-html/src/index.ts +0 -185
  143. package/node_modules/@sema/gerador-html/tsconfig.json +0 -13
  144. package/node_modules/@sema/gerador-html/tsconfig.tsbuildinfo +0 -1
  145. package/node_modules/@sema/gerador-javascript/src/index.ts +0 -461
  146. package/node_modules/@sema/gerador-javascript/tsconfig.json +0 -13
  147. package/node_modules/@sema/gerador-javascript/tsconfig.tsbuildinfo +0 -1
  148. package/node_modules/@sema/gerador-lua/src/index.ts +0 -359
  149. package/node_modules/@sema/gerador-lua/tsconfig.json +0 -13
  150. package/node_modules/@sema/gerador-lua/tsconfig.tsbuildinfo +0 -1
  151. package/node_modules/@sema/gerador-python/src/index.ts +0 -850
  152. package/node_modules/@sema/gerador-python/tsconfig.json +0 -13
  153. package/node_modules/@sema/gerador-python/tsconfig.tsbuildinfo +0 -1
  154. package/node_modules/@sema/gerador-typescript/src/index.ts +0 -876
  155. package/node_modules/@sema/gerador-typescript/tsconfig.json +0 -13
  156. package/node_modules/@sema/gerador-typescript/tsconfig.tsbuildinfo +0 -1
  157. package/node_modules/@sema/nucleo/src/ast/tipos.ts +0 -207
  158. package/node_modules/@sema/nucleo/src/diagnosticos/index.ts +0 -43
  159. package/node_modules/@sema/nucleo/src/formatador/index.ts +0 -530
  160. package/node_modules/@sema/nucleo/src/index.ts +0 -183
  161. package/node_modules/@sema/nucleo/src/ir/conversor.ts +0 -1037
  162. package/node_modules/@sema/nucleo/src/ir/modelos.ts +0 -403
  163. package/node_modules/@sema/nucleo/src/lexer/lexer.ts +0 -166
  164. package/node_modules/@sema/nucleo/src/lexer/tokens.ts +0 -79
  165. package/node_modules/@sema/nucleo/src/parser/gramatica.ebnf +0 -41
  166. package/node_modules/@sema/nucleo/src/parser/parser.ts +0 -936
  167. package/node_modules/@sema/nucleo/src/persistencia/contratos.ts +0 -379
  168. package/node_modules/@sema/nucleo/src/semantico/analisador.ts +0 -3126
  169. package/node_modules/@sema/nucleo/src/semantico/estruturas.ts +0 -665
  170. package/node_modules/@sema/nucleo/src/semantico/seguranca.ts +0 -362
  171. package/node_modules/@sema/nucleo/src/util/arquivos.ts +0 -28
  172. package/node_modules/@sema/nucleo/tsconfig.json +0 -9
  173. package/node_modules/@sema/nucleo/tsconfig.tsbuildinfo +0 -1
  174. package/node_modules/@sema/padroes/src/index.ts +0 -382
  175. package/node_modules/@sema/padroes/tsconfig.json +0 -9
  176. package/node_modules/@sema/padroes/tsconfig.tsbuildinfo +0 -1
@@ -0,0 +1,158 @@
1
+ import type { Server } from "node:http";
2
+ export type ModoVerificacaoRemota = "CONTRATOS_APENAS" | "CODIGO_SELECIONADO" | "CODIGO_COMPLETO";
3
+ export type StatusJobVerificacao = "APROVADO" | "BLOQUEADO" | "FALHOU";
4
+ export type AmbienteRunner = "VPS" | "WORKER_CONTAINER" | "WORKTREE_ISOLADO";
5
+ export interface ArquivoSnapshotRemoto {
6
+ caminho: string;
7
+ conteudo: string;
8
+ tipo?: string;
9
+ hash?: string;
10
+ }
11
+ export interface ComandoProjetoRemoto {
12
+ comando: string;
13
+ args?: string[];
14
+ }
15
+ export interface SnapshotProjetoRemoto {
16
+ origem: string;
17
+ tenant: string;
18
+ modo: ModoVerificacaoRemota;
19
+ contratos: ArquivoSnapshotRemoto[];
20
+ codigo: ArquivoSnapshotRemoto[];
21
+ documentacao: ArquivoSnapshotRemoto[];
22
+ indice: string[];
23
+ segredos_detectados: string[];
24
+ politica_segredos: string;
25
+ contrato_alvo?: string;
26
+ comandos_projeto: ComandoProjetoRemoto[];
27
+ }
28
+ export interface WorkspaceRunner {
29
+ id: string;
30
+ ambiente: AmbienteRunner;
31
+ caminho: string;
32
+ tenant: string;
33
+ isolamento: string;
34
+ expira_em: string;
35
+ }
36
+ export interface ArtefatoVerificacaoRemota {
37
+ nome: string;
38
+ tipo: string;
39
+ caminho: string;
40
+ hash: string;
41
+ publico: boolean;
42
+ }
43
+ export interface ComandoExecutadoRunner {
44
+ nome: string;
45
+ args: string[];
46
+ codigoSaida: number;
47
+ stdoutArquivo: string;
48
+ stderrArquivo: string;
49
+ duracaoMs: number;
50
+ sucesso: boolean;
51
+ }
52
+ export type EscopoDriftRunner = "projeto" | "nao_executado";
53
+ export interface EscopoEvidenciaRemota {
54
+ origem_snapshot: string;
55
+ tenant: string;
56
+ workspace_id: string;
57
+ workspace_caminho: string;
58
+ modo_verificacao: ModoVerificacaoRemota;
59
+ contrato_alvo: string | null;
60
+ entrada_sema: string;
61
+ escopo_drift: EscopoDriftRunner;
62
+ fontes_conclusao: string[];
63
+ codigo_verificado: boolean;
64
+ testes_projeto_executados: boolean;
65
+ comando_drift: string;
66
+ conclusao_limpa_autorizada: boolean;
67
+ ressalva_escopo: string;
68
+ }
69
+ export interface RelatorioVerificacaoRemota {
70
+ job_id: string;
71
+ modo: ModoVerificacaoRemota;
72
+ status: StatusJobVerificacao;
73
+ score_semantico: number;
74
+ diagnosticos: string[];
75
+ avisos_alta_severidade: string[];
76
+ comandos_executados: ComandoExecutadoRunner[];
77
+ artefatos: ArtefatoVerificacaoRemota[];
78
+ escopo_evidencia: EscopoEvidenciaRemota;
79
+ resumo_ia: string;
80
+ }
81
+ export interface ResultadoRecebimentoSnapshot {
82
+ snapshot: SnapshotProjetoRemoto;
83
+ modo_verificacao: ModoVerificacaoRemota;
84
+ pronto_para_workspace: boolean;
85
+ bloqueios: string[];
86
+ }
87
+ export interface ResultadoProvisionamentoWorkspace {
88
+ workspace: WorkspaceRunner;
89
+ isolamento_ok: boolean;
90
+ limpeza_agendada: boolean;
91
+ bloqueios: string[];
92
+ }
93
+ export interface ResultadoPublicacaoRelatorio {
94
+ resumo_ia: string;
95
+ url_relatorio: string;
96
+ artefatos_publicados: ArtefatoVerificacaoRemota[];
97
+ redacao_ok: boolean;
98
+ bloqueios: string[];
99
+ }
100
+ export interface ResultadoFechamentoJob {
101
+ concluido: boolean;
102
+ pode_liberar: boolean;
103
+ decisao_agente: "continuar" | "continuar_com_ressalva" | "parar" | "chamar_humano";
104
+ proximas_acoes: string[];
105
+ bloqueios: string[];
106
+ }
107
+ export interface ResultadoRunnerValidacaoRemota {
108
+ comando: "runner validar-remoto";
109
+ sucesso: boolean;
110
+ status: StatusJobVerificacao;
111
+ podeLiberar: boolean;
112
+ jobId: string;
113
+ modo: ModoVerificacaoRemota;
114
+ snapshot: {
115
+ origem: string;
116
+ tenant: string;
117
+ contratos: number;
118
+ codigo: number;
119
+ documentacao: number;
120
+ };
121
+ workspace: WorkspaceRunner | null;
122
+ workspaceRemovido: boolean;
123
+ relatorio: RelatorioVerificacaoRemota;
124
+ publicacao: ResultadoPublicacaoRelatorio;
125
+ fechamento: ResultadoFechamentoJob;
126
+ relatorioArquivo: string;
127
+ }
128
+ export interface OpcoesRunnerValidacaoRemota {
129
+ saida: string;
130
+ cwd: string;
131
+ manterWorkspace: boolean;
132
+ modoOverride?: ModoVerificacaoRemota;
133
+ contratoAlvo?: string;
134
+ timeoutMs?: number;
135
+ }
136
+ export interface OpcoesServidorRunnerValidacaoRemota {
137
+ cwd: string;
138
+ host: string;
139
+ porta: number;
140
+ saida: string;
141
+ token?: string;
142
+ }
143
+ export interface ServidorRunnerValidacaoRemota {
144
+ server: Server;
145
+ host: string;
146
+ porta: number;
147
+ url: string;
148
+ authObrigatoria: boolean;
149
+ }
150
+ export interface EntradaSnapshotRemoto {
151
+ [key: string]: unknown;
152
+ }
153
+ export declare const MODOS_VALIDOS: Set<ModoVerificacaoRemota>;
154
+ export declare const AMBIENTE_PADRAO: AmbienteRunner;
155
+ export declare const TIMEOUT_COMANDO_PADRAO_MS = 120000;
156
+ export declare const PREFIXO_WORKSPACE = "sema-runner-";
157
+ export declare const DIRETORIOS_PROIBIDOS: Set<string>;
158
+ export declare const COMANDOS_PROJETO_PERMITIDOS: Set<string>;
@@ -0,0 +1,35 @@
1
+ export const MODOS_VALIDOS = new Set(["CONTRATOS_APENAS", "CODIGO_SELECIONADO", "CODIGO_COMPLETO"]);
2
+ export const AMBIENTE_PADRAO = "WORKTREE_ISOLADO";
3
+ export const TIMEOUT_COMANDO_PADRAO_MS = 120_000;
4
+ export const PREFIXO_WORKSPACE = "sema-runner-";
5
+ export const DIRETORIOS_PROIBIDOS = new Set([
6
+ ".git",
7
+ ".hg",
8
+ ".svn",
9
+ ".next",
10
+ ".nuxt",
11
+ ".turbo",
12
+ ".cache",
13
+ ".pytest_cache",
14
+ ".venv",
15
+ "build",
16
+ "coverage",
17
+ "dist",
18
+ "node_modules",
19
+ "vendor",
20
+ ]);
21
+ export const COMANDOS_PROJETO_PERMITIDOS = new Set([
22
+ "npm",
23
+ "pnpm",
24
+ "yarn",
25
+ "node",
26
+ "python",
27
+ "py",
28
+ "pytest",
29
+ "go",
30
+ "cargo",
31
+ "dotnet",
32
+ "mvn",
33
+ "gradle",
34
+ ]);
35
+ //# sourceMappingURL=runnerValidacaoRemotaTipos.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runnerValidacaoRemotaTipos.js","sourceRoot":"","sources":["../src/runnerValidacaoRemotaTipos.ts"],"names":[],"mappings":"AA4KA,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,GAAG,CAAwB,CAAC,kBAAkB,EAAE,oBAAoB,EAAE,iBAAiB,CAAC,CAAC,CAAC;AAC3H,MAAM,CAAC,MAAM,eAAe,GAAmB,kBAAkB,CAAC;AAClE,MAAM,CAAC,MAAM,yBAAyB,GAAG,OAAO,CAAC;AACjD,MAAM,CAAC,MAAM,iBAAiB,GAAG,cAAc,CAAC;AAEhD,MAAM,CAAC,MAAM,oBAAoB,GAAG,IAAI,GAAG,CAAC;IAC1C,MAAM;IACN,KAAK;IACL,MAAM;IACN,OAAO;IACP,OAAO;IACP,QAAQ;IACR,QAAQ;IACR,eAAe;IACf,OAAO;IACP,OAAO;IACP,UAAU;IACV,MAAM;IACN,cAAc;IACd,QAAQ;CACT,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,2BAA2B,GAAG,IAAI,GAAG,CAAC;IACjD,KAAK;IACL,MAAM;IACN,MAAM;IACN,MAAM;IACN,QAAQ;IACR,IAAI;IACJ,QAAQ;IACR,IAAI;IACJ,OAAO;IACP,QAAQ;IACR,KAAK;IACL,QAAQ;CACT,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ export declare function hashTexto(texto: string): string;
2
+ export declare function hashArquivo(caminho: string): Promise<string>;
3
+ export declare function verificarArquivoExiste(caminho: string): Promise<boolean>;
@@ -0,0 +1,18 @@
1
+ import { createHash } from "node:crypto";
2
+ import { readFile, stat } from "node:fs/promises";
3
+ export function hashTexto(texto) {
4
+ return createHash("sha256").update(texto).digest("hex");
5
+ }
6
+ export async function hashArquivo(caminho) {
7
+ return hashTexto(await readFile(caminho, "utf8"));
8
+ }
9
+ export async function verificarArquivoExiste(caminho) {
10
+ try {
11
+ await stat(caminho);
12
+ return true;
13
+ }
14
+ catch {
15
+ return false;
16
+ }
17
+ }
18
+ //# sourceMappingURL=runnerValidacaoRemotaUtil.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runnerValidacaoRemotaUtil.js","sourceRoot":"","sources":["../src/runnerValidacaoRemotaUtil.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAElD,MAAM,UAAU,SAAS,CAAC,KAAa;IACrC,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC1D,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,OAAe;IAC/C,OAAO,SAAS,CAAC,MAAM,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC;AACpD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAAC,OAAe;IAC1D,IAAI,CAAC;QACH,MAAM,IAAI,CAAC,OAAO,CAAC,CAAC;QACpB,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC"}
@@ -0,0 +1,2 @@
1
+ import { type AmbienteRunner, type ResultadoProvisionamentoWorkspace, type SnapshotProjetoRemoto } from "./runnerValidacaoRemotaTipos.js";
2
+ export declare function provisionarWorkspaceRunner(snapshot: SnapshotProjetoRemoto, ambiente?: AmbienteRunner): Promise<ResultadoProvisionamentoWorkspace>;
@@ -0,0 +1,110 @@
1
+ import { randomUUID } from "node:crypto";
2
+ import { mkdir, mkdtemp, writeFile } from "node:fs/promises";
3
+ import os from "node:os";
4
+ import path from "node:path";
5
+ import { AMBIENTE_PADRAO, PREFIXO_WORKSPACE } from "./runnerValidacaoRemotaTipos.js";
6
+ import { dedupe } from "./runnerValidacaoRemotaSnapshot.js";
7
+ import { hashTexto } from "./runnerValidacaoRemotaUtil.js";
8
+ async function escreverArquivoRelativoSeguro(base, arquivo) {
9
+ const destino = path.resolve(base, ...arquivo.caminho.split("/"));
10
+ const relativo = path.relative(base, destino);
11
+ if (relativo.startsWith("..") || path.isAbsolute(relativo)) {
12
+ throw new Error(`Caminho fora do workspace recusado: ${arquivo.caminho}`);
13
+ }
14
+ await mkdir(path.dirname(destino), { recursive: true });
15
+ await writeFile(destino, arquivo.conteudo, "utf8");
16
+ }
17
+ function inferirOrigensContratos(contratos) {
18
+ const origens = contratos.map((arquivo) => {
19
+ const partes = arquivo.caminho.split("/");
20
+ if (partes[0] === "contratos" || partes[0] === "contracts" || partes[0] === "sema") {
21
+ return `./${partes[0]}`;
22
+ }
23
+ const dir = path.posix.dirname(arquivo.caminho);
24
+ return dir === "." ? "." : `./${dir}`;
25
+ });
26
+ return dedupe(origens);
27
+ }
28
+ function inferirDiretoriosCodigoSnapshot(codigo) {
29
+ const dirs = codigo.map((arquivo) => {
30
+ const partes = arquivo.caminho.split("/");
31
+ return partes.length > 1 ? `./${partes[0]}` : ".";
32
+ });
33
+ return dedupe(dirs);
34
+ }
35
+ function inferirFontesLegadoSnapshot(codigo) {
36
+ const fontes = new Set();
37
+ for (const arquivo of codigo) {
38
+ const caminho = arquivo.caminho.toLowerCase();
39
+ if (/\.(ts|tsx|js|jsx|mjs|cjs)$/.test(caminho)) {
40
+ fontes.add("typescript");
41
+ }
42
+ if (caminho.endsWith(".py")) {
43
+ fontes.add("python");
44
+ }
45
+ if (caminho.endsWith(".dart")) {
46
+ fontes.add("dart");
47
+ }
48
+ if (caminho.endsWith(".lua")) {
49
+ fontes.add("lua");
50
+ }
51
+ if (caminho.endsWith(".cs")) {
52
+ fontes.add("dotnet");
53
+ }
54
+ if (caminho.endsWith(".java")) {
55
+ fontes.add("java");
56
+ }
57
+ if (caminho.endsWith(".go")) {
58
+ fontes.add("go");
59
+ }
60
+ if (caminho.endsWith(".rs")) {
61
+ fontes.add("rust");
62
+ }
63
+ if (/\.(cpp|cc|cxx|hpp|h)$/.test(caminho)) {
64
+ fontes.add("cpp");
65
+ }
66
+ }
67
+ return [...fontes].sort((a, b) => a.localeCompare(b, "pt-BR"));
68
+ }
69
+ export async function provisionarWorkspaceRunner(snapshot, ambiente = AMBIENTE_PADRAO) {
70
+ const caminho = await mkdtemp(path.join(os.tmpdir(), PREFIXO_WORKSPACE));
71
+ const workspace = {
72
+ id: randomUUID(),
73
+ ambiente,
74
+ caminho,
75
+ tenant: snapshot.tenant,
76
+ isolamento: "tmpdir_efemero_sem_home_host_sem_docker_socket",
77
+ expira_em: new Date(Date.now() + 60 * 60 * 1000).toISOString(),
78
+ };
79
+ for (const arquivo of [...snapshot.contratos, ...snapshot.codigo, ...snapshot.documentacao]) {
80
+ await escreverArquivoRelativoSeguro(caminho, arquivo);
81
+ }
82
+ await mkdir(path.join(caminho, ".sema-runner"), { recursive: true });
83
+ await writeFile(path.join(caminho, ".sema-runner", "snapshot.json"), `${JSON.stringify({
84
+ origem: snapshot.origem,
85
+ tenant: snapshot.tenant,
86
+ modo: snapshot.modo,
87
+ indice: snapshot.indice,
88
+ contratos: snapshot.contratos.map((arquivo) => ({ caminho: arquivo.caminho, hash: hashTexto(arquivo.conteudo) })),
89
+ codigo: snapshot.codigo.map((arquivo) => ({ caminho: arquivo.caminho, hash: hashTexto(arquivo.conteudo) })),
90
+ documentacao: snapshot.documentacao.map((arquivo) => ({ caminho: arquivo.caminho, hash: hashTexto(arquivo.conteudo) })),
91
+ }, null, 2)}\n`, "utf8");
92
+ await writeFile(path.join(caminho, "sema.config.json"), `${JSON.stringify({
93
+ origens: inferirOrigensContratos(snapshot.contratos),
94
+ saida: "./generated",
95
+ alvos: ["typescript"],
96
+ alvoPadrao: "typescript",
97
+ framework: "base",
98
+ estruturaSaida: "modulos",
99
+ diretoriosCodigo: inferirDiretoriosCodigoSnapshot(snapshot.codigo),
100
+ fontesLegado: inferirFontesLegadoSnapshot(snapshot.codigo),
101
+ modoAdocao: "incremental",
102
+ }, null, 2)}\n`, "utf8");
103
+ return {
104
+ workspace,
105
+ isolamento_ok: true,
106
+ limpeza_agendada: true,
107
+ bloqueios: [],
108
+ };
109
+ }
110
+ //# sourceMappingURL=runnerValidacaoRemotaWorkspace.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runnerValidacaoRemotaWorkspace.js","sourceRoot":"","sources":["../src/runnerValidacaoRemotaWorkspace.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ export interface MapeamentoTipo {
2
+ semaTipo: string;
3
+ prismaTipo: string;
4
+ atributosPrisma: string[];
5
+ }
6
+ export declare function mapearTiposSemaPrisma(): {
7
+ mapeamentos: MapeamentoTipo[];
8
+ cobertura: number;
9
+ };
10
+ export declare function gerarSchemaPrisma(pastaContratos: string, saidaSchema: string, datasourceProvider?: string): Promise<{
11
+ schemaGerado: string;
12
+ modelsGerados: number;
13
+ enumsGerados: number;
14
+ }>;
15
+ export declare function importarSchemaPrisma(caminhoSchema: string, pastaSaida: string, nomeModulo: string): Promise<{
16
+ contratosGerados: string[];
17
+ entitiesCriadas: number;
18
+ }>;
19
+ export declare function compararDivergencias(pastaContratos: string, caminhoSchema: string): Promise<{
20
+ divergencias: string[];
21
+ total: number;
22
+ breaking: number;
23
+ }>;
24
+ export declare function comandoSyncPrisma(args: string[]): Promise<void>;
@@ -0,0 +1,174 @@
1
+ // Sync Sema ↔ Prisma
2
+ // Contrato: cli_sync_prisma.sema
3
+ import * as fs from 'fs';
4
+ import * as path from 'path';
5
+ const MAPEAMENTO_TIPOS = [
6
+ { semaTipo: 'Id', prismaTipo: 'String', atributosPrisma: ['@id', '@default(uuid())'] },
7
+ { semaTipo: 'Texto', prismaTipo: 'String', atributosPrisma: [] },
8
+ { semaTipo: 'Email', prismaTipo: 'String', atributosPrisma: [] },
9
+ { semaTipo: 'Decimal', prismaTipo: 'Decimal', atributosPrisma: [] },
10
+ { semaTipo: 'Inteiro', prismaTipo: 'Int', atributosPrisma: [] },
11
+ { semaTipo: 'Booleano', prismaTipo: 'Boolean', atributosPrisma: [] },
12
+ { semaTipo: 'Timestamp', prismaTipo: 'DateTime', atributosPrisma: [] },
13
+ { semaTipo: 'Lista', prismaTipo: 'String[]', atributosPrisma: [] },
14
+ { semaTipo: 'Mapa', prismaTipo: 'Json', atributosPrisma: [] },
15
+ ];
16
+ export function mapearTiposSemaPrisma() {
17
+ return {
18
+ mapeamentos: MAPEAMENTO_TIPOS,
19
+ cobertura: 0.85
20
+ };
21
+ }
22
+ function semaParaPrismaTipo(semaTipo) {
23
+ const mapeamento = MAPEAMENTO_TIPOS.find(m => m.semaTipo === semaTipo);
24
+ if (!mapeamento)
25
+ return 'String'; // fallback
26
+ const atributos = mapeamento.atributosPrisma.length > 0
27
+ ? ' ' + mapeamento.atributosPrisma.join(' ')
28
+ : '';
29
+ return `${mapeamento.prismaTipo}${atributos}`;
30
+ }
31
+ export async function gerarSchemaPrisma(pastaContratos, saidaSchema, datasourceProvider = 'postgresql') {
32
+ // Verificar pasta
33
+ if (!fs.existsSync(pastaContratos)) {
34
+ throw new Error(`Pasta nao existe: ${pastaContratos}`);
35
+ }
36
+ const arquivos = fs.readdirSync(pastaContratos);
37
+ const contratos = arquivos.filter(f => f.endsWith('.sema'));
38
+ if (contratos.length === 0) {
39
+ throw new Error('Nenhum contrato .sema encontrado');
40
+ }
41
+ // Gerar schema basico
42
+ let models = '';
43
+ let modelCount = 0;
44
+ for (const contrato of contratos) {
45
+ const nomeModel = path.basename(contrato, '.sema').replace(/\./g, '_');
46
+ // Schema simplificado - em producao, fazer parsing real do contrato
47
+ models += `\nmodel ${nomeModel.charAt(0).toUpperCase() + nomeModel.slice(1)} {
48
+ id String @id @default(uuid())
49
+ criadoEm DateTime @default(now())
50
+ // Gerado a partir de: ${contrato}
51
+ // TODO: Adicionar campos do contrato Sema
52
+ }\n`;
53
+ modelCount++;
54
+ }
55
+ const schema = `// Gerado automaticamente pelo Sema
56
+ // Fonte: ${pastaContratos}
57
+
58
+ generator client {
59
+ provider = "prisma-client-js"
60
+ }
61
+
62
+ datasource db {
63
+ provider = "${datasourceProvider}"
64
+ url = env("DATABASE_URL")
65
+ }
66
+ ${models}`;
67
+ // Salvar
68
+ fs.writeFileSync(saidaSchema, schema, 'utf-8');
69
+ return {
70
+ schemaGerado: schema,
71
+ modelsGerados: modelCount,
72
+ enumsGerados: 0
73
+ };
74
+ }
75
+ export async function importarSchemaPrisma(caminhoSchema, pastaSaida, nomeModulo) {
76
+ if (!fs.existsSync(caminhoSchema)) {
77
+ throw new Error(`Schema nao existe: ${caminhoSchema}`);
78
+ }
79
+ const schema = fs.readFileSync(caminhoSchema, 'utf-8');
80
+ // Extrair models (regex simplificado)
81
+ const modelMatches = schema.match(/model\s+(\w+)\s*\{([^}]+)\}/g) || [];
82
+ const contratos = [];
83
+ for (const match of modelMatches) {
84
+ const nomeMatch = match.match(/model\s+(\w+)/);
85
+ if (!nomeMatch)
86
+ continue;
87
+ const nomeModel = nomeMatch[1];
88
+ const nomeContrato = `${nomeModel.toLowerCase()}.sema`;
89
+ const caminhoContrato = path.join(pastaSaida, nomeContrato);
90
+ // Gerar contrato basico
91
+ const conteudo = `module ${nomeModulo}.${nomeModel.toLowerCase()} {
92
+ entity ${nomeModel} {
93
+ fields {
94
+ id: Id
95
+ // TODO: Mapear campos do schema Prisma
96
+ }
97
+ }
98
+
99
+ task criar_${nomeModel.toLowerCase()} {
100
+ input {
101
+ // TODO: Definir inputs
102
+ }
103
+ output {
104
+ ${nomeModel.toLowerCase()}: ${nomeModel}
105
+ }
106
+ effects {
107
+ persistencia ${nomeModel}
108
+ }
109
+ }
110
+ }`;
111
+ fs.writeFileSync(caminhoContrato, conteudo, 'utf-8');
112
+ contratos.push(caminhoContrato);
113
+ }
114
+ return {
115
+ contratosGerados: contratos,
116
+ entitiesCriadas: modelMatches.length
117
+ };
118
+ }
119
+ export async function compararDivergencias(pastaContratos, caminhoSchema) {
120
+ // Implementacao simplificada
121
+ const divergencias = [];
122
+ // Verificar se ambos existem
123
+ if (!fs.existsSync(pastaContratos)) {
124
+ divergencias.push('Pasta de contratos nao existe');
125
+ }
126
+ if (!fs.existsSync(caminhoSchema)) {
127
+ divergencias.push('Schema Prisma nao existe');
128
+ }
129
+ return {
130
+ divergencias,
131
+ total: divergencias.length,
132
+ breaking: 0
133
+ };
134
+ }
135
+ // Handlers CLI
136
+ export async function comandoSyncPrisma(args) {
137
+ const gerarIdx = args.indexOf('--gerar');
138
+ const importarIdx = args.indexOf('--importar');
139
+ const compararIdx = args.indexOf('--comparar');
140
+ if (gerarIdx !== -1) {
141
+ const pasta = args[gerarIdx + 1] || 'contratos/';
142
+ const saida = args[gerarIdx + 2] || 'prisma/schema.prisma';
143
+ const resultado = await gerarSchemaPrisma(pasta, saida);
144
+ console.log(`\n✅ Schema gerado: ${saida}`);
145
+ console.log(` Models: ${resultado.modelsGerados}`);
146
+ }
147
+ else if (importarIdx !== -1) {
148
+ const schema = args[importarIdx + 1];
149
+ const saida = args[importarIdx + 2] || 'contratos/importados/';
150
+ const modulo = args[importarIdx + 3] || 'legacy';
151
+ if (!schema) {
152
+ console.error('Uso: sema sync prisma --importar <schema.prisma> [saida] [modulo]');
153
+ process.exit(1);
154
+ }
155
+ fs.mkdirSync(saida, { recursive: true });
156
+ const resultado = await importarSchemaPrisma(schema, saida, modulo);
157
+ console.log(`\n✅ Importado: ${resultado.contratosGerados.length} contratos`);
158
+ }
159
+ else if (compararIdx !== -1) {
160
+ const pasta = args[compararIdx + 1] || 'contratos/';
161
+ const schema = args[compararIdx + 2] || 'prisma/schema.prisma';
162
+ const resultado = await compararDivergencias(pasta, schema);
163
+ console.log(`\n📊 Divergencias: ${resultado.total}`);
164
+ if (resultado.divergencias.length > 0) {
165
+ resultado.divergencias.forEach(d => console.log(` - ${d}`));
166
+ }
167
+ }
168
+ else {
169
+ console.log('Uso: sema sync prisma --gerar [pasta] [saida]');
170
+ console.log(' sema sync prisma --importar <schema> [saida] [modulo]');
171
+ console.log(' sema sync prisma --comparar [pasta] [schema]');
172
+ }
173
+ }
174
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/sync/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,109 @@
1
+ # AGENT_STARTER
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
+ Use este texto como starter curto para qualquer IA antes de editar `.sema`.
10
+
11
+ Ordem canonica de entrada no repo:
12
+
13
+ 1. `llms.txt`
14
+ 2. `SEMA_BRIEF.md`
15
+ 3. `SEMA_INDEX.json`
16
+ 4. `AGENTS.md`
17
+ 5. `README.md`
18
+
19
+ Roteamento por capacidade:
20
+
21
+ - IA pequena ou gratuita: `llms.txt` -> `SEMA_BRIEF.micro.txt` -> `SEMA_INDEX.json`
22
+ - IA média: `llms.txt` -> `SEMA_BRIEF.curto.txt` -> `SEMA_INDEX.json` -> `README.md`
23
+ - IA grande ou com tool use: `llms-full.txt` -> `SEMA_BRIEF.md` -> `SEMA_INDEX.json` -> `AGENTS.md` -> `README.md`
24
+
25
+ Tres modos de uso da Sema:
26
+
27
+ - projeto novo: modele, valide, compile e verifique antes de subir código derivado
28
+ - projeto já semantizado: inspecione, leia resumo, rode drift e gere contexto antes de editar
29
+ - legado sem Sema: importe, revise o rascunho, formate, valide e use drift como arbitro da adoção incremental
30
+
31
+ Para manter os artefatos gerados da raiz sincronizados:
32
+
33
+ - `sema sync-ai-entrypoints --json`
34
+
35
+ ```text
36
+ Voce esta trabalhando com Sema, um contrato semantico IA-first para agentes operarem software vivo em backend e front consumer.
37
+
38
+ Importante:
39
+ - a Sema e protocolo de governanca semantica desenhado para IA, nao para ergonomia humana
40
+ - humanos sao autores/aprovadores; agentes sao os consumidores primarios do contrato
41
+ - a Sema funciona como camada de navegacao operacional para agente, nao como runtime magico
42
+ - leitura humana e bonus toleravel, nao centro do produto
43
+ - a Sema modela contratos, estados, fluxos, erros, efeitos, garantias, vinculos e execucao
44
+ - a Sema gera codigo e scaffolding real para TypeScript, Python e Dart
45
+ - a Sema usa `importar` para bootstrap revisavel, nao para contrato final automatico
46
+ - a Sema usa `drift` para medir diferenca entre contrato e codigo vivo
47
+ - a Sema usa `impl` para ligar task a simbolo real do runtime
48
+ - a Sema usa `resumo` e `prompt-curto` para IA pequena ou gratuita
49
+ - a Sema pode servir de base para interfaces graficas elegantes e coerentes
50
+ - a primeira onda consumer oficial agora cobre `Next.js consumer`, `React/Vite consumer`, `Angular consumer` e `flutter-consumer`
51
+ - esses slices oficiais cobrem `consumer bridge + superficies rastreaveis`, nao geracao completa de UI
52
+ - a proxima camada semantica de front (`screen`, `action`, `query`, `form`, `navigation`) esta documentada como roadmap, nao como sintaxe oficial ja suportada
53
+ - trate a Sema como cerebro semantico da aplicacao, nao como gerador magico de front-end pronto
54
+ - nao cobre da Sema persistencia real, runtime ou smoke test automatico; isso continua sendo engenharia viva
55
+ - se a tarefa envolver UI, priorize `appRoutes`, `consumerSurfaces` e `consumerBridges` antes de abrir arquivo aleatorio
56
+ - evite pedir HTML unico solto quando a intencao for testar a Sema de verdade
57
+
58
+ Regras:
59
+ - nao invente sintaxe fora da gramatica e dos exemplos oficiais
60
+ - se a IA for pequena, comece em `sema resumo` e `briefing.min.json`
61
+ - trate `ir --json` como fonte de verdade semantica
62
+ - trate `diagnosticos --json` como fonte de correcao
63
+ - use `sema formatar` como fonte unica de estilo
64
+ - preserve a intencao do contrato
65
+ - nao cobre da Sema adivinhacao de negocio que nao esta no contrato nem no codigo
66
+
67
+ Comandos essenciais:
68
+ - resumo por capacidade: `sema resumo <arquivo-ou-pasta> [--micro|--curto|--medio] [--para <resumo|onboarding|review|mudanca|bug|arquitetura>]`
69
+ - prompt curto: `sema prompt-curto <arquivo-ou-pasta> [--micro|--curto|--medio] [--para <resumo|onboarding|review|mudanca|bug|arquitetura>]`
70
+ - contexto completo do modulo: `sema contexto-ia <arquivo.sema>`
71
+ - estrutura sintatica: `sema ast <arquivo.sema> --json`
72
+ - estrutura semantica: `sema ir <arquivo.sema> --json`
73
+ - validacao: `sema validar <arquivo.sema> --json`
74
+ - diagnosticos: `sema diagnosticos <arquivo.sema> --json`
75
+ - formatacao: `sema formatar <arquivo.sema>`
76
+ - importacao assistida de legado: `sema importar <nestjs|fastapi|flask|nextjs|nextjs-consumer|react-vite-consumer|angular-consumer|flutter-consumer|firebase|typescript|python|dart|dotnet|java|go|rust|cpp> <diretorio> --saida <diretorio>`
77
+ - geracao de codigo: `sema compilar <arquivo-ou-pasta> --alvo <typescript|python|dart> --saida <diretorio>`
78
+ - verificacao final: `sema verificar <arquivo-ou-pasta> [--json]`
79
+
80
+ Regra pratica de ouro:
81
+ - se a tarefa pedir codigo derivado, `sema compilar` e obrigatorio
82
+ - se a tarefa partir de projeto que nao nasceu com Sema, `sema importar` deve entrar antes da lapidacao semantica
83
+ - se a tarefa pedir apenas leitura ou correcao sem gerar codigo, `sema compilar` pode ficar fora
84
+
85
+ Antes de editar:
86
+ 1. leia README, docs de IA e um exemplo oficial parecido
87
+ 2. se a IA for pequena, rode `sema resumo <arquivo> --micro`
88
+ 3. se a tarefa pedir contexto mais rico, consulte `drift`, `briefing.min.json` e depois AST/IR
89
+
90
+ Depois de editar:
91
+ 1. rode `sema formatar`
92
+ 2. rode `sema validar --json`
93
+ 3. se houver falha, use `diagnosticos --json`
94
+ 4. se a tarefa pedir codigo derivado, rode `sema compilar`
95
+ 5. feche com `sema verificar <arquivo-ou-pasta> --json`
96
+
97
+ Priorize sempre:
98
+ - exemplos oficiais
99
+ - JSON da CLI
100
+ - consistencia semantica
101
+
102
+ Nao improvise quando faltar contexto.
103
+ ```
104
+
105
+ Documentos de apoio:
106
+
107
+ - [como-ensinar-a-sema-para-ia.md](./como-ensinar-a-sema-para-ia.md)
108
+ - [prompt-base-ia-sema.md](./prompt-base-ia-sema.md)
109
+ - [fluxo-pratico-ia-sema.md](./fluxo-pratico-ia-sema.md)