@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.
- package/README.md +50 -7
- package/dist/agentContext.d.ts +1 -1
- package/dist/agentContext.js +3 -3
- package/dist/agentContextPack.js +33 -92
- package/dist/agentContextTipos.d.ts +6 -9
- package/dist/agentContextTipos.js +5 -4
- package/dist/agentEntryPoints.d.ts +22 -2
- package/dist/agentEntryPoints.js +229 -126
- package/dist/docs.part01.js +1 -1
- package/dist/docs.part02.js +21 -10
- package/dist/doctorCommand.d.ts +4 -4
- package/dist/doctorCommand.js +21 -10
- package/dist/exemplosOficiais.d.ts +10 -0
- package/dist/exemplosOficiais.js +32 -22
- package/dist/fsGovernado.js +8 -6
- package/dist/iaPrompts.d.ts +2 -2
- package/dist/iaPrompts.js +3 -3
- package/dist/index.part01.d.ts +1 -1
- package/dist/index.part01.js +6 -6
- package/dist/index.part02.js +1 -1
- package/dist/index.part03.d.ts +1 -0
- package/dist/index.part03.js +26 -12
- package/dist/index.part04.d.ts +1 -0
- package/dist/index.part04.js +49 -21
- package/dist/index.part05.js +1 -1
- package/dist/index.part06.d.ts +1 -1
- package/dist/index.part06.js +27 -18
- package/dist/index.part07.js +20 -20
- package/dist/index.part08.js +4 -8
- package/dist/initCommand.d.ts +3 -1
- package/dist/initCommand.js +41 -12
- package/dist/initTemplatesBase.js +8 -10
- package/dist/workspaceWrite.d.ts +22 -0
- package/dist/workspaceWrite.js +332 -0
- package/docs/README.md +10 -4
- package/docs/ai-integration.md +31 -12
- package/docs/ai-onboarding.md +43 -14
- package/docs/ai-workflow.md +22 -39
- package/docs/auth.md +13 -3
- package/docs/cli.md +21 -8
- package/docs/commands.md +9 -10
- package/docs/deploy.md +27 -4
- package/docs/documentation.md +2 -2
- package/docs/env.md +3 -1
- package/docs/getting-started.md +27 -3
- package/docs/repositories.md +18 -2
- package/docs/rollback.md +23 -5
- package/docs/security.md +8 -0
- package/docs/syntax.md +8 -9
- package/docs/testing.md +15 -4
- package/docs/vocabulary.md +2 -1
- package/package.json +20 -12
- package/dist/billing/index.d.ts +0 -17
- package/dist/billing/index.js +0 -74
package/dist/index.part06.js
CHANGED
|
@@ -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 {
|
|
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
|
|
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-
|
|
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
|
|
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
|
-
...
|
|
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-
|
|
151
|
-
sucesso
|
|
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
|
-
|
|
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("
|
|
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(`
|
|
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
|
|
191
|
-
"média: `sema resumo --curto
|
|
192
|
-
"forte: `sema contexto-ia
|
|
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-
|
|
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
|
|
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,
|
|
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;
|
package/dist/index.part07.js
CHANGED
|
@@ -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 {
|
|
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 =
|
|
48
|
+
const prompt = `⚠️ REGRA OBRIGATÓRIA DE GOVERNANÇA:
|
|
49
49
|
|
|
50
|
-
ANTES DE QUALQUER
|
|
51
|
-
1.
|
|
52
|
-
2. Aguarde a resposta com as docs
|
|
53
|
-
3. Leia as docs antes de agir
|
|
54
|
-
4.
|
|
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
|
-
|
|
56
|
+
Você está operando Sema em modo IA-first.
|
|
57
57
|
|
|
58
|
-
Isto
|
|
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:
|
|
65
|
-
-
|
|
66
|
-
-
|
|
67
|
-
-
|
|
68
|
-
-
|
|
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
|
|
161
|
-
if (!
|
|
162
|
-
|
|
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
|
|
239
|
-
if (!
|
|
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
|
-
|
|
244
|
+
dependencias: verificacaoDependencias,
|
|
245
245
|
modulos: [],
|
|
246
246
|
totais: { modulos: 0, alvos: 0, arquivos: 0, testes: 0 },
|
|
247
247
|
}, null, 2));
|
package/dist/index.part08.js
CHANGED
|
@@ -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,
|
|
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-
|
|
144
|
-
codigoSaida = await
|
|
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;
|
package/dist/initCommand.d.ts
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
1
|
import { type TemplateIniciar } from "./initTemplatesBase.js";
|
|
2
|
-
export declare function comandoIniciar(cwd: string, template: TemplateIniciar
|
|
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>;
|
package/dist/initCommand.js
CHANGED
|
@@ -1,40 +1,69 @@
|
|
|
1
|
-
// SEMA-GOVERNED
|
|
2
|
-
//
|
|
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 }, {
|
|
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
|
|
16
|
+
const codex = await sincronizarEntrypointCodex(resumoProjeto.baseProjeto, indexJson.agentContextPack);
|
|
18
17
|
return {
|
|
19
18
|
artefatos: [...new Set([
|
|
20
19
|
...resumoProjeto.artefatos,
|
|
21
|
-
...
|
|
20
|
+
...codex.arquivos.map((item) => item.caminho),
|
|
22
21
|
])],
|
|
23
|
-
|
|
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
|
-
|
|
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;
|
|
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
|
-
//
|
|
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
|
|
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
|
|
80
|
-
4. rode \`sema
|
|
81
|
-
5.
|
|
82
|
-
6.
|
|
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 {};
|