@semacode/cli 2.0.1 → 2.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (134) hide show
  1. package/LICENSE +39 -39
  2. package/README.md +141 -121
  3. package/dist/agentEntryPoints.js +499 -499
  4. package/dist/comandos.js +2 -0
  5. package/dist/doctorCommand.js +28 -0
  6. package/dist/execucoesExternas.js +19 -5
  7. package/dist/geracaoCore.js +97 -1
  8. package/dist/iaPrompts.d.ts +1 -1
  9. package/dist/iaPrompts.js +307 -307
  10. package/dist/index.d.ts +1 -0
  11. package/dist/index.js +1 -0
  12. package/dist/index.part01.d.ts +1 -1
  13. package/dist/index.part01.js +14 -4
  14. package/dist/index.part02.js +21 -21
  15. package/dist/index.part04.js +96 -96
  16. package/dist/index.part06.js +1 -1
  17. package/dist/index.part07.js +35 -24
  18. package/dist/init/templates.part01.js +393 -393
  19. package/dist/init/templates.part02.js +189 -189
  20. package/dist/initTemplatesBackend.js +73 -73
  21. package/dist/initTemplatesBase.js +81 -81
  22. package/dist/initTemplatesFlutter.js +137 -137
  23. package/dist/initTemplatesRuntime.js +350 -350
  24. package/dist/initTemplatesWeb.js +309 -309
  25. package/dist/nativeToolchains.d.ts +15 -0
  26. package/dist/nativeToolchains.js +132 -0
  27. package/dist/pipelineConteudo/adapters.d.ts +84 -0
  28. package/dist/pipelineConteudo/adapters.js +449 -0
  29. package/dist/pipelineConteudo/canonical.d.ts +18 -0
  30. package/dist/pipelineConteudo/canonical.js +107 -0
  31. package/dist/pipelineConteudo/command.d.ts +3 -0
  32. package/dist/pipelineConteudo/command.js +572 -0
  33. package/dist/pipelineConteudo/index.d.ts +9 -0
  34. package/dist/pipelineConteudo/index.js +12 -0
  35. package/dist/pipelineConteudo/ledger.d.ts +68 -0
  36. package/dist/pipelineConteudo/ledger.js +732 -0
  37. package/dist/pipelineConteudo/planner.d.ts +12 -0
  38. package/dist/pipelineConteudo/planner.js +366 -0
  39. package/dist/pipelineConteudo/projection.d.ts +16 -0
  40. package/dist/pipelineConteudo/projection.js +57 -0
  41. package/dist/pipelineConteudo/state.d.ts +23 -0
  42. package/dist/pipelineConteudo/state.js +615 -0
  43. package/dist/pipelineConteudo/trust.d.ts +17 -0
  44. package/dist/pipelineConteudo/trust.js +750 -0
  45. package/dist/pipelineConteudo/types.d.ts +331 -0
  46. package/dist/pipelineConteudo/types.js +4 -0
  47. package/dist/projetoConfig.js +7 -1
  48. package/dist/projetoResolucao.js +21 -6
  49. package/dist/sync/index.js +35 -35
  50. package/docs/README.md +28 -25
  51. package/docs/ai-onboarding.md +62 -62
  52. package/docs/ai-workflow.md +1 -1
  53. package/docs/auth.md +26 -26
  54. package/docs/cli.md +79 -72
  55. package/docs/commands.md +1 -1
  56. package/docs/database.md +15 -15
  57. package/docs/deploy.md +41 -36
  58. package/docs/documentation.md +39 -39
  59. package/docs/env.md +16 -16
  60. package/docs/frontend.md +41 -41
  61. package/docs/getting-started.md +57 -57
  62. package/docs/i18n.md +15 -15
  63. package/docs/pipeline-conteudo.md +246 -0
  64. package/docs/profiles.md +45 -43
  65. package/docs/repositories.md +43 -43
  66. package/docs/rollback.md +31 -31
  67. package/docs/security.md +32 -32
  68. package/docs/support.md +8 -8
  69. package/docs/syntax.md +1 -1
  70. package/docs/testing.md +35 -28
  71. package/docs/vocabulary.md +29 -29
  72. package/exemplos/agendamento.sema +1 -1
  73. package/exemplos/assinatura.sema +1 -1
  74. package/exemplos/auditoria.sema +1 -1
  75. package/exemplos/autenticacao.sema +1 -1
  76. package/exemplos/author_obra_comum.sema +1 -1
  77. package/exemplos/author_tema_sensivel.sema +1 -1
  78. package/exemplos/automacao.sema +1 -1
  79. package/exemplos/cadastro_usuario.sema +1 -1
  80. package/exemplos/calculadora.sema +1 -1
  81. package/exemplos/crud_simples.sema +1 -1
  82. package/exemplos/estoque.sema +1 -1
  83. package/exemplos/exportacao.sema +1 -1
  84. package/exemplos/fila.sema +1 -1
  85. package/exemplos/integracao_externa.sema +1 -1
  86. package/exemplos/multi_tenant.sema +1 -1
  87. package/exemplos/notificacao.sema +1 -1
  88. package/exemplos/operacao_estrategia.sema +132 -132
  89. package/exemplos/operacao_estrategia_discovery.sema +220 -220
  90. package/exemplos/operacao_estrategia_fluxo.sema +114 -114
  91. package/exemplos/operacao_estrategia_gates.sema +106 -106
  92. package/exemplos/operacao_estrategia_quarentena.sema +133 -133
  93. package/exemplos/operacao_estrategia_rollout.sema +124 -124
  94. package/exemplos/pagamento.sema +1 -1
  95. package/exemplos/pagamento_dominio.sema +1 -1
  96. package/exemplos/pedido.sema +1 -1
  97. package/exemplos/permissao.sema +1 -1
  98. package/exemplos/persistencia_vendor_first.sema +1 -1
  99. package/exemplos/pipeline-conteudo/README.md +44 -0
  100. package/exemplos/pipeline-conteudo/alvos.json +23 -0
  101. package/exemplos/pipeline-conteudo/definicao.json +136 -0
  102. package/exemplos/profile_conversas.sema +165 -165
  103. package/exemplos/profile_game.sema +1 -1
  104. package/exemplos/profile_legal.sema +1 -1
  105. package/exemplos/profile_ops.sema +1 -1
  106. package/exemplos/profile_research.sema +1 -1
  107. package/exemplos/profile_software.sema +1 -1
  108. package/exemplos/profile_workflow_n8n.sema +1 -1
  109. package/exemplos/relatorio.sema +1 -1
  110. package/exemplos/replica_analitica_erp.sema +1 -1
  111. package/exemplos/testes_embutidos.sema +1 -1
  112. package/exemplos/tratamento_erro.sema +1 -1
  113. package/exemplos/upload_arquivo.sema +1 -1
  114. package/exemplos/webhook.sema +1 -1
  115. package/node_modules/@sema/gerador-cpp/dist/index.d.ts +3 -0
  116. package/node_modules/@sema/gerador-cpp/dist/index.js +859 -0
  117. package/node_modules/@sema/gerador-cpp/dist/index.js.map +1 -0
  118. package/node_modules/@sema/gerador-cpp/package.json +7 -0
  119. package/node_modules/@sema/gerador-css/dist/index.part01.js +10 -10
  120. package/node_modules/@sema/gerador-css/dist/index.part02.js +460 -460
  121. package/node_modules/@sema/gerador-dotnet/dist/index.d.ts +3 -0
  122. package/node_modules/@sema/gerador-dotnet/dist/index.js +828 -0
  123. package/node_modules/@sema/gerador-dotnet/dist/index.js.map +1 -0
  124. package/node_modules/@sema/gerador-dotnet/package.json +7 -0
  125. package/node_modules/@sema/gerador-html/dist/index.js +17 -17
  126. package/node_modules/@sema/gerador-lua/dist/index.js +53 -8
  127. package/node_modules/@sema/gerador-lua/dist/index.js.map +1 -1
  128. package/node_modules/@sema/gerador-php/dist/index.js +121 -113
  129. package/node_modules/@sema/gerador-php/dist/index.js.map +1 -1
  130. package/node_modules/@sema/gerador-python/dist/index.part02.js +3 -3
  131. package/node_modules/@sema/gerador-typescript/dist/index.part02.js +11 -11
  132. package/node_modules/@sema/nucleo/dist/diagnosticos/melhorador.js +42 -42
  133. package/node_modules/@sema/padroes/dist/index.d.ts +1 -1
  134. package/package.json +12 -1
@@ -0,0 +1,18 @@
1
+ import { type KeyLike } from "node:crypto";
2
+ import type { EnvelopeAssinadoConteudo, EnvelopeAssinavelConteudo } from "./types.js";
3
+ /**
4
+ * Serializa somente o subconjunto JSON, ordenando chaves recursivamente.
5
+ * Valores que JSON descartaria silenciosamente sao rejeitados para evitar
6
+ * assinaturas ambiguas.
7
+ */
8
+ export declare function canonicalizarJson(valor: unknown): string;
9
+ export declare function digestSha256(conteudo: string | Uint8Array): string;
10
+ export declare function digestJsonCanonico(valor: unknown): string;
11
+ /** Alias de dominio usado por planner, ledger e projecoes. */
12
+ export declare const hashCanonicoConteudo: typeof digestJsonCanonico;
13
+ export declare function dadosAssinaveisEnvelopeConteudo<TPayload>(envelope: EnvelopeAssinavelConteudo<TPayload>): EnvelopeAssinavelConteudo<TPayload>;
14
+ export declare function serializarEnvelopeAssinavelConteudo<TPayload>(envelope: EnvelopeAssinavelConteudo<TPayload>): string;
15
+ /** A chave privada e usada somente nesta chamada e jamais integra o retorno. */
16
+ export declare function assinarEnvelopeConteudo<TPayload>(envelope: EnvelopeAssinavelConteudo<TPayload>, privateKey: KeyLike): EnvelopeAssinadoConteudo<TPayload>;
17
+ export declare function verificarAssinaturaEnvelopeConteudo<TPayload>(envelope: EnvelopeAssinadoConteudo<TPayload>, publicKey: KeyLike): boolean;
18
+ export declare function digestEnvelopeConteudo(envelope: EnvelopeAssinadoConteudo<unknown>): string;
@@ -0,0 +1,107 @@
1
+ // SEMA-GOVERNED: sema.produto.pipeline_conteudo.confianca
2
+ // Descricao: serializacao JSON deterministica, digests SHA-256 e envelopes Ed25519 sem persistir chave privada.
3
+ import { createHash, sign, verify } from "node:crypto";
4
+ function falharCanonico(motivo, _caminho) {
5
+ throw new TypeError(`json_canonico_invalido:${motivo}`);
6
+ }
7
+ function serializarCanonico(valor, caminho, visitados) {
8
+ if (valor === null)
9
+ return "null";
10
+ if (typeof valor === "string" || typeof valor === "boolean") {
11
+ return JSON.stringify(valor);
12
+ }
13
+ if (typeof valor === "number") {
14
+ if (!Number.isFinite(valor))
15
+ falharCanonico("numero_nao_finito", caminho);
16
+ return Object.is(valor, -0) ? "0" : JSON.stringify(valor);
17
+ }
18
+ if (typeof valor !== "object") {
19
+ return falharCanonico(`tipo_${typeof valor}_nao_suportado`, caminho);
20
+ }
21
+ if (visitados.has(valor))
22
+ falharCanonico("referencia_ciclica", caminho);
23
+ visitados.add(valor);
24
+ try {
25
+ if (Array.isArray(valor)) {
26
+ const itens = [];
27
+ for (let indice = 0; indice < valor.length; indice += 1) {
28
+ if (!Object.hasOwn(valor, indice))
29
+ falharCanonico("array_esparso", `${caminho}[${indice}]`);
30
+ itens.push(serializarCanonico(valor[indice], `${caminho}[${indice}]`, visitados));
31
+ }
32
+ return `[${itens.join(",")}]`;
33
+ }
34
+ const prototipo = Object.getPrototypeOf(valor);
35
+ if (prototipo !== Object.prototype && prototipo !== null) {
36
+ return falharCanonico("objeto_nao_plano", caminho);
37
+ }
38
+ const objeto = valor;
39
+ const campos = Object.keys(objeto)
40
+ .sort()
41
+ .map((chave) => `${JSON.stringify(chave)}:${serializarCanonico(objeto[chave], `${caminho}.${chave}`, visitados)}`);
42
+ return `{${campos.join(",")}}`;
43
+ }
44
+ finally {
45
+ visitados.delete(valor);
46
+ }
47
+ }
48
+ /**
49
+ * Serializa somente o subconjunto JSON, ordenando chaves recursivamente.
50
+ * Valores que JSON descartaria silenciosamente sao rejeitados para evitar
51
+ * assinaturas ambiguas.
52
+ */
53
+ export function canonicalizarJson(valor) {
54
+ return serializarCanonico(valor, "$", new Set());
55
+ }
56
+ export function digestSha256(conteudo) {
57
+ return `sha256:${createHash("sha256").update(conteudo).digest("hex")}`;
58
+ }
59
+ export function digestJsonCanonico(valor) {
60
+ return digestSha256(canonicalizarJson(valor));
61
+ }
62
+ /** Alias de dominio usado por planner, ledger e projecoes. */
63
+ export const hashCanonicoConteudo = digestJsonCanonico;
64
+ export function dadosAssinaveisEnvelopeConteudo(envelope) {
65
+ return {
66
+ schemaVersion: envelope.schemaVersion,
67
+ payloadType: envelope.payloadType,
68
+ payload: envelope.payload,
69
+ principalId: envelope.principalId,
70
+ keyId: envelope.keyId,
71
+ issuedAt: envelope.issuedAt,
72
+ nonce: envelope.nonce,
73
+ signatureAlgorithm: envelope.signatureAlgorithm,
74
+ };
75
+ }
76
+ export function serializarEnvelopeAssinavelConteudo(envelope) {
77
+ return canonicalizarJson(dadosAssinaveisEnvelopeConteudo(envelope));
78
+ }
79
+ /** A chave privada e usada somente nesta chamada e jamais integra o retorno. */
80
+ export function assinarEnvelopeConteudo(envelope, privateKey) {
81
+ if (envelope.signatureAlgorithm !== "Ed25519") {
82
+ throw new TypeError("algoritmo_assinatura_nao_suportado");
83
+ }
84
+ const mensagem = Buffer.from(serializarEnvelopeAssinavelConteudo(envelope), "utf8");
85
+ const signature = sign(null, mensagem, privateKey).toString("base64");
86
+ return { ...dadosAssinaveisEnvelopeConteudo(envelope), signature };
87
+ }
88
+ export function verificarAssinaturaEnvelopeConteudo(envelope, publicKey) {
89
+ if (envelope.signatureAlgorithm !== "Ed25519")
90
+ return false;
91
+ if (!/^[A-Za-z0-9+/]+={0,2}$/.test(envelope.signature))
92
+ return false;
93
+ try {
94
+ const assinatura = Buffer.from(envelope.signature, "base64");
95
+ if (assinatura.length !== 64 || assinatura.toString("base64") !== envelope.signature)
96
+ return false;
97
+ const mensagem = Buffer.from(serializarEnvelopeAssinavelConteudo(envelope), "utf8");
98
+ return verify(null, mensagem, publicKey, assinatura);
99
+ }
100
+ catch {
101
+ return false;
102
+ }
103
+ }
104
+ export function digestEnvelopeConteudo(envelope) {
105
+ return digestJsonCanonico(envelope);
106
+ }
107
+ //# sourceMappingURL=canonical.js.map
@@ -0,0 +1,3 @@
1
+ import { HEAD_GENESIS_LEDGER_CONTEUDO } from "./ledger.js";
2
+ export declare function comandoPipelineConteudo(_posicionaisGlobais: string[], args: string[], emJson: boolean): Promise<number>;
3
+ export { HEAD_GENESIS_LEDGER_CONTEUDO };