@semacode/cli 1.5.40 → 1.5.42
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 +34 -22
- package/AGENT_CONTEXT_PACK.json +9 -4
- package/README.md +21 -12
- package/SEMA_BRIEF.curto.txt +4 -4
- package/SEMA_BRIEF.md +97 -97
- package/SEMA_BRIEF.micro.txt +3 -3
- package/SEMA_INDEX.json +179 -321
- package/dist/agentContextPack.js +9 -4
- package/dist/agentContextPack.js.map +1 -1
- package/dist/agentEntryPoints.js +27 -12
- package/dist/agentEntryPoints.js.map +1 -1
- package/dist/billing/index.d.ts +28 -0
- package/dist/billing/index.js +189 -1
- package/dist/billing/index.js.map +1 -1
- package/dist/bridge.d.ts +1 -1
- package/dist/bridge.js +16 -4
- package/dist/bridge.js.map +1 -1
- package/dist/cliArgs.js +5 -0
- package/dist/cliArgs.js.map +1 -1
- package/dist/comandos.d.ts +0 -9
- package/dist/comandos.js +12 -17
- package/dist/comandos.js.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/index.part01.d.ts +1 -1
- package/dist/index.part01.js +2 -1
- package/dist/index.part01.js.map +1 -1
- package/dist/index.part08.js +4 -0
- package/dist/index.part08.js.map +1 -1
- package/dist/mcpInstalarChaveCommand.js +38 -11
- package/dist/mcpInstalarChaveCommand.js.map +1 -1
- package/dist/profileArtefatoValidadores.js +2 -0
- package/dist/profileArtefatoValidadores.js.map +1 -1
- package/dist/profileI18nCatalogo.d.ts +12 -0
- package/dist/profileI18nCatalogo.js +92 -0
- package/dist/profileI18nCatalogo.js.map +1 -0
- package/dist/profileI18nVisivel.d.ts +11 -0
- package/dist/profileI18nVisivel.js +157 -0
- package/dist/profileI18nVisivel.js.map +1 -0
- package/docs/agentes-por-capacidade.md +1 -1
- package/docs/cli.md +21 -9
- package/docs/como-ensinar-a-sema-para-ia.md +3 -3
- package/docs/fluxo-pratico-ia-sema.md +37 -24
- package/docs/instalacao-e-primeiro-uso.md +21 -9
- package/docs/integracao-com-ia.md +12 -6
- package/docs/mcp.md +9 -9
- package/docs/repositories.md +9 -9
- package/node_modules/@sema/gerador-css/package.json +1 -1
- package/node_modules/@sema/gerador-dart/package.json +1 -1
- package/node_modules/@sema/gerador-html/package.json +1 -1
- package/node_modules/@sema/gerador-javascript/package.json +1 -1
- package/node_modules/@sema/gerador-lua/package.json +1 -1
- package/node_modules/@sema/gerador-python/package.json +1 -1
- package/node_modules/@sema/gerador-typescript/package.json +1 -1
- package/node_modules/@sema/nucleo/package.json +1 -1
- package/node_modules/@sema/padroes/package.json +1 -1
- package/package.json +10 -10
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
// SEMA-GOVERNED: sema.produto.governanca_ia.qualidade_contrato
|
|
2
|
+
// Descricao: validador observavel de i18n por idioma em artefatos reais do profile Software.
|
|
3
|
+
import { localizacaoDoMatchProfile } from "./profileArtefatoBase.js";
|
|
4
|
+
import { VALIDADORES_I18N } from "./profileI18nCatalogo.js";
|
|
5
|
+
import { criarAchadoArtefatoProfile } from "./profileRegras.js";
|
|
6
|
+
const REGEX_TEXTO_TAG = />\s*([^<>{}]{1,240}?[A-Za-zÀ-ÿ][^<>{}]{0,240})\s*</g;
|
|
7
|
+
const REGEX_ATRIBUTO_VISIVEL = /\b(?:placeholder|aria-label|title|alt|value|label)\s*=\s*(["'])([^"']{1,240})\1/gi;
|
|
8
|
+
const REGEX_LITERAL_STRING = /"([^"\\\r\n]{1,240}(?:\\.[^"\\\r\n]{0,240})*)"|'([^'\\\r\n]{1,240}(?:\\.[^'\\\r\n]{0,240})*)'|`([^`\\]{1,240}(?:\\.[^`\\]{0,240})*)`/g;
|
|
9
|
+
function semAcentos(texto) {
|
|
10
|
+
return texto.normalize("NFD").replace(/\p{Diacritic}/gu, "");
|
|
11
|
+
}
|
|
12
|
+
function normalizarTokenIdioma(token) {
|
|
13
|
+
return token.trim().toLowerCase().replace(/_/g, "-");
|
|
14
|
+
}
|
|
15
|
+
function idiomaSuportado(token) {
|
|
16
|
+
const normalizado = normalizarTokenIdioma(token);
|
|
17
|
+
if (normalizado === "pt" || normalizado === "pt-br" || normalizado === "ptbr")
|
|
18
|
+
return "pt-BR";
|
|
19
|
+
if (normalizado === "es" || normalizado === "es-es" || normalizado === "es-mx" || normalizado === "es-419")
|
|
20
|
+
return "es";
|
|
21
|
+
if (normalizado === "fr" || normalizado === "fr-fr" || normalizado === "fr-ca")
|
|
22
|
+
return "fr";
|
|
23
|
+
return null;
|
|
24
|
+
}
|
|
25
|
+
function adicionarIdioma(idiomas, semValidador, token) {
|
|
26
|
+
const suportado = idiomaSuportado(token);
|
|
27
|
+
if (suportado) {
|
|
28
|
+
idiomas.add(suportado);
|
|
29
|
+
}
|
|
30
|
+
else {
|
|
31
|
+
semValidador.add(normalizarTokenIdioma(token));
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
export function detectarEscopoI18nObservavel(contrato) {
|
|
35
|
+
const normalizado = semAcentos(contrato).toLowerCase();
|
|
36
|
+
const mencionaI18n = /\bi18n\b|\bi18n[-_][a-z0-9_-]+/i.test(normalizado);
|
|
37
|
+
const declaraTextoVisivel = mencionaI18n || /\b(?:texto[_ -]?visivel|interface|ui|labels?|mensagens?|placeholder|aria-label|locale|idioma|language|traducao|traducoes|translation|acento|acentos|diacritico|diacriticos|cedilha|mojibake)\b/.test(normalizado);
|
|
38
|
+
const declaraIdiomaOuI18n = mencionaI18n || /\b(?:locale|idioma|language|traducao|traducoes|translation|pt[-_ ]?br|portugues|portuguese|espanhol|spanish|frances|french)\b/.test(normalizado);
|
|
39
|
+
const ativo = declaraTextoVisivel && declaraIdiomaOuI18n;
|
|
40
|
+
if (!ativo)
|
|
41
|
+
return { ativo: false, idiomaNaoDeclarado: false, idiomas: [], idiomasSemValidador: [] };
|
|
42
|
+
const idiomas = new Set();
|
|
43
|
+
const semValidador = new Set();
|
|
44
|
+
if (/\bi18n[-_]ptbr\b|\b(?:pt[-_ ]?br|portugues|portuguese)\b/.test(normalizado))
|
|
45
|
+
idiomas.add("pt-BR");
|
|
46
|
+
if (/\b(?:espanhol|espanol|spanish)\b/.test(normalizado))
|
|
47
|
+
idiomas.add("es");
|
|
48
|
+
if (/\b(?:frances|french)\b/.test(normalizado))
|
|
49
|
+
idiomas.add("fr");
|
|
50
|
+
for (const match of normalizado.matchAll(/\bi18n[-_]([a-z]{2,4}(?:[-_][a-z0-9]{2,3})?)\b/g)) {
|
|
51
|
+
adicionarIdioma(idiomas, semValidador, match[1] ?? "");
|
|
52
|
+
}
|
|
53
|
+
for (const match of normalizado.matchAll(/\b(?:locale|idioma|language)\s*[:=]?\s*["']?([a-z]{2}(?:[-_][a-z0-9]{2,3})?)\b/g)) {
|
|
54
|
+
adicionarIdioma(idiomas, semValidador, match[1] ?? "");
|
|
55
|
+
}
|
|
56
|
+
return {
|
|
57
|
+
ativo: true,
|
|
58
|
+
idiomaNaoDeclarado: idiomas.size === 0 && semValidador.size === 0,
|
|
59
|
+
idiomas: [...idiomas],
|
|
60
|
+
idiomasSemValidador: [...semValidador],
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
function limparTextoSegmento(texto) {
|
|
64
|
+
return texto.replace(/\s+/g, " ").trim();
|
|
65
|
+
}
|
|
66
|
+
function contextoPareceScriptOuEstilo(artefato, indice) {
|
|
67
|
+
const antes = artefato.slice(Math.max(0, indice - 40), indice).toLowerCase();
|
|
68
|
+
return /<\s*(?:script|style|template)\b/.test(antes);
|
|
69
|
+
}
|
|
70
|
+
function textoTemTermoSemDiacritico(texto, validadores) {
|
|
71
|
+
return validadores.some((validador) => validador.termos.some((termo) => termo.regex.test(texto)));
|
|
72
|
+
}
|
|
73
|
+
function literalPareceTecnico(texto, validadores) {
|
|
74
|
+
const valor = texto.trim();
|
|
75
|
+
if (!valor || valor.length > 240)
|
|
76
|
+
return true;
|
|
77
|
+
if (/^(?:GET|POST|PUT|PATCH|DELETE|true|false|null|undefined)$/i.test(valor))
|
|
78
|
+
return true;
|
|
79
|
+
if (/^(?:https?:\/\/|\/|\.\/|#|[A-Z_][A-Z0-9_]*$)/.test(valor))
|
|
80
|
+
return true;
|
|
81
|
+
return /^[a-z0-9_.:/#-]+$/.test(valor) && !textoTemTermoSemDiacritico(valor, validadores);
|
|
82
|
+
}
|
|
83
|
+
function coletarSegmentosTextoVisivel(artefato, validadores) {
|
|
84
|
+
const segmentos = [];
|
|
85
|
+
for (const match of artefato.matchAll(REGEX_TEXTO_TAG)) {
|
|
86
|
+
if (contextoPareceScriptOuEstilo(artefato, match.index ?? 0))
|
|
87
|
+
continue;
|
|
88
|
+
const texto = limparTextoSegmento(match[1] ?? "");
|
|
89
|
+
if (texto)
|
|
90
|
+
segmentos.push({ texto, inicio: (match.index ?? 0) + match[0].indexOf(match[1] ?? ""), contexto: "texto_tag_html" });
|
|
91
|
+
}
|
|
92
|
+
for (const match of artefato.matchAll(REGEX_ATRIBUTO_VISIVEL)) {
|
|
93
|
+
const texto = limparTextoSegmento(match[2] ?? "");
|
|
94
|
+
if (texto)
|
|
95
|
+
segmentos.push({ texto, inicio: (match.index ?? 0) + match[0].indexOf(match[2] ?? ""), contexto: "atributo_visivel_html" });
|
|
96
|
+
}
|
|
97
|
+
for (const match of artefato.matchAll(REGEX_LITERAL_STRING)) {
|
|
98
|
+
const texto = limparTextoSegmento(match[1] ?? match[2] ?? match[3] ?? "");
|
|
99
|
+
if (literalPareceTecnico(texto, validadores) || !textoTemTermoSemDiacritico(texto, validadores))
|
|
100
|
+
continue;
|
|
101
|
+
segmentos.push({ texto, inicio: (match.index ?? 0) + match[0].indexOf(texto), contexto: "literal_string_ui" });
|
|
102
|
+
}
|
|
103
|
+
return segmentos;
|
|
104
|
+
}
|
|
105
|
+
function severidadeI18n(maturidade) {
|
|
106
|
+
if (maturidade === "critical")
|
|
107
|
+
return "critical";
|
|
108
|
+
if (maturidade === "draft")
|
|
109
|
+
return "warning";
|
|
110
|
+
return "blocking";
|
|
111
|
+
}
|
|
112
|
+
function criarAchadoIdiomaNaoDeclarado(maturidade) {
|
|
113
|
+
return criarAchadoArtefatoProfile("software_i18n_idioma_nao_declarado", "contrato declara i18n observavel, mas nao declara idioma/locale verificavel", false, severidadeI18n(maturidade), undefined, "declare o idioma explicitamente, por exemplo i18n_ptbr, i18n_es ou locale: pt-BR.", "i18n sem idioma impede validar acentos, diacriticos e texto visivel de forma observavel.", { regra: "i18n_idioma_obrigatorio", risco: "garantia_i18n_ambigua" });
|
|
114
|
+
}
|
|
115
|
+
function criarAchadoIdiomaSemValidador(idioma, maturidade) {
|
|
116
|
+
return criarAchadoArtefatoProfile("software_i18n_idioma_sem_validador_observavel", "contrato declara idioma i18n sem validador observavel registrado", false, severidadeI18n(maturidade), undefined, `adicione validador observavel para "${idioma}" ou remova a garantia de i18n desse idioma.`, "a garantia i18n nao pode aprovar idioma sem regra de verificacao executavel.", { regra: "i18n_validador_por_idioma_obrigatorio", risco: "garantia_i18n_sem_checker" });
|
|
117
|
+
}
|
|
118
|
+
export function avaliarI18nVisivelArtefato(contrato, artefato, maturidade) {
|
|
119
|
+
const escopo = detectarEscopoI18nObservavel(contrato);
|
|
120
|
+
if (!escopo.ativo)
|
|
121
|
+
return [];
|
|
122
|
+
const achados = [];
|
|
123
|
+
if (escopo.idiomaNaoDeclarado)
|
|
124
|
+
achados.push(criarAchadoIdiomaNaoDeclarado(maturidade));
|
|
125
|
+
for (const idioma of escopo.idiomasSemValidador) {
|
|
126
|
+
achados.push(criarAchadoIdiomaSemValidador(idioma, maturidade));
|
|
127
|
+
}
|
|
128
|
+
const validadores = escopo.idiomas.map((idioma) => VALIDADORES_I18N[idioma]);
|
|
129
|
+
const vistos = new Set();
|
|
130
|
+
for (const segmento of coletarSegmentosTextoVisivel(artefato, validadores)) {
|
|
131
|
+
for (const validador of validadores) {
|
|
132
|
+
for (const termo of validador.termos) {
|
|
133
|
+
const match = termo.regex.exec(segmento.texto);
|
|
134
|
+
if (!match)
|
|
135
|
+
continue;
|
|
136
|
+
const inicio = segmento.inicio + match.index;
|
|
137
|
+
const chave = `${validador.idioma}:${inicio}:${match[0].toLowerCase()}`;
|
|
138
|
+
if (vistos.has(chave))
|
|
139
|
+
continue;
|
|
140
|
+
vistos.add(chave);
|
|
141
|
+
const localizacao = localizacaoDoMatchProfile(artefato, inicio, match[0].length);
|
|
142
|
+
achados.push(criarAchadoArtefatoProfile("software_i18n_diacritico_ausente", "texto visivel perdeu diacritico obrigatorio para idioma declarado no contrato", false, severidadeI18n(maturidade), localizacao.trecho, `troque "${match[0]}" por "${termo.esperado}" em ${validador.nome} ou remova essa garantia i18n do contrato.`, `contrato declara i18n observavel para ${validador.idioma}, mas o artefato contem literal de UI sem diacritico no contexto ${segmento.contexto}.`, {
|
|
143
|
+
linha: localizacao.linha,
|
|
144
|
+
coluna: localizacao.coluna,
|
|
145
|
+
inicio: localizacao.inicio,
|
|
146
|
+
fim: localizacao.fim,
|
|
147
|
+
regra: `i18n_${validador.idioma.toLowerCase()}_diacriticos_observaveis`,
|
|
148
|
+
risco: "garantia_i18n_nao_observada",
|
|
149
|
+
}));
|
|
150
|
+
if (achados.length >= 16)
|
|
151
|
+
return achados;
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
return achados;
|
|
156
|
+
}
|
|
157
|
+
//# sourceMappingURL=profileI18nVisivel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"profileI18nVisivel.js","sourceRoot":"","sources":["../src/profileI18nVisivel.ts"],"names":[],"mappings":"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"}
|
|
@@ -110,7 +110,7 @@ Timeout definido pelo agente não é falha do Sema. Se `sema resumo`, `inspecion
|
|
|
110
110
|
|
|
111
111
|
## Idioma
|
|
112
112
|
|
|
113
|
-
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.
|
|
113
|
+
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. Em PT-BR, texto humano sem acentos é entrega inválida.
|
|
114
114
|
|
|
115
115
|
A gramática Sema pode ter palavras-chave ASCII. Isso não autoriza resposta humana sem acentos.
|
|
116
116
|
|
package/docs/cli.md
CHANGED
|
@@ -7,10 +7,11 @@
|
|
|
7
7
|
|
|
8
8
|
## English
|
|
9
9
|
|
|
10
|
-
The Sema CLI is installed from the `@semacode/cli` npm
|
|
10
|
+
The Sema CLI is installed from the `@semacode/cli` npm package. In local IDEs it is the complete Sema runtime: it reads the workspace, runs gates, validates contracts, checks drift/impact, and consults the SEMAS control plane before operating.
|
|
11
11
|
|
|
12
|
-
Use it for
|
|
12
|
+
Use it for local-agent work:
|
|
13
13
|
|
|
14
|
+
- run `sema preflight <command> --json` before action;
|
|
14
15
|
- validate `.sema` contracts;
|
|
15
16
|
- inspect modules, tasks, routes, and effects;
|
|
16
17
|
- check drift against live or selected code;
|
|
@@ -20,13 +21,16 @@ Use it for the work the MCP authorizes:
|
|
|
20
21
|
- run profile and pipeline validators;
|
|
21
22
|
- execute local or VPS-side project actions.
|
|
22
23
|
|
|
23
|
-
The
|
|
24
|
+
The key installer from the site installs Node/npm when missing, installs the CLI, and saves `SEMA_CLI_AUTH_TOKEN`, `SEMA_CLI_CONTROL_PLANE_URL`, and compatibility MCP env vars. If `preflight` returns anything other than `decisao=use_cli_local`, stop. Do not call remote MCP, `sema_sync`, `sema_contratos_sincronizar`, or `sema mcp-client` just to read a local workspace.
|
|
25
|
+
|
|
26
|
+
Remote MCP remains the web/chat surface for ChatGPT, Lovable, GPTs, and similar clients without local workspace access. It uses the same commercial control plane and SEMAS account.
|
|
24
27
|
|
|
25
28
|
```bash
|
|
26
29
|
npm install -g @semacode/cli
|
|
27
30
|
```
|
|
28
31
|
|
|
29
32
|
```bash
|
|
33
|
+
sema preflight resumo --json
|
|
30
34
|
sema resumo . --curto
|
|
31
35
|
sema validar contratos/pedidos.sema --json
|
|
32
36
|
sema drift contratos/pedidos.sema --escopo modulo --json
|
|
@@ -36,10 +40,11 @@ sema finalizar-mudanca --intencao "alterar pedidos" --doc-lida README.md --json
|
|
|
36
40
|
|
|
37
41
|
## Português
|
|
38
42
|
|
|
39
|
-
A CLI da Sema é instalada pelo pacote npm
|
|
43
|
+
A CLI da Sema é instalada pelo pacote npm `@semacode/cli`. Em IDE local, ela é o runtime completo da Sema: lê o workspace, roda gates, valida contratos, mede drift/impacto e consulta o control plane de SEMAS antes de operar.
|
|
40
44
|
|
|
41
|
-
Use a CLI para
|
|
45
|
+
Use a CLI para trabalho de agente local:
|
|
42
46
|
|
|
47
|
+
- rodar `sema preflight <comando> --json` antes de agir;
|
|
43
48
|
- validar contratos `.sema`;
|
|
44
49
|
- inspecionar módulos, tasks, rotas e efeitos;
|
|
45
50
|
- medir drift contra código vivo ou código selecionado;
|
|
@@ -49,13 +54,16 @@ Use a CLI para o trabalho que o MCP autorizar:
|
|
|
49
54
|
- rodar validadores de profiles e pipelines;
|
|
50
55
|
- executar ações locais ou na VPS.
|
|
51
56
|
|
|
52
|
-
O
|
|
57
|
+
O instalador do site instala Node/npm quando faltar, instala a CLI e grava `SEMA_CLI_AUTH_TOKEN`, `SEMA_CLI_CONTROL_PLANE_URL` e variáveis MCP de compatibilidade. Se o `preflight` retornar qualquer coisa diferente de `decisao=use_cli_local`, pare. Não chame MCP remoto, `sema_sync`, `sema_contratos_sincronizar` nem `sema mcp-client` só para ler workspace local.
|
|
58
|
+
|
|
59
|
+
O MCP remoto continua sendo a superfície web/chat para ChatGPT, Lovable, GPTs e clientes parecidos sem acesso ao workspace local. Ele usa o mesmo control plane comercial e a mesma conta de SEMAS.
|
|
53
60
|
|
|
54
61
|
```bash
|
|
55
62
|
npm install -g @semacode/cli
|
|
56
63
|
```
|
|
57
64
|
|
|
58
65
|
```bash
|
|
66
|
+
sema preflight resumo --json
|
|
59
67
|
sema resumo . --curto
|
|
60
68
|
sema validar contratos/pedidos.sema --json
|
|
61
69
|
sema drift contratos/pedidos.sema --escopo modulo --json
|
|
@@ -65,10 +73,11 @@ sema finalizar-mudanca --intencao "alterar pedidos" --doc-lida README.md --json
|
|
|
65
73
|
|
|
66
74
|
## Español
|
|
67
75
|
|
|
68
|
-
La CLI de Sema se instala desde el paquete npm
|
|
76
|
+
La CLI de Sema se instala desde el paquete npm `@semacode/cli`. En una IDE local es el runtime completo de Sema: lee el workspace, ejecuta gates, valida contratos, mide drift/impacto y consulta el control plane de SEMAS antes de operar.
|
|
69
77
|
|
|
70
|
-
Usa la CLI para
|
|
78
|
+
Usa la CLI para trabajo de agente local:
|
|
71
79
|
|
|
80
|
+
- ejecutar `sema preflight <comando> --json` antes de actuar;
|
|
72
81
|
- validar contratos `.sema`;
|
|
73
82
|
- inspeccionar módulos, tasks, rutas y efectos;
|
|
74
83
|
- medir drift contra código vivo o código seleccionado;
|
|
@@ -78,13 +87,16 @@ Usa la CLI para el trabajo que el MCP autorice:
|
|
|
78
87
|
- ejecutar validadores de profiles y pipelines;
|
|
79
88
|
- ejecutar acciones locales o en la VPS.
|
|
80
89
|
|
|
81
|
-
El
|
|
90
|
+
El instalador del sitio instala Node/npm cuando falten, instala la CLI y guarda `SEMA_CLI_AUTH_TOKEN`, `SEMA_CLI_CONTROL_PLANE_URL` y variables MCP de compatibilidad. Si `preflight` devuelve algo distinto de `decisao=use_cli_local`, para. No llames el MCP remoto, `sema_sync`, `sema_contratos_sincronizar` ni `sema mcp-client` solo para leer un workspace local.
|
|
91
|
+
|
|
92
|
+
El MCP remoto sigue siendo la superficie web/chat para ChatGPT, Lovable, GPTs y clientes similares sin acceso al workspace local. Usa el mismo control plane comercial y la misma cuenta de SEMAS.
|
|
82
93
|
|
|
83
94
|
```bash
|
|
84
95
|
npm install -g @semacode/cli
|
|
85
96
|
```
|
|
86
97
|
|
|
87
98
|
```bash
|
|
99
|
+
sema preflight resumo --json
|
|
88
100
|
sema resumo . --curto
|
|
89
101
|
sema validar contratos/pedidos.sema --json
|
|
90
102
|
sema drift contratos/pedidos.sema --escopo modulo --json
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
|
|
10
10
|
Sema is taught to an AI through operational context, not through vague explanations. The agent needs syntax, semantics, intermediate representation, examples, and the project contract before it touches code or documents.
|
|
11
11
|
|
|
12
|
-
In local IDEs, the first step is to confirm that `AGENTS.md` exists in the project root.
|
|
12
|
+
In local IDEs, the first step is to confirm that `AGENTS.md` exists in the project root and that the complete Sema CLI is installed. Then run `sema preflight resumo --json`; if the decision is not `use_cli_local`, stop. With CLI authorized, run `sema resumo`, `sema docs-impacto`, `sema inspecionar`, `sema drift`, and `sema impacto` locally. Do not call remote MCP, `sema_sync`, `sema_contratos_sincronizar`, or `sema mcp-client` to read a local workspace. In web chats, do not download files into the chat environment; call `sema_chat_contexto` and then `sema_sync` with contract, selected code, operational docs, and an index.
|
|
13
13
|
|
|
14
14
|
The correct framing is simple: contract first, evidence before action, and no guessing from raw code when Sema can provide summary, drift, impact, and required docs.
|
|
15
15
|
|
|
@@ -17,7 +17,7 @@ The correct framing is simple: contract first, evidence before action, and no gu
|
|
|
17
17
|
|
|
18
18
|
A Sema é ensinada para IA por contexto operacional, não por explicação vaga. O agente precisa de sintaxe, semântica, representação intermediária, exemplos e contrato do projeto antes de tocar código ou documentos.
|
|
19
19
|
|
|
20
|
-
Em IDE local, o primeiro passo é confirmar que `AGENTS.md` existe na raiz do projeto.
|
|
20
|
+
Em IDE local, o primeiro passo é confirmar que `AGENTS.md` existe na raiz do projeto e que a CLI completa da Sema está instalada. Depois rode `sema preflight resumo --json`; se a decisão não for `use_cli_local`, pare. Com CLI autorizada, rode `sema resumo`, `sema docs-impacto`, `sema inspecionar`, `sema drift` e `sema impacto` localmente. Não chame MCP remoto, `sema_sync`, `sema_contratos_sincronizar` nem `sema mcp-client` para ler workspace local. Em chats web, não baixe arquivos no ambiente do chat; chame `sema_chat_contexto` e depois `sema_sync` com contrato, código selecionado, docs operacionais e índice.
|
|
21
21
|
|
|
22
22
|
A moldura correta é simples: contrato primeiro, evidência antes da ação e nada de adivinhar lendo código cru quando a Sema pode entregar resumo, drift, impacto e docs obrigatórias.
|
|
23
23
|
|
|
@@ -25,6 +25,6 @@ A moldura correta é simples: contrato primeiro, evidência antes da ação e na
|
|
|
25
25
|
|
|
26
26
|
Sema se enseña a una IA con contexto operativo, no con explicaciones vagas. El agente necesita sintaxis, semántica, representación intermedia, ejemplos y contrato del proyecto antes de tocar código o documentos.
|
|
27
27
|
|
|
28
|
-
En IDE local, el primer paso es confirmar que `AGENTS.md` existe en la raíz del proyecto.
|
|
28
|
+
En una IDE local, el primer paso es confirmar que `AGENTS.md` existe en la raíz del proyecto y que la CLI completa de Sema está instalada. Después ejecuta `sema preflight resumo --json`; si la decisión no es `use_cli_local`, para. Con la CLI autorizada, ejecuta `sema resumo`, `sema docs-impacto`, `sema inspecionar`, `sema drift` y `sema impacto` localmente. No llames el MCP remoto, `sema_sync`, `sema_contratos_sincronizar` ni `sema mcp-client` para leer un workspace local. En chats web, no descargues archivos en el entorno del chat; llama `sema_chat_contexto` y después `sema_sync` con contrato, código seleccionado, docs operativas e índice.
|
|
29
29
|
|
|
30
30
|
El encuadre correcto es simple: contrato primero, evidencia antes de la acción y nada de adivinar leyendo código crudo cuando Sema puede entregar resumen, drift, impacto y docs obligatorias.
|
|
@@ -22,16 +22,26 @@ Regra de idioma humano: responda no idioma do usuário. Em PT-BR, use acentos, c
|
|
|
22
22
|
|
|
23
23
|
Regra de timeout: timeout local do agente não é falha do Sema. Se `sema resumo`, `drift`, `docs-impacto` ou outro gate estourar, aumente o timeout e tente de novo antes de declarar bloqueio. Para projeto grande, escopo menor vem primeiro: `sema resumo caminho/arquivo.sema --micro --para mudanca`.
|
|
24
24
|
|
|
25
|
+
## Superfície obrigatória
|
|
26
|
+
|
|
27
|
+
1. IDE local com workspace no disco: rode `sema preflight resumo --json`. Se `decisao` não for `use_cli_local`, pare bloqueado.
|
|
28
|
+
2. IDE local autorizada: use somente a CLI local para `resumo`, `docs-impacto`, `inspecionar`, `drift`, `impacto`, `validar`, `verificar` e `finalizar-mudanca`.
|
|
29
|
+
3. IDE local proibida: não chame MCP remoto, `sema_sync`, `sema_contratos_sincronizar` nem `sema mcp-client` para ler o workspace local.
|
|
30
|
+
4. Web/chat/remoto sem workspace local: use `sema_chat_contexto`, depois `sema_sync` inline com contrato `.sema`, código selecionado, documentação operacional e índice; use o `projeto` retornado.
|
|
31
|
+
5. Se a IA não consegue identificar se está em IDE local ou web/chat remoto, ela deve parar e declarar bloqueio. Não invente superfície.
|
|
32
|
+
|
|
25
33
|
## Fluxo curto
|
|
26
|
-
|
|
27
|
-
1.
|
|
28
|
-
2.
|
|
29
|
-
3.
|
|
30
|
-
4.
|
|
31
|
-
5.
|
|
32
|
-
6.
|
|
33
|
-
7.
|
|
34
|
-
8.
|
|
34
|
+
|
|
35
|
+
1. identificar a superfície: CLI local ou MCP remoto web/chat
|
|
36
|
+
2. em IDE local, rodar `sema preflight resumo --json` e parar se não retornar `use_cli_local`
|
|
37
|
+
3. ler contexto do projeto
|
|
38
|
+
4. identificar a capacidade da IA
|
|
39
|
+
5. identificar o módulo alvo
|
|
40
|
+
6. consultar o menor artefato semântico suficiente
|
|
41
|
+
7. editar
|
|
42
|
+
8. formatar
|
|
43
|
+
9. validar
|
|
44
|
+
10. verificar
|
|
35
45
|
|
|
36
46
|
## Fluxo detalhado
|
|
37
47
|
|
|
@@ -51,9 +61,9 @@ Se o trabalho estiver ligado a pagamento, ler também:
|
|
|
51
61
|
|
|
52
62
|
Antes de despejar contexto na IA, escolha o que ela aguenta:
|
|
53
63
|
|
|
54
|
-
- IA fraca, gratuita ou com pouca disciplina: `SEMA_BOOT.md`, `SEMA_SMALL_MODEL.md`, `sema resumo --micro` e `briefing.min.json`
|
|
55
|
-
- IA média: `sema resumo --curto`, `briefing.min.json` e `drift.json`
|
|
56
|
-
- IA forte: `contexto-ia`, `briefing.json`, `drift.json`, `ir.json` e `ast.json`
|
|
64
|
+
- IA fraca, gratuita ou com pouca disciplina: `sema preflight resumo --json`, `SEMA_BOOT.md`, `SEMA_SMALL_MODEL.md`, `sema resumo --micro` e `briefing.min.json`
|
|
65
|
+
- IA média: `sema preflight resumo --json`, `sema resumo --curto`, `briefing.min.json` e `drift.json`
|
|
66
|
+
- IA forte: `sema preflight resumo --json`, `contexto-ia`, `briefing.json`, `drift.json`, `ir.json` e `ast.json`
|
|
57
67
|
|
|
58
68
|
Se qualquer comando Sema acima estourar timeout definido pela própria IA, ela deve aumentar o timeout e repetir. Timeout do agente não autoriza pular Sema nem concluir que a sessão está inativa.
|
|
59
69
|
|
|
@@ -75,10 +85,11 @@ Regra pratica:
|
|
|
75
85
|
|
|
76
86
|
Antes de alterar, a IA deve executar:
|
|
77
87
|
|
|
78
|
-
```bash
|
|
79
|
-
sema resumo
|
|
80
|
-
sema
|
|
81
|
-
sema
|
|
88
|
+
```bash
|
|
89
|
+
sema preflight resumo --json
|
|
90
|
+
sema resumo caminho/arquivo.sema --curto --para mudanca
|
|
91
|
+
sema ast caminho/arquivo.sema --json
|
|
92
|
+
sema ir caminho/arquivo.sema --json
|
|
82
93
|
```
|
|
83
94
|
|
|
84
95
|
Objetivo:
|
|
@@ -150,20 +161,22 @@ sema verificar arquivo-ou-pasta --json --saida ./.tmp/verificacao-ia
|
|
|
150
161
|
|
|
151
162
|
Se voce quiser o menor fluxo aceitavel para uma IA fraca:
|
|
152
163
|
|
|
153
|
-
```bash
|
|
154
|
-
sema resumo
|
|
155
|
-
sema
|
|
156
|
-
sema
|
|
164
|
+
```bash
|
|
165
|
+
sema preflight resumo --json
|
|
166
|
+
sema resumo caminho/arquivo.sema --micro --para mudanca
|
|
167
|
+
sema formatar caminho/arquivo.sema
|
|
168
|
+
sema validar caminho/arquivo.sema --json
|
|
157
169
|
```
|
|
158
170
|
|
|
159
171
|
Mas, sendo sincero, o fluxo bom mesmo e fechar com `verificar`.
|
|
160
172
|
|
|
161
173
|
Se a tarefa envolver código derivado, o fluxo mínimo aceitavel vira:
|
|
162
174
|
|
|
163
|
-
```bash
|
|
164
|
-
sema
|
|
165
|
-
sema
|
|
166
|
-
sema
|
|
175
|
+
```bash
|
|
176
|
+
sema preflight resumo --json
|
|
177
|
+
sema ir caminho/arquivo.sema --json
|
|
178
|
+
sema formatar caminho/arquivo.sema
|
|
179
|
+
sema validar caminho/arquivo.sema --json
|
|
167
180
|
sema compilar caminho/arquivo.sema --alvo typescript --saida ./saida/typescript
|
|
168
181
|
```
|
|
169
182
|
|
|
@@ -7,9 +7,13 @@
|
|
|
7
7
|
|
|
8
8
|
## English
|
|
9
9
|
|
|
10
|
-
Sema is private.
|
|
10
|
+
Sema is private. Local IDEs use the complete Sema CLI. Web/chat clients without local workspace access use the remote MCP.
|
|
11
11
|
|
|
12
|
-
|
|
12
|
+
In a local IDE, install the CLI and key, keep `AGENTS.md` in the project root, run `sema preflight resumo --json`, and stop unless `decisao` is `use_cli_local`. After that, use local CLI commands: `sema resumo`, `sema docs-impacto`, `sema inspecionar`, `sema drift`, `sema impacto`, `sema validar`, and `sema finalizar-mudanca`.
|
|
13
|
+
|
|
14
|
+
Do not call remote MCP, `sema_sync`, `sema_contratos_sincronizar`, or `sema mcp-client` to read a local workspace. Those paths are forbidden for local IDE work when the CLI is operational.
|
|
15
|
+
|
|
16
|
+
Web chats should use `sema_chat_contexto` and `sema_sync` with inline contract, selected code, operational docs, and index. Web chats must not download files into the chat environment.
|
|
13
17
|
|
|
14
18
|
Install the governed CLI/client from npm when a local IDE or VPS mirror needs the `sema` command:
|
|
15
19
|
|
|
@@ -17,13 +21,17 @@ Install the governed CLI/client from npm when a local IDE or VPS mirror needs th
|
|
|
17
21
|
npm install -g @semacode/cli
|
|
18
22
|
```
|
|
19
23
|
|
|
20
|
-
The MCP server remains the private
|
|
24
|
+
The MCP server remains the private web/chat surface. Do not install the MCP from the npm installer package; configure the authorized remote `/mcp` endpoint only for remote clients.
|
|
21
25
|
|
|
22
26
|
## Português
|
|
23
27
|
|
|
24
|
-
A Sema é privada.
|
|
28
|
+
A Sema é privada. IDE local usa a CLI completa da Sema. Cliente web/chat sem acesso ao workspace local usa MCP remoto.
|
|
29
|
+
|
|
30
|
+
Em IDE local, instale a CLI e a chave, mantenha `AGENTS.md` na raiz do projeto, rode `sema preflight resumo --json` e pare se `decisao` não for `use_cli_local`. Depois disso, use comandos locais da CLI: `sema resumo`, `sema docs-impacto`, `sema inspecionar`, `sema drift`, `sema impacto`, `sema validar` e `sema finalizar-mudanca`.
|
|
25
31
|
|
|
26
|
-
|
|
32
|
+
Não chame MCP remoto, `sema_sync`, `sema_contratos_sincronizar` nem `sema mcp-client` para ler workspace local. Esses caminhos são proibidos em IDE local quando a CLI está operacional.
|
|
33
|
+
|
|
34
|
+
Chats web devem usar `sema_chat_contexto` e `sema_sync` com contrato inline, código selecionado, docs operacionais e índice. Chats web não devem baixar arquivos no ambiente do chat.
|
|
27
35
|
|
|
28
36
|
Instale a CLI/cliente governada pelo npm quando uma IDE local ou espelho na VPS precisar do comando `sema`:
|
|
29
37
|
|
|
@@ -31,13 +39,17 @@ Instale a CLI/cliente governada pelo npm quando uma IDE local ou espelho na VPS
|
|
|
31
39
|
npm install -g @semacode/cli
|
|
32
40
|
```
|
|
33
41
|
|
|
34
|
-
O servidor MCP continua sendo a superfície privada
|
|
42
|
+
O servidor MCP continua sendo a superfície privada para web/chat. Não instale o MCP pelo pacote npm do instalador; configure o endpoint remoto `/mcp` autorizado apenas para clientes remotos.
|
|
35
43
|
|
|
36
44
|
## Español
|
|
37
45
|
|
|
38
|
-
Sema es privada.
|
|
46
|
+
Sema es privada. Una IDE local usa la CLI completa de Sema. Un cliente web/chat sin acceso al workspace local usa el MCP remoto.
|
|
47
|
+
|
|
48
|
+
En una IDE local, instala la CLI y la clave, deja `AGENTS.md` en la raíz del proyecto, ejecuta `sema preflight resumo --json` y para si `decisao` no es `use_cli_local`. Después usa comandos locales de la CLI: `sema resumo`, `sema docs-impacto`, `sema inspecionar`, `sema drift`, `sema impacto`, `sema validar` y `sema finalizar-mudanca`.
|
|
49
|
+
|
|
50
|
+
No llames el MCP remoto, `sema_sync`, `sema_contratos_sincronizar` ni `sema mcp-client` para leer un workspace local. Esos caminos están prohibidos en una IDE local cuando la CLI está operacional.
|
|
39
51
|
|
|
40
|
-
|
|
52
|
+
Los chats web deben usar `sema_chat_contexto` y `sema_sync` con contrato inline, código seleccionado, docs operativas e índice. Los chats web no deben descargar archivos en el entorno del chat.
|
|
41
53
|
|
|
42
54
|
Instala la CLI/cliente gobernada desde npm cuando una IDE local o espejo en la VPS necesite el comando `sema`:
|
|
43
55
|
|
|
@@ -45,4 +57,4 @@ Instala la CLI/cliente gobernada desde npm cuando una IDE local o espejo en la V
|
|
|
45
57
|
npm install -g @semacode/cli
|
|
46
58
|
```
|
|
47
59
|
|
|
48
|
-
El servidor MCP sigue siendo la superficie privada
|
|
60
|
+
El servidor MCP sigue siendo la superficie privada para web/chat. No instales el MCP desde el paquete npm instalador; configura el endpoint remoto `/mcp` autorizado solo para clientes remotos.
|
|
@@ -21,18 +21,24 @@ Sema pode usar palavras-chave de DSL em ASCII. A IA não deve copiar essa estét
|
|
|
21
21
|
|
|
22
22
|
## English
|
|
23
23
|
|
|
24
|
-
Sema exists for AI agents operating live systems. The agent should ask Sema for summary, docs impact, drift, impact, profile validation, and finalization instead of guessing from raw code.
|
|
24
|
+
Sema exists for AI agents operating live systems. The agent should ask Sema for preflight, summary, docs impact, drift, impact, profile validation, and finalization instead of guessing from raw code.
|
|
25
25
|
|
|
26
|
-
In local IDEs, confirm `AGENTS.md` exists
|
|
26
|
+
In local IDEs, confirm `AGENTS.md` exists, install the complete Sema CLI, run `sema preflight resumo --json`, and stop unless the decision is `use_cli_local`. Then use local CLI commands: `sema resumo`, `sema docs-impacto`, `sema inspecionar`, `sema drift`, `sema impacto`, `sema validar`, and `sema finalizar-mudanca`. Do not call remote MCP, `sema_sync`, `sema_contratos_sincronizar`, or `sema mcp-client` to read a local workspace.
|
|
27
|
+
|
|
28
|
+
In web chats without workspace access, use `sema_chat_contexto` first, then `sema_sync` with contract, selected code, documentation, and index; then use the returned `projeto`. The CLI and MCP use the same commercial control plane and SEMAS account.
|
|
27
29
|
|
|
28
30
|
## Português
|
|
29
31
|
|
|
30
|
-
A Sema existe para agentes de IA operarem sistemas vivos. O agente deve pedir resumo, impacto documental, drift, impacto, validação de profile e finalização para a Sema em vez de adivinhar pelo código cru.
|
|
32
|
+
A Sema existe para agentes de IA operarem sistemas vivos. O agente deve pedir preflight, resumo, impacto documental, drift, impacto, validação de profile e finalização para a Sema em vez de adivinhar pelo código cru.
|
|
33
|
+
|
|
34
|
+
Em IDE local, confirme que `AGENTS.md` existe, instale a CLI completa da Sema, rode `sema preflight resumo --json` e pare se a decisão não for `use_cli_local`. Depois use comandos locais da CLI: `sema resumo`, `sema docs-impacto`, `sema inspecionar`, `sema drift`, `sema impacto`, `sema validar` e `sema finalizar-mudanca`. Não chame MCP remoto, `sema_sync`, `sema_contratos_sincronizar` nem `sema mcp-client` para ler workspace local.
|
|
31
35
|
|
|
32
|
-
Em
|
|
36
|
+
Em chats web sem acesso ao workspace, use primeiro `sema_chat_contexto`, depois `sema_sync` com contrato, código selecionado, documentação e índice; depois use o `projeto` retornado. CLI e MCP usam o mesmo control plane comercial e a mesma conta de SEMAS.
|
|
33
37
|
|
|
34
38
|
## Español
|
|
35
39
|
|
|
36
|
-
Sema existe para agentes de IA que operan sistemas vivos. El agente debe pedir resumen, impacto documental, drift, impacto, validación de profile y finalización a Sema en vez de adivinar desde código crudo.
|
|
40
|
+
Sema existe para agentes de IA que operan sistemas vivos. El agente debe pedir preflight, resumen, impacto documental, drift, impacto, validación de profile y finalización a Sema en vez de adivinar desde código crudo.
|
|
41
|
+
|
|
42
|
+
En una IDE local, confirma que `AGENTS.md` existe, instala la CLI completa de Sema, ejecuta `sema preflight resumo --json` y para si la decisión no es `use_cli_local`. Después usa comandos locales de la CLI: `sema resumo`, `sema docs-impacto`, `sema inspecionar`, `sema drift`, `sema impacto`, `sema validar` y `sema finalizar-mudanca`. No llames el MCP remoto, `sema_sync`, `sema_contratos_sincronizar` ni `sema mcp-client` para leer un workspace local.
|
|
37
43
|
|
|
38
|
-
En
|
|
44
|
+
En chats web sin acceso al workspace, usa primero `sema_chat_contexto`, después `sema_sync` con contrato, código seleccionado, documentación e índice; después usa el `projeto` devuelto. CLI y MCP usan el mismo control plane comercial y la misma cuenta de SEMAS.
|
package/docs/mcp.md
CHANGED
|
@@ -11,11 +11,11 @@ The Sema MCP is the private coordinator for agents. It authenticates clients, se
|
|
|
11
11
|
|
|
12
12
|
It must stay compatible with web chats. For ChatGPT, Lovable, GPTs, and similar clients, the MCP runs on the VPS and uses the governed CLI installed there against authorized mirrors such as `/srv/sema/projetos/...`.
|
|
13
13
|
|
|
14
|
-
|
|
14
|
+
Local IDEs should not use remote MCP, `sema_sync`, `sema_contratos_sincronizar`, or `sema mcp-client` to read a local workspace. In that mode, install the complete Sema CLI, save the local key, run `sema preflight resumo --json`, and continue locally only when the decision is `use_cli_local`.
|
|
15
15
|
|
|
16
|
-
The MCP must never pretend that a local Windows path exists on the Linux server. If the
|
|
16
|
+
The MCP must never pretend that a local Windows path exists on the Linux server. If a local IDE asks the remote MCP to read that path, the next action is to use the local CLI. If a web/chat client has no workspace, the next action is to request or create a mirror/snapshot.
|
|
17
17
|
|
|
18
|
-
The app or connector must recognize the remote MCP from connection/authentication even when no project workspace has been synchronized. Missing workspace is not a missing active session
|
|
18
|
+
The app or connector must recognize the remote MCP from connection/authentication even when no project workspace has been synchronized. Missing workspace is not a missing active session. In web/chat, project work must use `sema_sync` with the applicable contract, selected code, documentation, and index. In a local IDE, project work must use CLI preflight and local CLI commands. The remote MCP must not ask for or try to read the user's local folder.
|
|
19
19
|
|
|
20
20
|
Official Sema examples and grammar references must be exposed through `sema_exemplos`. Remote agents must not read `C:\GitHub\Sema\exemplos` or any other local user checkout just to learn the DSL.
|
|
21
21
|
|
|
@@ -31,11 +31,11 @@ O MCP da Sema é o coordenador privado dos agentes. Ele autentica clientes, esco
|
|
|
31
31
|
|
|
32
32
|
Ele precisa continuar compatível com chats web. Para ChatGPT, Lovable, GPTs e clientes parecidos, o MCP roda na VPS e usa a CLI governada instalada lá contra espelhos autorizados como `/srv/sema/projetos/...`.
|
|
33
33
|
|
|
34
|
-
|
|
34
|
+
IDEs locais não devem usar MCP remoto, `sema_sync`, `sema_contratos_sincronizar` nem `sema mcp-client` para ler workspace local. Nesse modo, instale a CLI completa da Sema, grave a chave local, rode `sema preflight resumo --json` e continue localmente somente quando a decisão for `use_cli_local`.
|
|
35
35
|
|
|
36
|
-
O MCP nunca deve fingir que um caminho Windows local existe no servidor Linux. Se
|
|
36
|
+
O MCP nunca deve fingir que um caminho Windows local existe no servidor Linux. Se uma IDE local pedir ao MCP remoto para ler esse caminho, a próxima ação é usar a CLI local. Se um cliente web/chat não tiver workspace, a próxima ação é pedir ou criar um espelho/snapshot.
|
|
37
37
|
|
|
38
|
-
O app ou conector deve reconhecer o MCP remoto pela
|
|
38
|
+
O app ou conector deve reconhecer o MCP remoto pela conexão/autenticação, mesmo sem workspace de projeto sincronizado. Falta de workspace não é falta de sessão ativa. Em web/chat, trabalho de projeto deve usar `sema_sync` com contrato aplicável, código selecionado, documentação e índice. Em IDE local, trabalho de projeto deve usar preflight e comandos locais da CLI. O MCP remoto não deve pedir nem tentar ler a pasta local do usuário.
|
|
39
39
|
|
|
40
40
|
Exemplos oficiais da Sema e referencias de gramatica devem ser expostos por `sema_exemplos`. Agentes remotos nao devem ler `C:\GitHub\Sema\exemplos` nem qualquer checkout local do usuario so para aprender a DSL.
|
|
41
41
|
|
|
@@ -51,11 +51,11 @@ El MCP de Sema es el coordinador privado de los agentes. Autentica clientes, eli
|
|
|
51
51
|
|
|
52
52
|
Debe seguir compatible con chats web. Para ChatGPT, Lovable, GPTs y clientes similares, el MCP corre en la VPS y usa la CLI gobernada instalada allí contra espejos autorizados como `/srv/sema/projetos/...`.
|
|
53
53
|
|
|
54
|
-
|
|
54
|
+
Las IDEs locales no deben usar el MCP remoto, `sema_sync`, `sema_contratos_sincronizar` ni `sema mcp-client` para leer un workspace local. En ese modo, instala la CLI completa de Sema, guarda la clave local, ejecuta `sema preflight resumo --json` y continúa localmente solo cuando la decisión sea `use_cli_local`.
|
|
55
55
|
|
|
56
|
-
El MCP nunca debe fingir que una ruta local de Windows existe en el servidor Linux. Si
|
|
56
|
+
El MCP nunca debe fingir que una ruta local de Windows existe en el servidor Linux. Si una IDE local pide al MCP remoto leer esa ruta, la siguiente acción es usar la CLI local. Si un cliente web/chat no tiene workspace, la siguiente acción es pedir o crear un espejo/snapshot.
|
|
57
57
|
|
|
58
|
-
La app o el conector debe reconocer el MCP remoto por
|
|
58
|
+
La app o el conector debe reconocer el MCP remoto por conexión/autenticación, incluso sin workspace de proyecto sincronizado. Falta de workspace no es falta de sesión activa. En web/chat, el trabajo de proyecto debe usar `sema_sync` con contrato aplicable, código seleccionado, documentación e índice. En una IDE local, el trabajo de proyecto debe usar preflight y comandos locales de la CLI. El MCP remoto no debe pedir ni intentar leer la carpeta local del usuario.
|
|
59
59
|
|
|
60
60
|
Los ejemplos oficiales de Sema y las referencias de gramatica deben exponerse mediante `sema_exemplos`. Los agentes remotos no deben leer `C:\GitHub\Sema\exemplos` ni ningun checkout local del usuario solo para aprender la DSL.
|
|
61
61
|
|