@semacode/cli 2.3.1 → 3.5.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 (281) hide show
  1. package/README.md +265 -217
  2. package/dist/agentContextPack.js +14 -10
  3. package/dist/agentEntryPoints.d.ts +5 -0
  4. package/dist/agentEntryPoints.js +592 -568
  5. package/dist/angular-consumer-standalone.js +1 -1
  6. package/dist/bin.d.ts +6 -0
  7. package/dist/bin.js +130 -0
  8. package/dist/cliArgs.js +4 -4
  9. package/dist/cliControlError.d.ts +12 -0
  10. package/dist/cliControlError.js +47 -0
  11. package/dist/cliGrammar.d.ts +11 -0
  12. package/dist/cliGrammar.js +551 -0
  13. package/dist/cliHelp.d.ts +13 -0
  14. package/dist/cliHelp.js +19 -0
  15. package/dist/cliHelpTexto.d.ts +3 -0
  16. package/dist/cliHelpTexto.js +168 -0
  17. package/dist/cliRuntime.d.ts +2 -0
  18. package/dist/cliRuntime.js +31 -0
  19. package/dist/comandos.js +9 -22
  20. package/dist/contexto.js +5 -5
  21. package/dist/dev/index.d.ts +1 -0
  22. package/dist/dev/index.js +51 -9
  23. package/dist/discovery/catalog.js +3 -3
  24. package/dist/distribuicao/filesystemGlobal.d.ts +63 -0
  25. package/dist/distribuicao/filesystemGlobal.js +701 -0
  26. package/dist/distribuicao/index.d.ts +7 -0
  27. package/dist/distribuicao/index.js +227 -0
  28. package/dist/distribuicao/launcherGlobal.d.ts +53 -0
  29. package/dist/distribuicao/launcherGlobal.js +643 -0
  30. package/dist/distribuicao/launcherWindows.d.ts +28 -0
  31. package/dist/distribuicao/launcherWindows.js +326 -0
  32. package/dist/distribuicao/lockContextGlobal.d.ts +10 -0
  33. package/dist/distribuicao/lockContextGlobal.js +17 -0
  34. package/dist/distribuicao/lockGlobal.d.ts +6 -0
  35. package/dist/distribuicao/lockGlobal.js +520 -0
  36. package/dist/distribuicao/skillGlobal.d.ts +48 -0
  37. package/dist/distribuicao/skillGlobal.js +652 -0
  38. package/dist/distribuicao/skillIntentPolicy.d.ts +21 -0
  39. package/dist/distribuicao/skillIntentPolicy.js +115 -0
  40. package/dist/distribuicao/tipos.d.ts +50 -0
  41. package/dist/distribuicao/tipos.js +10 -0
  42. package/dist/distribuicao/versaoSemantica.d.ts +3 -0
  43. package/dist/distribuicao/versaoSemantica.js +62 -0
  44. package/dist/docs.part01.d.ts +4 -1
  45. package/dist/docs.part01.js +8 -0
  46. package/dist/docs.part02.js +9 -1
  47. package/dist/drift.part01.d.ts +33 -25
  48. package/dist/drift.part01.js +2 -1
  49. package/dist/drift.part04.d.ts +26 -5
  50. package/dist/drift.part04.js +123 -19
  51. package/dist/drift.part05.d.ts +2 -2
  52. package/dist/drift.part05.js +8 -6
  53. package/dist/drift.part06.d.ts +2 -2
  54. package/dist/drift.part06.js +113 -26
  55. package/dist/drift.part07.d.ts +11 -11
  56. package/dist/drift.part07.js +261 -265
  57. package/dist/drift.part08.d.ts +2 -2
  58. package/dist/drift.part08.js +35 -26
  59. package/dist/drift.part09.d.ts +2 -2
  60. package/dist/drift.part09.js +10 -3
  61. package/dist/drift.part11.js +261 -58
  62. package/dist/drift.part12.d.ts +1 -1
  63. package/dist/drift.part12.js +193 -21
  64. package/dist/drift.part13.d.ts +20 -39
  65. package/dist/drift.part13.js +601 -647
  66. package/dist/drift.part14.js +23 -7
  67. package/dist/driftCacheCas.d.ts +43 -0
  68. package/dist/driftCacheCas.js +351 -0
  69. package/dist/driftCacheFilesystem.d.ts +64 -0
  70. package/dist/driftCacheFilesystem.js +313 -0
  71. package/dist/driftCacheModes.d.ts +38 -0
  72. package/dist/driftCacheModes.js +147 -0
  73. package/dist/driftCacheStore.d.ts +80 -0
  74. package/dist/driftCacheStore.js +603 -0
  75. package/dist/driftCatalogo.d.ts +2 -28
  76. package/dist/driftCatalogo.js +143 -284
  77. package/dist/driftEscopo.d.ts +1 -3
  78. package/dist/driftEscopo.js +235 -151
  79. package/dist/driftEscopoReferencias.d.ts +5 -1
  80. package/dist/driftEscopoReferencias.js +375 -28
  81. package/dist/driftOrcamento.d.ts +0 -6
  82. package/dist/driftOrcamento.js +2 -1
  83. package/dist/execucoesExternas.js +19 -5
  84. package/dist/exemplosOficiais.d.ts +2 -1
  85. package/dist/exemplosOficiais.js +9 -3
  86. package/dist/geracaoCore.d.ts +1 -0
  87. package/dist/geracaoCore.js +6 -6
  88. package/dist/iaPrompts.d.ts +3 -3
  89. package/dist/iaPrompts.js +312 -313
  90. package/dist/importador.part01.d.ts +1 -1
  91. package/dist/importador.part06.d.ts +2 -0
  92. package/dist/importador.part06.js +87 -1
  93. package/dist/importador.part09.js +7 -1
  94. package/dist/index.d.ts +4 -1
  95. package/dist/index.js +6 -25
  96. package/dist/index.part01.d.ts +20 -28
  97. package/dist/index.part01.js +16 -237
  98. package/dist/index.part02.js +36 -22
  99. package/dist/index.part03.d.ts +24 -2
  100. package/dist/index.part03.js +83 -19
  101. package/dist/index.part04.d.ts +10 -2
  102. package/dist/index.part04.js +152 -123
  103. package/dist/index.part05.js +80 -78
  104. package/dist/index.part06.js +34 -17
  105. package/dist/index.part07.d.ts +8 -2
  106. package/dist/index.part07.js +153 -7
  107. package/dist/index.part08.d.ts +1 -1
  108. package/dist/index.part08.js +25 -30
  109. package/dist/initCommand.d.ts +1 -0
  110. package/dist/initCommand.js +20 -4
  111. package/dist/initTemplatesBase.js +6 -4
  112. package/dist/pipelineConteudo/command.d.ts +1 -0
  113. package/dist/pipelineConteudo/command.js +9 -2
  114. package/dist/pipelineConteudo/help.d.ts +2 -0
  115. package/dist/pipelineConteudo/help.js +33 -0
  116. package/dist/profileAuthorCommand.js +3 -7
  117. package/dist/profileCommand.js +3 -7
  118. package/dist/projetoCarregar.js +35 -17
  119. package/dist/projetoCatalogo.d.ts +1 -0
  120. package/dist/projetoCatalogo.js +64 -25
  121. package/dist/projetoConfig.js +2 -0
  122. package/dist/projetoLegado.js +18 -0
  123. package/dist/projetoOrigens.d.ts +2 -0
  124. package/dist/projetoOrigens.js +65 -9
  125. package/dist/projetoTipos.d.ts +1 -0
  126. package/dist/resultadoCli.d.ts +20 -0
  127. package/dist/resultadoCli.js +57 -0
  128. package/dist/saidaCli.d.ts +35 -0
  129. package/dist/saidaCli.js +118 -0
  130. package/dist/sistemasInterativos/acceptanceEvidence.d.ts +22 -0
  131. package/dist/sistemasInterativos/acceptanceEvidence.js +345 -0
  132. package/dist/sistemasInterativos/engineObservation.d.ts +12 -0
  133. package/dist/sistemasInterativos/engineObservation.js +438 -0
  134. package/dist/sistemasInterativos/jobOrchestration.d.ts +2 -0
  135. package/dist/sistemasInterativos/jobOrchestration.js +204 -0
  136. package/dist/sistemasInterativos/operationPrimitives.d.ts +21 -0
  137. package/dist/sistemasInterativos/operationPrimitives.js +194 -0
  138. package/dist/sistemasInterativos/operations.d.ts +4 -39
  139. package/dist/sistemasInterativos/operations.js +5 -1164
  140. package/dist/skillCommand.d.ts +5 -0
  141. package/dist/skillCommand.js +88 -0
  142. package/dist/tipos.d.ts +1 -1
  143. package/dist/typescript-http-modelos.d.ts +1 -1
  144. package/dist/typescript-http-rotas.d.ts +1 -0
  145. package/dist/typescript-http-rotas.js +93 -0
  146. package/dist/typescript-http.d.ts +1 -1
  147. package/dist/typescript-http.js +1 -1
  148. package/dist/verificacaoCache.d.ts +25 -0
  149. package/dist/verificacaoCache.js +80 -0
  150. package/docs/README.md +34 -30
  151. package/docs/ai-integration.md +25 -12
  152. package/docs/ai-onboarding.md +37 -18
  153. package/docs/ai-workflow.md +9 -7
  154. package/docs/cli.md +125 -7
  155. package/docs/commands.md +41 -20
  156. package/docs/deploy.md +21 -8
  157. package/docs/descoberta-capacidades.md +106 -106
  158. package/docs/documentation.md +49 -39
  159. package/docs/drift-cache.md +108 -0
  160. package/docs/getting-started.md +43 -18
  161. package/docs/pipeline-conteudo.md +246 -246
  162. package/docs/profiles.md +54 -54
  163. package/docs/repositories.md +19 -2
  164. package/docs/rollback.md +15 -8
  165. package/docs/security.md +25 -3
  166. package/docs/sistemas-interativos.md +379 -374
  167. package/docs/syntax.md +14 -0
  168. package/docs/testing.md +139 -40
  169. package/exemplos/express_crud.sema +139 -0
  170. package/exemplos/fastify_crud.sema +146 -0
  171. package/exemplos/pipeline-conteudo/README.md +44 -44
  172. package/exemplos/pipeline-conteudo/alvos.json +23 -23
  173. package/exemplos/pipeline-conteudo/definicao.json +136 -136
  174. package/exemplos/profile_simulation.sema +211 -211
  175. package/exemplos/sistemas-interativos/README.md +100 -100
  176. package/exemplos/sistemas-interativos/advanced/acceptance-context-evaluate-valid.json +5 -5
  177. package/exemplos/sistemas-interativos/advanced/acceptance-lock-valid.json +16 -16
  178. package/exemplos/sistemas-interativos/advanced/asset-provenance-valid.json +32 -32
  179. package/exemplos/sistemas-interativos/advanced/autonomy-repair-valid.json +93 -93
  180. package/exemplos/sistemas-interativos/advanced/control-run-definition-valid.json +78 -78
  181. package/exemplos/sistemas-interativos/advanced/control-run-valid.json +27 -27
  182. package/exemplos/sistemas-interativos/advanced/distributed-workers-valid.json +79 -79
  183. package/exemplos/sistemas-interativos/advanced/editor-state-valid.json +42 -42
  184. package/exemplos/sistemas-interativos/advanced/engine-snapshot-after-valid.json +32 -32
  185. package/exemplos/sistemas-interativos/advanced/engine-snapshot-before-valid.json +23 -23
  186. package/exemplos/sistemas-interativos/advanced/job-orchestration-valid.json +39 -39
  187. package/exemplos/sistemas-interativos/advanced/multimodal-evidence-valid.json +46 -46
  188. package/exemplos/sistemas-interativos/advanced/multiplayer-authority-valid.json +39 -39
  189. package/exemplos/sistemas-interativos/advanced/playtest-fuzz-valid.json +37 -37
  190. package/exemplos/sistemas-interativos/advanced/portability-valid.json +104 -104
  191. package/exemplos/sistemas-interativos/advanced/temporal-evidence-valid.json +27 -27
  192. package/exemplos/sistemas-interativos/advanced/temporal-valid.json +118 -118
  193. package/exemplos/sistemas-interativos/experience-ir-valid.json +459 -459
  194. package/exemplos/sistemas-interativos/game-2d.json +83 -83
  195. package/exemplos/sistemas-interativos/game-3d-human.json +81 -81
  196. package/exemplos/sistemas-interativos/game-pixel-16-bit.json +97 -97
  197. package/exemplos/sistemas-interativos/game-pixel-8-bit.json +94 -94
  198. package/exemplos/sistemas-interativos/game-xr-human.json +80 -80
  199. package/exemplos/sistemas-interativos/hybrid-2-5d.json +108 -108
  200. package/exemplos/sistemas-interativos/protocol-mutating-rollback-valid.json +75 -75
  201. package/exemplos/sistemas-interativos/protocol-read-only-valid.json +58 -58
  202. package/exemplos/sistemas-interativos/simulation-2d-controlled.json +97 -97
  203. package/exemplos/sistemas-interativos/simulation-3d-calibrated-autonomous.json +141 -141
  204. package/exemplos/sistemas-interativos/simulation-headless-autonomous-batch.json +112 -112
  205. package/exemplos/sistemas-interativos/simulation-pixel-16-bit.json +103 -103
  206. package/exemplos/sistemas-interativos/simulation-text-controlled.json +95 -95
  207. package/node_modules/@sema/gerador-cpp/package.json +1 -1
  208. package/node_modules/@sema/gerador-dotnet/package.json +1 -1
  209. package/node_modules/@sema/gerador-lua/dist/index.js +51 -51
  210. package/node_modules/@sema/gerador-php/dist/index.js +113 -113
  211. package/node_modules/@sema/nucleo/dist/ir/conversor.part01.js +37 -38
  212. package/node_modules/@sema/nucleo/dist/ir/modelos.d.ts +1 -0
  213. package/node_modules/@sema/nucleo/dist/semantico/analisador.d.ts +1 -0
  214. package/node_modules/@sema/nucleo/dist/semantico/analisador.js +1 -0
  215. package/node_modules/@sema/nucleo/dist/semantico/analisador.part01.d.ts +7 -0
  216. package/node_modules/@sema/nucleo/dist/semantico/analisador.part01.js +33 -10
  217. package/package.json +9 -4
  218. package/scripts/postinstall.mjs +148 -0
  219. package/skills/sema/SKILL.md +199 -0
  220. package/skills/sema/agents/openai.yaml +4 -0
  221. package/dist/driftCache.d.ts +0 -49
  222. package/dist/driftCache.js +0 -311
  223. package/dist/driftCacheIncremental.d.ts +0 -98
  224. package/dist/driftCacheIncremental.js +0 -596
  225. package/dist/driftCatalogoPersistente.d.ts +0 -8
  226. package/dist/driftCatalogoPersistente.js +0 -77
  227. package/node_modules/@sema/gerador-cpp/dist/index.js.map +0 -1
  228. package/node_modules/@sema/gerador-css/dist/index.js.map +0 -1
  229. package/node_modules/@sema/gerador-css/dist/index.part01.js.map +0 -1
  230. package/node_modules/@sema/gerador-css/dist/index.part02.js.map +0 -1
  231. package/node_modules/@sema/gerador-dart/dist/index.js.map +0 -1
  232. package/node_modules/@sema/gerador-dotnet/dist/index.js.map +0 -1
  233. package/node_modules/@sema/gerador-html/dist/index.js.map +0 -1
  234. package/node_modules/@sema/gerador-javascript/dist/index.js.map +0 -1
  235. package/node_modules/@sema/gerador-lua/dist/index.js.map +0 -1
  236. package/node_modules/@sema/gerador-php/dist/index.js.map +0 -1
  237. package/node_modules/@sema/gerador-python/dist/index.js.map +0 -1
  238. package/node_modules/@sema/gerador-python/dist/index.part01.js.map +0 -1
  239. package/node_modules/@sema/gerador-python/dist/index.part02.js.map +0 -1
  240. package/node_modules/@sema/gerador-typescript/dist/index.js.map +0 -1
  241. package/node_modules/@sema/gerador-typescript/dist/index.part01.js.map +0 -1
  242. package/node_modules/@sema/gerador-typescript/dist/index.part02.js.map +0 -1
  243. package/node_modules/@sema/gerador-typescript/dist/index.part03.js.map +0 -1
  244. package/node_modules/@sema/nucleo/dist/ast/tipos.js.map +0 -1
  245. package/node_modules/@sema/nucleo/dist/diagnosticos/index.js.map +0 -1
  246. package/node_modules/@sema/nucleo/dist/diagnosticos/melhorador.js.map +0 -1
  247. package/node_modules/@sema/nucleo/dist/diagnosticos/snippets.js.map +0 -1
  248. package/node_modules/@sema/nucleo/dist/formatador/index.js.map +0 -1
  249. package/node_modules/@sema/nucleo/dist/formatador/index.part01.js.map +0 -1
  250. package/node_modules/@sema/nucleo/dist/formatador/index.part02.js.map +0 -1
  251. package/node_modules/@sema/nucleo/dist/index.js.map +0 -1
  252. package/node_modules/@sema/nucleo/dist/ir/conversor.js.map +0 -1
  253. package/node_modules/@sema/nucleo/dist/ir/conversor.part01.js.map +0 -1
  254. package/node_modules/@sema/nucleo/dist/ir/conversor.part02.js.map +0 -1
  255. package/node_modules/@sema/nucleo/dist/ir/conversor.part03.js.map +0 -1
  256. package/node_modules/@sema/nucleo/dist/ir/modelos.js.map +0 -1
  257. package/node_modules/@sema/nucleo/dist/lexer/lexer.js.map +0 -1
  258. package/node_modules/@sema/nucleo/dist/lexer/tokens.js.map +0 -1
  259. package/node_modules/@sema/nucleo/dist/parser/parser.declaracoes.js.map +0 -1
  260. package/node_modules/@sema/nucleo/dist/parser/parser.js.map +0 -1
  261. package/node_modules/@sema/nucleo/dist/parser/parser.modulo.js.map +0 -1
  262. package/node_modules/@sema/nucleo/dist/parser/parser.part01.js.map +0 -1
  263. package/node_modules/@sema/nucleo/dist/parser/parser.part02.js.map +0 -1
  264. package/node_modules/@sema/nucleo/dist/parser/parser.part03.js.map +0 -1
  265. package/node_modules/@sema/nucleo/dist/persistencia/contratos.js.map +0 -1
  266. package/node_modules/@sema/nucleo/dist/semantico/analisador.js.map +0 -1
  267. package/node_modules/@sema/nucleo/dist/semantico/analisador.part01.js.map +0 -1
  268. package/node_modules/@sema/nucleo/dist/semantico/analisador.part02.js.map +0 -1
  269. package/node_modules/@sema/nucleo/dist/semantico/analisador.part03.js.map +0 -1
  270. package/node_modules/@sema/nucleo/dist/semantico/analisador.part04.js.map +0 -1
  271. package/node_modules/@sema/nucleo/dist/semantico/analisador.part05.js.map +0 -1
  272. package/node_modules/@sema/nucleo/dist/semantico/analisador.part06.js.map +0 -1
  273. package/node_modules/@sema/nucleo/dist/semantico/analisador.part07.js.map +0 -1
  274. package/node_modules/@sema/nucleo/dist/semantico/analisador.part08.js.map +0 -1
  275. package/node_modules/@sema/nucleo/dist/semantico/estruturas.js.map +0 -1
  276. package/node_modules/@sema/nucleo/dist/semantico/estruturas.part01.js.map +0 -1
  277. package/node_modules/@sema/nucleo/dist/semantico/estruturas.part02.js.map +0 -1
  278. package/node_modules/@sema/nucleo/dist/semantico/orcamentoSemantico.js.map +0 -1
  279. package/node_modules/@sema/nucleo/dist/semantico/seguranca.js.map +0 -1
  280. package/node_modules/@sema/nucleo/dist/util/arquivos.js.map +0 -1
  281. package/node_modules/@sema/padroes/dist/index.js.map +0 -1
@@ -0,0 +1,118 @@
1
+ // SEMA-GOVERNED: sema.produto.cli_invocacao_publica, sema.produto.cli_invocacao_publica.resultados
2
+ // Descrição: cria e emite os envelopes JSON públicos de controle v1 e resultado v1 da CLI.
3
+ import { criarEnvelopeResultadoCliV1, } from "./resultadoCli.js";
4
+ export { CODIGO_SAIDA_FATAL_RUNTIME_CLI, SCHEMA_RESULTADO_CLI_V1, criarEnvelopeResultadoCliV1, interpretarPayloadRuntimeCli, } from "./resultadoCli.js";
5
+ export const SCHEMA_CONTROLE_CLI_V1 = "sema.cli.control/v1";
6
+ const CODIGO_PADRAO = {
7
+ HELP: "CLI_HELP",
8
+ UNKNOWN_COMMAND: "CLI_UNKNOWN_COMMAND",
9
+ ARGUMENT_ERROR: "CLI_ARGUMENT_ERROR",
10
+ FATAL_ERROR: "CLI_FATAL_ERROR",
11
+ };
12
+ const MENSAGEM_PADRAO = {
13
+ HELP: "Ajuda da CLI Sema.",
14
+ UNKNOWN_COMMAND: "Comando Sema desconhecido.",
15
+ ARGUMENT_ERROR: "Argumentos inválidos. Consulte a ajuda do comando.",
16
+ FATAL_ERROR: "Falha ao executar a CLI da Sema.",
17
+ };
18
+ const CODIGO_PUBLICO_VALIDO = /^[A-Z][A-Z0-9_]{2,63}$/u;
19
+ const PREFIXO_ERRO_INTERNO = /\b(?:Aggregate|Eval|Internal|Range|Reference|Syntax|Type|URI)?Error\s*:/iu;
20
+ const TRECHO_STACK = /(?:^|[\s;|=(:,])at\s+(?:async\s+)?(?:new\s+)?[^\n]{0,240}?(?:\([^()\n]*:\d+:\d+\)|[^\s()\n]+:\d+:\d+)/iu;
21
+ function decodificarPercentAscii(valor) {
22
+ return valor.replace(/%([0-9a-f]{2})/giu, (_trecho, hexadecimal) => String.fromCharCode(Number.parseInt(hexadecimal, 16)));
23
+ }
24
+ function variantesTextoPublico(valor) {
25
+ const variantes = new Set([valor.normalize("NFC")]);
26
+ let atual = valor;
27
+ for (let tentativa = 0; tentativa < 3; tentativa += 1) {
28
+ const decodificado = decodificarPercentAscii(atual);
29
+ if (decodificado === atual) {
30
+ break;
31
+ }
32
+ variantes.add(decodificado.normalize("NFC"));
33
+ atual = decodificado;
34
+ }
35
+ return [...variantes];
36
+ }
37
+ function contemCaminhoAbsoluto(valor) {
38
+ return variantesTextoPublico(valor).some((variante) => {
39
+ const normalizada = variante.replaceAll("\\", "/");
40
+ const semUrlsPublicas = normalizada.replace(/\b(?:https?|wss?):\/\/[^\s"'<>]+/giu, "");
41
+ return /(?:^|[^A-Za-z0-9])file:\/{1,3}/iu.test(semUrlsPublicas)
42
+ || /(?:^|[^A-Za-z0-9])[A-Za-z]:\/(?:[^/\s"'<>]+(?:\/[^/\s"'<>]*)*)?/u.test(semUrlsPublicas)
43
+ || /(?:^|[^A-Za-z0-9_./])\/\/[^/\s"'<>]+\/[^/\s"'<>]+/u.test(semUrlsPublicas)
44
+ || /(?:^|[^A-Za-z0-9_./])\/(?!\/)[^/\s"'<>]+(?:\/[^/\s"'<>]*)*/u.test(semUrlsPublicas);
45
+ });
46
+ }
47
+ function normalizarCodigoPublico(categoria, codigo) {
48
+ const candidato = codigo.trim();
49
+ return CODIGO_PUBLICO_VALIDO.test(candidato) ? candidato : CODIGO_PADRAO[categoria];
50
+ }
51
+ function normalizarMensagemPublica(categoria, mensagem) {
52
+ if (categoria !== "HELP") {
53
+ return MENSAGEM_PADRAO[categoria];
54
+ }
55
+ const candidata = mensagem.trim();
56
+ if (!candidata
57
+ || contemCaminhoAbsoluto(candidata)
58
+ || TRECHO_STACK.test(candidata)
59
+ || PREFIXO_ERRO_INTERNO.test(candidata)) {
60
+ return MENSAGEM_PADRAO[categoria];
61
+ }
62
+ return candidata;
63
+ }
64
+ export function criarEnvelopeControleJsonV1(entrada) {
65
+ const help = entrada.categoria === "HELP";
66
+ const exitCode = help
67
+ ? 0
68
+ : entrada.codigoSaida === 0
69
+ ? 1
70
+ : entrada.codigoSaida;
71
+ return {
72
+ schemaVersion: SCHEMA_CONTROLE_CLI_V1,
73
+ ok: help,
74
+ kind: entrada.categoria,
75
+ code: normalizarCodigoPublico(entrada.categoria, entrada.codigoPublico),
76
+ message: normalizarMensagemPublica(entrada.categoria, entrada.mensagemPublica),
77
+ exitCode,
78
+ };
79
+ }
80
+ export function emitirResultadoCliJsonV1(entrada) {
81
+ const envelope = criarEnvelopeResultadoCliV1(entrada);
82
+ // Uma única escrita lógica impede documentos JSON parciais no processo público.
83
+ console.log(JSON.stringify(envelope, null, 2));
84
+ return envelope;
85
+ }
86
+ function envelopeSeguroParaInvocacao(resultado, envelope, mensagemTexto) {
87
+ const coerente = envelope?.kind === resultado ? envelope : undefined;
88
+ return criarEnvelopeControleJsonV1({
89
+ categoria: resultado,
90
+ codigoPublico: coerente?.code ?? CODIGO_PADRAO[resultado],
91
+ mensagemPublica: resultado === "HELP"
92
+ ? coerente?.message ?? mensagemTexto ?? MENSAGEM_PADRAO.HELP
93
+ : MENSAGEM_PADRAO[resultado],
94
+ codigoSaida: coerente?.exitCode ?? (resultado === "HELP" ? 0 : 1),
95
+ });
96
+ }
97
+ export function executarInvocacaoPublica(opcoes) {
98
+ const envelope = envelopeSeguroParaInvocacao(opcoes.resultado, opcoes.envelopeControle, opcoes.mensagemTexto);
99
+ if (opcoes.modoJson) {
100
+ // Uma única escrita lógica mantém JSON de controle em um único documento no stdout.
101
+ console.log(JSON.stringify(envelope, null, 2));
102
+ }
103
+ else if (opcoes.resultado === "HELP") {
104
+ console.log(envelope.message);
105
+ }
106
+ else {
107
+ console.error(envelope.message);
108
+ }
109
+ return {
110
+ codigoSaida: envelope.exitCode,
111
+ envelopeControleEmitido: opcoes.modoJson,
112
+ stderrVazio: opcoes.modoJson || opcoes.resultado === "HELP",
113
+ handlerExecutado: false,
114
+ politicaControleJsonV1Respeitada: true,
115
+ politicaHelpPuroRespeitada: true,
116
+ };
117
+ }
118
+ //# sourceMappingURL=saidaCli.js.map
@@ -0,0 +1,22 @@
1
+ import { type AcceptanceLockV1, type AcceptanceOperationValue, type AcceptanceTimeRange, type MultimodalChannelType, type MultimodalEvidenceDescriptorV1, type OperationResult, type Sha256 } from "./operationsTypes.js";
2
+ export declare function validarAcceptanceLock(input: unknown): OperationResult<{
3
+ readonly lock: AcceptanceLockV1;
4
+ readonly lockDigest: Sha256;
5
+ }>;
6
+ export declare function operarAcceptanceLock(operation: unknown, lockInput: unknown, contextInput: unknown): OperationResult<AcceptanceOperationValue>;
7
+ export declare function digestVinculoClaimMultimodal(input: {
8
+ readonly claimId: string;
9
+ readonly runId: string;
10
+ readonly definitionDigest: Sha256;
11
+ readonly planDigest: Sha256;
12
+ readonly contractDigest: Sha256;
13
+ readonly artifactDigest: Sha256;
14
+ readonly sceneId: string;
15
+ readonly timeRange: AcceptanceTimeRange;
16
+ readonly requiredModalities: readonly MultimodalChannelType[];
17
+ }): Sha256;
18
+ export declare function validarEvidenciaMultimodal(input: unknown): OperationResult<{
19
+ readonly descriptor: MultimodalEvidenceDescriptorV1;
20
+ readonly descriptorDigest: Sha256;
21
+ readonly localDescriptorOnly: true;
22
+ }>;
@@ -0,0 +1,345 @@
1
+ // SEMA-GOVERNED: sema.produto.sistemas_interativos.operacao.acceptance_evidencias
2
+ // Descricao: acceptance locks, invalidacao explicita e evidencia multimodal local nao autoritativa.
3
+ import { ACCEPTANCE_LOCK_SCHEMA_V1, MULTIMODAL_EVIDENCE_SCHEMA_V1, } from "./operationsTypes.js";
4
+ import { MEDIA_TYPE_PATTERN, canonicalJson, digestJsonOperacional, failure, hasOnlyKeys, inspectPlainJson, isIntegerIn, isIsoTimestamp, isRecord, isSafeName, isSemanticId, isSha256, isVersion, issue, success, } from "./operationPrimitives.js";
5
+ const ACCEPTANCE_REASONS = new Set([
6
+ "ARTIFACT_CHANGED", "SCENE_CHANGED", "TIME_RANGE_CHANGED", "APPROVER_REVOKED", "MANUAL_WITHDRAWAL",
7
+ ]);
8
+ function validateTimeRange(input, field, issues) {
9
+ if (!isRecord(input)
10
+ || !hasOnlyKeys(input, ["start", "end", "unit"])
11
+ || typeof input.start !== "number"
12
+ || !Number.isFinite(input.start)
13
+ || input.start < 0
14
+ || typeof input.end !== "number"
15
+ || !Number.isFinite(input.end)
16
+ || input.end <= input.start
17
+ || (input.unit !== "FRAME" && input.unit !== "TICK" && input.unit !== "SECOND")) {
18
+ issues.push(issue("time_range_invalid", field));
19
+ return false;
20
+ }
21
+ return true;
22
+ }
23
+ export function validarAcceptanceLock(input) {
24
+ const issues = inspectPlainJson(input, "acceptanceLock");
25
+ if (!isRecord(input))
26
+ return failure([...issues, issue("acceptance_lock_object_required", "acceptanceLock")]);
27
+ if (!hasOnlyKeys(input, [
28
+ "schemaVersion", "lockId", "artifactDigest", "sceneId", "timeRange", "approver",
29
+ "decision", "status", "createdAt", "invalidation", "authoritative",
30
+ ]))
31
+ issues.push(issue("acceptance_lock_unknown_field", "acceptanceLock"));
32
+ if (input.schemaVersion !== ACCEPTANCE_LOCK_SCHEMA_V1)
33
+ issues.push(issue("acceptance_lock_schema_invalid", "schemaVersion"));
34
+ if (!isSemanticId(input.lockId))
35
+ issues.push(issue("acceptance_lock_id_invalid", "lockId"));
36
+ if (!isSha256(input.artifactDigest))
37
+ issues.push(issue("acceptance_artifact_digest_invalid", "artifactDigest"));
38
+ if (!isSemanticId(input.sceneId))
39
+ issues.push(issue("acceptance_scene_id_invalid", "sceneId"));
40
+ validateTimeRange(input.timeRange, "timeRange", issues);
41
+ if (!isRecord(input.approver)
42
+ || !hasOnlyKeys(input.approver, ["approverIdDigest", "role", "method"])
43
+ || !isSha256(input.approver.approverIdDigest)
44
+ || !isSafeName(input.approver.role)
45
+ || (input.approver.method !== "HUMAN" && input.approver.method !== "POLICY")) {
46
+ issues.push(issue("acceptance_approver_invalid", "approver"));
47
+ }
48
+ if (input.decision !== "ACCEPTED")
49
+ issues.push(issue("acceptance_decision_invalid", "decision"));
50
+ if (input.status !== "ACTIVE" && input.status !== "INVALIDATED")
51
+ issues.push(issue("acceptance_status_invalid", "status"));
52
+ if (!isIsoTimestamp(input.createdAt))
53
+ issues.push(issue("acceptance_created_at_invalid", "createdAt"));
54
+ if (input.authoritative !== false)
55
+ issues.push(issue("acceptance_lock_must_be_non_authoritative", "authoritative"));
56
+ if (input.status === "ACTIVE" && input.invalidation !== undefined) {
57
+ issues.push(issue("active_lock_cannot_have_invalidation", "invalidation"));
58
+ }
59
+ if (input.status === "INVALIDATED") {
60
+ const invalidation = input.invalidation;
61
+ if (!isRecord(invalidation)
62
+ || !hasOnlyKeys(invalidation, ["previousLockDigest", "invalidatedByDigest", "reasonCode", "invalidatedAt"])
63
+ || !isSha256(invalidation.previousLockDigest)
64
+ || !isSha256(invalidation.invalidatedByDigest)
65
+ || typeof invalidation.reasonCode !== "string"
66
+ || !ACCEPTANCE_REASONS.has(invalidation.reasonCode)
67
+ || !isIsoTimestamp(invalidation.invalidatedAt)) {
68
+ issues.push(issue("acceptance_invalidation_invalid", "invalidation"));
69
+ }
70
+ }
71
+ if (issues.length > 0)
72
+ return failure(issues);
73
+ const lock = input;
74
+ const normalized = {
75
+ ...lock,
76
+ timeRange: { ...lock.timeRange },
77
+ approver: { ...lock.approver },
78
+ ...(lock.invalidation === undefined ? {} : { invalidation: { ...lock.invalidation } }),
79
+ };
80
+ const lockDigest = digestJsonOperacional(normalized);
81
+ return success({ lock: normalized, lockDigest }, lockDigest);
82
+ }
83
+ export function operarAcceptanceLock(operation, lockInput, contextInput) {
84
+ if (operation !== "VALIDATE" && operation !== "EVALUATE" && operation !== "INVALIDATE") {
85
+ return failure([issue("acceptance_operation_invalid", "operation")]);
86
+ }
87
+ const lockResult = validarAcceptanceLock(lockInput);
88
+ if (!lockResult.value)
89
+ return failure(lockResult.issues);
90
+ const contextIssues = inspectPlainJson(contextInput, "context");
91
+ if (!isRecord(contextInput))
92
+ return failure([...contextIssues, issue("acceptance_context_object_required", "context")]);
93
+ const lock = lockResult.value.lock;
94
+ const active = lock.status === "ACTIVE";
95
+ if (operation === "VALIDATE") {
96
+ if (!hasOnlyKeys(contextInput, []))
97
+ contextIssues.push(issue("acceptance_validate_context_must_be_empty", "context"));
98
+ if (contextIssues.length > 0)
99
+ return failure(contextIssues);
100
+ return success({
101
+ operation,
102
+ accepted: active,
103
+ bindingMatches: active,
104
+ invalidated: !active,
105
+ blockers: active ? [] : ["acceptance_lock_invalidated"],
106
+ lock,
107
+ lockDigest: lockResult.value.lockDigest,
108
+ }, lockResult.value.lockDigest);
109
+ }
110
+ if (operation === "EVALUATE") {
111
+ if (!hasOnlyKeys(contextInput, ["artifactDigest", "sceneId", "timeRange"])) {
112
+ contextIssues.push(issue("acceptance_evaluate_unknown_field", "context"));
113
+ }
114
+ if (!isSha256(contextInput.artifactDigest))
115
+ contextIssues.push(issue("acceptance_context_artifact_invalid", "context"));
116
+ if (!isSemanticId(contextInput.sceneId))
117
+ contextIssues.push(issue("acceptance_context_scene_invalid", "context"));
118
+ validateTimeRange(contextInput.timeRange, "context", contextIssues);
119
+ if (contextIssues.length > 0)
120
+ return failure(contextIssues);
121
+ const bindingMatches = lock.artifactDigest === contextInput.artifactDigest
122
+ && lock.sceneId === contextInput.sceneId
123
+ && canonicalJson(lock.timeRange) === canonicalJson(contextInput.timeRange);
124
+ const blockers = [
125
+ ...(active ? [] : ["acceptance_lock_invalidated"]),
126
+ ...(bindingMatches ? [] : ["acceptance_binding_mismatch"]),
127
+ ];
128
+ return success({
129
+ operation,
130
+ accepted: active && bindingMatches,
131
+ bindingMatches,
132
+ invalidated: !active,
133
+ blockers,
134
+ lock,
135
+ lockDigest: lockResult.value.lockDigest,
136
+ }, lockResult.value.lockDigest);
137
+ }
138
+ if (!hasOnlyKeys(contextInput, ["lockDigest", "invalidatedByDigest", "reasonCode", "invalidatedAt"])) {
139
+ contextIssues.push(issue("acceptance_invalidate_unknown_field", "context"));
140
+ }
141
+ if (!isSha256(contextInput.lockDigest) || contextInput.lockDigest !== lockResult.value.lockDigest) {
142
+ contextIssues.push(issue("acceptance_lock_digest_mismatch", "context"));
143
+ }
144
+ if (!isSha256(contextInput.invalidatedByDigest))
145
+ contextIssues.push(issue("acceptance_invalidator_invalid", "context"));
146
+ if (typeof contextInput.reasonCode !== "string"
147
+ || !ACCEPTANCE_REASONS.has(contextInput.reasonCode)) {
148
+ contextIssues.push(issue("acceptance_invalidation_reason_invalid", "context"));
149
+ }
150
+ if (!isIsoTimestamp(contextInput.invalidatedAt))
151
+ contextIssues.push(issue("acceptance_invalidated_at_invalid", "context"));
152
+ if (!active)
153
+ contextIssues.push(issue("acceptance_lock_already_invalidated", "acceptanceLock"));
154
+ if (contextIssues.length > 0)
155
+ return failure(contextIssues);
156
+ const invalidatedLock = {
157
+ ...lock,
158
+ status: "INVALIDATED",
159
+ invalidation: {
160
+ previousLockDigest: lockResult.value.lockDigest,
161
+ invalidatedByDigest: contextInput.invalidatedByDigest,
162
+ reasonCode: contextInput.reasonCode,
163
+ invalidatedAt: contextInput.invalidatedAt,
164
+ },
165
+ };
166
+ const lockDigest = digestJsonOperacional(invalidatedLock);
167
+ return success({
168
+ operation,
169
+ accepted: false,
170
+ bindingMatches: true,
171
+ invalidated: true,
172
+ blockers: ["acceptance_lock_invalidated"],
173
+ lock: invalidatedLock,
174
+ lockDigest,
175
+ }, lockDigest);
176
+ }
177
+ const MULTIMODAL_CHANNEL_TYPES = new Set([
178
+ "SCREENSHOT", "VIDEO", "DEPTH", "NORMALS", "OBJECT_ID",
179
+ "MOTION", "TRANSFORMS", "EVENTS", "AUDIO", "TELEMETRY",
180
+ ]);
181
+ export function digestVinculoClaimMultimodal(input) {
182
+ return digestJsonOperacional({ ...input, requiredModalities: [...input.requiredModalities].sort() });
183
+ }
184
+ export function validarEvidenciaMultimodal(input) {
185
+ const issues = inspectPlainJson(input, "evidence");
186
+ if (!isRecord(input))
187
+ return failure([...issues, issue("evidence_object_required", "evidence")]);
188
+ if (!hasOnlyKeys(input, [
189
+ "schemaVersion", "evidenceId", "runId", "claimId", "definitionDigest", "planDigest", "contractDigest",
190
+ "claimBindingDigest", "artifactDigest", "sceneId", "timeRange", "requiredModalities", "channels",
191
+ "producer", "verifier", "decision", "observedAt", "authoritative",
192
+ ]))
193
+ issues.push(issue("evidence_unknown_field", "evidence"));
194
+ if (input.schemaVersion !== MULTIMODAL_EVIDENCE_SCHEMA_V1)
195
+ issues.push(issue("evidence_schema_invalid", "schemaVersion"));
196
+ if (!isSemanticId(input.evidenceId))
197
+ issues.push(issue("evidence_id_invalid", "evidenceId"));
198
+ if (!isSemanticId(input.runId))
199
+ issues.push(issue("evidence_run_id_invalid", "runId"));
200
+ if (!isSemanticId(input.claimId))
201
+ issues.push(issue("evidence_claim_id_invalid", "claimId"));
202
+ if (!isSha256(input.definitionDigest))
203
+ issues.push(issue("evidence_definition_digest_invalid", "definitionDigest"));
204
+ if (!isSha256(input.planDigest))
205
+ issues.push(issue("evidence_plan_digest_invalid", "planDigest"));
206
+ if (!isSha256(input.contractDigest))
207
+ issues.push(issue("evidence_contract_digest_invalid", "contractDigest"));
208
+ if (!isSha256(input.artifactDigest))
209
+ issues.push(issue("evidence_artifact_digest_invalid", "artifactDigest"));
210
+ if (!isSemanticId(input.sceneId))
211
+ issues.push(issue("evidence_scene_id_invalid", "sceneId"));
212
+ const timeRange = input.timeRange;
213
+ const timeRangeValid = validateTimeRange(timeRange, "timeRange", issues);
214
+ const requiredModalitiesInput = input.requiredModalities;
215
+ const requiredModalitiesValid = Array.isArray(requiredModalitiesInput)
216
+ && requiredModalitiesInput.length > 0
217
+ && requiredModalitiesInput.every((type) => typeof type === "string"
218
+ && MULTIMODAL_CHANNEL_TYPES.has(type))
219
+ && new Set(requiredModalitiesInput).size === requiredModalitiesInput.length;
220
+ const requiredModalities = requiredModalitiesValid
221
+ ? requiredModalitiesInput
222
+ : [];
223
+ if (!requiredModalitiesValid)
224
+ issues.push(issue("evidence_required_modalities_invalid", "requiredModalities"));
225
+ if (!isSha256(input.claimBindingDigest)
226
+ || !isSemanticId(input.claimId)
227
+ || !isSemanticId(input.runId)
228
+ || !isSha256(input.definitionDigest)
229
+ || !isSha256(input.planDigest)
230
+ || !isSha256(input.contractDigest)
231
+ || !isSha256(input.artifactDigest)
232
+ || !isSemanticId(input.sceneId)
233
+ || !timeRangeValid
234
+ || input.claimBindingDigest !== digestVinculoClaimMultimodal({
235
+ claimId: input.claimId,
236
+ runId: input.runId,
237
+ definitionDigest: input.definitionDigest,
238
+ planDigest: input.planDigest,
239
+ contractDigest: input.contractDigest,
240
+ artifactDigest: input.artifactDigest,
241
+ sceneId: input.sceneId,
242
+ timeRange,
243
+ requiredModalities,
244
+ }))
245
+ issues.push(issue("evidence_claim_binding_invalid", "claimBindingDigest"));
246
+ if (!isIsoTimestamp(input.observedAt))
247
+ issues.push(issue("evidence_observed_at_invalid", "observedAt"));
248
+ if (input.authoritative !== false)
249
+ issues.push(issue("evidence_must_be_non_authoritative", "authoritative"));
250
+ const channelIds = new Set();
251
+ const channelTypes = new Set();
252
+ if (!Array.isArray(input.channels) || input.channels.length === 0) {
253
+ issues.push(issue("evidence_channels_required", "channels"));
254
+ }
255
+ else
256
+ for (const channel of input.channels) {
257
+ if (!isRecord(channel)
258
+ || !hasOnlyKeys(channel, [
259
+ "channelId", "type", "artifactDigest", "mediaType", "metadataDigest", "sampleCount",
260
+ ])
261
+ || !isSemanticId(channel.channelId)
262
+ || typeof channel.type !== "string"
263
+ || !MULTIMODAL_CHANNEL_TYPES.has(channel.type)
264
+ || !isSha256(channel.artifactDigest)
265
+ || typeof channel.mediaType !== "string"
266
+ || !MEDIA_TYPE_PATTERN.test(channel.mediaType)
267
+ || !isSha256(channel.metadataDigest)
268
+ || !isIntegerIn(channel.sampleCount, 1, 1_000_000_000)) {
269
+ issues.push(issue("evidence_channel_invalid", "channels"));
270
+ continue;
271
+ }
272
+ if (channelIds.has(channel.channelId))
273
+ issues.push(issue("evidence_channel_id_duplicate", "channels"));
274
+ if (channelTypes.has(channel.type))
275
+ issues.push(issue("evidence_channel_type_duplicate", "channels"));
276
+ channelIds.add(channel.channelId);
277
+ channelTypes.add(channel.type);
278
+ }
279
+ const producer = input.producer;
280
+ if (!isRecord(producer)
281
+ || !hasOnlyKeys(producer, ["producerIdDigest", "producerType", "version", "configurationDigest"])
282
+ || !isSha256(producer.producerIdDigest)
283
+ || (producer.producerType !== "ENGINE"
284
+ && producer.producerType !== "EDITOR"
285
+ && producer.producerType !== "RUNNER"
286
+ && producer.producerType !== "MODEL"
287
+ && producer.producerType !== "HUMAN"
288
+ && producer.producerType !== "SENSOR")
289
+ || !isVersion(producer.version)
290
+ || !isSha256(producer.configurationDigest))
291
+ issues.push(issue("evidence_producer_invalid", "producer"));
292
+ const verifier = input.verifier;
293
+ if (!isRecord(verifier)
294
+ || !hasOnlyKeys(verifier, [
295
+ "verifierIdDigest", "verifierType", "version", "independent", "configurationDigest",
296
+ ])
297
+ || !isSha256(verifier.verifierIdDigest)
298
+ || (verifier.verifierType !== "RULE"
299
+ && verifier.verifierType !== "MODEL"
300
+ && verifier.verifierType !== "HUMAN"
301
+ && verifier.verifierType !== "SENSOR")
302
+ || !isVersion(verifier.version)
303
+ || verifier.independent !== true
304
+ || !isSha256(verifier.configurationDigest))
305
+ issues.push(issue("evidence_verifier_invalid", "verifier"));
306
+ if (isRecord(producer) && isRecord(verifier)
307
+ && isSha256(producer.producerIdDigest) && isSha256(verifier.verifierIdDigest)
308
+ && producer.producerIdDigest === verifier.verifierIdDigest) {
309
+ issues.push(issue("evidence_verifier_not_independent", "verifier"));
310
+ }
311
+ const decision = input.decision;
312
+ if (!isRecord(decision)
313
+ || !hasOnlyKeys(decision, ["verdict", "reasonCodes", "confidenceBasisPoints"])
314
+ || (decision.verdict !== "PASS" && decision.verdict !== "FAIL" && decision.verdict !== "INCONCLUSIVE")
315
+ || !Array.isArray(decision.reasonCodes)
316
+ || decision.reasonCodes.length === 0
317
+ || decision.reasonCodes.some((code) => !isSafeName(code))
318
+ || new Set(decision.reasonCodes).size !== decision.reasonCodes.length
319
+ || !isIntegerIn(decision.confidenceBasisPoints, 0, 10_000))
320
+ issues.push(issue("evidence_decision_invalid", "decision"));
321
+ if (isRecord(decision) && decision.verdict === "PASS") {
322
+ if (!requiredModalitiesValid || requiredModalities.length < 2) {
323
+ issues.push(issue("evidence_pass_requires_multiple_modalities", "requiredModalities"));
324
+ }
325
+ else if (!requiredModalities.every((type) => channelTypes.has(type))) {
326
+ issues.push(issue("evidence_pass_missing_required_modality", "channels"));
327
+ }
328
+ }
329
+ if (issues.length > 0)
330
+ return failure(issues);
331
+ const descriptor = input;
332
+ const normalized = {
333
+ ...descriptor,
334
+ timeRange: { ...descriptor.timeRange },
335
+ requiredModalities: [...descriptor.requiredModalities].sort(),
336
+ channels: descriptor.channels.map((channel) => ({ ...channel }))
337
+ .sort((left, right) => left.type.localeCompare(right.type) || left.channelId.localeCompare(right.channelId)),
338
+ producer: { ...descriptor.producer },
339
+ verifier: { ...descriptor.verifier },
340
+ decision: { ...descriptor.decision, reasonCodes: [...descriptor.decision.reasonCodes].sort() },
341
+ };
342
+ const descriptorDigest = digestJsonOperacional(normalized);
343
+ return success({ descriptor: normalized, descriptorDigest, localDescriptorOnly: true }, descriptorDigest);
344
+ }
345
+ //# sourceMappingURL=acceptanceEvidence.js.map
@@ -0,0 +1,12 @@
1
+ import { type AssetProvenanceV1, type EditorStateV1, type EngineSnapshotDiffV1, type OperationResult, type Sha256, type ValidatedEngineSnapshot } from "./operationsTypes.js";
2
+ export declare function validarSnapshotEngine(input: unknown): OperationResult<ValidatedEngineSnapshot>;
3
+ export declare function derivarDiffSnapshotsEngine(beforeInput: unknown, afterInput: unknown): OperationResult<EngineSnapshotDiffV1>;
4
+ export declare function validarProvenienciaAsset(input: unknown): OperationResult<{
5
+ readonly provenance: AssetProvenanceV1;
6
+ readonly provenanceDigest: Sha256;
7
+ }>;
8
+ export declare function validarEstadoEditor(input: unknown): OperationResult<{
9
+ readonly state: EditorStateV1;
10
+ readonly editorStateDigest: Sha256;
11
+ readonly externallyObserved: false;
12
+ }>;