@semacode/cli 3.13.1 → 4.1.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/dist/cliGrammar.js +16 -5
- package/dist/cliHelpTexto.js +4 -3
- package/dist/contextPack.d.ts +75 -0
- package/dist/contextPack.js +133 -0
- package/dist/driftPack.d.ts +65 -0
- package/dist/driftPack.js +96 -0
- package/dist/entrypointPack.d.ts +47 -0
- package/dist/entrypointPack.js +79 -0
- package/dist/index.part05.js +7 -1
- package/dist/index.part06.js +48 -17
- package/dist/index.part07.d.ts +1 -1
- package/dist/index.part07.js +16 -2
- package/dist/index.part08.js +1 -1
- package/dist/indexPack.d.ts +54 -0
- package/dist/indexPack.js +146 -0
- package/dist/init/templates.part01.js +393 -393
- package/dist/init/templates.part02.js +189 -189
- package/dist/initTemplatesBackend.js +73 -73
- package/dist/initTemplatesFlutter.js +137 -137
- package/dist/initTemplatesRuntime.js +350 -350
- package/dist/initTemplatesWeb.js +309 -309
- package/dist/sync/index.js +35 -35
- package/docs/auth.md +26 -26
- package/docs/database.md +15 -15
- package/docs/env.md +16 -16
- package/docs/frontend.md +41 -41
- package/docs/i18n.md +15 -15
- package/exemplos/agendamento.sema +1 -1
- package/exemplos/assinatura.sema +1 -1
- package/exemplos/auditoria.sema +1 -1
- package/exemplos/autenticacao.sema +1 -1
- package/exemplos/author_obra_comum.sema +1 -1
- package/exemplos/author_tema_sensivel.sema +1 -1
- package/exemplos/automacao.sema +1 -1
- package/exemplos/cadastro_usuario.sema +1 -1
- package/exemplos/calculadora.sema +1 -1
- package/exemplos/crud_simples.sema +1 -1
- package/exemplos/estoque.sema +1 -1
- package/exemplos/exportacao.sema +1 -1
- package/exemplos/fila.sema +1 -1
- package/exemplos/integracao_externa.sema +1 -1
- package/exemplos/multi_tenant.sema +1 -1
- package/exemplos/notificacao.sema +1 -1
- package/exemplos/operacao_estrategia.sema +132 -132
- package/exemplos/operacao_estrategia_discovery.sema +220 -220
- package/exemplos/operacao_estrategia_fluxo.sema +114 -114
- package/exemplos/operacao_estrategia_gates.sema +106 -106
- package/exemplos/operacao_estrategia_quarentena.sema +133 -133
- package/exemplos/operacao_estrategia_rollout.sema +124 -124
- package/exemplos/pagamento.sema +1 -1
- package/exemplos/pagamento_dominio.sema +1 -1
- package/exemplos/pedido.sema +1 -1
- package/exemplos/permissao.sema +1 -1
- package/exemplos/persistencia_vendor_first.sema +1 -1
- package/exemplos/php_crud.sema +170 -170
- package/exemplos/profile_conversas.sema +165 -165
- package/exemplos/profile_game.sema +1 -1
- package/exemplos/profile_legal.sema +1 -1
- package/exemplos/profile_ops.sema +1 -1
- package/exemplos/profile_research.sema +1 -1
- package/exemplos/profile_software.sema +1 -1
- package/exemplos/profile_workflow_n8n.sema +1 -1
- package/exemplos/relatorio.sema +1 -1
- package/exemplos/replica_analitica_erp.sema +1 -1
- package/exemplos/testes_embutidos.sema +1 -1
- package/exemplos/tratamento_erro.sema +1 -1
- package/exemplos/upload_arquivo.sema +1 -1
- package/exemplos/webhook.sema +1 -1
- package/node_modules/@sema/gerador-cpp/dist/index.js +176 -176
- package/node_modules/@sema/gerador-css/dist/index.part01.js +10 -10
- package/node_modules/@sema/gerador-dotnet/dist/index.js +169 -169
- package/node_modules/@sema/gerador-html/dist/index.js +17 -17
- package/node_modules/@sema/gerador-python/dist/index.part02.js +3 -3
- package/node_modules/@sema/gerador-typescript/dist/index.part02.js +11 -11
- package/node_modules/@sema/nucleo/dist/diagnosticos/melhorador.js +42 -42
- package/package.json +1 -1
package/dist/index.part06.js
CHANGED
|
@@ -17,6 +17,8 @@ import { descobrirDocsIa, normalizarModoResumo, normalizarTamanhoResumo, renderi
|
|
|
17
17
|
import { gerarResumoProjetoIa } from "./index.part04.js";
|
|
18
18
|
import { carregarContextoModuloIa, gerarArquivosResumoModuloIa } from "./index.part03.js";
|
|
19
19
|
import { coletarResumoSemanticoModulo, renderizarResumoModuloMarkdown, renderizarResumoModuloTexto } from "./index.part02.js";
|
|
20
|
+
import { criarContextPackAPartirDoResumo } from "./contextPack.js";
|
|
21
|
+
import { selecionarIndiceContexto } from "./indexPack.js";
|
|
20
22
|
export async function comandoCompilar(entrada, alvo, saida, estrutura, framework, cwd = process.cwd()) {
|
|
21
23
|
const incompatibilidade = validarCompatibilidadeFramework(alvo, framework);
|
|
22
24
|
if (incompatibilidade) {
|
|
@@ -200,8 +202,8 @@ export async function comandoAjudaIa() {
|
|
|
200
202
|
]));
|
|
201
203
|
console.log("");
|
|
202
204
|
console.log(renderizarSecaoAscii("Capacidade de IA", [
|
|
203
|
-
"fraca: `sema resumo <arquivo> --micro --drift none --json`
|
|
204
|
-
"média: `sema resumo <arquivo> --curto --drift none --json`
|
|
205
|
+
"fraca: `sema resumo <arquivo> --micro --drift none --json` já devolve o context-pack compacto sem inventar evidência de implementação",
|
|
206
|
+
"média: `sema resumo <arquivo> --curto --drift none --json` já compacta o resumo; use `sema drift <arquivo> --cache fresh --json` quando precisar de evidência do código",
|
|
205
207
|
"forte: `sema contexto-ia <arquivo.sema> --saida <diretorio> --json` materializa o pacote completo",
|
|
206
208
|
]));
|
|
207
209
|
console.log("");
|
|
@@ -212,7 +214,7 @@ export async function comandoAjudaIa() {
|
|
|
212
214
|
"Use `sema interativo pipelines --json` para jogos, simulações e híbridos 3D, 2D, retro, texto, XR ou headless.",
|
|
213
215
|
"Use `sema sync-codex` para regenerar o contexto governado do Codex na raiz.",
|
|
214
216
|
"Use `sema instalar-exemplos` para materializar `exemplos/` oficiais sem sobrescrever arquivos locais.",
|
|
215
|
-
"Use `sema resumo <arquivo> --micro --para onboarding --drift none --json` para IA fraca; o
|
|
217
|
+
"Use `sema resumo <arquivo> --micro --para onboarding --drift none --json` para IA fraca; o context-pack é automático e campos derivados ficam não avaliados.",
|
|
216
218
|
"Se `sema resumo` ou outro gate estourar timeout local, aumente o timeout e tente de novo; timeout do agente nao e falha do Sema.",
|
|
217
219
|
"Use `sema prompt-curto <arquivo> --curto --para mudanca` para colar contexto em modelo gratuito.",
|
|
218
220
|
"Use `sema prompt-ia`, `sema prompt-ia-ui`, `sema prompt-ia-react` e `sema prompt-ia-sema-primeiro` conforme a tarefa.",
|
|
@@ -287,6 +289,9 @@ export async function comandoExemplosPromptIa() {
|
|
|
287
289
|
export async function comandoResumo(entrada, args, emJson) {
|
|
288
290
|
const tamanho = normalizarTamanhoResumo(args);
|
|
289
291
|
const modo = normalizarModoResumo(obterOpcao(args, "--para"));
|
|
292
|
+
const pedido = obterOpcao(args, "--pedido");
|
|
293
|
+
const somentePacote = possuiFlag(args, "--somente-pacote");
|
|
294
|
+
const pedidoExplícito = obterOpcao(args, "--pedido")?.trim();
|
|
290
295
|
const pastaSaida = obterOpcao(args, "--saida");
|
|
291
296
|
const escreverNaRaiz = possuiFlag(args, "--raiz");
|
|
292
297
|
const alvo = entrada ? path.resolve(process.cwd(), entrada) : process.cwd();
|
|
@@ -299,6 +304,20 @@ export async function comandoResumo(entrada, args, emJson) {
|
|
|
299
304
|
const texto = tamanho === "medio"
|
|
300
305
|
? renderizarResumoModuloMarkdown(resumoSemantico, modo, guiaPorCapacidade)
|
|
301
306
|
: renderizarResumoModuloTexto(resumoSemantico, tamanho, modo);
|
|
307
|
+
const contextPack = criarContextPackAPartirDoResumo({
|
|
308
|
+
resumo: resumoSemantico,
|
|
309
|
+
pedido: pedidoExplícito,
|
|
310
|
+
modo,
|
|
311
|
+
tamanho,
|
|
312
|
+
analiseDrift: {
|
|
313
|
+
modo: contexto.drift.modo,
|
|
314
|
+
executada: contexto.drift.executada,
|
|
315
|
+
sucesso: contexto.drift.sucesso,
|
|
316
|
+
aviso: contexto.drift.aviso,
|
|
317
|
+
},
|
|
318
|
+
guiaPorCapacidade,
|
|
319
|
+
texto,
|
|
320
|
+
});
|
|
302
321
|
let pastaResumo;
|
|
303
322
|
let artefatosCompactos = [];
|
|
304
323
|
if (pastaSaida) {
|
|
@@ -308,6 +327,14 @@ export async function comandoResumo(entrada, args, emJson) {
|
|
|
308
327
|
artefatosCompactos = gerado.artefatosCompactos;
|
|
309
328
|
}
|
|
310
329
|
if (emJson) {
|
|
330
|
+
if (somentePacote && contextPack) {
|
|
331
|
+
console.log(JSON.stringify(contextPack, null, 2));
|
|
332
|
+
return contexto.drift.sucesso === false ? 1 : 0;
|
|
333
|
+
}
|
|
334
|
+
if (somentePacote) {
|
|
335
|
+
console.log(JSON.stringify(contextPack, null, 2));
|
|
336
|
+
return contexto.drift.sucesso === false ? 1 : 0;
|
|
337
|
+
}
|
|
311
338
|
console.log(JSON.stringify({
|
|
312
339
|
comando: "resumo",
|
|
313
340
|
modo,
|
|
@@ -325,9 +352,7 @@ export async function comandoResumo(entrada, args, emJson) {
|
|
|
325
352
|
avisos: analiseDrift.avisos,
|
|
326
353
|
cache: contexto.drift.drift?.escopo_aplicado.cache ?? null,
|
|
327
354
|
},
|
|
328
|
-
|
|
329
|
-
resumo: resumoSemantico,
|
|
330
|
-
texto,
|
|
355
|
+
contextPack,
|
|
331
356
|
}, null, 2));
|
|
332
357
|
return contexto.drift.sucesso === false ? 1 : 0;
|
|
333
358
|
}
|
|
@@ -335,17 +360,25 @@ export async function comandoResumo(entrada, args, emJson) {
|
|
|
335
360
|
console.log(`Resumo IA-first gerado em ${pastaResumo}`);
|
|
336
361
|
console.log("");
|
|
337
362
|
}
|
|
338
|
-
console.log(
|
|
363
|
+
console.log(JSON.stringify(contextPack, null, 2));
|
|
339
364
|
return contexto.drift.sucesso === false ? 1 : 0;
|
|
340
365
|
}
|
|
341
366
|
const resumoProjeto = await gerarResumoProjetoIa(alvo, pastaSaida, escreverNaRaiz, analiseDrift);
|
|
342
|
-
const
|
|
343
|
-
|
|
344
|
-
:
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
367
|
+
const indexTexto = await readFile(path.join(resumoProjeto.pastaSaida, "SEMA_INDEX.json"), "utf8").catch(() => "");
|
|
368
|
+
const indexPack = selecionarIndiceContexto({
|
|
369
|
+
modulos: resumoProjeto.modulos,
|
|
370
|
+
request: pedidoExplícito ?? `resumo:${tamanho}`,
|
|
371
|
+
baseProject: resumoProjeto.baseProjeto,
|
|
372
|
+
generatedAt: resumoProjeto.geradoEm,
|
|
373
|
+
mode: modo,
|
|
374
|
+
drift: resumoProjeto.analiseDrift.modo,
|
|
375
|
+
sourceIndexChars: indexTexto.length,
|
|
376
|
+
});
|
|
348
377
|
if (emJson) {
|
|
378
|
+
if (somentePacote) {
|
|
379
|
+
console.log(JSON.stringify(indexPack, null, 2));
|
|
380
|
+
return resumoProjeto.analiseDrift.sucesso === false ? 1 : 0;
|
|
381
|
+
}
|
|
349
382
|
console.log(JSON.stringify({
|
|
350
383
|
comando: "resumo",
|
|
351
384
|
modo,
|
|
@@ -358,15 +391,13 @@ export async function comandoResumo(entrada, args, emJson) {
|
|
|
358
391
|
...resumoProjeto.analiseDrift,
|
|
359
392
|
avisos: analiseDrift.avisos,
|
|
360
393
|
},
|
|
361
|
-
|
|
362
|
-
modulos: resumoProjeto.modulos,
|
|
363
|
-
texto,
|
|
394
|
+
indexPack,
|
|
364
395
|
}, null, 2));
|
|
365
396
|
return resumoProjeto.analiseDrift.sucesso === false ? 1 : 0;
|
|
366
397
|
}
|
|
367
398
|
console.log(`Resumo IA-first do projeto gerado em ${resumoProjeto.pastaSaida}`);
|
|
368
399
|
console.log("");
|
|
369
|
-
console.log(
|
|
400
|
+
console.log(JSON.stringify(indexPack, null, 2));
|
|
370
401
|
return resumoProjeto.analiseDrift.sucesso === false ? 1 : 0;
|
|
371
402
|
}
|
|
372
403
|
//# sourceMappingURL=index.part06.js.map
|
package/dist/index.part07.d.ts
CHANGED
|
@@ -8,7 +8,7 @@ export declare function alvosSuportadosPelaStack(fontesLegado: string[] | undefi
|
|
|
8
8
|
export declare function avisoEscopoStackVerificacao(fontesLegado: string[] | undefined, alvosEfetivos: AlvoGeracao[]): string | undefined;
|
|
9
9
|
import { type ResumoModuloVerificacao } from './geracaoCore.js';
|
|
10
10
|
export declare function comandoPromptCurto(entrada: string | undefined, args: string[], emJson: boolean): Promise<number>;
|
|
11
|
-
export declare function comandoContextoIa(arquivo: string, pastaSaida: string | undefined, emJson: boolean): Promise<number>;
|
|
11
|
+
export declare function comandoContextoIa(arquivo: string, pastaSaida: string | undefined, emJson: boolean, args?: string[]): Promise<number>;
|
|
12
12
|
export declare function comandoTestar(arquivo: string, alvo: AlvoGeracao, saida: string, estrutura: EstruturaSaida, framework: FrameworkGeracao): Promise<number>;
|
|
13
13
|
export declare function imprimirResumoVerificacao(resumos: ResumoModuloVerificacao[]): void;
|
|
14
14
|
export declare function comandoVerificar(entrada: string | undefined, baseSaida: string, cwd?: string, opcoes?: OpcoesVerificar): Promise<number>;
|
package/dist/index.part07.js
CHANGED
|
@@ -51,8 +51,10 @@ export function avisoEscopoStackVerificacao(fontesLegado, alvosEfetivos) {
|
|
|
51
51
|
}
|
|
52
52
|
return `Alvos fora da stack detectada (${(fontesLegado ?? []).join(", ")}): ${foraDaStack.join(", ")}. Considere reduzir "alvos" no sema.config.json, remover "fontesLegado" auto-declaradas ou usar --alvo unico.`;
|
|
53
53
|
}
|
|
54
|
+
import { criarAgentContextPack } from './agentContextPack.js';
|
|
55
|
+
import { criarEntrypointPack } from './entrypointPack.js';
|
|
54
56
|
import { escreverArquivos, formatarAvisoArtefatosGeradosAcimaDoLimite, } from './fsGovernado.js';
|
|
55
|
-
import { obterOpcao } from './cliArgs.js';
|
|
57
|
+
import { obterOpcao, possuiFlag } from './cliArgs.js';
|
|
56
58
|
import { avaliarDependenciasVerificacao, imprimirFalhaDependenciasVerificacao } from './doctorCommand.js';
|
|
57
59
|
import { aplicarEstruturaSaida, executarTestesGerados, executarTestesParaVerificacao, gerarArquivosPorAlvo, garantirIr, nomeSubpastaModulo, resolverConfiguracaoVerificacaoPorAlvo, validarCompatibilidadeFramework, } from './geracaoCore.js';
|
|
58
60
|
import { normalizarModoResumo, normalizarTamanhoResumo } from "./index.part01.js";
|
|
@@ -137,8 +139,20 @@ ${contextoProjeto.trim()}
|
|
|
137
139
|
console.log(prompt);
|
|
138
140
|
return 0;
|
|
139
141
|
}
|
|
140
|
-
export async function comandoContextoIa(arquivo, pastaSaida, emJson) {
|
|
142
|
+
export async function comandoContextoIa(arquivo, pastaSaida, emJson, args = []) {
|
|
141
143
|
const resultado = await gerarContextoIa(arquivo, pastaSaida);
|
|
144
|
+
const capacidadeValor = obterOpcao(args, "--capacidade") ?? "media";
|
|
145
|
+
const capacidade = capacidadeValor === "fraca" || capacidadeValor === "forte" ? capacidadeValor : "media";
|
|
146
|
+
if (possuiFlag(args, "--pacote")) {
|
|
147
|
+
const agentContextPack = criarAgentContextPack(resultado.guiaPorCapacidade);
|
|
148
|
+
const pacote = criarEntrypointPack({
|
|
149
|
+
agentContextPack,
|
|
150
|
+
capacity: capacidade,
|
|
151
|
+
rawAgentContextChars: JSON.stringify(agentContextPack).length,
|
|
152
|
+
});
|
|
153
|
+
console.log(JSON.stringify(pacote, null, 2));
|
|
154
|
+
return resultado.sucesso ? 0 : 1;
|
|
155
|
+
}
|
|
142
156
|
if (emJson) {
|
|
143
157
|
console.log(JSON.stringify(resultado, null, 2));
|
|
144
158
|
return 0;
|
package/dist/index.part08.js
CHANGED
|
@@ -175,7 +175,7 @@ export async function principal() {
|
|
|
175
175
|
codigoSaida = await comandoExemplosPromptIa();
|
|
176
176
|
break;
|
|
177
177
|
case "contexto-ia":
|
|
178
|
-
codigoSaida = await comandoContextoIa(posicionais[0] ?? "", obterOpcao(resto, "--saida"), possuiFlag(resto, "--json"));
|
|
178
|
+
codigoSaida = await comandoContextoIa(posicionais[0] ?? "", obterOpcao(resto, "--saida"), possuiFlag(resto, "--json"), resto);
|
|
179
179
|
break;
|
|
180
180
|
default:
|
|
181
181
|
throw erroComandoDesconhecido();
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import type { ResumoSemanticoModuloIa } from "./index.part01.js";
|
|
2
|
+
type EntradaIndice = Pick<ResumoSemanticoModuloIa, "arquivo" | "modulo" | "faz" | "tarefasPrincipais" | "regrasCriticas" | "efeitos" | "riscosPrincipais" | "lacunas" | "arquivosProvaveis" | "checksSugeridos" | "testesMinimos" | "arquivosProvaveisEditar">;
|
|
3
|
+
export type IndexPack = {
|
|
4
|
+
schema: "sema.ai.index-pack/v1";
|
|
5
|
+
selection: "deterministic_weighted_match" | "deterministic_summary_projection";
|
|
6
|
+
request: string;
|
|
7
|
+
source: {
|
|
8
|
+
command: "resumo-projeto";
|
|
9
|
+
baseProject: string;
|
|
10
|
+
generatedAt: string | null;
|
|
11
|
+
totalModules: number;
|
|
12
|
+
mode: string;
|
|
13
|
+
drift: string;
|
|
14
|
+
};
|
|
15
|
+
matches: Array<{
|
|
16
|
+
module: string;
|
|
17
|
+
contract: string;
|
|
18
|
+
relevanceScore: number;
|
|
19
|
+
purpose: string;
|
|
20
|
+
relevantTasks: string[];
|
|
21
|
+
criticalRules: string[];
|
|
22
|
+
effects: string[];
|
|
23
|
+
risks: string[];
|
|
24
|
+
knownGaps: string[];
|
|
25
|
+
likelyFiles: string[];
|
|
26
|
+
filesToEdit: string[];
|
|
27
|
+
requiredChecks: string[];
|
|
28
|
+
minimumTests: string[];
|
|
29
|
+
}>;
|
|
30
|
+
authority: {
|
|
31
|
+
semaRemainsAuthority: true;
|
|
32
|
+
rawIndexForwarded: false;
|
|
33
|
+
executionRequiresFreshValidation: true;
|
|
34
|
+
omitted: string[];
|
|
35
|
+
};
|
|
36
|
+
telemetry: {
|
|
37
|
+
packChars: number;
|
|
38
|
+
packEstimatedTokens: number;
|
|
39
|
+
estimateMethod: "chars_div_4";
|
|
40
|
+
sourceIndexEstimatedTokens: number;
|
|
41
|
+
reductionPercent: number;
|
|
42
|
+
selectedFields: string[];
|
|
43
|
+
};
|
|
44
|
+
};
|
|
45
|
+
export declare function selecionarIndiceContexto(input: {
|
|
46
|
+
modulos: readonly EntradaIndice[];
|
|
47
|
+
request: string;
|
|
48
|
+
baseProject: string;
|
|
49
|
+
generatedAt?: string | null;
|
|
50
|
+
mode?: string;
|
|
51
|
+
drift?: string;
|
|
52
|
+
sourceIndexChars?: number;
|
|
53
|
+
}): IndexPack;
|
|
54
|
+
export {};
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
function texto(value) {
|
|
2
|
+
return typeof value === "string" ? value : "";
|
|
3
|
+
}
|
|
4
|
+
function lista(value) {
|
|
5
|
+
return Array.isArray(value)
|
|
6
|
+
? value.filter((item) => typeof item === "string" && item.length > 0)
|
|
7
|
+
: [];
|
|
8
|
+
}
|
|
9
|
+
function tokens(value) {
|
|
10
|
+
return value
|
|
11
|
+
.toLocaleLowerCase("pt-BR")
|
|
12
|
+
.normalize("NFD")
|
|
13
|
+
.replace(/[\u0300-\u036f]/g, "")
|
|
14
|
+
.split(/[^a-z0-9_]+/)
|
|
15
|
+
.filter((item) => item.length >= 3);
|
|
16
|
+
}
|
|
17
|
+
function correspondeToken(campo, pedido) {
|
|
18
|
+
return tokens(campo).some((token) => [...pedido].some((alvo) => token.startsWith(alvo) || alvo.startsWith(token)));
|
|
19
|
+
}
|
|
20
|
+
function selecionarValores(values, requestTokens, maximo, projetarResumoInteiro) {
|
|
21
|
+
if (projetarResumoInteiro)
|
|
22
|
+
return values.slice(0, maximo);
|
|
23
|
+
return values
|
|
24
|
+
.map((value, index) => ({
|
|
25
|
+
value,
|
|
26
|
+
index,
|
|
27
|
+
score: correspondeToken(value, requestTokens) ? 1 : 0,
|
|
28
|
+
}))
|
|
29
|
+
.sort((a, b) => b.score - a.score || a.index - b.index)
|
|
30
|
+
.filter((item) => item.score > 0)
|
|
31
|
+
.slice(0, maximo)
|
|
32
|
+
.map((item) => item.value);
|
|
33
|
+
}
|
|
34
|
+
function estimarTokens(chars) {
|
|
35
|
+
return Math.ceil(chars / 4);
|
|
36
|
+
}
|
|
37
|
+
function compactarModulo(modulo, requestTokens, projetarResumoInteiro) {
|
|
38
|
+
const tarefas = lista(modulo.tarefasPrincipais);
|
|
39
|
+
const regras = lista(modulo.regrasCriticas);
|
|
40
|
+
const efeitos = lista(modulo.efeitos);
|
|
41
|
+
const riscos = lista(modulo.riscosPrincipais);
|
|
42
|
+
const lacunas = lista(modulo.lacunas);
|
|
43
|
+
const arquivos = lista(modulo.arquivosProvaveis);
|
|
44
|
+
const arquivosEditar = lista(modulo.arquivosProvaveisEditar);
|
|
45
|
+
const checks = lista(modulo.checksSugeridos);
|
|
46
|
+
const testes = lista(modulo.testesMinimos);
|
|
47
|
+
const camposComPeso = [
|
|
48
|
+
[texto(modulo.modulo), [texto(modulo.modulo)], 5],
|
|
49
|
+
[texto(modulo.faz), [texto(modulo.faz)], 3],
|
|
50
|
+
["tarefas", tarefas, 4],
|
|
51
|
+
["regras", regras, 2],
|
|
52
|
+
["efeitos", efeitos, 1],
|
|
53
|
+
["riscos", riscos, 2],
|
|
54
|
+
["lacunas", lacunas, 1],
|
|
55
|
+
["arquivos", [...arquivos, ...arquivosEditar], 1],
|
|
56
|
+
];
|
|
57
|
+
const relevanceScore = projetarResumoInteiro ? 1 : camposComPeso.reduce((total, [, values, weight]) => total + values.reduce((subtotal, value) => subtotal + (correspondeToken(value, requestTokens) ? weight : 0), 0), 0);
|
|
58
|
+
if (!projetarResumoInteiro && relevanceScore === 0)
|
|
59
|
+
return null;
|
|
60
|
+
return {
|
|
61
|
+
module: texto(modulo.modulo),
|
|
62
|
+
contract: texto(modulo.arquivo),
|
|
63
|
+
relevanceScore,
|
|
64
|
+
purpose: texto(modulo.faz),
|
|
65
|
+
relevantTasks: selecionarValores(tarefas, requestTokens, 8, projetarResumoInteiro),
|
|
66
|
+
criticalRules: selecionarValores(regras, requestTokens, 8, projetarResumoInteiro),
|
|
67
|
+
effects: selecionarValores(efeitos, requestTokens, 6, projetarResumoInteiro),
|
|
68
|
+
risks: selecionarValores(riscos, requestTokens, 6, projetarResumoInteiro),
|
|
69
|
+
knownGaps: selecionarValores(lacunas, requestTokens, 6, projetarResumoInteiro),
|
|
70
|
+
likelyFiles: selecionarValores(arquivos, requestTokens, 8, projetarResumoInteiro),
|
|
71
|
+
filesToEdit: selecionarValores(arquivosEditar, requestTokens, 8, projetarResumoInteiro),
|
|
72
|
+
requiredChecks: selecionarValores(checks, requestTokens, 6, projetarResumoInteiro),
|
|
73
|
+
minimumTests: selecionarValores(testes, requestTokens, 6, projetarResumoInteiro),
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
export function selecionarIndiceContexto(input) {
|
|
77
|
+
const request = input.request.trim();
|
|
78
|
+
const requestTokens = new Set(tokens(request));
|
|
79
|
+
const projetarResumoInteiro = request.length === 0 || request.startsWith("resumo:");
|
|
80
|
+
const selection = projetarResumoInteiro
|
|
81
|
+
? "deterministic_summary_projection"
|
|
82
|
+
: "deterministic_weighted_match";
|
|
83
|
+
const matches = input.modulos
|
|
84
|
+
.map((modulo) => compactarModulo(modulo, requestTokens, projetarResumoInteiro))
|
|
85
|
+
.filter((item) => item !== null)
|
|
86
|
+
.sort((a, b) => b.relevanceScore - a.relevanceScore || a.module.localeCompare(b.module, "pt-BR"))
|
|
87
|
+
.slice(0, projetarResumoInteiro ? input.modulos.length : 8);
|
|
88
|
+
const base = {
|
|
89
|
+
schema: "sema.ai.index-pack/v1",
|
|
90
|
+
selection,
|
|
91
|
+
request,
|
|
92
|
+
source: {
|
|
93
|
+
command: "resumo-projeto",
|
|
94
|
+
baseProject: input.baseProject,
|
|
95
|
+
generatedAt: input.generatedAt ?? null,
|
|
96
|
+
totalModules: input.modulos.length,
|
|
97
|
+
mode: input.mode ?? "mudanca",
|
|
98
|
+
drift: input.drift ?? "none",
|
|
99
|
+
},
|
|
100
|
+
matches,
|
|
101
|
+
authority: {
|
|
102
|
+
semaRemainsAuthority: true,
|
|
103
|
+
rawIndexForwarded: false,
|
|
104
|
+
executionRequiresFreshValidation: true,
|
|
105
|
+
omitted: [
|
|
106
|
+
"SEMA_INDEX.json completo",
|
|
107
|
+
"agentContextPack duplicado",
|
|
108
|
+
"módulos e campos fora do orçamento da projeção compacta",
|
|
109
|
+
"catálogo e arquivos não relacionados ao pedido",
|
|
110
|
+
],
|
|
111
|
+
},
|
|
112
|
+
};
|
|
113
|
+
const packChars = JSON.stringify(base).length;
|
|
114
|
+
const sourceIndexChars = input.sourceIndexChars ?? 0;
|
|
115
|
+
const sourceTokens = estimarTokens(sourceIndexChars);
|
|
116
|
+
return {
|
|
117
|
+
...base,
|
|
118
|
+
telemetry: {
|
|
119
|
+
packChars,
|
|
120
|
+
packEstimatedTokens: estimarTokens(packChars),
|
|
121
|
+
estimateMethod: "chars_div_4",
|
|
122
|
+
sourceIndexEstimatedTokens: sourceTokens,
|
|
123
|
+
reductionPercent: sourceIndexChars === 0 ? 0 : Math.round((1 - packChars / sourceIndexChars) * 10000) / 100,
|
|
124
|
+
selectedFields: [
|
|
125
|
+
"request",
|
|
126
|
+
"source.baseProject",
|
|
127
|
+
"source.generatedAt",
|
|
128
|
+
"matches.module",
|
|
129
|
+
"matches.contract",
|
|
130
|
+
"matches.relevanceScore",
|
|
131
|
+
"matches.purpose",
|
|
132
|
+
"matches.relevantTasks",
|
|
133
|
+
"matches.criticalRules",
|
|
134
|
+
"matches.effects",
|
|
135
|
+
"matches.risks",
|
|
136
|
+
"matches.knownGaps",
|
|
137
|
+
"matches.likelyFiles",
|
|
138
|
+
"matches.filesToEdit",
|
|
139
|
+
"matches.requiredChecks",
|
|
140
|
+
"matches.minimumTests",
|
|
141
|
+
"authority",
|
|
142
|
+
],
|
|
143
|
+
},
|
|
144
|
+
};
|
|
145
|
+
}
|
|
146
|
+
//# sourceMappingURL=indexPack.js.map
|