@semacode/cli 2.2.0 → 2.3.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 (127) hide show
  1. package/README.md +91 -4
  2. package/dist/agentContext.d.ts +1 -1
  3. package/dist/agentContextPack.js +6 -1
  4. package/dist/agentContextTipos.d.ts +4 -2
  5. package/dist/agentContextTipos.js +7 -0
  6. package/dist/agentEntryPoints.js +70 -19
  7. package/dist/comandos.js +4 -0
  8. package/dist/discovery/catalog.d.ts +11 -0
  9. package/dist/discovery/catalog.js +521 -0
  10. package/dist/discovery/command.d.ts +11 -0
  11. package/dist/discovery/command.js +226 -0
  12. package/dist/discovery/index.d.ts +5 -0
  13. package/dist/discovery/index.js +8 -0
  14. package/dist/discovery/ranker.d.ts +3 -0
  15. package/dist/discovery/ranker.js +310 -0
  16. package/dist/discovery/redaction.d.ts +2 -0
  17. package/dist/discovery/redaction.js +21 -0
  18. package/dist/discovery/render.d.ts +2 -0
  19. package/dist/discovery/render.js +100 -0
  20. package/dist/discovery/types.d.ts +119 -0
  21. package/dist/discovery/types.js +13 -0
  22. package/dist/exemplosOficiais.js +29 -8
  23. package/dist/iaPrompts.d.ts +1 -1
  24. package/dist/iaPrompts.js +3 -0
  25. package/dist/index.d.ts +2 -0
  26. package/dist/index.js +23 -5
  27. package/dist/index.part01.d.ts +1 -1
  28. package/dist/index.part01.js +39 -4
  29. package/dist/index.part06.js +3 -0
  30. package/dist/initTemplatesBase.js +3 -2
  31. package/dist/profileArtefatoValidadores.d.ts +3 -2
  32. package/dist/profileArtefatoValidadores.js +81 -0
  33. package/dist/profileAuthorTipos.d.ts +4 -3
  34. package/dist/profileCatalogo.d.ts +5 -5
  35. package/dist/profileCatalogo.js +30 -0
  36. package/dist/profileCommand.d.ts +8 -2
  37. package/dist/profileCommand.js +15 -5
  38. package/dist/profileRegras.d.ts +5 -5
  39. package/dist/profileRegras.js +13 -1
  40. package/dist/profileRulePacks.js +68 -0
  41. package/dist/sistemasInterativos/adapterProtocol.d.ts +3 -0
  42. package/dist/sistemasInterativos/adapterProtocol.js +240 -0
  43. package/dist/sistemasInterativos/advancedCatalog.d.ts +5 -0
  44. package/dist/sistemasInterativos/advancedCatalog.js +442 -0
  45. package/dist/sistemasInterativos/autonomy.d.ts +230 -0
  46. package/dist/sistemasInterativos/autonomy.js +753 -0
  47. package/dist/sistemasInterativos/canonical.d.ts +3 -0
  48. package/dist/sistemasInterativos/canonical.js +43 -0
  49. package/dist/sistemasInterativos/catalog.d.ts +116 -0
  50. package/dist/sistemasInterativos/catalog.js +543 -0
  51. package/dist/sistemasInterativos/command.d.ts +7 -0
  52. package/dist/sistemasInterativos/command.js +311 -0
  53. package/dist/sistemasInterativos/controlRun.d.ts +56 -0
  54. package/dist/sistemasInterativos/controlRun.js +391 -0
  55. package/dist/sistemasInterativos/evidence.d.ts +5 -0
  56. package/dist/sistemasInterativos/evidence.js +306 -0
  57. package/dist/sistemasInterativos/experienceIr.d.ts +12 -0
  58. package/dist/sistemasInterativos/experienceIr.js +895 -0
  59. package/dist/sistemasInterativos/experienceIrSemantics.d.ts +30 -0
  60. package/dist/sistemasInterativos/experienceIrSemantics.js +368 -0
  61. package/dist/sistemasInterativos/experienceIrTypes.d.ts +370 -0
  62. package/dist/sistemasInterativos/experienceIrTypes.js +5 -0
  63. package/dist/sistemasInterativos/extensionCommand.d.ts +391 -0
  64. package/dist/sistemasInterativos/extensionCommand.js +383 -0
  65. package/dist/sistemasInterativos/index.d.ts +19 -0
  66. package/dist/sistemasInterativos/index.js +22 -0
  67. package/dist/sistemasInterativos/operations.d.ts +40 -0
  68. package/dist/sistemasInterativos/operations.js +1167 -0
  69. package/dist/sistemasInterativos/operationsTypes.d.ts +297 -0
  70. package/dist/sistemasInterativos/operationsTypes.js +11 -0
  71. package/dist/sistemasInterativos/planner.d.ts +2 -0
  72. package/dist/sistemasInterativos/planner.js +159 -0
  73. package/dist/sistemasInterativos/portability.d.ts +164 -0
  74. package/dist/sistemasInterativos/portability.js +539 -0
  75. package/dist/sistemasInterativos/render.d.ts +3 -0
  76. package/dist/sistemasInterativos/render.js +179 -0
  77. package/dist/sistemasInterativos/temporal.d.ts +183 -0
  78. package/dist/sistemasInterativos/temporal.js +543 -0
  79. package/dist/sistemasInterativos/types.d.ts +215 -0
  80. package/dist/sistemasInterativos/types.js +4 -0
  81. package/dist/sistemasInterativos/validator.d.ts +2 -0
  82. package/dist/sistemasInterativos/validator.js +305 -0
  83. package/docs/README.md +6 -0
  84. package/docs/ai-integration.md +7 -1
  85. package/docs/ai-workflow.md +5 -4
  86. package/docs/commands.md +43 -1
  87. package/docs/descoberta-capacidades.md +106 -0
  88. package/docs/documentation.md +11 -2
  89. package/docs/profiles.md +11 -2
  90. package/docs/sistemas-interativos.md +381 -0
  91. package/docs/testing.md +11 -2
  92. package/exemplos/profile_simulation.sema +211 -0
  93. package/exemplos/sistemas-interativos/README.md +100 -0
  94. package/exemplos/sistemas-interativos/advanced/acceptance-context-evaluate-valid.json +5 -0
  95. package/exemplos/sistemas-interativos/advanced/acceptance-lock-valid.json +16 -0
  96. package/exemplos/sistemas-interativos/advanced/asset-provenance-valid.json +32 -0
  97. package/exemplos/sistemas-interativos/advanced/autonomy-repair-valid.json +93 -0
  98. package/exemplos/sistemas-interativos/advanced/control-run-definition-valid.json +78 -0
  99. package/exemplos/sistemas-interativos/advanced/control-run-valid.json +27 -0
  100. package/exemplos/sistemas-interativos/advanced/distributed-workers-valid.json +79 -0
  101. package/exemplos/sistemas-interativos/advanced/editor-state-valid.json +42 -0
  102. package/exemplos/sistemas-interativos/advanced/engine-snapshot-after-valid.json +32 -0
  103. package/exemplos/sistemas-interativos/advanced/engine-snapshot-before-valid.json +23 -0
  104. package/exemplos/sistemas-interativos/advanced/job-orchestration-valid.json +39 -0
  105. package/exemplos/sistemas-interativos/advanced/multimodal-evidence-valid.json +46 -0
  106. package/exemplos/sistemas-interativos/advanced/multiplayer-authority-valid.json +39 -0
  107. package/exemplos/sistemas-interativos/advanced/playtest-fuzz-valid.json +37 -0
  108. package/exemplos/sistemas-interativos/advanced/portability-valid.json +104 -0
  109. package/exemplos/sistemas-interativos/advanced/temporal-evidence-valid.json +27 -0
  110. package/exemplos/sistemas-interativos/advanced/temporal-valid.json +118 -0
  111. package/exemplos/sistemas-interativos/experience-ir-valid.json +459 -0
  112. package/exemplos/sistemas-interativos/game-2d.json +83 -0
  113. package/exemplos/sistemas-interativos/game-3d-human.json +81 -0
  114. package/exemplos/sistemas-interativos/game-pixel-16-bit.json +97 -0
  115. package/exemplos/sistemas-interativos/game-pixel-8-bit.json +94 -0
  116. package/exemplos/sistemas-interativos/game-xr-human.json +80 -0
  117. package/exemplos/sistemas-interativos/hybrid-2-5d.json +108 -0
  118. package/exemplos/sistemas-interativos/protocol-mutating-rollback-valid.json +75 -0
  119. package/exemplos/sistemas-interativos/protocol-read-only-valid.json +58 -0
  120. package/exemplos/sistemas-interativos/simulation-2d-controlled.json +97 -0
  121. package/exemplos/sistemas-interativos/simulation-3d-calibrated-autonomous.json +141 -0
  122. package/exemplos/sistemas-interativos/simulation-headless-autonomous-batch.json +112 -0
  123. package/exemplos/sistemas-interativos/simulation-pixel-16-bit.json +103 -0
  124. package/exemplos/sistemas-interativos/simulation-text-controlled.json +95 -0
  125. package/node_modules/@sema/gerador-lua/dist/index.js +31 -2
  126. package/node_modules/@sema/gerador-lua/dist/index.js.map +1 -1
  127. package/package.json +1 -1
@@ -0,0 +1,391 @@
1
+ // SEMA-GOVERNED: sema.produto.sistemas_interativos.control_run
2
+ // Descricao: valida a cadeia content-addressed definicao -> plano -> pipeline -> schemas -> evidencia -> resultado.
3
+ import { SUPERFICIES_CLI_PIPELINES_AVANCADOS } from "../discovery/catalog.js";
4
+ import { validarCicloReparoAutonomo, validarModeloAutoridadeMultiplayer, validarPlanoPlaytestFuzz, } from "./autonomy.js";
5
+ import { digestJsonSistemaInterativo, digestSha256Valido } from "./canonical.js";
6
+ import { obterPipelineSistemaInterativo } from "./catalog.js";
7
+ import { validarExperienceIr } from "./experienceIr.js";
8
+ import { SCHEMA_EXTENSOES_CLI_INTERATIVAS } from "./extensionCommand.js";
9
+ import { planejarOrquestracaoJobs, validarAcceptanceLock, validarEstadoEditor, validarEvidenciaMultimodal, validarProvenienciaAsset, validarSnapshotEngine, } from "./operations.js";
10
+ import { planejarSistemaInterativo } from "./planner.js";
11
+ import { analisarPlanoPortabilidadeInterativa, validarPlanoWorkersDistribuidos } from "./portability.js";
12
+ import { validarBundleVerificacaoTemporal, validarContratoTemporalInterativo } from "./temporal.js";
13
+ import { validarDefinicaoSistemaInterativo } from "./validator.js";
14
+ export const CONTROL_RUN_SCHEMA_VERSION = "sema.interactive.control-run/v1";
15
+ const MANIFEST_KEYS = new Set([
16
+ "schemaVersion", "runId", "systemId", "pipelineId", "validatorCommand",
17
+ "definitionDigest", "planDigest", "pipelineContractDigest", "validationContractDigest",
18
+ "producerId", "producerVersion", "producerConfigurationDigest",
19
+ "verifierId", "verifierVersion", "verifierConfigurationDigest",
20
+ "inputSchemaKeys", "inputDigests", "evidenceDigest", "resultDigest",
21
+ ]);
22
+ const ID_SEGURO = /^[a-z0-9][a-z0-9._:/-]{0,127}$/u;
23
+ const CHAVE_SENSIVEL = /(?:password|passwd|senha|secret|token|api.?key|private.?key|credential|authorization|cookie)/iu;
24
+ const VALOR_SENSIVEL = /(?:\bBearer\s+[A-Za-z0-9._~+/-]{8,}|\b(?:sk|pk|ghp|github_pat|xox[baprs])[-_][A-Za-z0-9_-]{8,}|-----BEGIN [A-Z ]*PRIVATE KEY-----|[?&](?:access_token|token|api_?key|signature|x-amz-signature)=)/iu;
25
+ const REFERENCIA_OPACA = /^(?:sha256:|opaque:sha256:)[a-f0-9]{64}$/u;
26
+ const EVIDENCE_INPUT_INDEX = Object.freeze({
27
+ "validar-evidencia-temporal": 1,
28
+ "validar-multimodal": 0,
29
+ });
30
+ const GENERIC_EVIDENCE_KEYS = new Set([
31
+ "schemaVersion", "evidenceId", "runId", "systemId", "definitionDigest", "planDigest",
32
+ "validationContractDigest", "inputDigests", "producerId", "producerVersion",
33
+ "producerConfigurationDigest", "verifierId", "verifierVersion", "verifierConfigurationDigest",
34
+ ]);
35
+ function registro(valor) {
36
+ return typeof valor === "object" && valor !== null && !Array.isArray(valor);
37
+ }
38
+ function texto(valor) {
39
+ return typeof valor === "string" && valor.length > 0 && valor.length <= 256;
40
+ }
41
+ function idSeguro(valor) {
42
+ return typeof valor === "string" && ID_SEGURO.test(valor);
43
+ }
44
+ function adicionar(issues, condicao, codigo) {
45
+ if (!condicao)
46
+ issues.push(codigo);
47
+ }
48
+ function digestSeguro(valor, issues, codigo) {
49
+ try {
50
+ const serializado = JSON.stringify(valor);
51
+ if (typeof serializado !== "string")
52
+ throw new TypeError("json_nao_serializavel");
53
+ return digestJsonSistemaInterativo(JSON.parse(serializado));
54
+ }
55
+ catch {
56
+ issues.push(codigo);
57
+ return digestJsonSistemaInterativo({ invalidCanonicalInput: true, code: codigo });
58
+ }
59
+ }
60
+ function contemMaterialSensivel(valor) {
61
+ const fila = [{ valor, profundidade: 0 }];
62
+ let visitados = 0;
63
+ while (fila.length > 0) {
64
+ const atual = fila.shift();
65
+ visitados += 1;
66
+ if (visitados > 20_000 || atual.profundidade > 64)
67
+ return true;
68
+ if (typeof atual.valor === "string" && VALOR_SENSIVEL.test(atual.valor))
69
+ return true;
70
+ if (Array.isArray(atual.valor)) {
71
+ for (const item of atual.valor)
72
+ fila.push({ valor: item, profundidade: atual.profundidade + 1 });
73
+ continue;
74
+ }
75
+ if (!registro(atual.valor))
76
+ continue;
77
+ for (const [chave, item] of Object.entries(atual.valor)) {
78
+ if (CHAVE_SENSIVEL.test(chave) && !(typeof item === "string" && REFERENCIA_OPACA.test(item)))
79
+ return true;
80
+ fila.push({ valor: item, profundidade: atual.profundidade + 1 });
81
+ }
82
+ }
83
+ return false;
84
+ }
85
+ function arraysIguais(a, b) {
86
+ return a.length === b.length && a.every((item, indice) => item === b[indice]);
87
+ }
88
+ function stringsUnicas(valor) {
89
+ return Array.isArray(valor)
90
+ && valor.length > 0
91
+ && valor.every((item) => typeof item === "string" && item.length > 0)
92
+ && new Set(valor).size === valor.length;
93
+ }
94
+ function comandoDaSuperficie(template) {
95
+ const partes = template.trim().split(/\s+/u);
96
+ return partes[0] === "sema" && partes[1] === "interativo" ? partes[2] : undefined;
97
+ }
98
+ function identidade(valor, papel, campo) {
99
+ const direto = valor[`${papel}${campo}`];
100
+ if (direto !== undefined)
101
+ return direto;
102
+ const aninhado = valor[papel];
103
+ if (!registro(aninhado))
104
+ return undefined;
105
+ const candidatos = campo === "Id"
106
+ ? ["id", `${papel}Id`, `${papel}IdDigest`]
107
+ : campo === "Version"
108
+ ? ["version", `${papel}Version`]
109
+ : ["configurationDigest", `${papel}ConfigurationDigest`];
110
+ return candidatos.map((chave) => aninhado[chave]).find((item) => item !== undefined);
111
+ }
112
+ function validarIdentidades(valor, manifesto, issues, prefixo) {
113
+ if (!registro(valor)) {
114
+ issues.push(`${prefixo}_nao_objeto`);
115
+ return;
116
+ }
117
+ adicionar(issues, identidade(valor, "producer", "Id") === manifesto.producerId, `${prefixo}_producer_id_divergente`);
118
+ adicionar(issues, identidade(valor, "producer", "Version") === manifesto.producerVersion, `${prefixo}_producer_version_divergente`);
119
+ adicionar(issues, identidade(valor, "producer", "ConfigurationDigest") === manifesto.producerConfigurationDigest, `${prefixo}_producer_configuration_digest_divergente`);
120
+ adicionar(issues, identidade(valor, "verifier", "Id") === manifesto.verifierId, `${prefixo}_verifier_id_divergente`);
121
+ adicionar(issues, identidade(valor, "verifier", "Version") === manifesto.verifierVersion, `${prefixo}_verifier_version_divergente`);
122
+ adicionar(issues, identidade(valor, "verifier", "ConfigurationDigest") === manifesto.verifierConfigurationDigest, `${prefixo}_verifier_configuration_digest_divergente`);
123
+ }
124
+ function reexecutarValidadorLocal(comando, entradas) {
125
+ switch (comando) {
126
+ case "validar-ir": return validarExperienceIr(entradas[0]);
127
+ case "validar-engine-snapshot": return validarSnapshotEngine(entradas[0]);
128
+ case "validar-asset-provenance": return validarProvenienciaAsset(entradas[0]);
129
+ case "validar-editor-state": return validarEstadoEditor(entradas[0]);
130
+ case "planejar-jobs": return planejarOrquestracaoJobs(entradas[0]);
131
+ case "validar-acceptance": return validarAcceptanceLock(entradas[0]);
132
+ case "validar-multimodal": return validarEvidenciaMultimodal(entradas[0]);
133
+ case "validar-temporal": return validarContratoTemporalInterativo(entradas[0]);
134
+ case "validar-evidencia-temporal": return validarBundleVerificacaoTemporal(entradas[0], entradas[1]);
135
+ case "validar-autonomia": return validarCicloReparoAutonomo(entradas[0]);
136
+ case "validar-playtest-fuzz": return validarPlanoPlaytestFuzz(entradas[0]);
137
+ case "validar-multiplayer": return validarModeloAutoridadeMultiplayer(entradas[0]);
138
+ case "analisar-portabilidade": return analisarPlanoPortabilidadeInterativa(entradas[0]);
139
+ case "validar-workers": return validarPlanoWorkersDistribuidos(entradas[0]);
140
+ default: return undefined;
141
+ }
142
+ }
143
+ function validarVinculosContextuais(valor, manifesto, issues, prefixo) {
144
+ if (!registro(valor))
145
+ return;
146
+ if (valor.systemId !== undefined)
147
+ adicionar(issues, valor.systemId === manifesto.systemId, `${prefixo}_system_id_divergente`);
148
+ if (valor.runId !== undefined)
149
+ adicionar(issues, valor.runId === manifesto.runId, `${prefixo}_run_id_divergente`);
150
+ if (valor.definitionDigest !== undefined)
151
+ adicionar(issues, valor.definitionDigest === manifesto.definitionDigest, `${prefixo}_definition_digest_divergente`);
152
+ if (valor.planDigest !== undefined)
153
+ adicionar(issues, valor.planDigest === manifesto.planDigest, `${prefixo}_plan_digest_divergente`);
154
+ }
155
+ function validarEnvelopeEvidenciaGenerico(valor, manifesto, inputDigests, validationContractDigest, issues) {
156
+ if (!registro(valor)) {
157
+ issues.push("evidencia_generica_nao_objeto");
158
+ return;
159
+ }
160
+ adicionar(issues, Object.keys(valor).every((chave) => GENERIC_EVIDENCE_KEYS.has(chave)), "evidencia_generica_campo_desconhecido");
161
+ adicionar(issues, valor.schemaVersion === "sema.interactive.control-evidence/v1", "evidencia_generica_schema_version_invalida");
162
+ adicionar(issues, idSeguro(valor.evidenceId), "evidencia_generica_id_invalido");
163
+ adicionar(issues, valor.runId === manifesto.runId, "evidencia_generica_run_id_divergente");
164
+ adicionar(issues, valor.systemId === manifesto.systemId, "evidencia_generica_system_id_divergente");
165
+ adicionar(issues, valor.definitionDigest === manifesto.definitionDigest, "evidencia_generica_definition_digest_divergente");
166
+ adicionar(issues, valor.planDigest === manifesto.planDigest, "evidencia_generica_plan_digest_divergente");
167
+ adicionar(issues, valor.validationContractDigest === validationContractDigest, "evidencia_generica_contract_digest_divergente");
168
+ adicionar(issues, Array.isArray(valor.inputDigests) && arraysIguais(valor.inputDigests, inputDigests), "evidencia_generica_input_digests_divergentes");
169
+ }
170
+ function validarEntradaContraShape(entrada, schemaKey, shapes, issues, indice) {
171
+ const shape = shapes[schemaKey];
172
+ if (!shape) {
173
+ issues.push(`input_schema_key_desconhecida:${indice}`);
174
+ return;
175
+ }
176
+ if (!registro(entrada)) {
177
+ issues.push(`input_nao_objeto:${indice}`);
178
+ return;
179
+ }
180
+ adicionar(issues, entrada.schemaVersion === shape.schemaVersion, `input_schema_version_divergente:${indice}`);
181
+ for (const campo of shape.requiredTopLevelFields) {
182
+ adicionar(issues, Object.hasOwn(entrada, campo), `input_campo_obrigatorio_ausente:${indice}:${campo}`);
183
+ }
184
+ }
185
+ function resultadoValido(valor, manifesto, inputDigests, evidenceDigest, validationContractDigest, resultadoRecalculado, issues) {
186
+ if (!registro(valor)) {
187
+ issues.push("resultado_nao_objeto");
188
+ return;
189
+ }
190
+ adicionar(issues, valor.sucesso === true, "resultado_sem_sucesso");
191
+ adicionar(issues, valor.comando === manifesto.validatorCommand, "resultado_comando_divergente");
192
+ adicionar(issues, valor.readOnly === true, "resultado_nao_read_only");
193
+ adicionar(issues, valor.executed === false, "resultado_executed_divergente");
194
+ adicionar(issues, valor.workspaceMutated === false, "resultado_workspace_mutated_divergente");
195
+ adicionar(issues, valor.authoritative === false, "resultado_authoritative_divergente");
196
+ adicionar(issues, valor.externalExecutionRequired === true, "resultado_boundary_externa_ausente");
197
+ adicionar(issues, registro(valor.resultado), "resultado_payload_ausente");
198
+ const payload = registro(valor.resultado) ? valor.resultado : {};
199
+ adicionar(issues, payload.valid === true || payload.valido === true, "resultado_payload_nao_valido");
200
+ if (payload.valid !== undefined)
201
+ adicionar(issues, payload.valid === true, "resultado_valid_false");
202
+ if (payload.valido !== undefined)
203
+ adicionar(issues, payload.valido === true, "resultado_valido_false");
204
+ if (payload.completed !== undefined)
205
+ adicionar(issues, payload.completed === false, "resultado_completed_true");
206
+ if (payload.definitionDigest !== undefined)
207
+ adicionar(issues, payload.definitionDigest === manifesto.definitionDigest, "resultado_definition_digest_divergente");
208
+ if (payload.contractDigest !== undefined)
209
+ adicionar(issues, payload.contractDigest === validationContractDigest, "resultado_contract_digest_divergente");
210
+ if (payload.bundleDigest !== undefined)
211
+ adicionar(issues, payload.bundleDigest === evidenceDigest || inputDigests.includes(payload.bundleDigest), "resultado_bundle_digest_divergente");
212
+ adicionar(issues, resultadoRecalculado !== undefined, "validator_local_nao_suportado");
213
+ if (resultadoRecalculado !== undefined) {
214
+ const digestRecalculado = digestSeguro(resultadoRecalculado, issues, "resultado_recalculado_nao_canonicalizavel");
215
+ const digestPayload = digestSeguro(payload, issues, "resultado_payload_nao_canonicalizavel");
216
+ adicionar(issues, digestRecalculado === digestPayload, "resultado_diverge_do_validator_local");
217
+ }
218
+ validarVinculosContextuais(payload, manifesto, issues, "resultado");
219
+ }
220
+ export function validarControlRunInterativo(manifestoEntrada, artefatos) {
221
+ const issues = [];
222
+ const manifestoValido = registro(manifestoEntrada);
223
+ if (!manifestoValido)
224
+ issues.push("manifesto_invalido");
225
+ const manifesto = (manifestoValido ? manifestoEntrada : {});
226
+ if (manifestoValido) {
227
+ for (const chave of Object.keys(manifestoEntrada)) {
228
+ if (!MANIFEST_KEYS.has(chave))
229
+ issues.push("manifesto_campo_desconhecido");
230
+ }
231
+ }
232
+ adicionar(issues, manifesto.schemaVersion === CONTROL_RUN_SCHEMA_VERSION, "manifesto_schema_version_nao_suportada");
233
+ adicionar(issues, idSeguro(manifesto.runId), "manifesto_run_id_invalido");
234
+ adicionar(issues, idSeguro(manifesto.systemId), "manifesto_system_id_invalido");
235
+ adicionar(issues, idSeguro(manifesto.pipelineId), "manifesto_pipeline_id_invalido");
236
+ adicionar(issues, idSeguro(manifesto.validatorCommand), "manifesto_validator_command_invalido");
237
+ adicionar(issues, idSeguro(manifesto.producerId), "manifesto_producer_id_invalido");
238
+ adicionar(issues, texto(manifesto.producerVersion), "manifesto_producer_version_invalida");
239
+ adicionar(issues, digestSha256Valido(manifesto.producerConfigurationDigest), "manifesto_producer_configuration_digest_invalido");
240
+ adicionar(issues, idSeguro(manifesto.verifierId), "manifesto_verifier_id_invalido");
241
+ adicionar(issues, texto(manifesto.verifierVersion), "manifesto_verifier_version_invalida");
242
+ adicionar(issues, digestSha256Valido(manifesto.verifierConfigurationDigest), "manifesto_verifier_configuration_digest_invalido");
243
+ adicionar(issues, manifesto.producerId !== manifesto.verifierId, "manifesto_produtor_verificador_devem_ser_distintos");
244
+ for (const [campo, digest] of [
245
+ ["definition", manifesto.definitionDigest], ["plan", manifesto.planDigest],
246
+ ["pipeline_contract", manifesto.pipelineContractDigest], ["validation_contract", manifesto.validationContractDigest],
247
+ ["evidence", manifesto.evidenceDigest],
248
+ ["result", manifesto.resultDigest],
249
+ ])
250
+ adicionar(issues, digestSha256Valido(digest), `manifesto_${campo}_digest_invalido`);
251
+ adicionar(issues, stringsUnicas(manifesto.inputSchemaKeys), "manifesto_input_schema_keys_invalidas");
252
+ adicionar(issues, Array.isArray(manifesto.inputDigests) && manifesto.inputDigests.length > 0
253
+ && manifesto.inputDigests.every(digestSha256Valido), "manifesto_input_digests_invalidos");
254
+ adicionar(issues, Array.isArray(manifesto.inputSchemaKeys) && Array.isArray(manifesto.inputDigests)
255
+ && manifesto.inputSchemaKeys.length === manifesto.inputDigests.length, "manifesto_input_bindings_divergentes");
256
+ const definitionDigest = digestSeguro(artefatos.definicao, issues, "definicao_nao_canonicalizavel");
257
+ let planDigest = digestSeguro(artefatos.plano, issues, "plano_nao_canonicalizavel");
258
+ let planoCanonico;
259
+ if (registro(artefatos.definicao)) {
260
+ const definicao = artefatos.definicao;
261
+ const validacao = validarDefinicaoSistemaInterativo(definicao);
262
+ adicionar(issues, validacao.valida, "definicao_invalida");
263
+ adicionar(issues, validacao.definitionDigest === definitionDigest, "definicao_digest_interno_divergente");
264
+ adicionar(issues, definicao.systemId === manifesto.systemId, "definicao_system_id_divergente");
265
+ adicionar(issues, Array.isArray(definicao.pipelines) && definicao.pipelines.includes(manifesto.pipelineId), "definicao_pipeline_ausente");
266
+ if (validacao.valida) {
267
+ const planejamento = planejarSistemaInterativo(definicao);
268
+ adicionar(issues, planejamento.bloqueios.length === 0, "plano_canonico_bloqueado");
269
+ planoCanonico = planejamento.plano;
270
+ }
271
+ }
272
+ else {
273
+ issues.push("definicao_nao_objeto");
274
+ }
275
+ adicionar(issues, definitionDigest === manifesto.definitionDigest, "manifesto_definition_digest_divergente");
276
+ if (registro(artefatos.plano)) {
277
+ const digestDeclarado = artefatos.plano.planDigest;
278
+ const { planDigest: _removido, ...semDigest } = artefatos.plano;
279
+ planDigest = digestSeguro(semDigest, issues, "plano_conteudo_nao_canonicalizavel");
280
+ adicionar(issues, digestDeclarado === planDigest, "plano_digest_proprio_divergente");
281
+ adicionar(issues, artefatos.plano.definitionDigest === manifesto.definitionDigest, "plano_definition_digest_divergente");
282
+ adicionar(issues, artefatos.plano.systemId === manifesto.systemId, "plano_system_id_divergente");
283
+ const pipelines = Array.isArray(artefatos.plano.pipelines) ? artefatos.plano.pipelines : [];
284
+ adicionar(issues, pipelines.some((item) => registro(item) && item.pipelineId === manifesto.pipelineId), "plano_pipeline_ausente");
285
+ }
286
+ else {
287
+ issues.push("plano_nao_objeto");
288
+ }
289
+ adicionar(issues, planDigest === manifesto.planDigest, "manifesto_plan_digest_divergente");
290
+ if (planoCanonico) {
291
+ adicionar(issues, planoCanonico.planDigest === manifesto.planDigest, "plano_recalculado_digest_divergente");
292
+ adicionar(issues, planoCanonico.definitionDigest === manifesto.definitionDigest, "plano_recalculado_definition_digest_divergente");
293
+ }
294
+ const pipeline = obterPipelineSistemaInterativo(manifesto.pipelineId);
295
+ adicionar(issues, pipeline !== undefined, "pipeline_desconhecido");
296
+ const pipelineContractDigest = digestSeguro(pipeline ?? { pipeline: "unknown" }, issues, "pipeline_nao_canonicalizavel");
297
+ adicionar(issues, pipelineContractDigest === manifesto.pipelineContractDigest, "manifesto_pipeline_contract_digest_divergente");
298
+ const validationContractDigest = digestSeguro(artefatos.contrato, issues, "contrato_validacao_nao_canonicalizavel");
299
+ adicionar(issues, validationContractDigest === manifesto.validationContractDigest, "manifesto_validation_contract_digest_divergente");
300
+ const superficie = SUPERFICIES_CLI_PIPELINES_AVANCADOS[manifesto.pipelineId];
301
+ adicionar(issues, superficie !== undefined, "pipeline_sem_superficie_cli_especifica");
302
+ const comandoEsperado = superficie ? comandoDaSuperficie(superficie.command) : undefined;
303
+ adicionar(issues, comandoEsperado === manifesto.validatorCommand, "manifesto_validator_command_divergente");
304
+ const commands = SCHEMA_EXTENSOES_CLI_INTERATIVAS.commands;
305
+ const shapes = SCHEMA_EXTENSOES_CLI_INTERATIVAS.dataSchemaShapes;
306
+ const commandDescriptor = commands[manifesto.validatorCommand];
307
+ adicionar(issues, commandDescriptor !== undefined, "validator_command_sem_schema");
308
+ if (commandDescriptor && Array.isArray(manifesto.inputSchemaKeys)) {
309
+ adicionar(issues, arraysIguais(manifesto.inputSchemaKeys, commandDescriptor.inputSchemaKeys), "manifesto_input_schema_keys_divergentes");
310
+ }
311
+ const entradas = Array.isArray(artefatos.entradas) ? artefatos.entradas : [];
312
+ adicionar(issues, entradas.length > 0, "entradas_ausentes");
313
+ adicionar(issues, entradas.length === (manifesto.inputSchemaKeys?.length ?? -1), "entradas_quantidade_divergente");
314
+ const inputDigests = entradas.map((entrada, indice) => {
315
+ const digest = digestSeguro(entrada, issues, `input_nao_canonicalizavel:${indice}`);
316
+ const schemaKey = manifesto.inputSchemaKeys?.[indice];
317
+ if (schemaKey)
318
+ validarEntradaContraShape(entrada, schemaKey, shapes, issues, indice);
319
+ adicionar(issues, digest === manifesto.inputDigests?.[indice], `input_digest_divergente:${indice}`);
320
+ validarVinculosContextuais(entrada, manifesto, issues, `input:${indice}`);
321
+ return digest;
322
+ });
323
+ const evidenceDigest = digestSeguro(artefatos.evidencia, issues, "evidencia_nao_canonicalizavel");
324
+ adicionar(issues, evidenceDigest === manifesto.evidenceDigest, "manifesto_evidence_digest_divergente");
325
+ validarIdentidades(artefatos.evidencia, manifesto, issues, "evidencia");
326
+ const evidenceInputIndex = EVIDENCE_INPUT_INDEX[manifesto.validatorCommand];
327
+ if (evidenceInputIndex !== undefined) {
328
+ adicionar(issues, evidenceDigest === inputDigests[evidenceInputIndex], "evidencia_nao_corresponde_ao_input_evidencial");
329
+ validarIdentidades(entradas[evidenceInputIndex], manifesto, issues, "input_evidencial");
330
+ }
331
+ else {
332
+ validarEnvelopeEvidenciaGenerico(artefatos.evidencia, manifesto, inputDigests, validationContractDigest, issues);
333
+ }
334
+ if (manifesto.validatorCommand !== "validar-multimodal") {
335
+ adicionar(issues, validationContractDigest === inputDigests[0], "contrato_validacao_nao_corresponde_ao_input");
336
+ }
337
+ if (registro(artefatos.evidencia) && artefatos.evidencia.contractDigest !== undefined) {
338
+ adicionar(issues, artefatos.evidencia.contractDigest === validationContractDigest, "evidencia_contract_digest_divergente");
339
+ }
340
+ validarVinculosContextuais(artefatos.evidencia, manifesto, issues, "evidencia");
341
+ const resultDigest = digestSeguro(artefatos.resultado, issues, "resultado_nao_canonicalizavel");
342
+ adicionar(issues, resultDigest === manifesto.resultDigest, "manifesto_result_digest_divergente");
343
+ let resultadoRecalculado;
344
+ try {
345
+ resultadoRecalculado = reexecutarValidadorLocal(manifesto.validatorCommand, entradas);
346
+ }
347
+ catch {
348
+ issues.push("validator_local_falhou");
349
+ }
350
+ resultadoValido(artefatos.resultado, manifesto, inputDigests, evidenceDigest, validationContractDigest, resultadoRecalculado, issues);
351
+ if (contemMaterialSensivel({ manifesto: manifestoEntrada, artefatos }))
352
+ issues.push("control_run_contem_material_sensivel");
353
+ const bindings = [
354
+ { kind: "DEFINITION", id: manifesto.systemId ?? "invalid", digest: definitionDigest, matched: definitionDigest === manifesto.definitionDigest },
355
+ { kind: "PLAN", id: manifesto.systemId ?? "invalid", digest: planDigest, matched: planDigest === manifesto.planDigest },
356
+ { kind: "PIPELINE_CONTRACT", id: manifesto.pipelineId ?? "invalid", digest: pipelineContractDigest, matched: pipelineContractDigest === manifesto.pipelineContractDigest },
357
+ { kind: "VALIDATION_CONTRACT", id: manifesto.validatorCommand ?? "invalid", digest: validationContractDigest, matched: validationContractDigest === manifesto.validationContractDigest },
358
+ ...inputDigests.map((digest, indice) => ({
359
+ kind: "INPUT", id: manifesto.inputSchemaKeys?.[indice] ?? `input:${indice}`, digest,
360
+ matched: digest === manifesto.inputDigests?.[indice],
361
+ })),
362
+ { kind: "EVIDENCE", id: manifesto.runId ?? "invalid", digest: evidenceDigest, matched: evidenceDigest === manifesto.evidenceDigest },
363
+ { kind: "RESULT", id: manifesto.validatorCommand ?? "invalid", digest: resultDigest, matched: resultDigest === manifesto.resultDigest },
364
+ ];
365
+ const issuesUnicos = [...new Set(issues)].sort();
366
+ const controlRunDigest = digestSeguro({
367
+ manifesto: manifestoEntrada,
368
+ artifacts: { definitionDigest, planDigest, pipelineContractDigest, validationContractDigest, inputDigests, evidenceDigest, resultDigest },
369
+ }, issuesUnicos, "control_run_nao_canonicalizavel");
370
+ const valid = issuesUnicos.length === 0 && bindings.every((binding) => binding.matched);
371
+ return {
372
+ valid,
373
+ controlRunDigest,
374
+ definitionDigest,
375
+ planDigest,
376
+ pipelineContractDigest,
377
+ validationContractDigest,
378
+ inputDigests,
379
+ evidenceDigest,
380
+ resultDigest,
381
+ bindings,
382
+ issues: issuesUnicos,
383
+ completed: false,
384
+ localCoverageComplete: valid,
385
+ awaitingExternalAttestation: true,
386
+ executed: false,
387
+ workspaceMutated: false,
388
+ authoritative: false,
389
+ };
390
+ }
391
+ //# sourceMappingURL=controlRun.js.map
@@ -0,0 +1,5 @@
1
+ import type { BundleEvidenciasSistemaInterativo, DefinicaoSistemaInterativo, EstadoSistemaInterativo, JsonObjetoSistemaInterativo, PlanoSistemaInterativo, ResultadoValidacaoBundleEvidenciasSistemaInterativo } from "./types.js";
2
+ export declare function validarBundleEvidenciasSistemaInterativo(definicao: DefinicaoSistemaInterativo, plano: PlanoSistemaInterativo, bundle: BundleEvidenciasSistemaInterativo): ResultadoValidacaoBundleEvidenciasSistemaInterativo;
3
+ export declare function derivarEstadoSistemaInterativo(definicao: DefinicaoSistemaInterativo, plano: PlanoSistemaInterativo, bundle: BundleEvidenciasSistemaInterativo): EstadoSistemaInterativo;
4
+ export declare function bundleVazioSistemaInterativo(definicao: DefinicaoSistemaInterativo, plano: PlanoSistemaInterativo, runId: string): BundleEvidenciasSistemaInterativo;
5
+ export type DadosEvidenciaSistemaInterativo = JsonObjetoSistemaInterativo;