@semacode/cli 1.5.48 → 1.5.53

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 (281) hide show
  1. package/LICENSE +39 -21
  2. package/README.md +47 -48
  3. package/dist/agentContext.d.ts +2 -2
  4. package/dist/agentContext.js +1 -1
  5. package/dist/agentContextPack.d.ts +1 -1
  6. package/dist/agentContextPack.js +20 -28
  7. package/dist/agentContextTipos.d.ts +2 -2
  8. package/dist/agentContextTipos.js +7 -13
  9. package/dist/agentEntryPoints.js +244 -281
  10. package/dist/billing/index.d.ts +1 -58
  11. package/dist/billing/index.js +17 -278
  12. package/dist/cliArgs.js +0 -3
  13. package/dist/comandos.js +15 -131
  14. package/dist/contexto.d.ts +0 -9
  15. package/dist/contexto.js +59 -109
  16. package/dist/docs.part01.js +30 -51
  17. package/dist/drift.part14.js +18 -3
  18. package/dist/driftOrcamento.js +1 -2
  19. package/dist/index.d.ts +0 -6
  20. package/dist/index.js +0 -6
  21. package/dist/index.part01.d.ts +1 -1
  22. package/dist/index.part01.js +1 -3
  23. package/dist/index.part04.js +4 -4
  24. package/dist/index.part08.js +1 -22
  25. package/dist/initTemplatesBase.js +5 -5
  26. package/dist/sync/index.js +1 -1
  27. package/docs/README.md +19 -0
  28. package/docs/ai-integration.md +90 -0
  29. package/docs/ai-onboarding.md +33 -0
  30. package/docs/ai-workflow.md +62 -0
  31. package/docs/auth.md +16 -0
  32. package/docs/cli.md +36 -95
  33. package/docs/commands.md +90 -0
  34. package/docs/database.md +15 -0
  35. package/docs/deploy.md +6 -38
  36. package/docs/documentation.md +39 -0
  37. package/docs/env.md +8 -109
  38. package/docs/frontend.md +41 -0
  39. package/docs/getting-started.md +33 -0
  40. package/docs/i18n.md +15 -0
  41. package/docs/profiles.md +43 -0
  42. package/docs/repositories.md +19 -61
  43. package/docs/rollback.md +9 -20
  44. package/docs/security.md +24 -0
  45. package/docs/support.md +8 -0
  46. package/docs/syntax.md +128 -0
  47. package/docs/testing.md +17 -0
  48. package/docs/vocabulary.md +28 -0
  49. package/node_modules/@sema/gerador-css/package.json +1 -1
  50. package/node_modules/@sema/gerador-dart/package.json +1 -1
  51. package/node_modules/@sema/gerador-html/package.json +1 -1
  52. package/node_modules/@sema/gerador-javascript/package.json +1 -1
  53. package/node_modules/@sema/gerador-lua/dist/index.js +10 -0
  54. package/node_modules/@sema/gerador-lua/dist/index.js.map +1 -1
  55. package/node_modules/@sema/gerador-lua/package.json +1 -1
  56. package/node_modules/@sema/gerador-python/package.json +1 -1
  57. package/node_modules/@sema/gerador-typescript/package.json +1 -1
  58. package/node_modules/@sema/nucleo/dist/diagnosticos/melhorador.js +1 -1
  59. package/node_modules/@sema/nucleo/dist/diagnosticos/melhorador.js.map +1 -1
  60. package/node_modules/@sema/nucleo/package.json +1 -1
  61. package/node_modules/@sema/padroes/package.json +1 -1
  62. package/package.json +15 -22
  63. package/AGENTS.md +0 -81
  64. package/AGENT_CONTEXT_PACK.json +0 -500
  65. package/SEMA_BRIEF.curto.txt +0 -18
  66. package/SEMA_BRIEF.md +0 -726
  67. package/SEMA_BRIEF.micro.txt +0 -16
  68. package/SEMA_INDEX.json +0 -11078
  69. package/dist/agentContext.js.map +0 -1
  70. package/dist/agentContextPack.js.map +0 -1
  71. package/dist/agentContextTipos.js.map +0 -1
  72. package/dist/agentEntryPoints.js.map +0 -1
  73. package/dist/angular-consumer-standalone.js.map +0 -1
  74. package/dist/authorAnalise.js.map +0 -1
  75. package/dist/authorPoliticas.js.map +0 -1
  76. package/dist/billing/index.js.map +0 -1
  77. package/dist/bridge.d.ts +0 -52
  78. package/dist/bridge.js +0 -333
  79. package/dist/bridge.js.map +0 -1
  80. package/dist/carregarModulos.js.map +0 -1
  81. package/dist/cliArgs.js.map +0 -1
  82. package/dist/comandos.js.map +0 -1
  83. package/dist/contexto.js.map +0 -1
  84. package/dist/controleComercialSupabase.d.ts +0 -7
  85. package/dist/controleComercialSupabase.js +0 -6
  86. package/dist/controleComercialSupabase.js.map +0 -1
  87. package/dist/controleComercialSupabaseAdmin.d.ts +0 -7
  88. package/dist/controleComercialSupabaseAdmin.js +0 -138
  89. package/dist/controleComercialSupabaseAdmin.js.map +0 -1
  90. package/dist/controleComercialSupabaseCadastro.d.ts +0 -4
  91. package/dist/controleComercialSupabaseCadastro.js +0 -85
  92. package/dist/controleComercialSupabaseCadastro.js.map +0 -1
  93. package/dist/controleComercialSupabaseConstantes.d.ts +0 -28
  94. package/dist/controleComercialSupabaseConstantes.js +0 -44
  95. package/dist/controleComercialSupabaseConstantes.js.map +0 -1
  96. package/dist/controleComercialSupabaseConsumo.d.ts +0 -2
  97. package/dist/controleComercialSupabaseConsumo.js +0 -77
  98. package/dist/controleComercialSupabaseConsumo.js.map +0 -1
  99. package/dist/controleComercialSupabaseConta.d.ts +0 -11
  100. package/dist/controleComercialSupabaseConta.js +0 -157
  101. package/dist/controleComercialSupabaseConta.js.map +0 -1
  102. package/dist/controleComercialSupabaseProfiles.d.ts +0 -4
  103. package/dist/controleComercialSupabaseProfiles.js +0 -55
  104. package/dist/controleComercialSupabaseProfiles.js.map +0 -1
  105. package/dist/controleComercialSupabaseTipos.d.ts +0 -3
  106. package/dist/controleComercialSupabaseTipos.js +0 -2
  107. package/dist/controleComercialSupabaseTipos.js.map +0 -1
  108. package/dist/controleComercialSupabaseTiposAdmin.d.ts +0 -152
  109. package/dist/controleComercialSupabaseTiposAdmin.js +0 -2
  110. package/dist/controleComercialSupabaseTiposAdmin.js.map +0 -1
  111. package/dist/controleComercialSupabaseTiposBase.d.ts +0 -169
  112. package/dist/controleComercialSupabaseTiposBase.js +0 -2
  113. package/dist/controleComercialSupabaseTiposBase.js.map +0 -1
  114. package/dist/controleComercialSupabaseTiposConta.d.ts +0 -220
  115. package/dist/controleComercialSupabaseTiposConta.js +0 -2
  116. package/dist/controleComercialSupabaseTiposConta.js.map +0 -1
  117. package/dist/cpp-symbols.js.map +0 -1
  118. package/dist/dev/index.js.map +0 -1
  119. package/dist/dev/watcher.js.map +0 -1
  120. package/dist/docs/resolver.js.map +0 -1
  121. package/dist/docs.js.map +0 -1
  122. package/dist/docs.part01.js.map +0 -1
  123. package/dist/docs.part02.js.map +0 -1
  124. package/dist/doctorCommand.js.map +0 -1
  125. package/dist/dotnet-http.js.map +0 -1
  126. package/dist/drift.contrato.js.map +0 -1
  127. package/dist/drift.js.map +0 -1
  128. package/dist/drift.part01.js.map +0 -1
  129. package/dist/drift.part02.js.map +0 -1
  130. package/dist/drift.part03.js.map +0 -1
  131. package/dist/drift.part04.js.map +0 -1
  132. package/dist/drift.part05.js.map +0 -1
  133. package/dist/drift.part06.js.map +0 -1
  134. package/dist/drift.part07.js.map +0 -1
  135. package/dist/drift.part08.js.map +0 -1
  136. package/dist/drift.part09.js.map +0 -1
  137. package/dist/drift.part10.js.map +0 -1
  138. package/dist/drift.part11.js.map +0 -1
  139. package/dist/drift.part12.js.map +0 -1
  140. package/dist/drift.part13.js.map +0 -1
  141. package/dist/drift.part14.js.map +0 -1
  142. package/dist/driftOrcamento.js.map +0 -1
  143. package/dist/driftScore.js.map +0 -1
  144. package/dist/execucoesExternas.js.map +0 -1
  145. package/dist/exemplosOficiais.js.map +0 -1
  146. package/dist/fsGovernado.js.map +0 -1
  147. package/dist/geracaoCore.js.map +0 -1
  148. package/dist/go-http.js.map +0 -1
  149. package/dist/guard.js.map +0 -1
  150. package/dist/iaPrompts.js.map +0 -1
  151. package/dist/importador.js.map +0 -1
  152. package/dist/importador.part01.js.map +0 -1
  153. package/dist/importador.part02.js.map +0 -1
  154. package/dist/importador.part03.js.map +0 -1
  155. package/dist/importador.part04.js.map +0 -1
  156. package/dist/importador.part05.js.map +0 -1
  157. package/dist/importador.part06.js.map +0 -1
  158. package/dist/importador.part07.js.map +0 -1
  159. package/dist/importador.part08.js.map +0 -1
  160. package/dist/importador.part09.js.map +0 -1
  161. package/dist/index.js.map +0 -1
  162. package/dist/index.part01.js.map +0 -1
  163. package/dist/index.part02.js.map +0 -1
  164. package/dist/index.part03.js.map +0 -1
  165. package/dist/index.part04.js.map +0 -1
  166. package/dist/index.part05.js.map +0 -1
  167. package/dist/index.part06.js.map +0 -1
  168. package/dist/index.part07.js.map +0 -1
  169. package/dist/index.part08.js.map +0 -1
  170. package/dist/init/index.js.map +0 -1
  171. package/dist/init/templates.js.map +0 -1
  172. package/dist/init/templates.part01.js.map +0 -1
  173. package/dist/init/templates.part02.js.map +0 -1
  174. package/dist/initCommand.js.map +0 -1
  175. package/dist/initTemplatesBackend.js.map +0 -1
  176. package/dist/initTemplatesBase.js.map +0 -1
  177. package/dist/initTemplatesFlutter.js.map +0 -1
  178. package/dist/initTemplatesRuntime.js.map +0 -1
  179. package/dist/initTemplatesWeb.js.map +0 -1
  180. package/dist/java-http.js.map +0 -1
  181. package/dist/lua-symbols.js.map +0 -1
  182. package/dist/mcpInstalarChaveCommand.d.ts +0 -1
  183. package/dist/mcpInstalarChaveCommand.js +0 -168
  184. package/dist/mcpInstalarChaveCommand.js.map +0 -1
  185. package/dist/mcpRemoto.d.ts +0 -32
  186. package/dist/mcpRemoto.js +0 -61
  187. package/dist/mcpRemoto.js.map +0 -1
  188. package/dist/mcp_chave.d.ts +0 -1
  189. package/dist/mcp_chave.js +0 -4
  190. package/dist/mcp_chave.js.map +0 -1
  191. package/dist/profileArtefatoBase.js.map +0 -1
  192. package/dist/profileArtefatoValidadores.js.map +0 -1
  193. package/dist/profileAuthorCommand.js.map +0 -1
  194. package/dist/profileAuthorTipos.js.map +0 -1
  195. package/dist/profileCatalogo.js.map +0 -1
  196. package/dist/profileCommand.js.map +0 -1
  197. package/dist/profileI18nCatalogo.js.map +0 -1
  198. package/dist/profileI18nVisivel.js.map +0 -1
  199. package/dist/profileOrquestracao.js.map +0 -1
  200. package/dist/profileRegras.js.map +0 -1
  201. package/dist/profileRulePacks.js.map +0 -1
  202. package/dist/profiles/validate.js.map +0 -1
  203. package/dist/projeto.js.map +0 -1
  204. package/dist/projetoBusca.js.map +0 -1
  205. package/dist/projetoCarregar.js.map +0 -1
  206. package/dist/projetoConfig.js.map +0 -1
  207. package/dist/projetoLegado.js.map +0 -1
  208. package/dist/projetoOrigens.js.map +0 -1
  209. package/dist/projetoResolucao.js.map +0 -1
  210. package/dist/projetoTipos.js.map +0 -1
  211. package/dist/python-http.js.map +0 -1
  212. package/dist/runnerValidacaoRemota.d.ts +0 -9
  213. package/dist/runnerValidacaoRemota.js +0 -9
  214. package/dist/runnerValidacaoRemota.js.map +0 -1
  215. package/dist/runnerValidacaoRemotaBateria.d.ts +0 -10
  216. package/dist/runnerValidacaoRemotaBateria.js +0 -117
  217. package/dist/runnerValidacaoRemotaBateria.js.map +0 -1
  218. package/dist/runnerValidacaoRemotaCli.d.ts +0 -4
  219. package/dist/runnerValidacaoRemotaCli.js +0 -86
  220. package/dist/runnerValidacaoRemotaCli.js.map +0 -1
  221. package/dist/runnerValidacaoRemotaComandos.d.ts +0 -7
  222. package/dist/runnerValidacaoRemotaComandos.js +0 -123
  223. package/dist/runnerValidacaoRemotaComandos.js.map +0 -1
  224. package/dist/runnerValidacaoRemotaEscopo.d.ts +0 -4
  225. package/dist/runnerValidacaoRemotaEscopo.js +0 -79
  226. package/dist/runnerValidacaoRemotaEscopo.js.map +0 -1
  227. package/dist/runnerValidacaoRemotaExecucao.d.ts +0 -2
  228. package/dist/runnerValidacaoRemotaExecucao.js +0 -104
  229. package/dist/runnerValidacaoRemotaExecucao.js.map +0 -1
  230. package/dist/runnerValidacaoRemotaRelatorio.d.ts +0 -3
  231. package/dist/runnerValidacaoRemotaRelatorio.js +0 -95
  232. package/dist/runnerValidacaoRemotaRelatorio.js.map +0 -1
  233. package/dist/runnerValidacaoRemotaServidor.d.ts +0 -4
  234. package/dist/runnerValidacaoRemotaServidor.js +0 -185
  235. package/dist/runnerValidacaoRemotaServidor.js.map +0 -1
  236. package/dist/runnerValidacaoRemotaSnapshot.d.ts +0 -10
  237. package/dist/runnerValidacaoRemotaSnapshot.js +0 -219
  238. package/dist/runnerValidacaoRemotaSnapshot.js.map +0 -1
  239. package/dist/runnerValidacaoRemotaTipos.d.ts +0 -158
  240. package/dist/runnerValidacaoRemotaTipos.js +0 -35
  241. package/dist/runnerValidacaoRemotaTipos.js.map +0 -1
  242. package/dist/runnerValidacaoRemotaUtil.d.ts +0 -3
  243. package/dist/runnerValidacaoRemotaUtil.js +0 -18
  244. package/dist/runnerValidacaoRemotaUtil.js.map +0 -1
  245. package/dist/runnerValidacaoRemotaWorkspace.d.ts +0 -2
  246. package/dist/runnerValidacaoRemotaWorkspace.js +0 -115
  247. package/dist/runnerValidacaoRemotaWorkspace.js.map +0 -1
  248. package/dist/rust-http.js.map +0 -1
  249. package/dist/semaChatCommand.d.ts +0 -1
  250. package/dist/semaChatCommand.js +0 -43
  251. package/dist/semaChatCommand.js.map +0 -1
  252. package/dist/semaChatRuntime.d.ts +0 -23
  253. package/dist/semaChatRuntime.js +0 -202
  254. package/dist/semaChatRuntime.js.map +0 -1
  255. package/dist/sync/index.js.map +0 -1
  256. package/dist/textoListas.js.map +0 -1
  257. package/dist/tipos.js.map +0 -1
  258. package/dist/typescript-http-body.js.map +0 -1
  259. package/dist/typescript-http-expressoes.js.map +0 -1
  260. package/dist/typescript-http-modelos.js.map +0 -1
  261. package/dist/typescript-http-rotas.js.map +0 -1
  262. package/dist/typescript-http-semantica.js.map +0 -1
  263. package/dist/typescript-http.js.map +0 -1
  264. package/docs/AGENT_STARTER.md +0 -147
  265. package/docs/agentes-por-capacidade.md +0 -130
  266. package/docs/api.md +0 -82
  267. package/docs/comandos.md +0 -807
  268. package/docs/como-ensinar-a-sema-para-ia.md +0 -30
  269. package/docs/documentacao.md +0 -74
  270. package/docs/extensao-vscode.md +0 -49
  271. package/docs/fluxo-pratico-ia-sema.md +0 -278
  272. package/docs/instalacao-e-primeiro-uso.md +0 -60
  273. package/docs/integracao-com-ia.md +0 -44
  274. package/docs/mcp.md +0 -69
  275. package/docs/pagamento-ponta-a-ponta.md +0 -171
  276. package/docs/persistencia-vendor-first.md +0 -151
  277. package/docs/prompt-base-ia-sema.md +0 -111
  278. package/docs/seguranca.md +0 -126
  279. package/docs/sintaxe.md +0 -390
  280. package/llms-full.txt +0 -40
  281. package/llms.txt +0 -23
@@ -1,74 +1,17 @@
1
- /**
2
- * Billing integration - CLI reports consumption back to MCP
3
- * Based on contract: mcp_cli_billing_integration.sema
4
- */
5
- export interface ConsumoOperacao {
6
- id: string;
7
- sessao_mcp: string;
8
- ferramenta: string;
9
- comando_cli: string;
10
- semas_estimado: number;
11
- semas_real: number;
12
- complexidade: "baixa" | "media" | "alta" | "critica";
13
- linhas_contrato: number;
14
- operacoes_realizadas: string[];
15
- timestamp_inicio: string;
16
- timestamp_fim: string;
17
- status: "sucesso" | "erro" | "timeout";
18
- }
19
- export interface ReporteConsumoInput {
20
- sessao_mcp: string;
21
- ferramenta: string;
22
- comando_cli: string;
23
- semas_real: number;
24
- complexidade: "baixa" | "media" | "alta" | "critica";
25
- linhas_contrato: number;
26
- operacoes_realizadas: string[];
27
- timestamp_inicio: string;
28
- timestamp_fim: string;
29
- status: "sucesso" | "erro" | "timeout";
30
- }
31
- export interface ReporteConsumoOutput {
32
- consumo: ConsumoOperacao;
33
- ajuste_billing: boolean;
34
- }
35
1
  export interface PreflightCliOutput {
36
2
  comando: "preflight";
37
3
  surface: "local_cli";
38
4
  autorizado: boolean;
39
5
  decisao: "use_cli_local" | "blocked";
40
- creditos: "ok" | "blocked";
41
6
  filesystem: "local_available";
42
- origemCobranca: "control_plane";
7
+ origemCobranca: "local_only";
43
8
  operationCode: string;
44
9
  toolName: string;
45
- requestedSemas: number | null;
46
- chargedSemas: number | null;
47
- remainingSemas: number | null;
48
- infiniteSemas: boolean;
49
- tokenPrefix: string;
50
- tokenExposto: false;
51
- mcpSyncPermitido: false;
52
10
  erro?: string;
53
11
  }
54
12
  export declare function executarPreflightCli(params: {
55
13
  comandoCli: string;
56
14
  args?: string[];
57
- token?: string;
58
- controlPlaneUrl?: string;
59
- supabaseAnonKey?: string;
60
15
  projectId?: string | null;
61
16
  }): Promise<PreflightCliOutput>;
62
17
  export declare function comandoPreflightCli(args: string[], json: boolean): Promise<number>;
63
- export declare function calcularConsumoReal(operacoes: string[], linhasContrato: number, complexidade: "baixa" | "media" | "alta" | "critica"): number;
64
- export declare function determinarComplexidade(linhas: number, aninhamento: number): "baixa" | "media" | "alta" | "critica";
65
- export declare function gerarRelatorioConsumo(input: Omit<ReporteConsumoInput, "timestamp_fim"> & {
66
- timestamp_inicio: string;
67
- }, operacoesRealizadas: string[], linhasContrato: number, sucesso: boolean): ReporteConsumoOutput;
68
- export declare function executarComReporte<T>(sessaoMcp: string | undefined, ferramenta: string, comando: string, operacoes: string[], fn: () => Promise<T>): Promise<{
69
- resultado: T;
70
- relatorio: ReporteConsumoOutput | null;
71
- }>;
72
- export declare function exportarConsumoJson(relatorio: ReporteConsumoOutput): string;
73
- export declare function reportarConsumo(input: ReporteConsumoInput): ReporteConsumoOutput;
74
- export declare function reportarConsumoCli(input: ReporteConsumoInput): ReporteConsumoOutput;
@@ -1,17 +1,6 @@
1
1
  // SEMA-GOVERNED: sema.governanca_ia_contexto
2
- // Descricao: codigo governado pelo Sema; consulte contratos/sema/governanca_ia_contexto.sema antes de editar.
3
- /**
4
- * Billing integration - CLI reports consumption back to MCP
5
- * Based on contract: mcp_cli_billing_integration.sema
6
- */
7
- import { createHash, randomUUID } from "node:crypto";
2
+ // Descricao: preflight local-only da CLI publica.
8
3
  import { obterOpcao, obterPosicionais, possuiFlag } from "../cliArgs.js";
9
- const CLI_TOKEN_ENV_VAR = "SEMA_CLI_AUTH_TOKEN";
10
- const MCP_TOKEN_ENV_VAR = "SEMA_MCP_AUTH_TOKEN";
11
- const CLI_CONTROL_PLANE_ENV_VAR = "SEMA_CLI_CONTROL_PLANE_URL";
12
- const CLI_SUPABASE_ANON_KEY_ENV_VAR = "SEMA_CLI_SUPABASE_ANON_KEY";
13
- const CLI_CONTROL_PLANE_PADRAO = "https://xsbyxiocqyakqxgmtpmp.supabase.co";
14
- const CLI_SUPABASE_ANON_KEY_PADRAO = "sb_publishable_J_f7L9Xqq9kAo0ltDafuaA_Mid4vVNS";
15
4
  const OPERATION_CODE_BY_CLI_COMMAND = {
16
5
  resumo: "tool.sema_resumo",
17
6
  validar: "tool.sema_validar",
@@ -19,7 +8,6 @@ const OPERATION_CODE_BY_CLI_COMMAND = {
19
8
  inspecionar: "tool.sema_inspecionar",
20
9
  drift: "drift.module",
21
10
  impacto: "default.operation",
22
- sync: "sync.contracts",
23
11
  verificar: "verify.full",
24
12
  };
25
13
  function normalizarComandoCli(comandoCli) {
@@ -38,138 +26,30 @@ function resolverOperationCodeCli(comandoCli, args) {
38
26
  function resolverToolNameCli(comandoCli) {
39
27
  return `sema_cli_${normalizarComandoCli(comandoCli).replace(/[^a-z0-9_]+/g, "_")}`;
40
28
  }
41
- function hashTokenSha256(token) {
42
- return createHash("sha256").update(token, "utf8").digest("hex");
43
- }
44
- function tokenPrefixoSeguro(token) {
45
- return token.slice(0, Math.min(14, token.length));
46
- }
47
- function resultadoPreflightBloqueado(params) {
48
- return {
49
- comando: "preflight",
50
- surface: "local_cli",
51
- autorizado: false,
52
- decisao: "blocked",
53
- creditos: "blocked",
54
- filesystem: "local_available",
55
- origemCobranca: "control_plane",
56
- operationCode: params.operationCode,
57
- toolName: params.toolName,
58
- requestedSemas: null,
59
- chargedSemas: null,
60
- remainingSemas: null,
61
- infiniteSemas: false,
62
- tokenPrefix: params.tokenPrefix,
63
- tokenExposto: false,
64
- mcpSyncPermitido: false,
65
- erro: params.erro,
66
- };
67
- }
68
- function numeroOuNulo(valor) {
69
- return typeof valor === "number" && Number.isFinite(valor) ? valor : null;
70
- }
71
29
  export async function executarPreflightCli(params) {
72
30
  const args = params.args ?? [];
73
31
  const comandoCli = params.comandoCli || "default";
74
32
  const operationCode = resolverOperationCodeCli(comandoCli, args);
75
33
  const toolName = resolverToolNameCli(comandoCli);
76
- const token = (params.token ?? process.env[CLI_TOKEN_ENV_VAR] ?? process.env[MCP_TOKEN_ENV_VAR] ?? "").trim();
77
- const tokenPrefix = tokenPrefixoSeguro(token);
78
- if (!token) {
79
- return resultadoPreflightBloqueado({
80
- comandoCli,
81
- operationCode,
82
- toolName,
83
- tokenPrefix,
84
- erro: `Instale a chave Sema local com sema mcp-instalar-chave --stdin. Env vars aceitas: ${CLI_TOKEN_ENV_VAR} ou ${MCP_TOKEN_ENV_VAR}.`,
85
- });
86
- }
87
- if (!/^sema_(?:mcp|cli)_[A-Za-z0-9_-]{16,}$/.test(token)) {
88
- return resultadoPreflightBloqueado({
89
- comandoCli,
90
- operationCode,
91
- toolName,
92
- tokenPrefix,
93
- erro: "Chave Sema local invalida.",
94
- });
95
- }
96
- const controlPlaneUrl = (params.controlPlaneUrl ?? process.env[CLI_CONTROL_PLANE_ENV_VAR] ?? CLI_CONTROL_PLANE_PADRAO).replace(/\/+$/, "");
97
- const supabaseAnonKey = params.supabaseAnonKey ?? process.env[CLI_SUPABASE_ANON_KEY_ENV_VAR] ?? CLI_SUPABASE_ANON_KEY_PADRAO;
98
- const tokenHash = hashTokenSha256(token);
99
- const idempotencyKey = `cli:${normalizarComandoCli(comandoCli)}:${Date.now()}:${randomUUID()}`;
100
- try {
101
- const resposta = await fetch(`${controlPlaneUrl}/rest/v1/rpc/sema_consume_mcp_token_operation`, {
102
- method: "POST",
103
- headers: {
104
- apikey: supabaseAnonKey,
105
- authorization: `Bearer ${supabaseAnonKey}`,
106
- "content-type": "application/json",
107
- },
108
- body: JSON.stringify({
109
- p_token_hash: tokenHash,
110
- p_organization_id: null,
111
- p_project_id: params.projectId ?? null,
112
- p_operation_code: operationCode,
113
- p_tool_name: toolName,
114
- p_request_summary: `CLI local preflight: ${comandoCli}`,
115
- p_idempotency_key: idempotencyKey,
116
- p_metadata: {
117
- source: "sema_cli_local",
118
- surface: "local_cli",
119
- command: comandoCli,
120
- mcpSyncPermitido: false,
121
- },
122
- }),
123
- });
124
- if (!resposta.ok) {
125
- const texto = await resposta.text();
126
- return resultadoPreflightBloqueado({
127
- comandoCli,
128
- operationCode,
129
- toolName,
130
- tokenPrefix,
131
- erro: texto || `Control plane retornou HTTP ${resposta.status}.`,
132
- });
133
- }
134
- const payload = await resposta.json();
135
- const autorizado = payload?.authorized === true;
136
- return {
137
- comando: "preflight",
138
- surface: "local_cli",
139
- autorizado,
140
- decisao: autorizado ? "use_cli_local" : "blocked",
141
- creditos: autorizado ? "ok" : "blocked",
142
- filesystem: "local_available",
143
- origemCobranca: "control_plane",
144
- operationCode,
145
- toolName,
146
- requestedSemas: numeroOuNulo(payload?.requestedSemas),
147
- chargedSemas: numeroOuNulo(payload?.chargedSemas),
148
- remainingSemas: numeroOuNulo(payload?.remainingSemas ?? payload?.remainingBalance),
149
- infiniteSemas: payload?.infiniteSemas === true,
150
- tokenPrefix,
151
- tokenExposto: false,
152
- mcpSyncPermitido: false,
153
- erro: autorizado ? undefined : "Control plane nao autorizou o uso da CLI.",
154
- };
155
- }
156
- catch (erro) {
157
- return resultadoPreflightBloqueado({
158
- comandoCli,
159
- operationCode,
160
- toolName,
161
- tokenPrefix,
162
- erro: erro instanceof Error ? erro.message : String(erro),
163
- });
164
- }
34
+ void params.projectId;
35
+ return {
36
+ comando: "preflight",
37
+ surface: "local_cli",
38
+ autorizado: true,
39
+ decisao: "use_cli_local",
40
+ filesystem: "local_available",
41
+ origemCobranca: "local_only",
42
+ operationCode,
43
+ toolName,
44
+ };
165
45
  }
166
46
  export async function comandoPreflightCli(args, json) {
167
47
  if (possuiFlag(args, "--help") || possuiFlag(args, "-h")) {
168
48
  console.log([
169
- "Uso: sema preflight [comando] [--operation-code <codigo>] [--project-id <uuid>] [--json]",
49
+ "Usage: sema preflight [command] [--operation-code <code>] [--json]",
170
50
  "",
171
- "Consulta o control plane de SEMAS antes de a IA usar a CLI local.",
172
- "Se retornar decisao=blocked, pare. Nao chame MCP remoto para ler workspace local.",
51
+ "Checks the local CLI surface. Public Sema is local-only and does not call external services.",
52
+ "If this command returns decisao=use_cli_local, continue with local CLI commands.",
173
53
  ].join("\n"));
174
54
  return 0;
175
55
  }
@@ -179,157 +59,16 @@ export async function comandoPreflightCli(args, json) {
179
59
  comandoCli,
180
60
  args,
181
61
  projectId: obterOpcao(args, "--project-id") ?? null,
182
- controlPlaneUrl: obterOpcao(args, "--control-plane-url"),
183
- supabaseAnonKey: obterOpcao(args, "--supabase-anon-key"),
184
62
  });
185
63
  if (json) {
186
64
  console.log(JSON.stringify(resultado, null, 2));
187
65
  }
188
66
  else if (resultado.autorizado) {
189
- console.log(`Sema CLI autorizada: ${resultado.operationCode}. Decisao: ${resultado.decisao}.`);
67
+ console.log(`Sema CLI authorized: ${resultado.operationCode}. Decision: ${resultado.decisao}.`);
190
68
  }
191
69
  else {
192
- console.error(`Sema CLI bloqueada: ${resultado.erro}`);
70
+ console.error(`Sema CLI blocked: ${resultado.erro}`);
193
71
  }
194
72
  return resultado.autorizado ? 0 : 1;
195
73
  }
196
- // Calcula consumo real baseado nas operações realizadas
197
- export function calcularConsumoReal(operacoes, linhasContrato, complexidade) {
198
- const custoBase = {
199
- parse: 1,
200
- lexer: 1,
201
- validar: 2,
202
- semantico: 3,
203
- gerar_ir: 2,
204
- inspecionar: 2,
205
- drift: 5,
206
- impacto: 5,
207
- sync: 5,
208
- verificar: 10,
209
- };
210
- let total = 0;
211
- for (const op of operacoes) {
212
- total += custoBase[op] || 1;
213
- }
214
- // Multiplicador por complexidade
215
- const multiplicador = {
216
- baixa: 1,
217
- media: 1.5,
218
- alta: 2,
219
- critica: 3,
220
- };
221
- // Fator de tamanho
222
- const fatorTamanho = Math.max(1, Math.log10(linhasContrato + 1));
223
- return Math.ceil(total * multiplicador[complexidade] * fatorTamanho);
224
- }
225
- // Determina complexidade baseada no contrato
226
- export function determinarComplexidade(linhas, aninhamento) {
227
- if (linhas > 500 || aninhamento > 5)
228
- return "critica";
229
- if (linhas > 200 || aninhamento > 3)
230
- return "alta";
231
- if (linhas > 50 || aninhamento > 1)
232
- return "media";
233
- return "baixa";
234
- }
235
- // Gera relatório de consumo para ser retornado ao MCP
236
- export function gerarRelatorioConsumo(input, operacoesRealizadas, linhasContrato, sucesso) {
237
- const timestampFim = new Date().toISOString();
238
- const complexidade = determinarComplexidade(linhasContrato, 0);
239
- const semasReal = calcularConsumoReal(operacoesRealizadas, linhasContrato, complexidade);
240
- const consumo = {
241
- id: randomUUID(),
242
- sessao_mcp: input.sessao_mcp,
243
- ferramenta: input.ferramenta,
244
- comando_cli: input.comando_cli,
245
- semas_estimado: input.semas_real, // valor que MCP estimou
246
- semas_real: semasReal,
247
- complexidade,
248
- linhas_contrato: linhasContrato,
249
- operacoes_realizadas: operacoesRealizadas,
250
- timestamp_inicio: input.timestamp_inicio,
251
- timestamp_fim: timestampFim,
252
- status: sucesso ? "sucesso" : "erro",
253
- };
254
- return {
255
- consumo,
256
- ajuste_billing: semasReal !== input.semas_real,
257
- };
258
- }
259
- // Wrapper para executar comando com reporte de consumo
260
- export async function executarComReporte(sessaoMcp, ferramenta, comando, operacoes, fn) {
261
- const timestampInicio = new Date().toISOString();
262
- const linhasEstimadas = 100; // estimativa default
263
- try {
264
- const resultado = await fn();
265
- // Se não tem sessão MCP, não reporta
266
- if (!sessaoMcp) {
267
- return { resultado, relatorio: null };
268
- }
269
- const complexidade = determinarComplexidade(linhasEstimadas, 0);
270
- const relatorio = gerarRelatorioConsumo({
271
- sessao_mcp: sessaoMcp,
272
- ferramenta,
273
- comando_cli: comando,
274
- semas_real: 2, // estimativa MCP default
275
- complexidade,
276
- linhas_contrato: linhasEstimadas,
277
- operacoes_realizadas: operacoes,
278
- status: "sucesso",
279
- timestamp_inicio: timestampInicio,
280
- }, operacoes, linhasEstimadas, true);
281
- return { resultado, relatorio };
282
- }
283
- catch (erro) {
284
- const complexidadeErro = determinarComplexidade(linhasEstimadas, 0);
285
- const relatorio = sessaoMcp
286
- ? gerarRelatorioConsumo({
287
- sessao_mcp: sessaoMcp,
288
- ferramenta,
289
- comando_cli: comando,
290
- semas_real: 2,
291
- complexidade: complexidadeErro,
292
- linhas_contrato: linhasEstimadas,
293
- operacoes_realizadas: operacoes,
294
- status: "erro",
295
- timestamp_inicio: timestampInicio,
296
- }, operacoes, linhasEstimadas, false)
297
- : null;
298
- throw { erro, relatorio };
299
- }
300
- }
301
- // Exporta consumo no formato JSON para stdout (MCP lê)
302
- export function exportarConsumoJson(relatorio) {
303
- return JSON.stringify({
304
- __sema_consumo: true,
305
- ...relatorio,
306
- });
307
- }
308
- // Funcao principal reportarConsumo (vinculo contrato: cli.src.billing.reportarConsumo)
309
- export function reportarConsumo(input) {
310
- const complexidade = determinarComplexidade(input.linhas_contrato, 0);
311
- const semasReal = calcularConsumoReal(input.operacoes_realizadas, input.linhas_contrato, complexidade);
312
- const consumo = {
313
- id: randomUUID(),
314
- sessao_mcp: input.sessao_mcp,
315
- ferramenta: input.ferramenta,
316
- comando_cli: input.comando_cli,
317
- semas_estimado: input.semas_real,
318
- semas_real: semasReal,
319
- complexidade,
320
- linhas_contrato: input.linhas_contrato,
321
- operacoes_realizadas: input.operacoes_realizadas,
322
- timestamp_inicio: input.timestamp_inicio,
323
- timestamp_fim: input.timestamp_fim,
324
- status: input.status,
325
- };
326
- return {
327
- consumo,
328
- ajuste_billing: semasReal !== input.semas_real,
329
- };
330
- }
331
- // Alias publico para vinculo do contrato: cli.src.billing.reportarConsumoCli
332
- export function reportarConsumoCli(input) {
333
- return reportarConsumo(input);
334
- }
335
74
  //# sourceMappingURL=index.js.map
package/dist/cliArgs.js CHANGED
@@ -40,9 +40,6 @@ export const OPCOES_COM_VALOR = new Set([
40
40
  "--doc-lida",
41
41
  "--texto",
42
42
  "--texto-arquivo",
43
- "--endpoint",
44
- "--control-plane-url",
45
- "--supabase-anon-key",
46
43
  "--operation-code",
47
44
  "--project-id",
48
45
  "--comando",
package/dist/comandos.js CHANGED
@@ -1,107 +1,9 @@
1
- // SEMA-GOVERNED: sema.produto.mcp_client_bridge
2
- // Descricao: dispatcher de comandos da CLI; consulte contratos/sema/mcp_client_bridge.sema antes de editar.
3
- /**
4
- * Registro de comandos da CLI Sema.
5
- *
6
- * Cada comando é um módulo separado com seu contrato .sema.
7
- * Este arquivo é o dispatcher — o index.ts só importa daqui.
8
- *
9
- * NOVOS COMANDOS: adicione aqui, nunca no index.ts.
10
- * O index.ts é só `principal()` com um switch fino que delega pra cá.
11
- */
12
- import { configurarBridgeLocal, obterTokenMcpAmbiente, } from "./bridge.js";
13
- import { gerarPacoteContextoChat, } from "./contexto.js";
14
- import { comandoInit } from "./init/index.js";
1
+ // SEMA-GOVERNED: sema.governanca_ia_contexto
2
+ // Descricao: dispatcher de comandos publicos da CLI local; consulte contratos/sema/governanca_ia_contexto.sema antes de editar.
15
3
  import { comandoDev } from "./dev/index.js";
4
+ import { comandoInit } from "./init/index.js";
16
5
  import { comandoSyncPrisma } from "./sync/index.js";
17
- import { comandoSemaChat } from "./semaChatCommand.js";
18
- // ---------------------------------------------------------------------------
19
- // Handlers dos novos comandos (modulares, com contrato .sema)
20
- // ---------------------------------------------------------------------------
21
- async function comandoMcpClient(_posicionais, _args, emJson) {
22
- const resultado = {
23
- comando: "mcp-client",
24
- status: "BLOQUEADO",
25
- sessao: { status: "BLOQUEADO" },
26
- perfisAplicaveis: [],
27
- proximoPasso: "sema --version; se existir, sema preflight resumo --json; se decisao=use_cli_local, usar comandos locais da CLI",
28
- erro: "mcp_client_desativado_cli_local: CLI local nao envia workspace ao MCP remoto. Se sema --version falhar, pare. A IA nao acessa o painel Sema: peca ao humano para instalar a CLI pelo painel. Use sema resumo, docs-impacto, inspecionar, drift, impacto, validar e finalizar-mudanca pela CLI local. Web/chat sem workspace usa MCP remoto e sema_sync inline.",
29
- };
30
- if (emJson) {
31
- console.log(JSON.stringify(resultado, null, 2));
32
- return resultado.erro ? 1 : 0;
33
- }
34
- console.log(`mcp-client local: ${resultado.sessao.status}`);
35
- console.log(`Perfis: ${resultado.perfisAplicaveis.join(", ") || "nenhum"}`);
36
- console.log(`Próximo passo: ${resultado.proximoPasso}`);
37
- if (resultado.erro) {
38
- console.error(`Erro: ${resultado.erro}`);
39
- }
40
- return resultado.erro ? 1 : 0;
41
- }
42
- async function comandoBridgeConfig(_posicionais, args, emJson) {
43
- const { token, endpoint } = obterTokenMcpAmbiente();
44
- if (!token) {
45
- console.error("Token MCP nao configurado. Use 'sema mcp-instalar-chave --stdin' primeiro.");
46
- return 1;
47
- }
48
- const resultado = await configurarBridgeLocal({
49
- endpointMcp: endpoint,
50
- token,
51
- persistir: true,
52
- });
53
- if (emJson) {
54
- console.log(JSON.stringify(resultado, null, 2));
55
- return resultado.configurado ? 0 : 1;
56
- }
57
- if (resultado.configurado) {
58
- console.log(`Bridge configurada: ${resultado.status}`);
59
- console.log(`Endpoint: ${endpoint}`);
60
- }
61
- else {
62
- console.error(`Falha: ${resultado.erro ?? "desconhecido"}`);
63
- }
64
- return resultado.configurado ? 0 : 1;
65
- }
66
- async function comandoContextoChat(posicionais, args, emJson) {
67
- const contratos = posicionais;
68
- const formato = emJson ? "inline" : "ambos";
69
- if (contratos.length === 0) {
70
- console.error("Uso: sema contexto-chat <contrato1.sema> [contrato2.sema] ...");
71
- return 1;
72
- }
73
- const entrada = {
74
- contratos,
75
- formatoSaida: formato,
76
- };
77
- const resultado = await gerarPacoteContextoChat(entrada);
78
- if (emJson) {
79
- console.log(JSON.stringify({
80
- comando: "contexto-chat",
81
- pacote: resultado.pacote,
82
- prontoParaChat: resultado.prontoParaChat,
83
- tamanhoBytes: resultado.tamanhoBytes,
84
- arquivosGerados: resultado.arquivosGerados,
85
- }, null, 2));
86
- return resultado.prontoParaChat ? 0 : 1;
87
- }
88
- if (resultado.inlineTexto) {
89
- console.log(resultado.inlineTexto);
90
- }
91
- if (resultado.arquivosGerados.length > 0) {
92
- console.error(`\nArquivos gerados: ${resultado.arquivosGerados.join(", ")}`);
93
- }
94
- if (!resultado.prontoParaChat) {
95
- console.error(`\n⚠️ Pacote excede o limite de ${resultado.tamanhoBytes} bytes para chat inline.`);
96
- console.error("Use --json e copie o arquivo gerado.");
97
- return 1;
98
- }
99
- return 0;
100
- }
101
- // ---------------------------------------------------------------------------
102
- // Guarda de governança
103
- // ---------------------------------------------------------------------------
104
- async function comandoInitHandler(posicionais, args, emJson) {
6
+ async function comandoInitHandler(posicionais, args, _emJson) {
105
7
  try {
106
8
  await comandoInit([...posicionais, ...args]);
107
9
  return 0;
@@ -110,7 +12,7 @@ async function comandoInitHandler(posicionais, args, emJson) {
110
12
  return 1;
111
13
  }
112
14
  }
113
- async function comandoDevHandler(posicionais, args, emJson) {
15
+ async function comandoDevHandler(posicionais, args, _emJson) {
114
16
  try {
115
17
  await comandoDev([...posicionais, ...args]);
116
18
  return 0;
@@ -119,7 +21,7 @@ async function comandoDevHandler(posicionais, args, emJson) {
119
21
  return 1;
120
22
  }
121
23
  }
122
- async function comandoSyncPrismaHandler(posicionais, args, emJson) {
24
+ async function comandoSyncPrismaHandler(posicionais, args, _emJson) {
123
25
  try {
124
26
  await comandoSyncPrisma([...posicionais, ...args]);
125
27
  return 0;
@@ -128,26 +30,15 @@ async function comandoSyncPrismaHandler(posicionais, args, emJson) {
128
30
  return 1;
129
31
  }
130
32
  }
131
- async function comandoSemaChatHandler(posicionais, args, emJson) {
132
- return comandoSemaChat(posicionais, args, emJson);
133
- }
134
33
  async function comandoGuard(posicionais, _args, emJson) {
135
34
  const { ativarGuarda, desativarGuarda, statusGuarda } = await import("./guard.js");
136
35
  const baseProjeto = process.cwd();
137
36
  const subcomando = posicionais[0] ?? "status";
138
- let resultado;
139
- switch (subcomando) {
140
- case "on":
141
- resultado = await ativarGuarda(baseProjeto);
142
- break;
143
- case "off":
144
- resultado = await desativarGuarda(baseProjeto);
145
- break;
146
- case "status":
147
- default:
148
- resultado = await statusGuarda(baseProjeto);
149
- break;
150
- }
37
+ const resultado = subcomando === "on"
38
+ ? await ativarGuarda(baseProjeto)
39
+ : subcomando === "off"
40
+ ? await desativarGuarda(baseProjeto)
41
+ : await statusGuarda(baseProjeto);
151
42
  if (emJson) {
152
43
  console.log(JSON.stringify(resultado, null, 2));
153
44
  }
@@ -163,17 +54,10 @@ async function comandoGuard(posicionais, _args, emJson) {
163
54
  }
164
55
  return resultado.sucesso ? 0 : 1;
165
56
  }
166
- // ---------------------------------------------------------------------------
167
- // Registro
168
- // ---------------------------------------------------------------------------
169
57
  export const REGISTRO_COMANDOS = {
170
- "mcp-client": comandoMcpClient,
171
- "bridge-config": comandoBridgeConfig,
172
- "contexto-chat": comandoContextoChat,
173
- "guard": comandoGuard,
174
- "init": comandoInitHandler,
175
- "dev": comandoDevHandler,
176
- "sync": comandoSyncPrismaHandler,
177
- "chat": comandoSemaChatHandler,
58
+ guard: comandoGuard,
59
+ init: comandoInitHandler,
60
+ dev: comandoDevHandler,
61
+ sync: comandoSyncPrismaHandler,
178
62
  };
179
63
  //# sourceMappingURL=comandos.js.map
@@ -1,12 +1,3 @@
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
1
  export type FormatoSaidaContexto = "inline" | "arquivo" | "ambos";
11
2
  export interface PacoteContextoChat {
12
3
  contratos: string[];