@semacode/cli 1.5.27 → 1.5.29

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (81) hide show
  1. package/AGENTS.md +279 -265
  2. package/AGENT_CONTEXT_PACK.json +164 -0
  3. package/README.md +144 -144
  4. package/SEMA_BRIEF.curto.txt +7 -7
  5. package/SEMA_BRIEF.md +464 -65
  6. package/SEMA_BRIEF.micro.txt +6 -6
  7. package/SEMA_INDEX.json +6723 -667
  8. package/dist/bridge.d.ts +52 -0
  9. package/dist/bridge.js +318 -0
  10. package/dist/bridge.js.map +1 -0
  11. package/dist/comandos.d.ts +11 -0
  12. package/dist/comandos.js +110 -0
  13. package/dist/comandos.js.map +1 -0
  14. package/dist/contexto.d.ts +34 -0
  15. package/dist/contexto.js +197 -0
  16. package/dist/contexto.js.map +1 -0
  17. package/dist/drift.d.ts +1 -1
  18. package/dist/drift.js +32 -5
  19. package/dist/drift.js.map +1 -1
  20. package/dist/index.js +391 -64
  21. package/dist/index.js.map +1 -1
  22. package/dist/lua-symbols.d.ts +0 -6
  23. package/dist/lua-symbols.js +11 -78
  24. package/dist/lua-symbols.js.map +1 -1
  25. package/dist/projeto.js +6 -0
  26. package/dist/projeto.js.map +1 -1
  27. package/dist/tipos.d.ts +1 -1
  28. package/docs/AGENT_STARTER.md +109 -109
  29. package/docs/api.md +82 -0
  30. package/docs/cli.md +175 -175
  31. package/docs/como-ensinar-a-sema-para-ia.md +155 -155
  32. package/docs/deploy.md +93 -0
  33. package/docs/documentacao.md +88 -88
  34. package/docs/env.md +105 -105
  35. package/docs/extensao-vscode.md +53 -53
  36. package/docs/fluxo-pratico-ia-sema.md +187 -187
  37. package/docs/instalacao-e-primeiro-uso.md +134 -134
  38. package/docs/integracao-com-ia.md +110 -110
  39. package/docs/mcp.md +292 -292
  40. package/docs/pagamento-ponta-a-ponta.md +171 -171
  41. package/docs/persistencia-vendor-first.md +151 -151
  42. package/docs/prompt-base-ia-sema.md +111 -111
  43. package/docs/repositories.md +54 -54
  44. package/docs/rollback.md +49 -49
  45. package/docs/seguranca.md +126 -126
  46. package/docs/sintaxe.md +218 -218
  47. package/exemplos/author_obra_comum.sema +294 -294
  48. package/exemplos/author_tema_sensivel.sema +264 -264
  49. package/exemplos/profile_game.sema +114 -114
  50. package/exemplos/profile_legal.sema +105 -105
  51. package/exemplos/profile_ops.sema +110 -110
  52. package/exemplos/profile_research.sema +104 -104
  53. package/exemplos/profile_software.sema +123 -123
  54. package/exemplos/profile_workflow_n8n.sema +99 -99
  55. package/llms-full.txt +10 -9
  56. package/llms.txt +8 -7
  57. package/node_modules/@sema/gerador-css/package.json +1 -1
  58. package/node_modules/@sema/gerador-dart/package.json +1 -1
  59. package/node_modules/@sema/gerador-html/package.json +1 -1
  60. package/node_modules/@sema/gerador-javascript/package.json +1 -1
  61. package/node_modules/@sema/gerador-lua/package.json +1 -1
  62. package/node_modules/@sema/gerador-python/package.json +1 -1
  63. package/node_modules/@sema/gerador-typescript/package.json +1 -1
  64. package/node_modules/@sema/nucleo/dist/ast/tipos.d.ts +1 -1
  65. package/node_modules/@sema/nucleo/dist/index.d.ts +17 -0
  66. package/node_modules/@sema/nucleo/dist/index.js +28 -0
  67. package/node_modules/@sema/nucleo/dist/index.js.map +1 -1
  68. package/node_modules/@sema/nucleo/dist/ir/conversor.js +4 -0
  69. package/node_modules/@sema/nucleo/dist/ir/conversor.js.map +1 -1
  70. package/node_modules/@sema/nucleo/dist/ir/modelos.d.ts +3 -3
  71. package/node_modules/@sema/nucleo/dist/parser/parser.js +2 -0
  72. package/node_modules/@sema/nucleo/dist/parser/parser.js.map +1 -1
  73. package/node_modules/@sema/nucleo/dist/semantico/analisador.d.ts +2 -2
  74. package/node_modules/@sema/nucleo/dist/semantico/analisador.js +3 -1
  75. package/node_modules/@sema/nucleo/dist/semantico/analisador.js.map +1 -1
  76. package/node_modules/@sema/nucleo/package.json +1 -1
  77. package/node_modules/@sema/padroes/package.json +1 -1
  78. package/package.json +11 -10
  79. package/dist/php-symbols.d.ts +0 -24
  80. package/dist/php-symbols.js +0 -375
  81. package/dist/php-symbols.js.map +0 -1
@@ -0,0 +1,52 @@
1
+ /**
2
+ * Bridge CLI local -> MCP remoto.
3
+ *
4
+ * Transporte inteligente: a CLI pública lê disco local, o MCP remoto privado
5
+ * governa profiles e pipelines credit-gated. Mesmo endpoint atende CLI local
6
+ * (HTTP autenticado) e chats web (sync inline).
7
+ *
8
+ * Contrato: contratos/sema/mcp_client_bridge.sema
9
+ */
10
+ export type ModoTransporte = "CLI_LOCAL" | "CHAT_WEB" | "API_DIRETA";
11
+ export type StatusBridge = "NAO_CONFIGURADO" | "AUTENTICADO" | "CREDITOS_INSUFICIENTES" | "OPERACIONAL" | "BLOQUEADO";
12
+ export interface SessaoBridge {
13
+ id: string;
14
+ endpointMcp: string;
15
+ modo: ModoTransporte;
16
+ status: StatusBridge;
17
+ creditosRestantes: number;
18
+ ultimoPing: string;
19
+ }
20
+ export interface ConfigBridgeLocal {
21
+ endpointMcp: string;
22
+ token: string;
23
+ persistir: boolean;
24
+ }
25
+ export interface BridgeEntrada {
26
+ contratos: string[];
27
+ codigoSelecionado?: string[];
28
+ intencao: string;
29
+ endpointMcp: string;
30
+ token: string;
31
+ modo: ModoTransporte;
32
+ }
33
+ export interface BridgeResultado {
34
+ sessao: SessaoBridge;
35
+ diagnosticosRemotos: unknown[];
36
+ perfisAplicaveis: string[];
37
+ proximoPasso: string;
38
+ creditosConsumidos: number;
39
+ erro?: string;
40
+ }
41
+ export interface BridgeConfigResultado {
42
+ configurado: boolean;
43
+ sessaoTeste: SessaoBridge;
44
+ status: StatusBridge;
45
+ erro?: string;
46
+ }
47
+ export declare function operarBridgeCliParaMcp(entrada: BridgeEntrada): Promise<BridgeResultado>;
48
+ export declare function configurarBridgeLocal(config: ConfigBridgeLocal): Promise<BridgeConfigResultado>;
49
+ export declare function obterTokenMcpAmbiente(): {
50
+ token: string;
51
+ endpoint: string;
52
+ };
package/dist/bridge.js ADDED
@@ -0,0 +1,318 @@
1
+ /**
2
+ * Bridge CLI local -> MCP remoto.
3
+ *
4
+ * Transporte inteligente: a CLI pública lê disco local, o MCP remoto privado
5
+ * governa profiles e pipelines credit-gated. Mesmo endpoint atende CLI local
6
+ * (HTTP autenticado) e chats web (sync inline).
7
+ *
8
+ * Contrato: contratos/sema/mcp_client_bridge.sema
9
+ */
10
+ import { sincronizarContratosRemotos, } from "./mcpRemoto.js";
11
+ // ---------------------------------------------------------------------------
12
+ // Constantes
13
+ // ---------------------------------------------------------------------------
14
+ const MCP_TOKEN_ENV = "SEMA_MCP_AUTH_TOKEN";
15
+ const MCP_ENDPOINT_ENV = "SEMA_MCP_ENDPOINT";
16
+ const MCP_ENDPOINT_PADRAO = "https://sema.otimitare.online/mcp";
17
+ const TIMEOUT_MCP_MS = 30_000;
18
+ // ---------------------------------------------------------------------------
19
+ // Helpers
20
+ // ---------------------------------------------------------------------------
21
+ function prefixoSeguroToken(token) {
22
+ return token.slice(0, Math.min(14, token.length));
23
+ }
24
+ function gerarIdSessao() {
25
+ return `sema-bridge-${Date.now().toString(36)}-${Math.random().toString(36).slice(2, 8)}`;
26
+ }
27
+ function tokenEhValido(token) {
28
+ return /^sema_mcp_[A-Za-z0-9_-]{16,}$/.test(token) || token.length >= 20;
29
+ }
30
+ function endpointEhValido(endpoint) {
31
+ try {
32
+ const url = new URL(endpoint);
33
+ return url.protocol === "https:";
34
+ }
35
+ catch {
36
+ return false;
37
+ }
38
+ }
39
+ // ---------------------------------------------------------------------------
40
+ // Filtro de segredos (reutiliza padrões do mcpRemoto.ts)
41
+ // ---------------------------------------------------------------------------
42
+ const PADROES_CONTEUDO_SENSIVEL_BRIDGE = [
43
+ /\b(?:api[_-]?key|secret|token|password|senha)\s*[:=]\s*["']?[A-Za-z0-9_\-]{16,}/i,
44
+ /\bsk-[A-Za-z0-9_\-]{20,}\b/,
45
+ /\beyJ[A-Za-z0-9_\-]+\.[A-Za-z0-9_\-]+\.[A-Za-z0-9_\-]+\b/,
46
+ ];
47
+ const PADROES_CAMINHO_SENSIVEL_BRIDGE = [
48
+ /(^|[\\/])\.env(?:\.|$)/i,
49
+ /(^|[\\/])node_modules([\\/]|$)/i,
50
+ /(^|[\\/])(?:secrets?|credentials?|tokens?)(?:[\\/]|\.|$)/i,
51
+ ];
52
+ function conteudoTemSegredo(conteudo) {
53
+ return PADROES_CONTEUDO_SENSIVEL_BRIDGE.some((p) => p.test(conteudo));
54
+ }
55
+ function caminhoEhSensivel(caminho) {
56
+ return PADROES_CAMINHO_SENSIVEL_BRIDGE.some((p) => p.test(caminho));
57
+ }
58
+ // ---------------------------------------------------------------------------
59
+ // Operar bridge CLI -> MCP
60
+ // ---------------------------------------------------------------------------
61
+ export async function operarBridgeCliParaMcp(entrada) {
62
+ const inicio = Date.now();
63
+ const id = gerarIdSessao();
64
+ // Validações básicas
65
+ if (!entrada.contratos || entrada.contratos.length === 0) {
66
+ return {
67
+ sessao: criarSessaoVazia(id, entrada),
68
+ diagnosticosRemotos: [],
69
+ perfisAplicaveis: [],
70
+ proximoPasso: "fornecer_contratos",
71
+ creditosConsumidos: 0,
72
+ erro: "Nenhum contrato informado.",
73
+ };
74
+ }
75
+ if (!endpointEhValido(entrada.endpointMcp)) {
76
+ return {
77
+ sessao: criarSessaoVazia(id, entrada),
78
+ diagnosticosRemotos: [],
79
+ perfisAplicaveis: [],
80
+ proximoPasso: "corrigir_endpoint",
81
+ creditosConsumidos: 0,
82
+ erro: "Endpoint MCP inválido. Use HTTPS.",
83
+ };
84
+ }
85
+ if (!tokenEhValido(entrada.token)) {
86
+ return {
87
+ sessao: criarSessaoVazia(id, entrada),
88
+ diagnosticosRemotos: [],
89
+ perfisAplicaveis: [],
90
+ proximoPasso: "corrigir_token",
91
+ creditosConsumidos: 0,
92
+ erro: "Token MCP inválido.",
93
+ };
94
+ }
95
+ // Filtrar segredos do código selecionado
96
+ const codigoFiltrado = (entrada.codigoSelecionado ?? []).filter((c) => {
97
+ if (caminhoEhSensivel(c))
98
+ return false;
99
+ return true;
100
+ });
101
+ if (codigoFiltrado.length < (entrada.codigoSelecionado ?? []).length) {
102
+ return {
103
+ sessao: criarSessaoVazia(id, entrada),
104
+ diagnosticosRemotos: [],
105
+ perfisAplicaveis: [],
106
+ proximoPasso: "remover_segredos",
107
+ creditosConsumidos: 0,
108
+ erro: "segredo_detectado: Snapshot contém arquivo sensível. Remova antes de enviar.",
109
+ };
110
+ }
111
+ // Construir snapshot para o MCP remoto
112
+ const snapshot = {
113
+ contratos: entrada.contratos.map((c) => ({ caminho: c })),
114
+ arquivosCodigo: codigoFiltrado.map((c) => ({ caminho: c })),
115
+ };
116
+ // Validar snapshot localmente antes de enviar
117
+ const validacaoLocal = sincronizarContratosRemotos(snapshot);
118
+ if (validacaoLocal.recusas.length > 0) {
119
+ return {
120
+ sessao: criarSessaoVazia(id, entrada),
121
+ diagnosticosRemotos: [],
122
+ perfisAplicaveis: [],
123
+ proximoPasso: "remover_segredos",
124
+ creditosConsumidos: 0,
125
+ erro: `segredo_detectado: ${validacaoLocal.recusas.join(", ")}`,
126
+ };
127
+ }
128
+ // Enviar ao MCP remoto
129
+ try {
130
+ const resposta = await fetch(entrada.endpointMcp, {
131
+ method: "POST",
132
+ headers: {
133
+ "Content-Type": "application/json",
134
+ Authorization: `Bearer ${entrada.token}`,
135
+ "x-sema-bridge-intent": entrada.intencao,
136
+ "x-sema-bridge-mode": entrada.modo,
137
+ },
138
+ body: JSON.stringify({
139
+ metodo: "tools/call",
140
+ params: {
141
+ name: "sema_contratos_sincronizar",
142
+ arguments: {
143
+ projeto_id: `bridge-${id}`,
144
+ nome_projeto: "bridge-cli-local",
145
+ contratos: entrada.contratos.map((c) => ({ caminho: c, acao: "salvar" })),
146
+ arquivos_codigo: codigoFiltrado.map((c) => ({ caminho: c, acao: "salvar" })),
147
+ validar: true,
148
+ },
149
+ },
150
+ }),
151
+ signal: AbortSignal.timeout(TIMEOUT_MCP_MS),
152
+ });
153
+ if (!resposta.ok) {
154
+ if (resposta.status === 401 || resposta.status === 403) {
155
+ return {
156
+ sessao: criarSessao(id, entrada, "BLOQUEADO"),
157
+ diagnosticosRemotos: [],
158
+ perfisAplicaveis: [],
159
+ proximoPasso: "verificar_token",
160
+ creditosConsumidos: 0,
161
+ erro: "token_invalido: Token MCP inválido ou expirado.",
162
+ };
163
+ }
164
+ if (resposta.status === 402) {
165
+ return {
166
+ sessao: criarSessao(id, entrada, "CREDITOS_INSUFICIENTES"),
167
+ diagnosticosRemotos: [],
168
+ perfisAplicaveis: [],
169
+ proximoPasso: "recarregar_creditos",
170
+ creditosConsumidos: 0,
171
+ erro: "sem_creditos: Créditos Sema insuficientes.",
172
+ };
173
+ }
174
+ }
175
+ const payload = (await resposta.json());
176
+ return {
177
+ sessao: criarSessao(id, entrada, "OPERACIONAL"),
178
+ diagnosticosRemotos: payload.validacoes ?? [],
179
+ perfisAplicaveis: extrairPerfis(payload),
180
+ proximoPasso: "pode_chamar_profile_ou_ir",
181
+ creditosConsumidos: 1,
182
+ };
183
+ }
184
+ catch (erro) {
185
+ const mensagem = erro instanceof Error ? erro.message : String(erro);
186
+ return {
187
+ sessao: criarSessao(id, entrada, "BLOQUEADO"),
188
+ diagnosticosRemotos: [],
189
+ perfisAplicaveis: [],
190
+ proximoPasso: "verificar_conectividade",
191
+ creditosConsumidos: 0,
192
+ erro: `endpoint_indisponivel: ${mensagem}`,
193
+ };
194
+ }
195
+ }
196
+ // ---------------------------------------------------------------------------
197
+ // Configurar bridge local
198
+ // ---------------------------------------------------------------------------
199
+ export async function configurarBridgeLocal(config) {
200
+ if (!endpointEhValido(config.endpointMcp)) {
201
+ return {
202
+ configurado: false,
203
+ sessaoTeste: criarSessaoConfig("NAO_CONFIGURADO"),
204
+ status: "NAO_CONFIGURADO",
205
+ erro: "conexao_recusada: Endpoint MCP inválido.",
206
+ };
207
+ }
208
+ if (!tokenEhValido(config.token)) {
209
+ return {
210
+ configurado: false,
211
+ sessaoTeste: criarSessaoConfig("NAO_CONFIGURADO"),
212
+ status: "NAO_CONFIGURADO",
213
+ erro: "token_invalido: Token rejeitado.",
214
+ };
215
+ }
216
+ // Testar conexão com ping ao MCP
217
+ try {
218
+ const resposta = await fetch(`${config.endpointMcp.replace(/\/mcp$/, "")}/healthz`, {
219
+ headers: { Authorization: `Bearer ${config.token}` },
220
+ signal: AbortSignal.timeout(10_000),
221
+ });
222
+ if (!resposta.ok) {
223
+ return {
224
+ configurado: false,
225
+ sessaoTeste: criarSessaoConfig("BLOQUEADO"),
226
+ status: "BLOQUEADO",
227
+ erro: `token_invalido: MCP respondeu ${resposta.status}.`,
228
+ };
229
+ }
230
+ // Persistir config se solicitado
231
+ if (config.persistir && process.env.SEMA_MCP_AUTH_TOKEN === undefined) {
232
+ // Apenas logging — a persistência real usa `sema mcp-instalar-chave`
233
+ console.error(`[sema-bridge] Token prefixo ${prefixoSeguroToken(config.token)} validado. ` +
234
+ `Use 'sema mcp-instalar-chave --stdin' para persistir.`);
235
+ }
236
+ return {
237
+ configurado: true,
238
+ sessaoTeste: criarSessaoConfig("OPERACIONAL"),
239
+ status: "OPERACIONAL",
240
+ };
241
+ }
242
+ catch (erro) {
243
+ const mensagem = erro instanceof Error ? erro.message : String(erro);
244
+ return {
245
+ configurado: false,
246
+ sessaoTeste: criarSessaoConfig("BLOQUEADO"),
247
+ status: "BLOQUEADO",
248
+ erro: `conexao_recusada: ${mensagem}`,
249
+ };
250
+ }
251
+ }
252
+ // ---------------------------------------------------------------------------
253
+ // Helpers internos
254
+ // ---------------------------------------------------------------------------
255
+ function criarSessaoVazia(id, entrada) {
256
+ return {
257
+ id,
258
+ endpointMcp: entrada.endpointMcp,
259
+ modo: entrada.modo,
260
+ status: "NAO_CONFIGURADO",
261
+ creditosRestantes: 0,
262
+ ultimoPing: new Date().toISOString(),
263
+ };
264
+ }
265
+ function criarSessao(id, entrada, status) {
266
+ return {
267
+ id,
268
+ endpointMcp: entrada.endpointMcp,
269
+ modo: entrada.modo,
270
+ status,
271
+ creditosRestantes: status === "OPERACIONAL" ? 99 : 0,
272
+ ultimoPing: new Date().toISOString(),
273
+ };
274
+ }
275
+ function criarSessaoConfig(status) {
276
+ return {
277
+ id: gerarIdSessao(),
278
+ endpointMcp: MCP_ENDPOINT_PADRAO,
279
+ modo: "CLI_LOCAL",
280
+ status,
281
+ creditosRestantes: 0,
282
+ ultimoPing: new Date().toISOString(),
283
+ };
284
+ }
285
+ function extrairPerfis(payload) {
286
+ const perfis = [];
287
+ const validacoes = payload.validacoes;
288
+ if (validacoes) {
289
+ for (const v of validacoes) {
290
+ const saida = v.saida;
291
+ if (saida) {
292
+ try {
293
+ const parsed = JSON.parse(saida);
294
+ if (parsed.resultados) {
295
+ for (const r of parsed.resultados) {
296
+ if (r.modulo)
297
+ perfis.push(r.modulo);
298
+ }
299
+ }
300
+ }
301
+ catch {
302
+ // ignora parse
303
+ }
304
+ }
305
+ }
306
+ }
307
+ return [...new Set(perfis)];
308
+ }
309
+ // ---------------------------------------------------------------------------
310
+ // Obter token do ambiente
311
+ // ---------------------------------------------------------------------------
312
+ export function obterTokenMcpAmbiente() {
313
+ return {
314
+ token: process.env[MCP_TOKEN_ENV] ?? "",
315
+ endpoint: process.env[MCP_ENDPOINT_ENV] ?? MCP_ENDPOINT_PADRAO,
316
+ };
317
+ }
318
+ //# sourceMappingURL=bridge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bridge.js","sourceRoot":"","sources":["../src/bridge.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Registro de comandos da CLI Sema.
3
+ *
4
+ * Cada comando é um módulo separado com seu contrato .sema.
5
+ * Este arquivo é o dispatcher — o index.ts só importa daqui.
6
+ *
7
+ * NOVOS COMANDOS: adicione aqui, nunca no index.ts.
8
+ * O index.ts é só `principal()` com um switch fino que delega pra cá.
9
+ */
10
+ export type HandlerComando = (posicionais: string[], args: string[], emJson: boolean) => Promise<number>;
11
+ export declare const REGISTRO_COMANDOS: Record<string, HandlerComando>;
@@ -0,0 +1,110 @@
1
+ /**
2
+ * Registro de comandos da CLI Sema.
3
+ *
4
+ * Cada comando é um módulo separado com seu contrato .sema.
5
+ * Este arquivo é o dispatcher — o index.ts só importa daqui.
6
+ *
7
+ * NOVOS COMANDOS: adicione aqui, nunca no index.ts.
8
+ * O index.ts é só `principal()` com um switch fino que delega pra cá.
9
+ */
10
+ import { operarBridgeCliParaMcp, configurarBridgeLocal, obterTokenMcpAmbiente, } from "./bridge.js";
11
+ import { gerarPacoteContextoChat, } from "./contexto.js";
12
+ // ---------------------------------------------------------------------------
13
+ // Handlers dos novos comandos (modulares, com contrato .sema)
14
+ // ---------------------------------------------------------------------------
15
+ async function comandoMcpClient(posicionais, args, emJson) {
16
+ const { token, endpoint } = obterTokenMcpAmbiente();
17
+ const intencao = posicionais[0] ?? "validar projeto";
18
+ const contratos = posicionais.slice(1);
19
+ if (!token) {
20
+ console.error("Token MCP nao configurado. Use 'sema mcp-instalar-chave --stdin' primeiro.");
21
+ return 1;
22
+ }
23
+ const entrada = {
24
+ contratos: contratos.length > 0 ? contratos : ["."],
25
+ intencao,
26
+ endpointMcp: endpoint,
27
+ token,
28
+ modo: "CLI_LOCAL",
29
+ };
30
+ const resultado = await operarBridgeCliParaMcp(entrada);
31
+ if (emJson) {
32
+ console.log(JSON.stringify(resultado, null, 2));
33
+ return resultado.erro ? 1 : 0;
34
+ }
35
+ console.log(`Bridge CLI → MCP: ${resultado.sessao.status}`);
36
+ console.log(`Perfis: ${resultado.perfisAplicaveis.join(", ") || "nenhum"}`);
37
+ console.log(`Próximo passo: ${resultado.proximoPasso}`);
38
+ if (resultado.erro) {
39
+ console.error(`Erro: ${resultado.erro}`);
40
+ }
41
+ return resultado.erro ? 1 : 0;
42
+ }
43
+ async function comandoBridgeConfig(_posicionais, args, emJson) {
44
+ const { token, endpoint } = obterTokenMcpAmbiente();
45
+ if (!token) {
46
+ console.error("Token MCP nao configurado. Use 'sema mcp-instalar-chave --stdin' primeiro.");
47
+ return 1;
48
+ }
49
+ const resultado = await configurarBridgeLocal({
50
+ endpointMcp: endpoint,
51
+ token,
52
+ persistir: true,
53
+ });
54
+ if (emJson) {
55
+ console.log(JSON.stringify(resultado, null, 2));
56
+ return resultado.configurado ? 0 : 1;
57
+ }
58
+ if (resultado.configurado) {
59
+ console.log(`Bridge configurada: ${resultado.status}`);
60
+ console.log(`Endpoint: ${endpoint}`);
61
+ }
62
+ else {
63
+ console.error(`Falha: ${resultado.erro ?? "desconhecido"}`);
64
+ }
65
+ return resultado.configurado ? 0 : 1;
66
+ }
67
+ async function comandoContextoChat(posicionais, args, emJson) {
68
+ const contratos = posicionais;
69
+ const formato = emJson ? "inline" : "ambos";
70
+ if (contratos.length === 0) {
71
+ console.error("Uso: sema contexto-chat <contrato1.sema> [contrato2.sema] ...");
72
+ return 1;
73
+ }
74
+ const entrada = {
75
+ contratos,
76
+ formatoSaida: formato,
77
+ };
78
+ const resultado = await gerarPacoteContextoChat(entrada);
79
+ if (emJson) {
80
+ console.log(JSON.stringify({
81
+ comando: "contexto-chat",
82
+ pacote: resultado.pacote,
83
+ prontoParaChat: resultado.prontoParaChat,
84
+ tamanhoBytes: resultado.tamanhoBytes,
85
+ arquivosGerados: resultado.arquivosGerados,
86
+ }, null, 2));
87
+ return resultado.prontoParaChat ? 0 : 1;
88
+ }
89
+ if (resultado.inlineTexto) {
90
+ console.log(resultado.inlineTexto);
91
+ }
92
+ if (resultado.arquivosGerados.length > 0) {
93
+ console.error(`\nArquivos gerados: ${resultado.arquivosGerados.join(", ")}`);
94
+ }
95
+ if (!resultado.prontoParaChat) {
96
+ console.error(`\n⚠️ Pacote excede o limite de ${resultado.tamanhoBytes} bytes para chat inline.`);
97
+ console.error("Use --json e copie o arquivo gerado.");
98
+ return 1;
99
+ }
100
+ return 0;
101
+ }
102
+ // ---------------------------------------------------------------------------
103
+ // Registro
104
+ // ---------------------------------------------------------------------------
105
+ export const REGISTRO_COMANDOS = {
106
+ "mcp-client": comandoMcpClient,
107
+ "bridge-config": comandoBridgeConfig,
108
+ "contexto-chat": comandoContextoChat,
109
+ };
110
+ //# sourceMappingURL=comandos.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"comandos.js","sourceRoot":"","sources":["../src/comandos.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ /**
2
+ * Gerador de pacote de contexto para chats web (ChatGPT, Lovable, etc.).
3
+ *
4
+ * A CLI lê contratos e código selecionado do disco local e gera um pacote
5
+ * compacto que o usuário cola no chat. Isso elimina o sync manual — a CLI
6
+ * faz o trabalho pesado de I/O local e entrega um payload pronto.
7
+ *
8
+ * Contrato: contratos/sema/mcp_client_bridge.sema — task gerar_pacote_contexto_para_chat
9
+ */
10
+ export type FormatoSaidaContexto = "inline" | "arquivo" | "ambos";
11
+ export interface PacoteContextoChat {
12
+ contratos: string[];
13
+ resumo: string;
14
+ irResumida: string;
15
+ driftResumido: string;
16
+ impactMap: string[];
17
+ docsRelevantes: string[];
18
+ checksum: string;
19
+ }
20
+ export interface ContextoChatEntrada {
21
+ contratos: string[];
22
+ codigoSelecionado?: string[];
23
+ incluirDrift?: boolean;
24
+ incluirImpacto?: boolean;
25
+ formatoSaida: FormatoSaidaContexto;
26
+ }
27
+ export interface ContextoChatResultado {
28
+ pacote: PacoteContextoChat;
29
+ prontoParaChat: boolean;
30
+ tamanhoBytes: number;
31
+ arquivosGerados: string[];
32
+ inlineTexto?: string;
33
+ }
34
+ export declare function gerarPacoteContextoChat(entrada: ContextoChatEntrada, cwd?: string): Promise<ContextoChatResultado>;