@semacode/cli 1.5.32 → 1.5.34
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/AGENTS.md +16 -2
- package/AGENT_CONTEXT_PACK.json +170 -46
- package/SEMA_BRIEF.curto.txt +4 -4
- package/SEMA_BRIEF.md +19 -18
- package/SEMA_BRIEF.micro.txt +3 -3
- package/SEMA_INDEX.json +645 -233
- package/dist/docs.js +72 -5
- package/dist/docs.js.map +1 -1
- package/dist/index.js +479 -139
- package/dist/index.js.map +1 -1
- package/docs/agentes-por-capacidade.md +42 -0
- package/docs/env.md +3 -3
- package/docs/fluxo-pratico-ia-sema.md +13 -5
- package/docs/integracao-com-ia.md +14 -0
- package/docs/mcp.md +6 -0
- package/package.json +10 -10
package/dist/index.js
CHANGED
|
@@ -36,7 +36,7 @@ Importante:
|
|
|
36
36
|
- a Sema usa \`vinculos\` para ligar contrato a arquivo, simbolo, recurso e superficie real
|
|
37
37
|
- a Sema usa \`execucao\` para explicitar timeout, retry, compensacao e criticidade
|
|
38
38
|
- a Sema usa \`drift\` para medir diferenca entre contrato e codigo vivo com score, confianca e lacunas
|
|
39
|
-
- a Sema usa \`resumo\` e \`prompt-curto\` para IA
|
|
39
|
+
- a Sema usa \`resumo\` e \`prompt-curto\` para IA fraca, gratuita ou com pouco contexto
|
|
40
40
|
- a Sema usa \`contexto-ia\` para gerar \`ast.json\`, \`ir.json\`, \`drift.json\`, \`briefing.json\` e artefatos compactos antes da edicao
|
|
41
41
|
- a Sema pode servir de base para interfaces graficas elegantes e coerentes
|
|
42
42
|
- a Sema nao gera uma interface completa sozinha no estado atual
|
|
@@ -47,7 +47,7 @@ Importante:
|
|
|
47
47
|
Regras:
|
|
48
48
|
- nao invente sintaxe fora da gramatica e dos exemplos oficiais
|
|
49
49
|
- antes de qualquer acao, crie, edite ou remova o contrato .sema aplicavel; isso vale para Software, Author, Workflow, Ops, Game, Legal e Research
|
|
50
|
-
- se a IA for
|
|
50
|
+
- se a IA for fraca, nao tente abrir tudo de uma vez
|
|
51
51
|
- use \`sema resumo\` e \`briefing.min.json\` antes de subir para o pacote completo
|
|
52
52
|
- trate \`ir --json\` como fonte de verdade semantica
|
|
53
53
|
- trate \`briefing.json\` como plano de intervencao antes de editar projeto vivo
|
|
@@ -58,7 +58,7 @@ Regras:
|
|
|
58
58
|
|
|
59
59
|
Comandos essenciais:
|
|
60
60
|
- resumo compacto por capacidade: \`sema resumo <arquivo-ou-pasta> [--micro|--curto|--medio] [--para <resumo|onboarding|review|mudanca|bug|arquitetura>]\`
|
|
61
|
-
- prompt curto para IA
|
|
61
|
+
- prompt curto para IA fraca: \`sema prompt-curto <arquivo-ou-pasta> [--micro|--curto|--medio] [--para <resumo|onboarding|review|mudanca|bug|arquitetura>]\`
|
|
62
62
|
- descoberta do projeto: \`sema inspecionar [arquivo-ou-pasta] --json\`
|
|
63
63
|
- auditoria do contrato vivo: \`sema drift <arquivo-ou-pasta> [--escopo <arquivo|modulo|projeto>] [--json]\`
|
|
64
64
|
- mapa de impacto: \`sema impacto <arquivo-ou-pasta> --alvo <token> [--mudanca <descricao>] [--json]\`
|
|
@@ -76,7 +76,7 @@ Comandos essenciais:
|
|
|
76
76
|
|
|
77
77
|
Antes de editar:
|
|
78
78
|
1. leia README, docs de IA e um exemplo oficial parecido
|
|
79
|
-
2. se a IA for
|
|
79
|
+
2. se a IA for fraca, rode \`sema resumo <arquivo> --micro\` e leia \`briefing.min.json\`
|
|
80
80
|
3. se a IA aguentar mais, rode \`sema drift\` para medir impls, vinculos, rotas, score e lacunas
|
|
81
81
|
4. se a tarefa for pesada, rode \`sema contexto-ia\` e leia \`briefing.json\`
|
|
82
82
|
5. consulte AST e IR do modulo alvo so quando a capacidade realmente aguentar
|
|
@@ -123,7 +123,7 @@ Fontes de verdade, em ordem:
|
|
|
123
123
|
6. README do projeto
|
|
124
124
|
7. gramatica e documentacao de sintaxe da Sema
|
|
125
125
|
8. exemplos oficiais, com prioridade para o vertical de pagamento
|
|
126
|
-
9. \`sema resumo\` e \`briefing.min.json\` quando a IA for
|
|
126
|
+
9. \`sema resumo\` e \`briefing.min.json\` quando a IA for fraca
|
|
127
127
|
10. AST, IR e diagnosticos exportados pela CLI em JSON quando a capacidade aguentar
|
|
128
128
|
|
|
129
129
|
Regras de operacao:
|
|
@@ -334,17 +334,30 @@ Comandos uteis da CLI para esse fluxo:
|
|
|
334
334
|
const DIRETORIO_CLI_ATUAL = path.dirname(fileURLToPath(import.meta.url));
|
|
335
335
|
const VERSAO_CLI = pacoteCli.version;
|
|
336
336
|
const requireRuntimeCli = createRequire(import.meta.url);
|
|
337
|
+
const ARQUIVO_SEMA_BOOT = "SEMA_BOOT.md";
|
|
338
|
+
const ARQUIVO_SEMA_SMALL_MODEL = "SEMA_SMALL_MODEL.md";
|
|
337
339
|
const ARQUIVO_AGENT_CONTEXT_PACK = "AGENT_CONTEXT_PACK.json";
|
|
340
|
+
const ARQUIVO_DOC_AGENTES_CAPACIDADE = "docs/agentes-por-capacidade.md";
|
|
338
341
|
const ARQUIVOS_CANONICOS_IA_RAIZ = [
|
|
342
|
+
ARQUIVO_SEMA_BOOT,
|
|
339
343
|
"llms.txt",
|
|
340
344
|
ARQUIVO_AGENT_CONTEXT_PACK,
|
|
345
|
+
ARQUIVO_SEMA_SMALL_MODEL,
|
|
341
346
|
"SEMA_BRIEF.md",
|
|
342
347
|
"SEMA_INDEX.json",
|
|
343
348
|
"AGENTS.md",
|
|
344
349
|
"README.md",
|
|
345
350
|
"llms-full.txt",
|
|
346
351
|
];
|
|
352
|
+
const CAPACIDADES_IA_OPERACIONAIS = ["fraca", "media", "forte"];
|
|
353
|
+
const ALIASES_CAPACIDADE_IA = {
|
|
354
|
+
pequena: "fraca",
|
|
355
|
+
grande: "forte",
|
|
356
|
+
};
|
|
357
|
+
const MARCADOR_SEMA_AGENT_ENTRYPOINT_INICIO = "<!-- sema:agent-entrypoint:start -->";
|
|
358
|
+
const MARCADOR_SEMA_AGENT_ENTRYPOINT_FIM = "<!-- sema:agent-entrypoint:end -->";
|
|
347
359
|
const DOCUMENTOS_SUPORTE_IA = [
|
|
360
|
+
ARQUIVO_DOC_AGENTES_CAPACIDADE,
|
|
348
361
|
"docs/AGENT_STARTER.md",
|
|
349
362
|
"docs/integracao-com-ia.md",
|
|
350
363
|
"docs/fluxo-pratico-ia-sema.md",
|
|
@@ -465,18 +478,18 @@ function ajuda() {
|
|
|
465
478
|
return [
|
|
466
479
|
renderizarCaixaAscii([
|
|
467
480
|
`Sema CLI v${VERSAO_CLI}`,
|
|
468
|
-
"IA-first para contrato,
|
|
469
|
-
"novo projeto,
|
|
481
|
+
"IA-first para contrato, geração e adoção incremental",
|
|
482
|
+
"novo projeto, edição guiada e legado sem contrato inicial",
|
|
470
483
|
]),
|
|
471
484
|
"",
|
|
472
|
-
renderizarSecaoAscii("Fluxos
|
|
473
|
-
"[1] Projeto novo /
|
|
485
|
+
renderizarSecaoAscii("Fluxos rápidos", [
|
|
486
|
+
"[1] Projeto novo / produção inicial",
|
|
474
487
|
"sema iniciar --template <base|nestjs|fastapi|nextjs-api|nextjs-consumer|react-vite-consumer|angular-consumer|flutter-consumer>",
|
|
475
488
|
"sema validar contratos/<modulo>.sema --json",
|
|
476
489
|
"sema compilar <arquivo-ou-pasta> --alvo <typescript|python|dart|lua> --saida <diretorio>",
|
|
477
490
|
"sema verificar <arquivo-ou-pasta> --json",
|
|
478
491
|
"",
|
|
479
|
-
"[2] Editar projeto que
|
|
492
|
+
"[2] Editar projeto que já usa Sema",
|
|
480
493
|
"sema inspecionar . --json",
|
|
481
494
|
"sema resumo <arquivo-ou-pasta> --micro --para mudanca",
|
|
482
495
|
"sema drift <arquivo-ou-pasta> --escopo modulo --json",
|
|
@@ -492,7 +505,7 @@ function ajuda() {
|
|
|
492
505
|
"sema author validar-narrativa contratos/author.sema --texto <texto> --texto-anterior <texto> --json",
|
|
493
506
|
"sema author validar-proibicoes contratos/author.sema --texto <texto> --json",
|
|
494
507
|
"",
|
|
495
|
-
"[4] Validar profiles
|
|
508
|
+
"[4] Validar profiles semânticos",
|
|
496
509
|
"sema profile validar workflow contratos/sema/workflow_ops.sema --maturidade production --preset webhook --artefato-arquivo workflow.md --json",
|
|
497
510
|
"sema profile validar ops contratos/sema/workflow_ops.sema --maturidade critical --preset deploy --artefato-arquivo runbook.md --json",
|
|
498
511
|
"sema profile validar game contratos/sema/game.sema --maturidade prototype --preset playtest --artefato-arquivo playtest.md --json",
|
|
@@ -500,7 +513,7 @@ function ajuda() {
|
|
|
500
513
|
"sema profile capabilities --json",
|
|
501
514
|
"sema rule-packs --profile legal --json",
|
|
502
515
|
"",
|
|
503
|
-
"[5] Adotar Sema em projeto que ainda
|
|
516
|
+
"[5] Adotar Sema em projeto que ainda não usa",
|
|
504
517
|
"sema importar <fonte> <diretorio> --saida <diretorio> --json",
|
|
505
518
|
"sema formatar <arquivo-ou-pasta>",
|
|
506
519
|
"sema validar <arquivo-ou-pasta> --json",
|
|
@@ -508,23 +521,23 @@ function ajuda() {
|
|
|
508
521
|
]),
|
|
509
522
|
"",
|
|
510
523
|
renderizarSecaoAscii("IA por capacidade", [
|
|
511
|
-
"
|
|
512
|
-
"
|
|
513
|
-
"
|
|
524
|
+
"fraca: sema resumo --micro + briefing.min.json + prompt-curto.txt",
|
|
525
|
+
"média: sema resumo --curto + drift.json + briefing.min.json",
|
|
526
|
+
"forte: sema contexto-ia + briefing.json + ir.json + ast.json",
|
|
514
527
|
]),
|
|
515
528
|
"",
|
|
516
529
|
renderizarSecaoAscii("Comandos principais", [
|
|
517
530
|
"descoberta: sema inspecionar [arquivo-ou-pasta] [--json]",
|
|
518
531
|
"auditoria: sema drift <arquivo-ou-pasta> [--escopo <arquivo|modulo|projeto>] [--incluir-worktrees] [--incluir-consumidores-laterais] [--json]",
|
|
519
532
|
"impacto: sema impacto <arquivo-ou-pasta> --alvo <token> [--mudanca <descricao>] [--escopo <arquivo|modulo|projeto>] [--json]",
|
|
520
|
-
"
|
|
521
|
-
"
|
|
522
|
-
"
|
|
523
|
-
"
|
|
524
|
-
"
|
|
533
|
+
"renomeação: sema renomear-semantico <arquivo-ou-pasta> --de <nome-atual> --para <nome-novo> [--escopo <arquivo|modulo|projeto>] [--json]",
|
|
534
|
+
"importação: sema importar <nestjs|fastapi|flask|nextjs|nextjs-consumer|react-vite-consumer|angular-consumer|flutter-consumer|firebase|dotnet|java|go|rust|cpp|typescript|python|dart> <diretorio> [--saida <diretorio>] [--namespace <base>] [--json]",
|
|
535
|
+
"validação: sema validar <arquivo-ou-pasta> [--json]",
|
|
536
|
+
"diagnóstico: sema diagnosticos <arquivo.sema> [--json]",
|
|
537
|
+
"geração: sema compilar <arquivo-ou-pasta> --alvo <python|typescript|dart|lua> --saida <diretorio> [--estrutura <flat|modulos|backend>] [--framework <base|nestjs|fastapi>]",
|
|
525
538
|
"teste local: sema testar <arquivo.sema> --alvo <python|typescript|dart|lua> --saida <diretorio-temporario> [--estrutura <flat|modulos|backend>] [--framework <base|nestjs|fastapi>]",
|
|
526
|
-
"
|
|
527
|
-
"
|
|
539
|
+
"verificação final: sema verificar <arquivo-ou-pasta> [--saida <diretorio-base>] [--json]",
|
|
540
|
+
"formatação: sema formatar <arquivo-ou-pasta> [--check] [--json]",
|
|
528
541
|
"author: sema author <iniciar|validar|briefing|revisar-cliches|validar-narrativa|validar-proibicoes> [arquivo] [--tema-sensivel] [--preset conto|romance|roteiro|lore|campanha] [--saida <arquivo>] [--texto <texto>] [--json]",
|
|
529
542
|
"profile: sema profile validar <software|workflow|ops|game|legal|research|conversas> <arquivo-ou-pasta> [--maturidade draft|prototype|production|critical] [--preset <preset>] [--artefato <texto>|--artefato-arquivo <arquivo>] [--json]",
|
|
530
543
|
"capabilities: sema profile capabilities [--json]",
|
|
@@ -573,6 +586,52 @@ async function escreverArquivos(base, arquivos) {
|
|
|
573
586
|
await writeFile(destino, arquivo.conteudo, "utf8");
|
|
574
587
|
}
|
|
575
588
|
}
|
|
589
|
+
async function statSeguro(caminho) {
|
|
590
|
+
try {
|
|
591
|
+
return await stat(caminho);
|
|
592
|
+
}
|
|
593
|
+
catch {
|
|
594
|
+
return null;
|
|
595
|
+
}
|
|
596
|
+
}
|
|
597
|
+
function pareceEntradaSemaLegada(conteudo) {
|
|
598
|
+
return /Sema.*Regras obrigat[oó]rias para IA/is.test(conteudo) ||
|
|
599
|
+
/Sema.*Regras obrigatorias para IA/is.test(conteudo) ||
|
|
600
|
+
/Sema.*Regras obrigatórias para IA/is.test(conteudo);
|
|
601
|
+
}
|
|
602
|
+
function montarBlocoGerenciadoSema(conteudo) {
|
|
603
|
+
return `${MARCADOR_SEMA_AGENT_ENTRYPOINT_INICIO}\n${conteudo.trim()}\n${MARCADOR_SEMA_AGENT_ENTRYPOINT_FIM}\n`;
|
|
604
|
+
}
|
|
605
|
+
async function escreverArquivoGerenciadoSema(caminho, conteudo, substituirLegadoSema = false) {
|
|
606
|
+
const bloco = montarBlocoGerenciadoSema(conteudo);
|
|
607
|
+
const atual = await statSeguro(caminho);
|
|
608
|
+
if (!atual) {
|
|
609
|
+
await mkdir(path.dirname(caminho), { recursive: true });
|
|
610
|
+
await writeFile(caminho, bloco, "utf8");
|
|
611
|
+
return "criado";
|
|
612
|
+
}
|
|
613
|
+
if (!atual.isFile()) {
|
|
614
|
+
return "preservado";
|
|
615
|
+
}
|
|
616
|
+
const textoAtual = await readFile(caminho, "utf8");
|
|
617
|
+
let proximo;
|
|
618
|
+
if (textoAtual.includes(MARCADOR_SEMA_AGENT_ENTRYPOINT_INICIO) && textoAtual.includes(MARCADOR_SEMA_AGENT_ENTRYPOINT_FIM)) {
|
|
619
|
+
const inicio = textoAtual.indexOf(MARCADOR_SEMA_AGENT_ENTRYPOINT_INICIO);
|
|
620
|
+
const fim = textoAtual.indexOf(MARCADOR_SEMA_AGENT_ENTRYPOINT_FIM, inicio) + MARCADOR_SEMA_AGENT_ENTRYPOINT_FIM.length;
|
|
621
|
+
proximo = `${textoAtual.slice(0, inicio)}${bloco.trimEnd()}${textoAtual.slice(fim)}`;
|
|
622
|
+
}
|
|
623
|
+
else if (substituirLegadoSema && pareceEntradaSemaLegada(textoAtual)) {
|
|
624
|
+
proximo = bloco;
|
|
625
|
+
}
|
|
626
|
+
else {
|
|
627
|
+
proximo = `${bloco}\n${textoAtual.trimStart()}`;
|
|
628
|
+
}
|
|
629
|
+
if (proximo === textoAtual) {
|
|
630
|
+
return "preservado";
|
|
631
|
+
}
|
|
632
|
+
await writeFile(caminho, proximo.endsWith("\n") ? proximo : `${proximo}\n`, "utf8");
|
|
633
|
+
return "atualizado";
|
|
634
|
+
}
|
|
576
635
|
function obterOpcao(args, nome, padrao) {
|
|
577
636
|
const nomes = [nome, ...Object.entries(ALIAS_OPCOES).filter(([, v]) => v === nome).map(([k]) => k)];
|
|
578
637
|
for (const n of nomes) {
|
|
@@ -1481,81 +1540,154 @@ function descreverFazModulo(ir, modulo) {
|
|
|
1481
1540
|
: `governa o modulo ${normalizarIdentificadorResumo(modulo)}`;
|
|
1482
1541
|
}
|
|
1483
1542
|
function criarGuiaCapacidadeIa() {
|
|
1543
|
+
const fraca = {
|
|
1544
|
+
descricao: "IA fraca, gratuita, local pequena ou com disciplina baixa. Leia o boot card, pare cedo e chame Sema antes de agir.",
|
|
1545
|
+
artefatos: [ARQUIVO_SEMA_BOOT, ARQUIVO_SEMA_SMALL_MODEL, "agent-context-pack.json", "resumo.micro.txt", "briefing.min.json", "prompt-curto.txt"],
|
|
1546
|
+
ordemLeitura: [ARQUIVO_SEMA_BOOT, ARQUIVO_SEMA_SMALL_MODEL, "agent-context-pack.json", "resumo.micro.txt", "briefing.min.json", "resumo.curto.txt"],
|
|
1547
|
+
evitar: ["ast.json", "ir.json", "diagnosticos.json"],
|
|
1548
|
+
};
|
|
1549
|
+
const media = {
|
|
1550
|
+
descricao: "IA média. Aguenta boot, resumo expandido, briefing mínimo, drift e documentação curta.",
|
|
1551
|
+
artefatos: [ARQUIVO_SEMA_BOOT, "agent-context-pack.json", "resumo.curto.txt", "briefing.min.json", "drift.json", "prompt-curto.txt"],
|
|
1552
|
+
ordemLeitura: [ARQUIVO_SEMA_BOOT, "agent-context-pack.json", "resumo.curto.txt", "briefing.min.json", "drift.json", "resumo.md"],
|
|
1553
|
+
evitar: ["ast.json"],
|
|
1554
|
+
};
|
|
1555
|
+
const forte = {
|
|
1556
|
+
descricao: "IA forte, com tool use bom e contexto grande. Pode consumir o pacote completo, mas ainda deve começar pelo boot e pelos gates Sema.",
|
|
1557
|
+
artefatos: [ARQUIVO_SEMA_BOOT, "agent-context-pack.json", "README.md", "resumo.md", "briefing.json", "drift.json", "ir.json", "ast.json"],
|
|
1558
|
+
ordemLeitura: [ARQUIVO_SEMA_BOOT, "agent-context-pack.json", "README.md", "resumo.md", "briefing.json", "drift.json", "ir.json", "ast.json"],
|
|
1559
|
+
evitar: [],
|
|
1560
|
+
};
|
|
1561
|
+
return {
|
|
1562
|
+
fraca,
|
|
1563
|
+
pequena: fraca,
|
|
1564
|
+
media,
|
|
1565
|
+
forte,
|
|
1566
|
+
grande: forte,
|
|
1567
|
+
};
|
|
1568
|
+
}
|
|
1569
|
+
function criarPoliticaIdiomaAgentContext() {
|
|
1484
1570
|
return {
|
|
1485
|
-
|
|
1486
|
-
|
|
1487
|
-
|
|
1488
|
-
|
|
1489
|
-
|
|
1571
|
+
regra: "A linguagem humana da resposta deve seguir o idioma do usuário e preservar acentos, cedilha, pontuação e símbolos esperados. A DSL .sema pode ter palavras-chave ASCII; isso não autoriza PT-BR sem acentos.",
|
|
1572
|
+
idiomaHumanoPadrao: "pt-BR quando a conversa ou o projeto estiverem em português; caso contrário, use o idioma falado pelo usuário.",
|
|
1573
|
+
preservarAcentos: true,
|
|
1574
|
+
separarDslDeTextoHumano: true,
|
|
1575
|
+
comandosESimbolos: "Não traduza comandos, nomes de arquivos, rotas, símbolos de código ou palavras-chave da DSL.",
|
|
1576
|
+
};
|
|
1577
|
+
}
|
|
1578
|
+
function criarEntrypointsClientesIa() {
|
|
1579
|
+
return [
|
|
1580
|
+
{
|
|
1581
|
+
cliente: "copilot",
|
|
1582
|
+
arquivos: [".github/copilot-instructions.md", "AGENTS.md", ARQUIVO_SEMA_BOOT],
|
|
1583
|
+
capacidadePadrao: "media",
|
|
1584
|
+
observacao: "VS Code/Copilot deve receber uma instrução curta e repetida no arquivo próprio, sem depender só do AGENTS.md.",
|
|
1490
1585
|
},
|
|
1491
|
-
|
|
1492
|
-
|
|
1493
|
-
|
|
1494
|
-
|
|
1495
|
-
|
|
1586
|
+
{
|
|
1587
|
+
cliente: "cline",
|
|
1588
|
+
arquivos: [".clinerules/00-sema.md", ".clinerules", ARQUIVO_SEMA_BOOT],
|
|
1589
|
+
capacidadePadrao: "fraca",
|
|
1590
|
+
observacao: "Cline costuma obedecer melhor quando o gate Sema vem em arquivo curto; se .clinerules for arquivo legado, o Sema atualiza esse fallback.",
|
|
1496
1591
|
},
|
|
1497
|
-
|
|
1498
|
-
|
|
1499
|
-
|
|
1500
|
-
|
|
1501
|
-
|
|
1592
|
+
{
|
|
1593
|
+
cliente: "roo",
|
|
1594
|
+
arquivos: [".roo/rules/00-sema.md", "AGENTS.md", ARQUIVO_SEMA_BOOT],
|
|
1595
|
+
capacidadePadrao: "fraca",
|
|
1596
|
+
observacao: "Roo Code deve começar por uma regra dedicada em .roo/rules antes de abrir arquivos longos.",
|
|
1502
1597
|
},
|
|
1503
|
-
|
|
1598
|
+
{
|
|
1599
|
+
cliente: "opencode",
|
|
1600
|
+
arquivos: [".opencode/instructions.md", "AGENTS.md", ARQUIVO_SEMA_BOOT],
|
|
1601
|
+
capacidadePadrao: "media",
|
|
1602
|
+
observacao: "OpenCode deve receber a mesma regra curta em instructions.md quando a pasta .opencode já existir.",
|
|
1603
|
+
},
|
|
1604
|
+
{
|
|
1605
|
+
cliente: "generico",
|
|
1606
|
+
arquivos: [ARQUIVO_SEMA_BOOT, ARQUIVO_SEMA_SMALL_MODEL, ARQUIVO_AGENT_CONTEXT_PACK],
|
|
1607
|
+
capacidadePadrao: "fraca",
|
|
1608
|
+
observacao: "Qualquer agente sem integração específica começa pelo boot card e só sobe contexto se passar pelos gates.",
|
|
1609
|
+
},
|
|
1610
|
+
];
|
|
1611
|
+
}
|
|
1612
|
+
function criarFailClosedAgentContext() {
|
|
1613
|
+
return [
|
|
1614
|
+
"Se não conseguir chamar Sema, pare e declare bloqueio em vez de editar código ou contrato.",
|
|
1615
|
+
"Se não houver contrato aplicável, crie ou edite o .sema antes do código.",
|
|
1616
|
+
"Se o MCP remoto não tiver projeto sincronizado, use sema_chat_contexto e sema_sync/conteúdo inline; não peça para ler C:\\GitHub\\Sema.",
|
|
1617
|
+
"Se for criar ou corrigir .sema, use sema_exemplos antes de escrever sintaxe.",
|
|
1618
|
+
"Se a resposta humana estiver em PT-BR, preserve acentos e símbolos mesmo que a DSL use ASCII.",
|
|
1619
|
+
];
|
|
1504
1620
|
}
|
|
1505
1621
|
function criarAgentContextPack(guiaPorCapacidade) {
|
|
1506
1622
|
const fontes = [
|
|
1507
1623
|
{
|
|
1508
|
-
caminho:
|
|
1624
|
+
caminho: ARQUIVO_SEMA_BOOT,
|
|
1509
1625
|
tipo: "entrypoint",
|
|
1510
1626
|
prioridade: 1,
|
|
1511
1627
|
obrigatorio: true,
|
|
1628
|
+
quandoUsar: "sempre no primeiro contato de qualquer agente com o projeto",
|
|
1629
|
+
incluirTextoBrutoQuando: "a IA precisa de um boot curto, fail-closed e independente do tamanho de contexto",
|
|
1630
|
+
},
|
|
1631
|
+
{
|
|
1632
|
+
caminho: ARQUIVO_SEMA_SMALL_MODEL,
|
|
1633
|
+
tipo: "entrypoint",
|
|
1634
|
+
prioridade: 2,
|
|
1635
|
+
obrigatorio: true,
|
|
1636
|
+
quandoUsar: "IA fraca, Copilot, modelo local pequeno, Cline/Roo com pouco contexto ou tarefa curta",
|
|
1637
|
+
incluirTextoBrutoQuando: "a IA tende a ignorar instruções longas ou copiar a estética ASCII da DSL",
|
|
1638
|
+
},
|
|
1639
|
+
{
|
|
1640
|
+
caminho: "llms.txt",
|
|
1641
|
+
tipo: "entrypoint",
|
|
1642
|
+
prioridade: 3,
|
|
1643
|
+
obrigatorio: true,
|
|
1512
1644
|
quandoUsar: "sempre no primeiro contato com o projeto",
|
|
1513
|
-
incluirTextoBrutoQuando: "a IA precisa de
|
|
1645
|
+
incluirTextoBrutoQuando: "a IA precisa de orientação compacta para operar o repositório",
|
|
1514
1646
|
},
|
|
1515
1647
|
{
|
|
1516
1648
|
caminho: ARQUIVO_AGENT_CONTEXT_PACK,
|
|
1517
1649
|
tipo: "entrypoint",
|
|
1518
|
-
prioridade:
|
|
1650
|
+
prioridade: 4,
|
|
1519
1651
|
obrigatorio: true,
|
|
1520
1652
|
quandoUsar: "sempre antes de decidir quais documentos ou exemplos abrir",
|
|
1521
|
-
incluirTextoBrutoQuando: "a IA precisa auditar regras,
|
|
1653
|
+
incluirTextoBrutoQuando: "a IA precisa auditar regras, proibições, prioridades e fontes de verdade",
|
|
1522
1654
|
},
|
|
1523
1655
|
{
|
|
1524
1656
|
caminho: "SEMA_BRIEF.micro.txt",
|
|
1525
1657
|
tipo: "resumo",
|
|
1526
|
-
prioridade:
|
|
1658
|
+
prioridade: 5,
|
|
1527
1659
|
obrigatorio: true,
|
|
1528
|
-
quandoUsar: "IA
|
|
1660
|
+
quandoUsar: "IA fraca, onboarding, chat remoto ou primeiro triage",
|
|
1529
1661
|
incluirTextoBrutoQuando: "a tarefa cabe em contexto curto",
|
|
1530
1662
|
},
|
|
1531
1663
|
{
|
|
1532
1664
|
caminho: "SEMA_BRIEF.curto.txt",
|
|
1533
1665
|
tipo: "resumo",
|
|
1534
|
-
prioridade:
|
|
1666
|
+
prioridade: 6,
|
|
1535
1667
|
obrigatorio: true,
|
|
1536
|
-
quandoUsar: "IA
|
|
1537
|
-
incluirTextoBrutoQuando: "o
|
|
1668
|
+
quandoUsar: "IA média, mudança pequena ou review rápido",
|
|
1669
|
+
incluirTextoBrutoQuando: "o módulo alvo ainda não está claro pelo micro",
|
|
1538
1670
|
},
|
|
1539
1671
|
{
|
|
1540
1672
|
caminho: "SEMA_INDEX.json",
|
|
1541
1673
|
tipo: "indice",
|
|
1542
|
-
prioridade:
|
|
1674
|
+
prioridade: 7,
|
|
1543
1675
|
obrigatorio: true,
|
|
1544
|
-
quandoUsar: "antes de abrir
|
|
1545
|
-
incluirTextoBrutoQuando: "a IA precisa mapear
|
|
1676
|
+
quandoUsar: "antes de abrir código cru ou escolher contrato alvo",
|
|
1677
|
+
incluirTextoBrutoQuando: "a IA precisa mapear módulos, lacunas, riscos ou arquivos prováveis",
|
|
1546
1678
|
},
|
|
1547
1679
|
{
|
|
1548
1680
|
caminho: "AGENTS.md",
|
|
1549
1681
|
tipo: "operacional",
|
|
1550
|
-
prioridade:
|
|
1682
|
+
prioridade: 8,
|
|
1551
1683
|
obrigatorio: true,
|
|
1552
|
-
quandoUsar: "antes de editar
|
|
1553
|
-
incluirTextoBrutoQuando: "a IA precisa confirmar regras locais
|
|
1684
|
+
quandoUsar: "antes de editar código, contrato, docs operacionais, release ou deploy",
|
|
1685
|
+
incluirTextoBrutoQuando: "a IA precisa confirmar regras locais obrigatórias e prioridades do projeto",
|
|
1554
1686
|
},
|
|
1555
1687
|
{
|
|
1556
1688
|
caminho: "exemplos/",
|
|
1557
1689
|
tipo: "exemplos",
|
|
1558
|
-
prioridade:
|
|
1690
|
+
prioridade: 9,
|
|
1559
1691
|
obrigatorio: true,
|
|
1560
1692
|
quandoUsar: "antes de criar ou corrigir arquivo .sema, profile, Author, workflow, ops, game, legal ou research",
|
|
1561
1693
|
incluirTextoBrutoQuando: "a IA vai escrever sintaxe Sema ou comparar um contrato com formato oficial",
|
|
@@ -1563,72 +1695,246 @@ function criarAgentContextPack(guiaPorCapacidade) {
|
|
|
1563
1695
|
{
|
|
1564
1696
|
caminho: "docs/AGENT_STARTER.md",
|
|
1565
1697
|
tipo: "docs",
|
|
1566
|
-
prioridade:
|
|
1698
|
+
prioridade: 10,
|
|
1567
1699
|
obrigatorio: false,
|
|
1568
|
-
quandoUsar: "onboarding de agente novo ou
|
|
1569
|
-
incluirTextoBrutoQuando: "o agente remoto
|
|
1700
|
+
quandoUsar: "onboarding de agente novo ou explicação curta do fluxo",
|
|
1701
|
+
incluirTextoBrutoQuando: "o agente remoto não conhece Sema ainda",
|
|
1702
|
+
},
|
|
1703
|
+
{
|
|
1704
|
+
caminho: ARQUIVO_DOC_AGENTES_CAPACIDADE,
|
|
1705
|
+
tipo: "docs",
|
|
1706
|
+
prioridade: 11,
|
|
1707
|
+
obrigatorio: false,
|
|
1708
|
+
quandoUsar: "configurar Copilot, Cline, Roo Code, OpenCode ou outro agente com disciplina variável",
|
|
1709
|
+
incluirTextoBrutoQuando: "a IA precisa entender tiers fraca/média/forte e política de idioma",
|
|
1570
1710
|
},
|
|
1571
1711
|
{
|
|
1572
1712
|
caminho: "docs/sintaxe.md",
|
|
1573
1713
|
tipo: "docs",
|
|
1574
|
-
prioridade:
|
|
1714
|
+
prioridade: 12,
|
|
1575
1715
|
obrigatorio: false,
|
|
1576
|
-
quandoUsar: "
|
|
1577
|
-
incluirTextoBrutoQuando: "a IA vai editar contrato e os exemplos
|
|
1716
|
+
quandoUsar: "dúvida de gramática, blocos ou formato do DSL",
|
|
1717
|
+
incluirTextoBrutoQuando: "a IA vai editar contrato e os exemplos não bastam",
|
|
1578
1718
|
},
|
|
1579
1719
|
{
|
|
1580
1720
|
caminho: "contratos/",
|
|
1581
1721
|
tipo: "contrato",
|
|
1582
|
-
prioridade:
|
|
1722
|
+
prioridade: 13,
|
|
1583
1723
|
obrigatorio: true,
|
|
1584
|
-
quandoUsar: "antes de qualquer
|
|
1724
|
+
quandoUsar: "antes de qualquer implementação ou alteração de comportamento",
|
|
1585
1725
|
incluirTextoBrutoQuando: "a tarefa toca uma capacidade governada por contrato",
|
|
1586
1726
|
},
|
|
1587
1727
|
];
|
|
1588
1728
|
return {
|
|
1589
1729
|
nome: "Agent Context Pack",
|
|
1590
|
-
versao:
|
|
1591
|
-
objetivo: "Dar a agentes IA uma entrada curta, estruturada e
|
|
1730
|
+
versao: 2,
|
|
1731
|
+
objetivo: "Dar a agentes IA uma entrada curta, estruturada e auditável antes de abrir código cru ou inventar contexto.",
|
|
1592
1732
|
ordemLeitura: [
|
|
1733
|
+
ARQUIVO_SEMA_BOOT,
|
|
1593
1734
|
"llms.txt",
|
|
1594
1735
|
ARQUIVO_AGENT_CONTEXT_PACK,
|
|
1736
|
+
ARQUIVO_SEMA_SMALL_MODEL,
|
|
1595
1737
|
"SEMA_BRIEF.micro.txt",
|
|
1596
1738
|
"SEMA_INDEX.json",
|
|
1597
1739
|
"AGENTS.md",
|
|
1598
1740
|
"exemplos/",
|
|
1599
1741
|
],
|
|
1600
1742
|
regrasObrigatorias: [
|
|
1601
|
-
"Contrato vem antes da
|
|
1602
|
-
"Leia
|
|
1743
|
+
"Contrato vem antes da ação.",
|
|
1744
|
+
"Leia SEMA_BOOT.md antes de qualquer outro artefato de IA.",
|
|
1745
|
+
"Leia AGENTS.md antes de editar código, contrato, docs operacionais, release ou deploy.",
|
|
1603
1746
|
"Use exemplos oficiais antes de criar ou corrigir sintaxe .sema.",
|
|
1604
|
-
"Use SEMA_INDEX.json para escolher contrato,
|
|
1747
|
+
"Use SEMA_INDEX.json para escolher contrato, módulo e arquivos prováveis antes de abrir código cru.",
|
|
1605
1748
|
"Valide .sema alterado e rode drift antes de concluir.",
|
|
1606
|
-
"Quando faltar contrato
|
|
1749
|
+
"Quando faltar contrato aplicável, crie ou edite o contrato antes do código.",
|
|
1750
|
+
"Responda no idioma do usuário e preserve acentos, cedilha, pontuação e símbolos humanos.",
|
|
1607
1751
|
],
|
|
1608
1752
|
proibicoes: [
|
|
1609
|
-
"
|
|
1610
|
-
"
|
|
1611
|
-
"
|
|
1612
|
-
"
|
|
1613
|
-
"
|
|
1753
|
+
"Não inventar sintaxe Sema fora da gramática e dos exemplos oficiais.",
|
|
1754
|
+
"Não tratar README, texto livre ou código como fonte superior ao contrato.",
|
|
1755
|
+
"Não sincronizar segredos, .env, node_modules, builds, caches, uploads ou artefatos privados fora do escopo.",
|
|
1756
|
+
"Não publicar, deployar ou remover capacidade sem contrato, drift e verificação.",
|
|
1757
|
+
"Não misturar repositório público e privado sem conferir docs de repositórios e AGENTS.md.",
|
|
1758
|
+
"Não usar a estética ASCII da DSL como desculpa para escrever PT-BR sem acentos.",
|
|
1614
1759
|
],
|
|
1615
1760
|
prioridades: [
|
|
1616
1761
|
"Menor artefato suficiente primeiro.",
|
|
1617
|
-
"Contrato,
|
|
1762
|
+
"Contrato, índice e AGENTS antes de código cru.",
|
|
1618
1763
|
"Exemplos oficiais antes de nova sintaxe.",
|
|
1619
|
-
"
|
|
1620
|
-
"Se risco ou escopo estiver
|
|
1764
|
+
"Diagnóstico estruturado antes de opinião livre.",
|
|
1765
|
+
"Se risco ou escopo estiver ambíguo, parar e pedir contrato/contexto.",
|
|
1621
1766
|
],
|
|
1622
1767
|
fontes,
|
|
1623
1768
|
exemplosOficiais: [...EXEMPLOS_OFICIAIS_AGENT_CONTEXT],
|
|
1624
1769
|
textoBrutoSobDemanda: Object.fromEntries(fontes.map((fonte) => [fonte.caminho, fonte.incluirTextoBrutoQuando])),
|
|
1625
1770
|
guiaPorCapacidade: {
|
|
1771
|
+
fraca: guiaPorCapacidade.fraca.ordemLeitura,
|
|
1626
1772
|
pequena: guiaPorCapacidade.pequena.ordemLeitura,
|
|
1627
1773
|
media: guiaPorCapacidade.media.ordemLeitura,
|
|
1774
|
+
forte: guiaPorCapacidade.forte.ordemLeitura,
|
|
1628
1775
|
grande: guiaPorCapacidade.grande.ordemLeitura,
|
|
1629
1776
|
},
|
|
1777
|
+
aliasesCapacidade: { ...ALIASES_CAPACIDADE_IA },
|
|
1778
|
+
entrypointsClientes: criarEntrypointsClientesIa(),
|
|
1779
|
+
politicaIdioma: criarPoliticaIdiomaAgentContext(),
|
|
1780
|
+
failClosed: criarFailClosedAgentContext(),
|
|
1630
1781
|
};
|
|
1631
1782
|
}
|
|
1783
|
+
function renderizarSemaBoot(agentContextPack) {
|
|
1784
|
+
const politica = agentContextPack.politicaIdioma;
|
|
1785
|
+
return `# SEMA_BOOT
|
|
1786
|
+
|
|
1787
|
+
Você está em um projeto governado por Sema. O contrato semântico vem antes de qualquer ação.
|
|
1788
|
+
|
|
1789
|
+
## Primeira ação
|
|
1790
|
+
|
|
1791
|
+
1. Se houver MCP Sema, chame Sema antes de editar.
|
|
1792
|
+
2. Em IDE local, confirme que \`AGENTS.md\` existe e chame \`sema_resumo\`.
|
|
1793
|
+
3. Em chat ou MCP remoto sem workspace sincronizado, comece por \`sema_chat_contexto\` e use \`sema_sync\` ou conteúdo inline.
|
|
1794
|
+
4. Antes de criar ou corrigir \`.sema\`, use \`sema_exemplos\`.
|
|
1795
|
+
5. Se não conseguir chamar Sema, pare e diga que está bloqueado.
|
|
1796
|
+
|
|
1797
|
+
## Capacidade do agente
|
|
1798
|
+
|
|
1799
|
+
- Fraca: leia \`${ARQUIVO_SEMA_SMALL_MODEL}\`, \`SEMA_BRIEF.micro.txt\`, \`${ARQUIVO_AGENT_CONTEXT_PACK}\` e só suba contexto se necessário.
|
|
1800
|
+
- Média: leia este boot, \`${ARQUIVO_AGENT_CONTEXT_PACK}\`, \`SEMA_BRIEF.curto.txt\`, \`SEMA_INDEX.json\` e a doc indicada pelo Sema.
|
|
1801
|
+
- Forte: leia este boot, \`${ARQUIVO_AGENT_CONTEXT_PACK}\`, \`SEMA_BRIEF.md\`, \`SEMA_INDEX.json\`, \`AGENTS.md\` e rode os gates completos.
|
|
1802
|
+
|
|
1803
|
+
## Idioma humano
|
|
1804
|
+
|
|
1805
|
+
${politica.regra}
|
|
1806
|
+
|
|
1807
|
+
- Use o idioma falado pelo usuário.
|
|
1808
|
+
- Em PT-BR, escreva com acentos, cedilha e pontuação normal.
|
|
1809
|
+
- Não copie a estética ASCII da DSL para propostas, respostas, docs humanas, mensagens de erro ou textos Author.
|
|
1810
|
+
- Não traduza comandos, rotas, nomes de arquivos, símbolos de código nem palavras-chave da DSL.
|
|
1811
|
+
|
|
1812
|
+
## Falha fechada
|
|
1813
|
+
|
|
1814
|
+
${agentContextPack.failClosed.map((regra) => `- ${regra}`).join("\n")}
|
|
1815
|
+
`;
|
|
1816
|
+
}
|
|
1817
|
+
function renderizarSemaSmallModel(agentContextPack) {
|
|
1818
|
+
return `# SEMA_SMALL_MODEL
|
|
1819
|
+
|
|
1820
|
+
Leia isto primeiro se você tem pouco contexto, pouca memória, pouco tool use ou tendência a ignorar instruções longas.
|
|
1821
|
+
|
|
1822
|
+
1. Não edite nada antes de chamar Sema.
|
|
1823
|
+
2. Se houver MCP: use \`sema_resumo\`, \`sema_docs_impacto\`, \`sema_drift\`, \`sema_validar\` e \`sema_finalizar_mudanca\`.
|
|
1824
|
+
3. Se for remoto sem workspace: não peça para ler pasta local. Use \`sema_chat_contexto\`, \`sema_sync\` ou conteúdo inline.
|
|
1825
|
+
4. Se for escrever \`.sema\`: use \`sema_exemplos\` antes.
|
|
1826
|
+
5. Se não houver contrato: crie ou edite o contrato antes do código.
|
|
1827
|
+
6. Se não conseguir chamar Sema: pare e declare bloqueio.
|
|
1828
|
+
7. Responda no idioma do usuário. Em PT-BR, use acentos e símbolos normais.
|
|
1829
|
+
|
|
1830
|
+
Ordem curta:
|
|
1831
|
+
|
|
1832
|
+
- \`${ARQUIVO_SEMA_BOOT}\`
|
|
1833
|
+
- \`SEMA_BRIEF.micro.txt\`
|
|
1834
|
+
- \`${ARQUIVO_AGENT_CONTEXT_PACK}\`
|
|
1835
|
+
- \`SEMA_INDEX.json\`
|
|
1836
|
+
- \`AGENTS.md\`
|
|
1837
|
+
|
|
1838
|
+
Fail-closed:
|
|
1839
|
+
|
|
1840
|
+
${agentContextPack.failClosed.map((regra) => `- ${regra}`).join("\n")}
|
|
1841
|
+
`;
|
|
1842
|
+
}
|
|
1843
|
+
function renderizarDocumentoAgentesPorCapacidade(agentContextPack) {
|
|
1844
|
+
return `# Agentes por capacidade
|
|
1845
|
+
|
|
1846
|
+
Sema deve funcionar em agentes fortes, médios e fracos. A diferença não é só tamanho de contexto; é disciplina operacional.
|
|
1847
|
+
|
|
1848
|
+
## Fraca
|
|
1849
|
+
|
|
1850
|
+
Use para Copilot em modo simples, Cline/Roo com pouco contexto, modelos locais pequenos e agentes que ignoram instrução longa.
|
|
1851
|
+
|
|
1852
|
+
- Entrada: \`${ARQUIVO_SEMA_BOOT}\` -> \`${ARQUIVO_SEMA_SMALL_MODEL}\` -> \`SEMA_BRIEF.micro.txt\`.
|
|
1853
|
+
- Não abrir AST/IR completos no começo.
|
|
1854
|
+
- Não editar se Sema não respondeu.
|
|
1855
|
+
- Não pedir para MCP remoto ler pasta local.
|
|
1856
|
+
|
|
1857
|
+
## Média
|
|
1858
|
+
|
|
1859
|
+
Use para agentes com bom contexto, mas sem garantia de seguir todos os gates.
|
|
1860
|
+
|
|
1861
|
+
- Entrada: \`${ARQUIVO_SEMA_BOOT}\` -> \`${ARQUIVO_AGENT_CONTEXT_PACK}\` -> \`SEMA_BRIEF.curto.txt\` -> \`SEMA_INDEX.json\`.
|
|
1862
|
+
- Rodar docs-impacto antes de agir.
|
|
1863
|
+
- Validar drift e contrato no fechamento.
|
|
1864
|
+
|
|
1865
|
+
## Forte
|
|
1866
|
+
|
|
1867
|
+
Use para Codex, Claude e agentes com tool use confiável.
|
|
1868
|
+
|
|
1869
|
+
- Entrada: \`${ARQUIVO_SEMA_BOOT}\` -> \`${ARQUIVO_AGENT_CONTEXT_PACK}\` -> \`SEMA_BRIEF.md\` -> \`SEMA_INDEX.json\`.
|
|
1870
|
+
- Pode consumir AST/IR/drift completos.
|
|
1871
|
+
- Ainda deve respeitar contrato primeiro e falha fechada.
|
|
1872
|
+
|
|
1873
|
+
## Idioma
|
|
1874
|
+
|
|
1875
|
+
${agentContextPack.politicaIdioma.regra}
|
|
1876
|
+
|
|
1877
|
+
A gramática Sema pode ter palavras-chave ASCII. Isso não autoriza resposta humana sem acentos.
|
|
1878
|
+
|
|
1879
|
+
## Clientes
|
|
1880
|
+
|
|
1881
|
+
${agentContextPack.entrypointsClientes.map((cliente) => `- ${cliente.cliente}: ${cliente.arquivos.join(", ")}. Capacidade padrão: ${cliente.capacidadePadrao}. ${cliente.observacao}`).join("\n")}
|
|
1882
|
+
`;
|
|
1883
|
+
}
|
|
1884
|
+
function renderizarInstrucaoClienteSema(cliente, capacidade, agentContextPack) {
|
|
1885
|
+
const guia = agentContextPack.guiaPorCapacidade[capacidade];
|
|
1886
|
+
const tituloCliente = cliente === "generico" ? "agente" : cliente;
|
|
1887
|
+
return `# Sema para ${tituloCliente}
|
|
1888
|
+
|
|
1889
|
+
Este workspace é governado por Sema. Antes de qualquer ação em código, contrato, documentação operacional, workflow, profile ou deploy:
|
|
1890
|
+
|
|
1891
|
+
1. Leia \`${ARQUIVO_SEMA_BOOT}\`.
|
|
1892
|
+
2. Chame Sema. Se MCP estiver disponível, use \`sema_resumo\` e depois \`sema_docs_impacto\` com a intenção declarada.
|
|
1893
|
+
3. Antes de editar código existente, rode \`sema_drift\`.
|
|
1894
|
+
4. Antes de criar ou editar \`.sema\`, use \`sema_exemplos\` e \`sema_inspecionar\`.
|
|
1895
|
+
5. Ao concluir mudança de contrato, rode \`sema_validar\`.
|
|
1896
|
+
6. Antes de finalizar, use \`sema_finalizar_mudanca\` com as docs lidas.
|
|
1897
|
+
|
|
1898
|
+
Capacidade padrão deste cliente: ${capacidade}.
|
|
1899
|
+
Ordem de leitura: ${guia.join(" -> ")}.
|
|
1900
|
+
|
|
1901
|
+
Falha fechada:
|
|
1902
|
+
${agentContextPack.failClosed.map((regra) => `- ${regra}`).join("\n")}
|
|
1903
|
+
|
|
1904
|
+
Idioma:
|
|
1905
|
+
- Responda no idioma do usuário.
|
|
1906
|
+
- Em PT-BR, use acentos, cedilha, pontuação e símbolos normais.
|
|
1907
|
+
- A DSL \`.sema\` pode ser ASCII; texto humano não precisa ser.
|
|
1908
|
+
- Não traduza comandos, rotas, arquivos, símbolos de código nem palavras-chave da DSL.
|
|
1909
|
+
`;
|
|
1910
|
+
}
|
|
1911
|
+
async function sincronizarEntryPointsAgentes(baseProjeto, agentContextPack) {
|
|
1912
|
+
const resultados = [];
|
|
1913
|
+
const registrar = async (relativo, conteudo, substituirLegadoSema = false) => {
|
|
1914
|
+
const destino = path.join(baseProjeto, relativo);
|
|
1915
|
+
const status = await escreverArquivoGerenciadoSema(destino, conteudo, substituirLegadoSema);
|
|
1916
|
+
resultados.push({ caminho: relativo, status });
|
|
1917
|
+
};
|
|
1918
|
+
await registrar(".github/copilot-instructions.md", renderizarInstrucaoClienteSema("copilot", "media", agentContextPack), true);
|
|
1919
|
+
const clinePath = path.join(baseProjeto, ".clinerules");
|
|
1920
|
+
const clineStat = await statSeguro(clinePath);
|
|
1921
|
+
if (clineStat?.isFile()) {
|
|
1922
|
+
await registrar(".clinerules", renderizarInstrucaoClienteSema("cline", "fraca", agentContextPack), true);
|
|
1923
|
+
}
|
|
1924
|
+
else {
|
|
1925
|
+
await registrar(".clinerules/00-sema.md", renderizarInstrucaoClienteSema("cline", "fraca", agentContextPack), true);
|
|
1926
|
+
}
|
|
1927
|
+
await registrar(".roo/rules/00-sema.md", renderizarInstrucaoClienteSema("roo", "fraca", agentContextPack), true);
|
|
1928
|
+
const opencodeDir = path.join(baseProjeto, ".opencode");
|
|
1929
|
+
const opencodeStat = await statSeguro(opencodeDir);
|
|
1930
|
+
if (opencodeStat?.isDirectory()) {
|
|
1931
|
+
await registrar(".opencode/instructions.md", renderizarInstrucaoClienteSema("opencode", "media", agentContextPack), true);
|
|
1932
|
+
}
|
|
1933
|
+
const criados = resultados.filter((item) => item.status === "criado").map((item) => item.caminho);
|
|
1934
|
+
const atualizados = resultados.filter((item) => item.status === "atualizado").map((item) => item.caminho);
|
|
1935
|
+
const preservados = resultados.filter((item) => item.status === "preservado").map((item) => item.caminho);
|
|
1936
|
+
return { arquivos: resultados, criados, atualizados, preservados };
|
|
1937
|
+
}
|
|
1632
1938
|
function coletarResumoSemanticoModulo(contexto) {
|
|
1633
1939
|
const { arquivo, modulo, geradoEm, ir, briefing, drift } = contexto;
|
|
1634
1940
|
const modoVerificacaoCodigo = contexto.modoVerificacaoCodigo ?? "codigo_completo";
|
|
@@ -1871,7 +2177,7 @@ function renderizarResumoModuloMarkdown(resumo, modo, guiaPorCapacidade) {
|
|
|
1871
2177
|
"## Guia por capacidade de IA",
|
|
1872
2178
|
"",
|
|
1873
2179
|
];
|
|
1874
|
-
for (const capacidade of
|
|
2180
|
+
for (const capacidade of CAPACIDADES_IA_OPERACIONAIS) {
|
|
1875
2181
|
const guia = guiaPorCapacidade[capacidade];
|
|
1876
2182
|
linhas.push(`### ${capacidade}`);
|
|
1877
2183
|
linhas.push("");
|
|
@@ -1924,20 +2230,20 @@ function criarBriefingMinimo(resumo, modo, tamanho) {
|
|
|
1924
2230
|
}
|
|
1925
2231
|
function criarPromptCurtoModulo(resumo, modo, tamanho, capacidade) {
|
|
1926
2232
|
const resumoTexto = renderizarResumoModuloTexto(resumo, tamanho, modo).trim();
|
|
1927
|
-
return `
|
|
1928
|
-
|
|
1929
|
-
Esta linguagem existe para traduzir
|
|
2233
|
+
return `Você está operando Sema em modo IA-first.
|
|
2234
|
+
|
|
2235
|
+
Esta linguagem existe para traduzir intenção operacional em contrato consumível por IA. Humanos aprovam; agentes operam.
|
|
1930
2236
|
|
|
1931
2237
|
Capacidade alvo: ${capacidade}
|
|
1932
2238
|
Modo da tarefa: ${modo}
|
|
1933
2239
|
|
|
1934
2240
|
Regras:
|
|
1935
|
-
-
|
|
1936
|
-
- preserve a
|
|
1937
|
-
- use este resumo como fonte compacta inicial
|
|
1938
|
-
- se a tarefa pedir mais contexto, suba para \`briefing.min.json\`, \`drift.json\` e depois \`ir.json\`
|
|
1939
|
-
-
|
|
1940
|
-
${resumo.consumerFramework ? "- se for tarefa visual consumer, priorize `appRoutes`, `consumerSurfaces` e `consumerBridges` antes de abrir arquivos
|
|
2241
|
+
- não invente sintaxe nem bloco fora da gramática oficial
|
|
2242
|
+
- preserve a intenção do contrato
|
|
2243
|
+
- use este resumo como fonte compacta inicial
|
|
2244
|
+
- se a tarefa pedir mais contexto, suba para \`briefing.min.json\`, \`drift.json\` e depois \`ir.json\`
|
|
2245
|
+
- não saia editando software vivo sem olhar risco, lacuna e checks sugeridos
|
|
2246
|
+
${resumo.consumerFramework ? "- se for tarefa visual consumer, priorize `appRoutes`, `consumerSurfaces` e `consumerBridges` antes de abrir arquivos aleatórios" : ""}
|
|
1941
2247
|
|
|
1942
2248
|
Contexto compacto:
|
|
1943
2249
|
${resumoTexto}
|
|
@@ -1957,9 +2263,10 @@ function renderizarResumoProjetoMarkdown(geradoEm, modulos, guiaPorCapacidade) {
|
|
|
1957
2263
|
"## Entrada canonica para IA",
|
|
1958
2264
|
"",
|
|
1959
2265
|
`- Ordem minima: ${entradaCanonica.ordemLeitura.join(" -> ")}`,
|
|
1960
|
-
`- IA
|
|
1961
|
-
`- IA
|
|
1962
|
-
`- IA
|
|
2266
|
+
`- IA fraca: ${entradaCanonica.porCapacidade.fraca.join(" -> ")}`,
|
|
2267
|
+
`- IA média: ${entradaCanonica.porCapacidade.media.join(" -> ")}`,
|
|
2268
|
+
`- IA forte: ${entradaCanonica.porCapacidade.forte.join(" -> ")}`,
|
|
2269
|
+
`- Aliases: pequena -> fraca; grande -> forte`,
|
|
1963
2270
|
"",
|
|
1964
2271
|
"## Agent Context Pack",
|
|
1965
2272
|
"",
|
|
@@ -1971,7 +2278,7 @@ function renderizarResumoProjetoMarkdown(geradoEm, modulos, guiaPorCapacidade) {
|
|
|
1971
2278
|
"## Guia por capacidade",
|
|
1972
2279
|
"",
|
|
1973
2280
|
];
|
|
1974
|
-
for (const capacidade of
|
|
2281
|
+
for (const capacidade of CAPACIDADES_IA_OPERACIONAIS) {
|
|
1975
2282
|
const guia = guiaPorCapacidade[capacidade];
|
|
1976
2283
|
linhas.push(`- ${capacidade}: ${guia.descricao} Artefatos: ${guia.artefatos.join(", ")}.`);
|
|
1977
2284
|
}
|
|
@@ -1991,14 +2298,20 @@ function renderizarResumoProjetoMarkdown(geradoEm, modulos, guiaPorCapacidade) {
|
|
|
1991
2298
|
}
|
|
1992
2299
|
function criarEntradaCanonicaProjeto(guiaPorCapacidade) {
|
|
1993
2300
|
const agentContextPack = criarAgentContextPack(guiaPorCapacidade);
|
|
2301
|
+
const fraca = [ARQUIVO_SEMA_BOOT, ARQUIVO_SEMA_SMALL_MODEL, "llms.txt", ARQUIVO_AGENT_CONTEXT_PACK, "SEMA_BRIEF.micro.txt", "SEMA_INDEX.json", "AGENTS.md"];
|
|
2302
|
+
const media = [ARQUIVO_SEMA_BOOT, "llms.txt", ARQUIVO_AGENT_CONTEXT_PACK, "SEMA_BRIEF.curto.txt", "SEMA_INDEX.json", "AGENTS.md", "README.md"];
|
|
2303
|
+
const forte = [ARQUIVO_SEMA_BOOT, "llms-full.txt", ARQUIVO_AGENT_CONTEXT_PACK, "SEMA_BRIEF.md", "SEMA_INDEX.json", "AGENTS.md", "README.md"];
|
|
1994
2304
|
return {
|
|
1995
|
-
descricao: "Entrada
|
|
2305
|
+
descricao: "Entrada canônica do repositório para IA. O repo não é human-first; a IA deve começar por esses artefatos antes de abrir código cru.",
|
|
1996
2306
|
ordemLeitura: [...ARQUIVOS_CANONICOS_IA_RAIZ],
|
|
1997
2307
|
porCapacidade: {
|
|
1998
|
-
|
|
1999
|
-
|
|
2000
|
-
|
|
2308
|
+
fraca,
|
|
2309
|
+
pequena: fraca,
|
|
2310
|
+
media,
|
|
2311
|
+
forte,
|
|
2312
|
+
grande: forte,
|
|
2001
2313
|
},
|
|
2314
|
+
aliasesCapacidade: { ...ALIASES_CAPACIDADE_IA },
|
|
2002
2315
|
docsSuporte: [...DOCUMENTOS_SUPORTE_IA],
|
|
2003
2316
|
agentContextPack,
|
|
2004
2317
|
guiaPorCapacidade,
|
|
@@ -2246,8 +2559,12 @@ async function gerarArquivosResumoModuloIa(contexto, pastaBase) {
|
|
|
2246
2559
|
const resumoCurto = renderizarResumoModuloTexto(resumoSemantico, "curto", "resumo");
|
|
2247
2560
|
const resumoMarkdown = renderizarResumoModuloMarkdown(resumoSemantico, "resumo", guiaPorCapacidade);
|
|
2248
2561
|
const briefingMinimo = criarBriefingMinimo(resumoSemantico, "resumo", "curto");
|
|
2249
|
-
const promptCurto = criarPromptCurtoModulo(resumoSemantico, "mudanca", "curto", "
|
|
2562
|
+
const promptCurto = criarPromptCurtoModulo(resumoSemantico, "mudanca", "curto", "fraca");
|
|
2250
2563
|
const agentContextPack = criarAgentContextPack(guiaPorCapacidade);
|
|
2564
|
+
const semaBoot = renderizarSemaBoot(agentContextPack);
|
|
2565
|
+
const semaSmallModel = renderizarSemaSmallModel(agentContextPack);
|
|
2566
|
+
await writeFile(path.join(pastaBase, ARQUIVO_SEMA_BOOT), semaBoot, "utf8");
|
|
2567
|
+
await writeFile(path.join(pastaBase, ARQUIVO_SEMA_SMALL_MODEL), semaSmallModel, "utf8");
|
|
2251
2568
|
await writeFile(path.join(pastaBase, "agent-context-pack.json"), `${JSON.stringify(agentContextPack, null, 2)}\n`, "utf8");
|
|
2252
2569
|
await writeFile(path.join(pastaBase, "resumo.micro.txt"), resumoMicro, "utf8");
|
|
2253
2570
|
await writeFile(path.join(pastaBase, "resumo.curto.txt"), resumoCurto, "utf8");
|
|
@@ -2255,7 +2572,7 @@ async function gerarArquivosResumoModuloIa(contexto, pastaBase) {
|
|
|
2255
2572
|
await writeFile(path.join(pastaBase, "briefing.min.json"), `${JSON.stringify(briefingMinimo, null, 2)}\n`, "utf8");
|
|
2256
2573
|
await writeFile(path.join(pastaBase, "prompt-curto.txt"), promptCurto, "utf8");
|
|
2257
2574
|
return {
|
|
2258
|
-
artefatosCompactos: ["agent-context-pack.json", "resumo.micro.txt", "resumo.curto.txt", "resumo.md", "briefing.min.json", "prompt-curto.txt"],
|
|
2575
|
+
artefatosCompactos: [ARQUIVO_SEMA_BOOT, ARQUIVO_SEMA_SMALL_MODEL, "agent-context-pack.json", "resumo.micro.txt", "resumo.curto.txt", "resumo.md", "briefing.min.json", "prompt-curto.txt"],
|
|
2259
2576
|
guiaPorCapacidade,
|
|
2260
2577
|
};
|
|
2261
2578
|
}
|
|
@@ -2298,6 +2615,9 @@ async function gerarResumoProjetoIa(entrada, pastaSaidaOpcional, escreverNaRaiz
|
|
|
2298
2615
|
: path.resolve(baseProjeto, ".tmp", "sema-resumo");
|
|
2299
2616
|
await mkdir(pastaSaida, { recursive: true });
|
|
2300
2617
|
const semaBrief = renderizarResumoProjetoMarkdown(geradoEm, modulos, guiaPorCapacidade);
|
|
2618
|
+
const semaBoot = renderizarSemaBoot(agentContextPack);
|
|
2619
|
+
const semaSmallModel = renderizarSemaSmallModel(agentContextPack);
|
|
2620
|
+
const docAgentesCapacidade = renderizarDocumentoAgentesPorCapacidade(agentContextPack);
|
|
2301
2621
|
const indexJson = {
|
|
2302
2622
|
comando: "resumo-projeto",
|
|
2303
2623
|
geradoEm,
|
|
@@ -2317,7 +2637,7 @@ async function gerarResumoProjetoIa(entrada, pastaSaidaOpcional, escreverNaRaiz
|
|
|
2317
2637
|
`MODULOS: ${modulos.length}`,
|
|
2318
2638
|
`MODO_CODIGO: ${modoVerificacaoCodigo}`,
|
|
2319
2639
|
`FONTES_CONCLUSAO: ${resumirListaTexto(fontesConclusao, 4)}`,
|
|
2320
|
-
`ENTRADA_IA: ${entradaCanonica.porCapacidade.
|
|
2640
|
+
`ENTRADA_IA: ${entradaCanonica.porCapacidade.fraca.join(" -> ")}`,
|
|
2321
2641
|
`TOP_MODULOS: ${resumirListaTexto(modulos.map((modulo) => modulo.modulo), 3)}`,
|
|
2322
2642
|
`TOP_RISCOS: ${resumirListaTexto(unicosOrdenados(modulos.flatMap((modulo) => modulo.riscosPrincipais)), 3)}`,
|
|
2323
2643
|
`TOP_LACUNAS: ${resumirListaTexto(unicosOrdenados(modulos.flatMap((modulo) => modulo.lacunas)), 3)}`,
|
|
@@ -2344,16 +2664,20 @@ async function gerarResumoProjetoIa(entrada, pastaSaidaOpcional, escreverNaRaiz
|
|
|
2344
2664
|
"",
|
|
2345
2665
|
].join("\n");
|
|
2346
2666
|
await writeFile(path.join(pastaSaida, "SEMA_BRIEF.md"), semaBrief, "utf8");
|
|
2667
|
+
await writeFile(path.join(pastaSaida, ARQUIVO_SEMA_BOOT), semaBoot, "utf8");
|
|
2668
|
+
await writeFile(path.join(pastaSaida, ARQUIVO_SEMA_SMALL_MODEL), semaSmallModel, "utf8");
|
|
2347
2669
|
await writeFile(path.join(pastaSaida, "SEMA_BRIEF.micro.txt"), micro, "utf8");
|
|
2348
2670
|
await writeFile(path.join(pastaSaida, "SEMA_BRIEF.curto.txt"), curto, "utf8");
|
|
2349
2671
|
await writeFile(path.join(pastaSaida, "SEMA_INDEX.json"), `${JSON.stringify(indexJson, null, 2)}\n`, "utf8");
|
|
2350
2672
|
await writeFile(path.join(pastaSaida, ARQUIVO_AGENT_CONTEXT_PACK), `${JSON.stringify(agentContextPack, null, 2)}\n`, "utf8");
|
|
2673
|
+
await mkdir(path.dirname(path.join(pastaSaida, ARQUIVO_DOC_AGENTES_CAPACIDADE)), { recursive: true });
|
|
2674
|
+
await writeFile(path.join(pastaSaida, ARQUIVO_DOC_AGENTES_CAPACIDADE), docAgentesCapacidade, "utf8");
|
|
2351
2675
|
return {
|
|
2352
2676
|
geradoEm,
|
|
2353
2677
|
baseProjeto,
|
|
2354
2678
|
pastaSaida,
|
|
2355
2679
|
modoVerificacaoCodigo,
|
|
2356
|
-
artefatos: ["SEMA_BRIEF.md", "SEMA_BRIEF.micro.txt", "SEMA_BRIEF.curto.txt", "SEMA_INDEX.json", ARQUIVO_AGENT_CONTEXT_PACK],
|
|
2680
|
+
artefatos: [ARQUIVO_SEMA_BOOT, ARQUIVO_SEMA_SMALL_MODEL, "SEMA_BRIEF.md", "SEMA_BRIEF.micro.txt", "SEMA_BRIEF.curto.txt", "SEMA_INDEX.json", ARQUIVO_AGENT_CONTEXT_PACK, ARQUIVO_DOC_AGENTES_CAPACIDADE],
|
|
2357
2681
|
modulos,
|
|
2358
2682
|
guiaPorCapacidade,
|
|
2359
2683
|
};
|
|
@@ -2381,8 +2705,10 @@ async function gerarContextoIa(arquivoEntrada, pastaSaidaOpcional) {
|
|
|
2381
2705
|
|
|
2382
2706
|
## Arquivos gerados neste pacote
|
|
2383
2707
|
|
|
2384
|
-
- \`agent-context-pack.json\`
|
|
2385
|
-
- \`
|
|
2708
|
+
- \`agent-context-pack.json\`
|
|
2709
|
+
- \`${ARQUIVO_SEMA_BOOT}\`
|
|
2710
|
+
- \`${ARQUIVO_SEMA_SMALL_MODEL}\`
|
|
2711
|
+
- \`resumo.micro.txt\`
|
|
2386
2712
|
- \`resumo.curto.txt\`
|
|
2387
2713
|
- \`resumo.md\`
|
|
2388
2714
|
- \`briefing.min.json\`
|
|
@@ -2396,38 +2722,48 @@ async function gerarContextoIa(arquivoEntrada, pastaSaidaOpcional) {
|
|
|
2396
2722
|
|
|
2397
2723
|
## Fluxo recomendado para o agente
|
|
2398
2724
|
|
|
2399
|
-
Antes de escolher arquivo de
|
|
2400
|
-
|
|
2401
|
-
### IA
|
|
2402
|
-
|
|
2403
|
-
1. Ler
|
|
2404
|
-
2. Ler
|
|
2405
|
-
3. Ler \`
|
|
2406
|
-
4.
|
|
2407
|
-
|
|
2408
|
-
|
|
2409
|
-
|
|
2410
|
-
|
|
2411
|
-
|
|
2412
|
-
|
|
2413
|
-
|
|
2414
|
-
|
|
2415
|
-
|
|
2416
|
-
|
|
2417
|
-
|
|
2418
|
-
|
|
2419
|
-
|
|
2420
|
-
|
|
2421
|
-
|
|
2422
|
-
|
|
2423
|
-
|
|
2725
|
+
Antes de escolher arquivo de código, leia \`${ARQUIVO_SEMA_BOOT}\` e \`agent-context-pack.json\`. Eles declaram regras obrigatórias, proibições, prioridades, idioma humano e quando abrir texto bruto como \`AGENTS.md\`, \`exemplos/\`, docs e contratos.
|
|
2726
|
+
|
|
2727
|
+
### IA fraca, gratuita ou com pouca disciplina
|
|
2728
|
+
|
|
2729
|
+
1. Ler \`${ARQUIVO_SEMA_BOOT}\`.
|
|
2730
|
+
2. Ler \`${ARQUIVO_SEMA_SMALL_MODEL}\`.
|
|
2731
|
+
3. Ler \`agent-context-pack.json\`.
|
|
2732
|
+
4. Ler \`resumo.micro.txt\`.
|
|
2733
|
+
5. Ler \`briefing.min.json\`.
|
|
2734
|
+
6. Se ainda couber contexto, ler \`resumo.curto.txt\`.
|
|
2735
|
+
|
|
2736
|
+
### IA média
|
|
2737
|
+
|
|
2738
|
+
1. Ler \`${ARQUIVO_SEMA_BOOT}\`.
|
|
2739
|
+
2. Ler \`agent-context-pack.json\`.
|
|
2740
|
+
3. Ler \`resumo.curto.txt\`.
|
|
2741
|
+
4. Ler \`briefing.min.json\`.
|
|
2742
|
+
5. Ler \`drift.json\`.
|
|
2743
|
+
6. Se precisar, subir para \`resumo.md\`.
|
|
2744
|
+
|
|
2745
|
+
### IA forte ou com tool use
|
|
2746
|
+
|
|
2747
|
+
1. Ler \`${ARQUIVO_SEMA_BOOT}\`.
|
|
2748
|
+
2. Ler \`agent-context-pack.json\`.
|
|
2749
|
+
3. Ler \`README.md\`.
|
|
2750
|
+
4. Ler \`resumo.md\`.
|
|
2751
|
+
5. Ler \`briefing.json\`.
|
|
2752
|
+
6. Ler \`drift.json\`.
|
|
2753
|
+
7. Só depois abrir \`ir.json\` e \`ast.json\`.
|
|
2754
|
+
|
|
2755
|
+
## Idioma humano
|
|
2756
|
+
|
|
2757
|
+
- Responda no idioma do usuário.
|
|
2758
|
+
- Em PT-BR, use acentos, cedilha, pontuação e símbolos normais.
|
|
2759
|
+
- A DSL \`.sema\` pode ser ASCII; texto humano não precisa ser.
|
|
2424
2760
|
|
|
2425
2761
|
## Texto bruto sob demanda
|
|
2426
2762
|
|
|
2427
|
-
- Abra \`AGENTS.md\` antes de editar
|
|
2763
|
+
- Abra \`AGENTS.md\` antes de editar código, contrato, docs operacionais, release ou deploy.
|
|
2428
2764
|
- Abra \`exemplos/\` antes de criar ou corrigir sintaxe \`.sema\`.
|
|
2429
|
-
- Abra \`docs/sintaxe.md\` quando exemplos
|
|
2430
|
-
- Abra \`contratos/\` antes de qualquer
|
|
2765
|
+
- Abra \`docs/sintaxe.md\` quando exemplos não bastarem para resolver a gramática.
|
|
2766
|
+
- Abra \`contratos/\` antes de qualquer implementação ou mudança de comportamento.
|
|
2431
2767
|
|
|
2432
2768
|
## Fechamento
|
|
2433
2769
|
|
|
@@ -6703,9 +7039,11 @@ async function comandoSyncAiEntrypoints(emJson) {
|
|
|
6703
7039
|
return 1;
|
|
6704
7040
|
}
|
|
6705
7041
|
const indexJson = JSON.parse(await readFile(path.join(resumoProjeto.pastaSaida, "SEMA_INDEX.json"), "utf8"));
|
|
7042
|
+
const entrypointsClientes = await sincronizarEntryPointsAgentes(resumoProjeto.baseProjeto, indexJson.agentContextPack);
|
|
6706
7043
|
const artefatos = [...new Set([
|
|
6707
7044
|
...ARQUIVOS_CANONICOS_IA_RAIZ,
|
|
6708
7045
|
...resumoProjeto.artefatos,
|
|
7046
|
+
...entrypointsClientes.arquivos.map((item) => item.caminho),
|
|
6709
7047
|
"exemplos",
|
|
6710
7048
|
])];
|
|
6711
7049
|
if (emJson) {
|
|
@@ -6716,6 +7054,7 @@ async function comandoSyncAiEntrypoints(emJson) {
|
|
|
6716
7054
|
pastaSaida: resumoProjeto.pastaSaida,
|
|
6717
7055
|
artefatos,
|
|
6718
7056
|
entradaCanonica: indexJson.entradaCanonica,
|
|
7057
|
+
entrypointsClientes,
|
|
6719
7058
|
exemplos,
|
|
6720
7059
|
}, null, 2));
|
|
6721
7060
|
return 0;
|
|
@@ -6723,10 +7062,11 @@ async function comandoSyncAiEntrypoints(emJson) {
|
|
|
6723
7062
|
console.log("Entrypoints IA-first sincronizados");
|
|
6724
7063
|
console.log("");
|
|
6725
7064
|
console.log(`Base do projeto: ${resumoProjeto.baseProjeto}`);
|
|
6726
|
-
console.log(`Ordem
|
|
6727
|
-
console.log(`IA
|
|
6728
|
-
console.log(`IA
|
|
6729
|
-
console.log(`IA
|
|
7065
|
+
console.log(`Ordem canônica: ${indexJson.entradaCanonica.ordemLeitura.join(" -> ")}`);
|
|
7066
|
+
console.log(`IA fraca: ${indexJson.entradaCanonica.porCapacidade.fraca.join(" -> ")}`);
|
|
7067
|
+
console.log(`IA média: ${indexJson.entradaCanonica.porCapacidade.media.join(" -> ")}`);
|
|
7068
|
+
console.log(`IA forte: ${indexJson.entradaCanonica.porCapacidade.forte.join(" -> ")}`);
|
|
7069
|
+
console.log(`Clientes: ${entrypointsClientes.criados.length} criados, ${entrypointsClientes.atualizados.length} atualizados, ${entrypointsClientes.preservados.length} preservados`);
|
|
6730
7070
|
console.log(`Exemplos oficiais: ${exemplos.criados.length} criados, ${exemplos.preservados.length} preservados em ${exemplos.destino}`);
|
|
6731
7071
|
return 0;
|
|
6732
7072
|
}
|
|
@@ -6748,16 +7088,16 @@ async function comandoAjudaIa() {
|
|
|
6748
7088
|
]));
|
|
6749
7089
|
console.log("");
|
|
6750
7090
|
console.log(renderizarSecaoAscii("Capacidade de IA", [
|
|
6751
|
-
"
|
|
6752
|
-
"
|
|
6753
|
-
"
|
|
7091
|
+
"fraca: `sema resumo --micro`, `briefing.min.json`, `prompt-curto.txt`",
|
|
7092
|
+
"média: `sema resumo --curto`, `drift.json`, `briefing.min.json`",
|
|
7093
|
+
"forte: `sema contexto-ia`, `briefing.json`, `ir.json`, `ast.json`",
|
|
6754
7094
|
]));
|
|
6755
7095
|
console.log("");
|
|
6756
7096
|
console.log(renderizarSecaoAscii("Fluxo recomendado", [
|
|
6757
7097
|
"Use `sema starter-ia` para um texto curto de onboarding.",
|
|
6758
7098
|
"Use `sema sync-ai-entrypoints` para regenerar `AGENT_CONTEXT_PACK.json`, `SEMA_BRIEF.*` e `SEMA_INDEX.json` na raiz.",
|
|
6759
7099
|
"Use `sema instalar-exemplos` para materializar `exemplos/` oficiais sem sobrescrever arquivos locais.",
|
|
6760
|
-
"Use `sema resumo <arquivo> --micro --para onboarding` para IA
|
|
7100
|
+
"Use `sema resumo <arquivo> --micro --para onboarding` para IA fraca.",
|
|
6761
7101
|
"Use `sema prompt-curto <arquivo> --curto --para mudanca` para colar contexto em modelo gratuito.",
|
|
6762
7102
|
"Use `sema prompt-ia`, `sema prompt-ia-ui`, `sema prompt-ia-react` e `sema prompt-ia-sema-primeiro` conforme a tarefa.",
|
|
6763
7103
|
"Use `sema exemplos-prompt-ia` para pegar modelos prontos de prompt.",
|
|
@@ -6776,7 +7116,7 @@ async function comandoAjudaIa() {
|
|
|
6776
7116
|
"Se voce quer testar a Sema de verdade, nao peca so HTML solto.",
|
|
6777
7117
|
"Peca `.sema` + arquitetura + React + TypeScript, ou use o modo `Sema primeiro`.",
|
|
6778
7118
|
"Se o projeto ja existe, trate `importar` como rascunho e `drift` como juiz.",
|
|
6779
|
-
"IA
|
|
7119
|
+
"IA fraca comeca no menor artefato que resolve a tarefa; nao enfie `ast.json` inteiro nela de bobeira.",
|
|
6780
7120
|
"Antes de editar software vivo, leia `briefing.min.json` ou `briefing.json` em vez de sair cavando arquivo na fe.",
|
|
6781
7121
|
"Trate `route`, `worker`, `evento`, `fila`, `cron`, `webhook`, `cache`, `storage` e `policy` como superficies de primeira classe.",
|
|
6782
7122
|
]));
|
|
@@ -6905,7 +7245,7 @@ async function comandoPromptCurto(entrada, args, emJson) {
|
|
|
6905
7245
|
if (entrada && entrada.toLowerCase().endsWith(".sema")) {
|
|
6906
7246
|
const contexto = await carregarContextoModuloIa(alvo);
|
|
6907
7247
|
const resumoSemantico = coletarResumoSemanticoModulo(contexto);
|
|
6908
|
-
const capacidade = tamanho === "micro" ? "
|
|
7248
|
+
const capacidade = tamanho === "micro" ? "fraca" : tamanho === "curto" ? "media" : "forte";
|
|
6909
7249
|
const prompt = criarPromptCurtoModulo(resumoSemantico, modo, tamanho, capacidade);
|
|
6910
7250
|
if (emJson) {
|
|
6911
7251
|
console.log(JSON.stringify({
|
|
@@ -6930,7 +7270,7 @@ async function comandoPromptCurto(entrada, args, emJson) {
|
|
|
6930
7270
|
? "SEMA_BRIEF.curto.txt"
|
|
6931
7271
|
: "SEMA_BRIEF.md";
|
|
6932
7272
|
const contextoProjeto = await readFile(path.join(resumoProjeto.pastaSaida, arquivoResumo), "utf8");
|
|
6933
|
-
const capacidade = tamanho === "micro" ? "
|
|
7273
|
+
const capacidade = tamanho === "micro" ? "fraca" : tamanho === "curto" ? "media" : "forte";
|
|
6934
7274
|
const prompt = `âš ï¸ REGRA OBRIGATÓRIA DE GOVERNANÇA:
|
|
6935
7275
|
|
|
6936
7276
|
ANTES DE QUALQUER AÇÃO (editar, criar, deletar, executar, consultar, modificar):
|