@semacode/cli 1.5.55 → 2.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 (54) hide show
  1. package/README.md +50 -7
  2. package/dist/agentContext.d.ts +1 -1
  3. package/dist/agentContext.js +3 -3
  4. package/dist/agentContextPack.js +33 -92
  5. package/dist/agentContextTipos.d.ts +6 -9
  6. package/dist/agentContextTipos.js +5 -4
  7. package/dist/agentEntryPoints.d.ts +22 -2
  8. package/dist/agentEntryPoints.js +229 -126
  9. package/dist/docs.part01.js +1 -1
  10. package/dist/docs.part02.js +21 -10
  11. package/dist/doctorCommand.d.ts +4 -4
  12. package/dist/doctorCommand.js +21 -10
  13. package/dist/exemplosOficiais.d.ts +10 -0
  14. package/dist/exemplosOficiais.js +32 -22
  15. package/dist/fsGovernado.js +8 -6
  16. package/dist/iaPrompts.d.ts +2 -2
  17. package/dist/iaPrompts.js +3 -3
  18. package/dist/index.part01.d.ts +1 -1
  19. package/dist/index.part01.js +6 -6
  20. package/dist/index.part02.js +1 -1
  21. package/dist/index.part03.d.ts +1 -0
  22. package/dist/index.part03.js +26 -12
  23. package/dist/index.part04.d.ts +1 -0
  24. package/dist/index.part04.js +49 -21
  25. package/dist/index.part05.js +1 -1
  26. package/dist/index.part06.d.ts +1 -1
  27. package/dist/index.part06.js +27 -18
  28. package/dist/index.part07.js +20 -20
  29. package/dist/index.part08.js +4 -8
  30. package/dist/initCommand.d.ts +3 -1
  31. package/dist/initCommand.js +41 -12
  32. package/dist/initTemplatesBase.js +8 -10
  33. package/dist/workspaceWrite.d.ts +22 -0
  34. package/dist/workspaceWrite.js +332 -0
  35. package/docs/README.md +10 -4
  36. package/docs/ai-integration.md +31 -12
  37. package/docs/ai-onboarding.md +43 -14
  38. package/docs/ai-workflow.md +22 -39
  39. package/docs/auth.md +13 -3
  40. package/docs/cli.md +21 -8
  41. package/docs/commands.md +9 -10
  42. package/docs/deploy.md +27 -4
  43. package/docs/documentation.md +2 -2
  44. package/docs/env.md +3 -1
  45. package/docs/getting-started.md +27 -3
  46. package/docs/repositories.md +18 -2
  47. package/docs/rollback.md +23 -5
  48. package/docs/security.md +8 -0
  49. package/docs/syntax.md +8 -9
  50. package/docs/testing.md +15 -4
  51. package/docs/vocabulary.md +2 -1
  52. package/package.json +20 -12
  53. package/dist/billing/index.d.ts +0 -17
  54. package/dist/billing/index.js +0 -74
@@ -6,7 +6,7 @@ import { compilarCodigo, formatarCodigo, formatarDiagnosticos, lerArquivoTexto,
6
6
  import { carregarProjeto, } from "./projeto.js";
7
7
  import { ARQUIVOS_CANONICOS_IA_RAIZ, } from './agentContextTipos.js';
8
8
  import { criarGuiaCapacidadeIa } from './agentContextPack.js';
9
- import { sincronizarEntryPointsAgentes, } from './agentEntryPoints.js';
9
+ import { sincronizarEntrypointCodex, } from './agentEntryPoints.js';
10
10
  import { escreverArquivos, formatarAvisoArtefatosGeradosAcimaDoLimite, } from './fsGovernado.js';
11
11
  import { materializarExemplosOficiais } from './exemplosOficiais.js';
12
12
  import { carregarModulos } from './carregarModulos.js';
@@ -120,13 +120,13 @@ export async function comandoStarterIa() {
120
120
  console.log(STARTER_IA);
121
121
  return 0;
122
122
  }
123
- export async function comandoSyncAiEntrypoints(emJson) {
123
+ export async function comandoSyncCodex(emJson) {
124
124
  const resumoProjeto = await gerarResumoProjetoIa(process.cwd(), undefined, true);
125
125
  const exemplos = await materializarExemplosOficiais(resumoProjeto.baseProjeto, true);
126
126
  if (!exemplos.sucesso) {
127
127
  if (emJson) {
128
128
  console.log(JSON.stringify({
129
- comando: "sync-ai-entrypoints",
129
+ comando: "sync-codex",
130
130
  sucesso: false,
131
131
  baseProjeto: resumoProjeto.baseProjeto,
132
132
  erro: exemplos.erro,
@@ -138,34 +138,43 @@ export async function comandoSyncAiEntrypoints(emJson) {
138
138
  return 1;
139
139
  }
140
140
  const indexJson = JSON.parse(await readFile(path.join(resumoProjeto.pastaSaida, "SEMA_INDEX.json"), "utf8"));
141
- const entrypointsClientes = await sincronizarEntryPointsAgentes(resumoProjeto.baseProjeto, indexJson.agentContextPack);
141
+ const resultadosCodex = await sincronizarEntrypointCodex(resumoProjeto.baseProjeto, indexJson.agentContextPack);
142
142
  const artefatos = [...new Set([
143
143
  ...ARQUIVOS_CANONICOS_IA_RAIZ,
144
144
  ...resumoProjeto.artefatos,
145
- ...entrypointsClientes.arquivos.map((item) => item.caminho),
145
+ ...resultadosCodex.arquivos.map((item) => item.caminho),
146
146
  "exemplos",
147
147
  ])];
148
+ const sucesso = resultadosCodex.entrypointsLegadosLimpos;
148
149
  if (emJson) {
149
150
  console.log(JSON.stringify({
150
- comando: "sync-ai-entrypoints",
151
- sucesso: true,
151
+ comando: "sync-codex",
152
+ sucesso,
153
+ erro: sucesso ? undefined : "Entrypoints legados com conteudo Sema incompleto ou sem bloco gerenciado exigem revisao manual.",
152
154
  baseProjeto: resumoProjeto.baseProjeto,
153
155
  pastaSaida: resumoProjeto.pastaSaida,
154
156
  artefatos,
155
157
  entradaCanonica: indexJson.entradaCanonica,
156
- entrypointsClientes,
158
+ resultadosCodex,
157
159
  exemplos,
158
160
  }, null, 2));
159
- return 0;
161
+ return sucesso ? 0 : 1;
162
+ }
163
+ if (!sucesso) {
164
+ console.error("Entrypoints legados pendentes de revisao manual:");
165
+ for (const caminho of resultadosCodex.entrypointsLegadosPendentes) {
166
+ console.error(`- ${caminho}`);
167
+ }
168
+ return 1;
160
169
  }
161
- console.log("Entrypoints IA-first sincronizados");
170
+ console.log("Entrypoint do Codex sincronizado");
162
171
  console.log("");
163
172
  console.log(`Base do projeto: ${resumoProjeto.baseProjeto}`);
164
173
  console.log(`Ordem canônica: ${indexJson.entradaCanonica.ordemLeitura.join(" -> ")}`);
165
174
  console.log(`IA fraca: ${indexJson.entradaCanonica.porCapacidade.fraca.join(" -> ")}`);
166
175
  console.log(`IA média: ${indexJson.entradaCanonica.porCapacidade.media.join(" -> ")}`);
167
176
  console.log(`IA forte: ${indexJson.entradaCanonica.porCapacidade.forte.join(" -> ")}`);
168
- console.log(`Clientes: ${entrypointsClientes.criados.length} criados, ${entrypointsClientes.atualizados.length} atualizados, ${entrypointsClientes.preservados.length} preservados`);
177
+ console.log(`Codex: ${resultadosCodex.criados.length} criados, ${resultadosCodex.atualizados.length} atualizados, ${resultadosCodex.preservados.length} preservados`);
169
178
  console.log(`Exemplos oficiais: ${exemplos.criados.length} criados, ${exemplos.preservados.length} preservados em ${exemplos.destino}`);
170
179
  return 0;
171
180
  }
@@ -187,16 +196,16 @@ export async function comandoAjudaIa() {
187
196
  ]));
188
197
  console.log("");
189
198
  console.log(renderizarSecaoAscii("Capacidade de IA", [
190
- "fraca: `sema resumo --micro`, `briefing.min.json`, `prompt-curto.txt`",
191
- "média: `sema resumo --curto`, `drift.json`, `briefing.min.json`",
192
- "forte: `sema contexto-ia`, `briefing.json`, `ir.json`, `ast.json`",
199
+ "fraca: `sema resumo <arquivo> --micro --json` usa stdout compacto",
200
+ "média: `sema resumo <arquivo> --curto --json` + `sema drift <arquivo> --json`",
201
+ "forte: `sema contexto-ia <arquivo.sema> --saida <diretorio> --json` materializa o pacote completo",
193
202
  ]));
194
203
  console.log("");
195
204
  console.log(renderizarSecaoAscii("Fluxo recomendado", [
196
205
  "Use `sema starter-ia` para um texto curto de onboarding.",
197
- "Use `sema sync-ai-entrypoints` para regenerar `AGENT_CONTEXT_PACK.json`, `SEMA_BRIEF.*` e `SEMA_INDEX.json` na raiz.",
206
+ "Use `sema sync-codex` para regenerar o contexto governado do Codex na raiz.",
198
207
  "Use `sema instalar-exemplos` para materializar `exemplos/` oficiais sem sobrescrever arquivos locais.",
199
- "Use `sema resumo <arquivo> --micro --para onboarding` para IA fraca.",
208
+ "Use `sema resumo <arquivo> --micro --para onboarding --json` para IA fraca; o resumo vem no stdout.",
200
209
  "Se `sema resumo` ou outro gate estourar timeout local, aumente o timeout e tente de novo; timeout do agente nao e falha do Sema.",
201
210
  "Use `sema prompt-curto <arquivo> --curto --para mudanca` para colar contexto em modelo gratuito.",
202
211
  "Use `sema prompt-ia`, `sema prompt-ia-ui`, `sema prompt-ia-react` e `sema prompt-ia-sema-primeiro` conforme a tarefa.",
@@ -205,7 +214,7 @@ export async function comandoAjudaIa() {
205
214
  "Use `sema drift` para medir impls, vinculos, rotas, score e lacunas.",
206
215
  "Use `sema docs-impacto --intencao <acao>` para ler ou criar docs obrigatorias antes de agir.",
207
216
  "Use `sema finalizar-mudanca --intencao <acao>` para bloquear conclusao sem leitura documental comprovada.",
208
- "Use `sema contexto-ia <arquivo.sema>` para gerar AST, IR, drift, `briefing.json` e `briefing.min.json`.",
217
+ "Use `sema contexto-ia <arquivo.sema> --saida <diretorio> --json` para gerar AST, IR, drift, `briefing.json` e `briefing.min.json`.",
209
218
  "Use `sema compilar <arquivo-ou-pasta> --alvo <typescript|python|php|dart|lua|javascript|html|css> --saida <diretorio>` quando a tarefa pedir codigo derivado.",
210
219
  ]));
211
220
  console.log("");
@@ -218,7 +227,7 @@ export async function comandoAjudaIa() {
218
227
  "Se o projeto ja existe, trate `importar` como rascunho e `drift` como juiz.",
219
228
  "IA fraca comeca no menor artefato que resolve a tarefa; nao enfie `ast.json` inteiro nela de bobeira.",
220
229
  "Timeout local e so limite do agente: escale e tente de novo antes de chamar Sema de inativo.",
221
- "Antes de editar software vivo, leia `briefing.min.json` ou `briefing.json` em vez de sair cavando arquivo na fe.",
230
+ "Antes de editar software vivo, rode os gates locais; se precisar do pacote materializado, gere-o com `sema contexto-ia ... --saida <diretorio>` antes de ler `briefing.min.json` ou `briefing.json`.",
222
231
  "Trate `route`, `worker`, `evento`, `fila`, `cron`, `webhook`, `cache`, `storage` e `policy` como superficies de primeira classe.",
223
232
  ]));
224
233
  return 0;
@@ -6,7 +6,7 @@ import { compilarCodigo, formatarDiagnosticos, lerArquivoTexto, temErros, } from
6
6
  import { carregarProjeto, resolverAlvosVerificacao, } from "./projeto.js";
7
7
  import { escreverArquivos, formatarAvisoArtefatosGeradosAcimaDoLimite, } from './fsGovernado.js';
8
8
  import { obterOpcao } from './cliArgs.js';
9
- import { avaliarPreflightVerificacao, imprimirPreflightVerificacao } from './doctorCommand.js';
9
+ import { avaliarDependenciasVerificacao, imprimirFalhaDependenciasVerificacao } from './doctorCommand.js';
10
10
  import { aplicarEstruturaSaida, executarTestesGerados, executarTestesParaVerificacao, gerarArquivosPorAlvo, garantirIr, nomeSubpastaModulo, resolverConfiguracaoVerificacaoPorAlvo, validarCompatibilidadeFramework, } from './geracaoCore.js';
11
11
  import { normalizarModoResumo, normalizarTamanhoResumo } from "./index.part01.js";
12
12
  import { carregarContextoModuloIa } from "./index.part03.js";
@@ -45,27 +45,27 @@ export async function comandoPromptCurto(entrada, args, emJson) {
45
45
  : "SEMA_BRIEF.md";
46
46
  const contextoProjeto = await readFile(path.join(resumoProjeto.pastaSaida, arquivoResumo), "utf8");
47
47
  const capacidade = tamanho === "micro" ? "fraca" : tamanho === "curto" ? "media" : "forte";
48
- const prompt = `⚠️ REGRA OBRIGATÓRIA DE GOVERNANÇA:
48
+ const prompt = `⚠️ REGRA OBRIGATÓRIA DE GOVERNANÇA:
49
49
 
50
- ANTES DE QUALQUER AÇÃO (editar, criar, deletar, executar, consultar, modificar):
51
- 1. Chame sema_docs_impacto com sua intenção declarada
52
- 2. Aguarde a resposta com as docs obrigatórias
53
- 3. Leia as docs antes de agir
54
- 4. Use sema_finalizar_mudanca para comprovar que leu as docs
50
+ ANTES DE QUALQUER AÇÃO (editar, criar, deletar, executar, consultar ou modificar):
51
+ 1. Rode \`sema docs-impacto --intencao "<ação>" --json\` com sua intenção declarada.
52
+ 2. Aguarde a resposta com as docs obrigatórias.
53
+ 3. Leia as docs antes de agir.
54
+ 4. Antes de concluir, rode \`sema finalizar-mudanca --intencao "<ação>" --doc-lida <arquivo> --json\` com todas as docs lidas.
55
55
 
56
- Você está operando Sema em modo IA-first.
56
+ Você está operando Sema em modo IA-first.
57
57
 
58
- Isto e contexto comprimido para IA operar contrato semantico antes de tocar codigo vivo.
58
+ Isto é contexto comprimido para IA operar contrato semântico antes de tocar código vivo.
59
59
 
60
60
  Capacidade alvo: ${capacidade}
61
61
  Modo da tarefa: ${modo}
62
62
 
63
63
  Regras:
64
- - ANTES DE TUDO: chame sema_docs_impacto com sua intenção declarada
65
- - comece pelo resumo compacto abaixo
66
- - se a tarefa pedir mais contexto, abra \`AGENT_CONTEXT_PACK.json\` e depois \`SEMA_INDEX.json\`
67
- - nao tente ler o repo inteiro se o resumo ja disser onde tocar
68
- - preserve contrato, risco, lacuna e checks sugeridos
64
+ - ANTES DE TUDO: rode \`sema docs-impacto --intencao "<ação>" --json\`.
65
+ - Comece pelo resumo compacto abaixo.
66
+ - Se a tarefa pedir mais contexto, abra \`AGENT_CONTEXT_PACK.json\` e depois \`SEMA_INDEX.json\`.
67
+ - Não tente ler o repositório inteiro se o resumo já disser onde tocar.
68
+ - Preserve contrato, risco, lacuna e checks sugeridos.
69
69
 
70
70
  Contexto do projeto:
71
71
  ${contextoProjeto.trim()}
@@ -157,9 +157,9 @@ export async function comandoVerificar(entrada, baseSaida, cwd = process.cwd())
157
157
  console.error(incompatibilidade.incompatibilidade);
158
158
  return 1;
159
159
  }
160
- const preflight = avaliarPreflightVerificacao(configuracoesAlvo);
161
- if (!preflight.ok) {
162
- imprimirPreflightVerificacao(preflight);
160
+ const verificacaoDependencias = avaliarDependenciasVerificacao(configuracoesAlvo);
161
+ if (!verificacaoDependencias.ok) {
162
+ imprimirFalhaDependenciasVerificacao(verificacaoDependencias);
163
163
  return 1;
164
164
  }
165
165
  const resumos = [];
@@ -235,13 +235,13 @@ export async function comandoVerificarJson(entrada, baseSaida, cwd = process.cwd
235
235
  }, null, 2));
236
236
  return 1;
237
237
  }
238
- const preflight = avaliarPreflightVerificacao(configuracoesAlvo);
239
- if (!preflight.ok) {
238
+ const verificacaoDependencias = avaliarDependenciasVerificacao(configuracoesAlvo);
239
+ if (!verificacaoDependencias.ok) {
240
240
  console.log(JSON.stringify({
241
241
  comando: "verificar",
242
242
  sucesso: false,
243
243
  erro: "Dependencias obrigatorias ausentes para executar a verificacao.",
244
- preflight,
244
+ dependencias: verificacaoDependencias,
245
245
  modulos: [],
246
246
  totais: { modulos: 0, alvos: 0, arquivos: 0, testes: 0 },
247
247
  }, null, 2));
@@ -3,7 +3,6 @@
3
3
  import path from "node:path";
4
4
  import { carregarConfiguracaoProjeto, resolverAlvoPadrao, resolverEstruturaSaidaPadrao, resolverFrameworkPadrao, resolverSaidaPadrao, } from "./projeto.js";
5
5
  import { REGISTRO_COMANDOS } from "./comandos.js";
6
- import * as billing from "./billing/index.js";
7
6
  import { comandoIniciar, comandoInstalarExemplos } from './initCommand.js';
8
7
  import { obterOpcao, obterPosicionais, possuiFlag } from './cliArgs.js';
9
8
  import { comandoAuthor, comandoProfile, criarPayloadRulePacks, normalizarProfileGovernanca, renderizarRulePacksTexto } from './profileAuthorCommand.js';
@@ -12,7 +11,7 @@ import { normalizarFonteImportacao, normalizarTemplateIniciar, } from './geracao
12
11
  import { VERSAO_CLI, ajuda, obterArgumentos } from "./index.part01.js";
13
12
  import { comandoDocsImpacto, comandoFinalizarMudanca, comandoValidar, comandoValidarJson } from "./index.part04.js";
14
13
  import { comandoAst, comandoAstJson, comandoDrift, comandoImpacto, comandoImportar, comandoInspecionar, comandoIr, comandoIrJson, comandoRenomearSemantico } from "./index.part05.js";
15
- import { comandoAjudaIa, comandoCompilar, comandoDiagnosticos, comandoExemplosPromptIa, comandoFormatar, comandoPromptIa, comandoPromptIaReact, comandoPromptIaSemaPrimeiro, comandoPromptIaUi, comandoResumo, comandoStarterIa, comandoSyncAiEntrypoints } from "./index.part06.js";
14
+ import { comandoAjudaIa, comandoCompilar, comandoDiagnosticos, comandoExemplosPromptIa, comandoFormatar, comandoPromptIa, comandoPromptIaReact, comandoPromptIaSemaPrimeiro, comandoPromptIaUi, comandoResumo, comandoStarterIa, comandoSyncCodex } from "./index.part06.js";
16
15
  import { comandoContextoIa, comandoPromptCurto, comandoTestar, comandoVerificar, comandoVerificarJson } from "./index.part07.js";
17
16
  export async function principal() {
18
17
  const { comando, resto } = obterArgumentos();
@@ -36,7 +35,7 @@ export async function principal() {
36
35
  }
37
36
  switch (comando) {
38
37
  case "iniciar":
39
- codigoSaida = await comandoIniciar(cwd, normalizarTemplateIniciar(obterOpcao(resto, "--template")));
38
+ codigoSaida = await comandoIniciar(cwd, normalizarTemplateIniciar(obterOpcao(resto, "--template")), { force: possuiFlag(resto, "--force") });
40
39
  break;
41
40
  case "author":
42
41
  codigoSaida = await comandoAuthor(posicionais, resto, possuiFlag(resto, "--json"));
@@ -140,15 +139,12 @@ export async function principal() {
140
139
  case "starter-ia":
141
140
  codigoSaida = await comandoStarterIa();
142
141
  break;
143
- case "sync-ai-entrypoints":
144
- codigoSaida = await comandoSyncAiEntrypoints(possuiFlag(resto, "--json"));
142
+ case "sync-codex":
143
+ codigoSaida = await comandoSyncCodex(possuiFlag(resto, "--json"));
145
144
  break;
146
145
  case "instalar-exemplos":
147
146
  codigoSaida = await comandoInstalarExemplos(possuiFlag(resto, "--json"));
148
147
  break;
149
- case "preflight":
150
- codigoSaida = await billing.comandoPreflightCli(resto, possuiFlag(resto, "--json"));
151
- break;
152
148
  case "docs-impacto":
153
149
  codigoSaida = await comandoDocsImpacto(posicionais, resto, possuiFlag(resto, "--json"));
154
150
  break;
@@ -1,3 +1,5 @@
1
1
  import { type TemplateIniciar } from "./initTemplatesBase.js";
2
- export declare function comandoIniciar(cwd: string, template: TemplateIniciar): Promise<number>;
2
+ export declare function comandoIniciar(cwd: string, template: TemplateIniciar, opcoes?: {
3
+ force?: boolean;
4
+ }): Promise<number>;
3
5
  export declare function comandoInstalarExemplos(emJson: boolean): Promise<number>;
@@ -1,40 +1,69 @@
1
- // SEMA-GOVERNED
2
- // M?dulo: sema.produto.orcamento_semantico
3
- // Contrato: contratos/sema/orcamento_semantico.sema
4
- // Descri??o: comandos de inicializa??o de projeto e sincroniza??o de exemplos oficiais da CLI.
1
+ // SEMA-GOVERNED: sema.produto.cli_init_templates, sema.produto.escrita_segura_workspace
2
+ // Descrição: inicializa projetos preservando arquivos existentes e bloqueando escapes do workspace.
5
3
  import * as fs from "node:fs";
6
4
  import path from "node:path";
7
5
  import { escreverArquivos } from "./fsGovernado.js";
8
6
  import { arquivosTemplateIniciar } from "./initTemplatesBase.js";
9
- import { materializarExemplosOficiais } from "./exemplosOficiais.js";
7
+ import { materializarExemplosOficiais, planejarExemplosOficiais } from "./exemplosOficiais.js";
8
+ import { validarDestinosEscritaWorkspace } from "./workspaceWrite.js";
10
9
  async function sincronizarKitIaInicial(cwd) {
11
- const [{ gerarResumoProjetoIa }, { sincronizarEntryPointsAgentes }] = await Promise.all([
10
+ const [{ gerarResumoProjetoIa }, { sincronizarEntrypointCodex }] = await Promise.all([
12
11
  import("./index.part04.js"),
13
12
  import("./agentEntryPoints.js"),
14
13
  ]);
15
14
  const resumoProjeto = await gerarResumoProjetoIa(cwd, undefined, true);
16
15
  const indexJson = JSON.parse(fs.readFileSync(path.join(resumoProjeto.pastaSaida, "SEMA_INDEX.json"), "utf8"));
17
- const clientes = await sincronizarEntryPointsAgentes(resumoProjeto.baseProjeto, indexJson.agentContextPack);
16
+ const codex = await sincronizarEntrypointCodex(resumoProjeto.baseProjeto, indexJson.agentContextPack);
18
17
  return {
19
18
  artefatos: [...new Set([
20
19
  ...resumoProjeto.artefatos,
21
- ...clientes.arquivos.map((item) => item.caminho),
20
+ ...codex.arquivos.map((item) => item.caminho),
22
21
  ])],
23
- clientes,
22
+ codex,
24
23
  };
25
24
  }
26
- export async function comandoIniciar(cwd, template) {
25
+ export async function comandoIniciar(cwd, template, opcoes = {}) {
27
26
  const arquivos = arquivosTemplateIniciar(template);
28
- await escreverArquivos(cwd, arquivos, { inserirCabecalhoGovernado: true });
27
+ const planoExemplos = await planejarExemplosOficiais();
28
+ if (!planoExemplos.origem) {
29
+ console.error("Diretorio de exemplos oficiais nao foi encontrado no pacote da CLI.");
30
+ return 1;
31
+ }
32
+ const [{ ARQUIVOS_RESUMO_PROJETO_IA }, { listarDestinosEntrypointCodex }] = await Promise.all([
33
+ import("./index.part04.js"),
34
+ import("./agentEntryPoints.js"),
35
+ ]);
36
+ const caminhosTemplate = new Set(arquivos.map((arquivo) => arquivo.caminhoRelativo));
37
+ const destinos = await validarDestinosEscritaWorkspace(cwd, [
38
+ ...caminhosTemplate,
39
+ ...planoExemplos.arquivos.map((arquivo) => arquivo.caminhoRelativo),
40
+ ...ARQUIVOS_RESUMO_PROJETO_IA,
41
+ ...listarDestinosEntrypointCodex("AGENTS.md"),
42
+ ]);
43
+ const existentes = new Set(destinos
44
+ .filter((destino) => caminhosTemplate.has(destino.caminhoRelativo) && destino.existe)
45
+ .map((destino) => destino.caminhoRelativo));
46
+ const arquivosParaEscrever = opcoes.force
47
+ ? arquivos
48
+ : arquivos.filter((arquivo) => !existentes.has(arquivo.caminhoRelativo));
49
+ await escreverArquivos(cwd, arquivosParaEscrever, { inserirCabecalhoGovernado: true });
29
50
  const exemplos = await materializarExemplosOficiais(cwd, true);
30
51
  if (!exemplos.sucesso) {
31
52
  console.error(exemplos.erro);
32
53
  return 1;
33
54
  }
34
55
  const kitIa = await sincronizarKitIaInicial(cwd);
56
+ if (!kitIa.codex.entrypointsLegadosLimpos) {
57
+ console.error("Entrypoints Sema pendentes de revisão manual:");
58
+ for (const caminho of kitIa.codex.entrypointsLegadosPendentes) {
59
+ console.error(`- ${caminho}`);
60
+ }
61
+ return 1;
62
+ }
35
63
  console.log(`Projeto Sema inicializado com template ${template}.`);
64
+ console.log(`Arquivos do projeto: ${arquivosParaEscrever.length} escritos, ${opcoes.force ? 0 : existentes.size} preservados.`);
36
65
  console.log(`Exemplos oficiais sincronizados em ${exemplos.destino} (${exemplos.criados.length} criados, ${exemplos.preservados.length} preservados).`);
37
- console.log(`Kit IA sincronizado (${kitIa.artefatos.length} artefatos; clientes ${kitIa.clientes.criados.length} criados, ${kitIa.clientes.atualizados.length} atualizados, ${kitIa.clientes.preservados.length} preservados).`);
66
+ console.log(`Kit IA Codex-native sincronizado (${kitIa.artefatos.length} artefatos; entrypoint ${kitIa.codex.entrypointCodex}; ${kitIa.codex.criados.length} criados, ${kitIa.codex.atualizados.length} atualizados, ${kitIa.codex.preservados.length} preservados).`);
38
67
  return 0;
39
68
  }
40
69
  export async function comandoInstalarExemplos(emJson) {
@@ -1,7 +1,5 @@
1
- // SEMA-GOVERNED
2
- // M?dulo: sema.produto.orcamento_semantico
3
- // Contrato: contratos/sema/orcamento_semantico.sema
4
- // Descri??o: contrato base e dispatcher de templates de inicializa??o.
1
+ // SEMA-GOVERNED: sema.produto.cli_init_templates
2
+ // Descrição: contrato base e dispatcher dos templates Codex-native de inicialização.
5
3
  import { arquivosInitTemplatesBackend } from "./initTemplatesBackend.js";
6
4
  import { arquivosInitTemplatesWeb } from "./initTemplatesWeb.js";
7
5
  import { arquivosInitTemplatesFlutter } from "./initTemplatesFlutter.js";
@@ -70,21 +68,21 @@ function arquivosApoioIaIniciar() {
70
68
 
71
69
  Este projeto foi inicializado com Sema.
72
70
 
73
- ## Entrada para IA
71
+ ## Entrada oficial do Codex
74
72
 
75
73
  Antes de alterar codigo, contrato ou documentacao:
76
74
 
77
75
  1. leia \`AGENTS.md\`;
78
76
  2. rode \`sema --version\`;
79
- 3. rode \`sema preflight resumo --json\`;
80
- 4. rode \`sema resumo\`;
81
- 5. rode \`sema docs-impacto --intencao "<acao>" --json\`;
82
- 6. leia \`docs/commands.md\` antes de escolher comando ou interpretar \`--saida\`;
83
- 7. use \`exemplos/\` e \`docs/syntax.md\` antes de criar ou corrigir \`.sema\`.
77
+ 3. rode \`sema resumo\`;
78
+ 4. rode \`sema docs-impacto --intencao "<acao>" --json\`;
79
+ 5. leia \`docs/commands.md\` antes de escolher comando ou interpretar \`--saida\`;
80
+ 6. use \`exemplos/\` e \`docs/syntax.md\` antes de criar ou corrigir \`.sema\`.
84
81
 
85
82
  ## Estrutura criada
86
83
 
87
84
  - \`contratos/\`: contratos semanticamente governados.
85
+ - \`AGENTS.md\`: entrypoint oficial do Codex.
88
86
  - \`exemplos/\`: exemplos oficiais da DSL Sema.
89
87
  - \`docs/commands.md\`: catalogo de comandos, gates e regra de \`--saida\`.
90
88
  - \`docs/syntax.md\`: referencia curta para escrever \`.sema\`.
@@ -0,0 +1,22 @@
1
+ declare const IDENTIDADE_DESTINO: unique symbol;
2
+ declare const IDENTIDADE_BASE_DESTINO: unique symbol;
3
+ interface IdentidadeNoFilesystem {
4
+ dev: bigint;
5
+ ino: bigint;
6
+ }
7
+ export interface DestinoEscritaWorkspace {
8
+ caminhoRelativo: string;
9
+ caminhoAbsoluto: string;
10
+ existe: boolean;
11
+ [IDENTIDADE_DESTINO]?: IdentidadeNoFilesystem | null;
12
+ [IDENTIDADE_BASE_DESTINO]?: IdentidadeNoFilesystem;
13
+ }
14
+ export interface OpcoesEscritaWorkspace {
15
+ sobrescrever?: boolean;
16
+ }
17
+ export declare function validarDestinosEscritaWorkspace(base: string, caminhosRelativos: string[]): Promise<DestinoEscritaWorkspace[]>;
18
+ export declare function escreverArquivoWorkspaceSeguro(base: string, caminhoRelativo: string, conteudo: string, opcoes?: OpcoesEscritaWorkspace): Promise<{
19
+ status: "criado" | "atualizado" | "preservado";
20
+ caminho: string;
21
+ }>;
22
+ export {};