@corca-org/ceal-host-linux-arm64 1.0.14 → 1.0.15
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.
- package/bin/ceal-host +0 -0
- package/libexec/ceal-host/claude-hook.mjs +42 -23
- package/libexec/ceal-host/claude-invocation-authentication.mjs +39 -25
- package/libexec/ceal-host/claude-producer.mjs +42 -23
- package/libexec/ceal-host/codex-hook.mjs +42 -23
- package/libexec/ceal-host/codex-invocation-authentication.mjs +39 -25
- package/libexec/ceal-host/codex-producer.mjs +42 -23
- package/libexec/ceal-host/control.mjs +44 -25
- package/libexec/ceal-host/relay.mjs +18 -10
- package/package.json +1 -1
- package/share/ceal-host/bundle-manifest.json +12 -12
- package/share/ceal-host/bundle-manifest.sigstore.json +1 -1
|
@@ -2171,7 +2171,6 @@ var client_wire_contract_default = {
|
|
|
2171
2171
|
length: 72,
|
|
2172
2172
|
pattern: "^catalog:[a-f0-9]{64}$"
|
|
2173
2173
|
},
|
|
2174
|
-
max_bytes: 4194304,
|
|
2175
2174
|
envelope_max_bytes: 389
|
|
2176
2175
|
},
|
|
2177
2176
|
command_request: {
|
|
@@ -2258,8 +2257,7 @@ var client_wire_contract_default = {
|
|
|
2258
2257
|
],
|
|
2259
2258
|
exit_code_max: 125,
|
|
2260
2259
|
bare_document_max_bytes: 65536,
|
|
2261
|
-
complete_max_bytes: 66019
|
|
2262
|
-
absolute_transport_max_bytes: 4194304
|
|
2260
|
+
complete_max_bytes: 66019
|
|
2263
2261
|
},
|
|
2264
2262
|
resource_stream: {
|
|
2265
2263
|
path: "/api/ceal/v2/resources",
|
|
@@ -2274,6 +2272,9 @@ var client_wire_contract_default = {
|
|
|
2274
2272
|
"fetch"
|
|
2275
2273
|
],
|
|
2276
2274
|
ref_flag: "--ref"
|
|
2275
|
+
},
|
|
2276
|
+
encoded_json_document: {
|
|
2277
|
+
max_bytes: 4194304
|
|
2277
2278
|
}
|
|
2278
2279
|
};
|
|
2279
2280
|
|
|
@@ -2283,6 +2284,7 @@ var commandResolution = CEAL_CLIENT_WIRE_CONTRACT.command_resolution;
|
|
|
2283
2284
|
var commandResolutionAuthority = commandResolution.authority;
|
|
2284
2285
|
var commandResolutionSemanticOptions = commandResolution.semantic_options;
|
|
2285
2286
|
var CEAL_GATEWAY_COMMAND_RESOLUTION_SCHEMA_VERSION = commandResolution.schema_version;
|
|
2287
|
+
var CEAL_ENCODED_JSON_DOCUMENT_MAX_BYTES = CEAL_CLIENT_WIRE_CONTRACT.encoded_json_document.max_bytes;
|
|
2286
2288
|
var artifact = CEAL_CLIENT_WIRE_CONTRACT.artifact_descriptor;
|
|
2287
2289
|
var request = CEAL_CLIENT_WIRE_CONTRACT.command_request;
|
|
2288
2290
|
var response = CEAL_CLIENT_WIRE_CONTRACT.command_response;
|
|
@@ -2296,7 +2298,7 @@ var CEAL_VERIFIED_ARTIFACT_DIGEST_LENGTH = artifact.digest.length;
|
|
|
2296
2298
|
var CEAL_VERIFIED_ARTIFACT_DIGEST_PATTERN = artifact.digest.pattern;
|
|
2297
2299
|
var CEAL_VERIFIED_ARTIFACT_CATALOG_REVISION_LENGTH = artifact.catalog_revision.length;
|
|
2298
2300
|
var CEAL_VERIFIED_ARTIFACT_CATALOG_REVISION_PATTERN = artifact.catalog_revision.pattern;
|
|
2299
|
-
var CEAL_VERIFIED_ARTIFACT_MAX_BYTES =
|
|
2301
|
+
var CEAL_VERIFIED_ARTIFACT_MAX_BYTES = CEAL_ENCODED_JSON_DOCUMENT_MAX_BYTES;
|
|
2300
2302
|
var CEAL_VERIFIED_ARTIFACT_DESCRIPTOR_MAX_BYTES = artifact.envelope_max_bytes;
|
|
2301
2303
|
var CEAL_COMMAND_REQUEST_SCHEMA_VERSION = request.schema_version;
|
|
2302
2304
|
var CEAL_COMMAND_REQUEST_MAX_BYTES = request.absolute_transport_max_bytes;
|
|
@@ -2310,7 +2312,6 @@ var CEAL_COMMAND_RESPONSE_FOCUSED_PROMPT_CONTINUATION_DOCUMENT_FIELDS = Object.f
|
|
|
2310
2312
|
var CEAL_COMMAND_RESPONSE_DISCOVERY_COMMAND = response.discovery_command;
|
|
2311
2313
|
var CEAL_COMMAND_RESPONSE_DISCOVERY_MANIFEST_SCHEMA_VERSION = response.discovery_manifest_schema_version;
|
|
2312
2314
|
var CEAL_COMMAND_RESPONSE_DISCOVERY_MANIFEST_DOCUMENT_FIELDS = Object.freeze([...response.discovery_manifest_document_fields]);
|
|
2313
|
-
var CEAL_COMMAND_RESPONSE_MAX_BYTES = response.absolute_transport_max_bytes;
|
|
2314
2315
|
|
|
2315
2316
|
// packages/ceal-client-protocol/src/vocabulary.ts
|
|
2316
2317
|
function vocabulary(words) {
|
|
@@ -2601,7 +2602,6 @@ function cut(text) {
|
|
|
2601
2602
|
var CEAL_OPERATION_ACCESS_CLASSES = vocabulary(["read", "write"]);
|
|
2602
2603
|
|
|
2603
2604
|
// packages/ceal-client-protocol/src/domain-vocabulary.ts
|
|
2604
|
-
var CEAL_INTEGRATION_KINDS = vocabulary(["github", "google-workspace", "notion", "slack"]);
|
|
2605
2605
|
var CEAL_CONNECTOR_STATUSES = vocabulary(["active", "disabled", "disconnected"]);
|
|
2606
2606
|
var CEAL_CONNECTOR_CUSTODIES = vocabulary(["organization", "personal"]);
|
|
2607
2607
|
var CEAL_PROVIDER_BOUNDARY_KINDS = vocabulary([
|
|
@@ -2968,7 +2968,7 @@ var NON_REMEDY_NEXT_ACTION_VALUES = [
|
|
|
2968
2968
|
"operator_action",
|
|
2969
2969
|
"recover",
|
|
2970
2970
|
"reconcile",
|
|
2971
|
-
// Reconciliation of one named occurrence, not of the deployment:
|
|
2971
|
+
// Reconciliation of one named occurrence, not of the deployment: an
|
|
2972
2972
|
// occurrence with no admitted input commitment cannot be replayed safely and
|
|
2973
2973
|
// no edit to the call changes that. `reconcile` is the deployment-wide word.
|
|
2974
2974
|
"reconcile_occurrence",
|
|
@@ -3101,7 +3101,7 @@ var CEAL_ACTIVITY_V3_KINDS = vocabulary(["authored", "edited", "messaged", "resp
|
|
|
3101
3101
|
var CEAL_RESOURCE_TIME_BASES = vocabulary(["created", "modified", "viewed"]);
|
|
3102
3102
|
var CEAL_RESOURCE_SEARCH_ORDERS = vocabulary(["relevance", "modified", "viewed", "created"]);
|
|
3103
3103
|
var CEAL_RESOURCE_SEARCH_DIRECTIONS = vocabulary(["ascending", "descending"]);
|
|
3104
|
-
var CEAL_RESOURCE_SEARCH_FILTERS = vocabulary(["query", "modified_since", "since", "until", "authored_by_me", "include_replies", "kinds", "container_ref", "container_refs", "addressed_to_me", "unread"]);
|
|
3104
|
+
var CEAL_RESOURCE_SEARCH_FILTERS = vocabulary(["query", "modified_since", "since", "until", "authored_by_me", "include_replies", "kinds", "container_ref", "container_refs", "container_names", "addressed_to_me", "unread"]);
|
|
3105
3105
|
var CEAL_ARTIFACT_STAGE_TERMINALS = vocabulary(["chunk_accepted", "artifact_ready", "idempotency_replayed"]);
|
|
3106
3106
|
var CEAL_READ_ITEM_KINDS = vocabulary(["conversation", "identity", "usergroup", "message", "file", "document"]);
|
|
3107
3107
|
var CEAL_LEASED_MESSAGE_SEARCH_COMPLETENESS = vocabulary(["complete", "continuation_available", "truncated"]);
|
|
@@ -3155,6 +3155,7 @@ var RESOURCE_ROW_KEY_RULES = Object.freeze({
|
|
|
3155
3155
|
title: { required: true, timestamp: false },
|
|
3156
3156
|
container_label: { required: true, timestamp: false },
|
|
3157
3157
|
container_ref: { required: false, timestamp: false },
|
|
3158
|
+
source_url: { required: false, timestamp: false },
|
|
3158
3159
|
source: { required: true, timestamp: false },
|
|
3159
3160
|
owner: { required: false, timestamp: false },
|
|
3160
3161
|
counterparts: { required: false, timestamp: false },
|
|
@@ -3526,7 +3527,17 @@ var CEAL_REQUEST_GRAPH_NODE_PREPARE_READINESS_JSON_SCHEMA = {
|
|
|
3526
3527
|
};
|
|
3527
3528
|
|
|
3528
3529
|
// packages/ceal-client-protocol/src/host-invocation-authentication.ts
|
|
3530
|
+
var CEAL_HOST_INVOCATION_AUTHENTICATION_RESULT_SCHEMA = "ceal.host_invocation_authentication_result.v1";
|
|
3529
3531
|
var CEAL_HOST_INGRESS_PATH = "/api/ceal/v2/host-ingress";
|
|
3532
|
+
var CEAL_HOST_NONCE_ENCODED_CHARACTERS = 43;
|
|
3533
|
+
var CEAL_HOST_CLIENT_NONCE_PATTERN = new RegExp(`^[A-Za-z0-9_-]{${CEAL_HOST_NONCE_ENCODED_CHARACTERS}}$`, "u");
|
|
3534
|
+
var CEAL_HOST_CONTEXT_TOKEN_PATTERN = new RegExp(`^ceal_context_[A-Za-z0-9_-]{${CEAL_HOST_NONCE_ENCODED_CHARACTERS}}$`, "u");
|
|
3535
|
+
var CEAL_HOST_INVOCATION_AUTHENTICATION_RESULT_MAX_BYTES = new TextEncoder().encode(`${JSON.stringify({
|
|
3536
|
+
schema_version: CEAL_HOST_INVOCATION_AUTHENTICATION_RESULT_SCHEMA,
|
|
3537
|
+
context_token: `ceal_context_${"A".repeat(CEAL_HOST_NONCE_ENCODED_CHARACTERS)}`,
|
|
3538
|
+
expires_at: (/* @__PURE__ */ new Date("+010000-01-01T00:00:00.000Z")).toISOString()
|
|
3539
|
+
})}
|
|
3540
|
+
`).byteLength;
|
|
3530
3541
|
|
|
3531
3542
|
// packages/ceal-client-protocol/src/client-result-materialization.ts
|
|
3532
3543
|
var CEAL_MODEL_VISIBLE_COMMAND_OUTPUT_MAX_BYTES = 32 * 1024;
|
|
@@ -4022,7 +4033,6 @@ function ownerPrivate2(stats) {
|
|
|
4022
4033
|
import { posix as posix4, win32 as win324 } from "node:path";
|
|
4023
4034
|
import { constants } from "node:fs";
|
|
4024
4035
|
import { lstat as lstat4, open as open3 } from "node:fs/promises";
|
|
4025
|
-
var MAX_CONFIG_BYTES = 32 * 1024;
|
|
4026
4036
|
var SAFE_REF3 = /^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$/u;
|
|
4027
4037
|
var HOST_PRODUCER_CONFIG_FLAG = "--ceal-host-config";
|
|
4028
4038
|
var HostProducerServiceError = class extends Error {
|
|
@@ -4033,7 +4043,8 @@ var HostProducerServiceError = class extends Error {
|
|
|
4033
4043
|
this.code = code3;
|
|
4034
4044
|
}
|
|
4035
4045
|
};
|
|
4036
|
-
var HOST_PRODUCER_CONFIG_KEYS = ["schema_version", "host_source_ref", "producer_installation_ref", "producer_epoch", "outbox_dir", "relay_endpoint"
|
|
4046
|
+
var HOST_PRODUCER_CONFIG_KEYS = ["schema_version", "host_source_ref", "producer_installation_ref", "producer_epoch", "outbox_dir", "relay_endpoint"];
|
|
4047
|
+
var HOST_PRODUCER_TIMING_DEFAULTS = Object.freeze({ reconcile_interval_ms: 250, retry_backoff_ms: 1e3, ipc_timeout_ms: 5e3 });
|
|
4037
4048
|
function hostProducerExtraPath(extras, key) {
|
|
4038
4049
|
const value = extras[key];
|
|
4039
4050
|
if (value === void 0) throw hostProducerError("invalid_config");
|
|
@@ -4066,15 +4077,17 @@ async function readProducerConfigText(configPath, platform, error) {
|
|
|
4066
4077
|
const noFollow = typeof constants.O_NOFOLLOW === "number" ? constants.O_NOFOLLOW : 0;
|
|
4067
4078
|
const handle = await openConfigFile(configPath, constants.O_RDONLY | noFollow, error);
|
|
4068
4079
|
try {
|
|
4069
|
-
|
|
4070
|
-
|
|
4080
|
+
const opened = await handle.stat();
|
|
4081
|
+
validateConfigFile(opened, platform, error);
|
|
4082
|
+
validateOpenedFile(opened, pathStat, platform, error);
|
|
4083
|
+
return await readBoundedConfig(handle, opened.size, error);
|
|
4071
4084
|
} finally {
|
|
4072
4085
|
await handle.close();
|
|
4073
4086
|
}
|
|
4074
4087
|
}
|
|
4075
4088
|
function decodeProducerConfigCore(text, options) {
|
|
4076
4089
|
const value = parseCanonicalJson(text, options.error);
|
|
4077
|
-
if (!isRecord(value) || !
|
|
4090
|
+
if (!isRecord(value) || !hasConfigKeys(value, options.keys) || value.schema_version !== options.schema) throw options.error("invalid_config");
|
|
4078
4091
|
const hostSourceRef = typeof value.host_source_ref === "string" ? value.host_source_ref : "";
|
|
4079
4092
|
const installationRef = typeof value.producer_installation_ref === "string" ? value.producer_installation_ref : "";
|
|
4080
4093
|
const producerEpoch = validateIdentity(hostSourceRef, installationRef, value.producer_epoch, options.error);
|
|
@@ -4085,7 +4098,7 @@ function decodeProducerConfigCore(text, options) {
|
|
|
4085
4098
|
assertProducerAbsolutePath(value[key], options.platform, "runtime", options.error);
|
|
4086
4099
|
extraPaths[key] = value[key];
|
|
4087
4100
|
}
|
|
4088
|
-
const intervals = validateIntervals(value.reconcile_interval_ms, value.retry_backoff_ms, value.ipc_timeout_ms, options.error);
|
|
4101
|
+
const intervals = validateIntervals(value.reconcile_interval_ms === void 0 ? HOST_PRODUCER_TIMING_DEFAULTS.reconcile_interval_ms : value.reconcile_interval_ms, value.retry_backoff_ms === void 0 ? HOST_PRODUCER_TIMING_DEFAULTS.retry_backoff_ms : value.retry_backoff_ms, value.ipc_timeout_ms === void 0 ? HOST_PRODUCER_TIMING_DEFAULTS.ipc_timeout_ms : value.ipc_timeout_ms, options.error);
|
|
4089
4102
|
return {
|
|
4090
4103
|
extra_paths: Object.freeze(extraPaths),
|
|
4091
4104
|
host_source_ref: hostSourceRef,
|
|
@@ -4114,7 +4127,7 @@ async function configPathStat(configPath, error) {
|
|
|
4114
4127
|
}
|
|
4115
4128
|
function validateConfigFile(value, platform, error) {
|
|
4116
4129
|
if (!value.isFile() || value.isSymbolicLink()) throw error("invalid_config", refusalFacts([{ name: "config_is_file", value: value.isFile(), expected: "true" }, { name: "config_is_symlink", value: value.isSymbolicLink(), expected: "false" }]));
|
|
4117
|
-
if (value.size <= 0 || value.size >
|
|
4130
|
+
if (value.size <= 0 || value.size > CEAL_ENCODED_JSON_DOCUMENT_MAX_BYTES) throw error("invalid_config", refusalFact("config_bytes", value.size, `between 1 and ${CEAL_ENCODED_JSON_DOCUMENT_MAX_BYTES}`));
|
|
4118
4131
|
if (platform !== "win32" && (value.uid !== process.getuid?.() || (value.mode & 63) !== 0)) throw error("config_not_private", refusalFacts([{ name: "platform", value: platform, expected: "win32 or owner-private" }, { name: "config_uid", value: value.uid, expected: "the current user" }, { name: "config_mode", value: value.mode, expected: "owner-private" }]));
|
|
4119
4132
|
}
|
|
4120
4133
|
async function openConfigFile(configPath, flags, error) {
|
|
@@ -4128,12 +4141,17 @@ function validateOpenedFile(opened, pathStat, platform, error) {
|
|
|
4128
4141
|
if (!opened.isFile()) throw error("config_unavailable", refusalFacts([{ name: "opened_is_file", value: opened.isFile(), expected: "true" }, { name: "opened_mode", value: opened.mode.toString(8), expected: "a regular file mode" }]));
|
|
4129
4142
|
if (platform !== "win32" && (opened.dev !== pathStat.dev || opened.ino !== pathStat.ino)) throw error("config_unavailable", refusalFacts([{ name: "platform", value: platform, expected: "win32, or the same file the path named" }, { name: "opened_device", value: opened.dev, expected: String(pathStat.dev) }, { name: "opened_inode", value: opened.ino, expected: String(pathStat.ino) }]));
|
|
4130
4143
|
}
|
|
4131
|
-
async function readBoundedConfig(handle, error) {
|
|
4132
|
-
const buffer = Buffer.allocUnsafe(
|
|
4133
|
-
|
|
4134
|
-
|
|
4144
|
+
async function readBoundedConfig(handle, expectedBytes, error) {
|
|
4145
|
+
const buffer = Buffer.allocUnsafe(expectedBytes + 1);
|
|
4146
|
+
let offset = 0;
|
|
4147
|
+
while (offset < buffer.byteLength) {
|
|
4148
|
+
const { bytesRead } = await handle.read(buffer, offset, buffer.byteLength - offset, offset);
|
|
4149
|
+
if (bytesRead === 0) break;
|
|
4150
|
+
offset += bytesRead;
|
|
4151
|
+
}
|
|
4152
|
+
if (offset !== expectedBytes) throw error("invalid_config", refusalFact("bytes_read", offset, `the opened file's ${expectedBytes} bytes without growth or truncation`));
|
|
4135
4153
|
try {
|
|
4136
|
-
return new TextDecoder("utf-8", { fatal: true }).decode(buffer.subarray(0,
|
|
4154
|
+
return new TextDecoder("utf-8", { fatal: true }).decode(buffer.subarray(0, offset));
|
|
4137
4155
|
} catch {
|
|
4138
4156
|
throw error("invalid_config");
|
|
4139
4157
|
}
|
|
@@ -4161,9 +4179,8 @@ function validateIntervals(reconcile, retry, timeout, error) {
|
|
|
4161
4179
|
if (!boundedMilliseconds(reconcile) || !boundedMilliseconds(retry) || !boundedMilliseconds(timeout)) throw error("invalid_config");
|
|
4162
4180
|
return [reconcile, retry, timeout];
|
|
4163
4181
|
}
|
|
4164
|
-
function
|
|
4165
|
-
|
|
4166
|
-
return observed.length === keys.length && keys.every((key) => Object.hasOwn(value, key));
|
|
4182
|
+
function hasConfigKeys(value, required) {
|
|
4183
|
+
return required.every((key) => Object.hasOwn(value, key)) && Object.keys(value).every((key) => required.includes(key) || Object.hasOwn(HOST_PRODUCER_TIMING_DEFAULTS, key));
|
|
4167
4184
|
}
|
|
4168
4185
|
function isRecord(value) {
|
|
4169
4186
|
return value !== null && typeof value === "object" && !Array.isArray(value);
|
|
@@ -7712,6 +7729,8 @@ function configurationError(message) {
|
|
|
7712
7729
|
}
|
|
7713
7730
|
|
|
7714
7731
|
// host/lifecycle/src/host-bundle-manifest.ts
|
|
7732
|
+
var HOST_BUNDLE_MAX_SELECTED_BYTES = 256 * 1024 * 1024;
|
|
7733
|
+
var HOST_BUNDLE_MAX_SIGSTORE_BYTES = 16 * 1024 * 1024;
|
|
7715
7734
|
var HOST_BUNDLE_TARGETS = Object.freeze(["linux-x64", "linux-arm64", "darwin-arm64", "windows-x64"]);
|
|
7716
7735
|
var HOST_BUNDLE_COMPONENTS = Object.freeze(["lifecycle", "relay", "codex", "claude"]);
|
|
7717
7736
|
var HOST_BUNDLE_PRODUCERS = Object.freeze(["codex", "claude"]);
|
|
@@ -7779,7 +7798,7 @@ function resolveInstalledHostRuntimePaths(prefix, platform = process.platform) {
|
|
|
7779
7798
|
};
|
|
7780
7799
|
}
|
|
7781
7800
|
function parseHostRuntimeControlRequest(value) {
|
|
7782
|
-
if (!isCealJsonRecord(value) || !
|
|
7801
|
+
if (!isCealJsonRecord(value) || !hasExactKeys2(value, REQUEST_REQUIRED_KEYS, ["component"])) throw invalid2("invalid_request_fields");
|
|
7783
7802
|
if (value.schema_version !== HOST_RUNTIME_CONTROL_REQUEST_SCHEMA) throw invalid2("invalid_request_schema", [`expected:${HOST_RUNTIME_CONTROL_REQUEST_SCHEMA}`]);
|
|
7784
7803
|
if (!isOperation2(value.operation)) throw invalid2("invalid_request_schema");
|
|
7785
7804
|
assertPrefix(value.prefix);
|
|
@@ -7936,7 +7955,7 @@ function sameSelection(left, right) {
|
|
|
7936
7955
|
function assertPrefix(value) {
|
|
7937
7956
|
if (!isAbsoluteNormalizedNonRootPath(value) || /[\r\n]/u.test(value)) throw invalid2("invalid_prefix");
|
|
7938
7957
|
}
|
|
7939
|
-
function
|
|
7958
|
+
function hasExactKeys2(value, required, optional) {
|
|
7940
7959
|
const allowed = /* @__PURE__ */ new Set([...required, ...optional]);
|
|
7941
7960
|
const keys = Object.keys(value);
|
|
7942
7961
|
return required.every((key) => Object.hasOwn(value, key)) && keys.every((key) => allowed.has(key));
|
|
@@ -54,7 +54,6 @@ var client_wire_contract_default = {
|
|
|
54
54
|
length: 72,
|
|
55
55
|
pattern: "^catalog:[a-f0-9]{64}$"
|
|
56
56
|
},
|
|
57
|
-
max_bytes: 4194304,
|
|
58
57
|
envelope_max_bytes: 389
|
|
59
58
|
},
|
|
60
59
|
command_request: {
|
|
@@ -141,8 +140,7 @@ var client_wire_contract_default = {
|
|
|
141
140
|
],
|
|
142
141
|
exit_code_max: 125,
|
|
143
142
|
bare_document_max_bytes: 65536,
|
|
144
|
-
complete_max_bytes: 66019
|
|
145
|
-
absolute_transport_max_bytes: 4194304
|
|
143
|
+
complete_max_bytes: 66019
|
|
146
144
|
},
|
|
147
145
|
resource_stream: {
|
|
148
146
|
path: "/api/ceal/v2/resources",
|
|
@@ -157,6 +155,9 @@ var client_wire_contract_default = {
|
|
|
157
155
|
"fetch"
|
|
158
156
|
],
|
|
159
157
|
ref_flag: "--ref"
|
|
158
|
+
},
|
|
159
|
+
encoded_json_document: {
|
|
160
|
+
max_bytes: 4194304
|
|
160
161
|
}
|
|
161
162
|
};
|
|
162
163
|
|
|
@@ -166,6 +167,7 @@ var commandResolution = CEAL_CLIENT_WIRE_CONTRACT.command_resolution;
|
|
|
166
167
|
var commandResolutionAuthority = commandResolution.authority;
|
|
167
168
|
var commandResolutionSemanticOptions = commandResolution.semantic_options;
|
|
168
169
|
var CEAL_GATEWAY_COMMAND_RESOLUTION_SCHEMA_VERSION = commandResolution.schema_version;
|
|
170
|
+
var CEAL_ENCODED_JSON_DOCUMENT_MAX_BYTES = CEAL_CLIENT_WIRE_CONTRACT.encoded_json_document.max_bytes;
|
|
169
171
|
var artifact = CEAL_CLIENT_WIRE_CONTRACT.artifact_descriptor;
|
|
170
172
|
var request = CEAL_CLIENT_WIRE_CONTRACT.command_request;
|
|
171
173
|
var response = CEAL_CLIENT_WIRE_CONTRACT.command_response;
|
|
@@ -179,7 +181,7 @@ var CEAL_VERIFIED_ARTIFACT_DIGEST_LENGTH = artifact.digest.length;
|
|
|
179
181
|
var CEAL_VERIFIED_ARTIFACT_DIGEST_PATTERN = artifact.digest.pattern;
|
|
180
182
|
var CEAL_VERIFIED_ARTIFACT_CATALOG_REVISION_LENGTH = artifact.catalog_revision.length;
|
|
181
183
|
var CEAL_VERIFIED_ARTIFACT_CATALOG_REVISION_PATTERN = artifact.catalog_revision.pattern;
|
|
182
|
-
var CEAL_VERIFIED_ARTIFACT_MAX_BYTES =
|
|
184
|
+
var CEAL_VERIFIED_ARTIFACT_MAX_BYTES = CEAL_ENCODED_JSON_DOCUMENT_MAX_BYTES;
|
|
183
185
|
var CEAL_VERIFIED_ARTIFACT_DESCRIPTOR_MAX_BYTES = artifact.envelope_max_bytes;
|
|
184
186
|
var CEAL_COMMAND_REQUEST_SCHEMA_VERSION = request.schema_version;
|
|
185
187
|
var CEAL_COMMAND_REQUEST_MAX_BYTES = request.absolute_transport_max_bytes;
|
|
@@ -193,7 +195,6 @@ var CEAL_COMMAND_RESPONSE_FOCUSED_PROMPT_CONTINUATION_DOCUMENT_FIELDS = Object.f
|
|
|
193
195
|
var CEAL_COMMAND_RESPONSE_DISCOVERY_COMMAND = response.discovery_command;
|
|
194
196
|
var CEAL_COMMAND_RESPONSE_DISCOVERY_MANIFEST_SCHEMA_VERSION = response.discovery_manifest_schema_version;
|
|
195
197
|
var CEAL_COMMAND_RESPONSE_DISCOVERY_MANIFEST_DOCUMENT_FIELDS = Object.freeze([...response.discovery_manifest_document_fields]);
|
|
196
|
-
var CEAL_COMMAND_RESPONSE_MAX_BYTES = response.absolute_transport_max_bytes;
|
|
197
198
|
|
|
198
199
|
// packages/ceal-client-protocol/src/vocabulary.ts
|
|
199
200
|
function vocabulary(words) {
|
|
@@ -484,7 +485,6 @@ function cut(text) {
|
|
|
484
485
|
var CEAL_OPERATION_ACCESS_CLASSES = vocabulary(["read", "write"]);
|
|
485
486
|
|
|
486
487
|
// packages/ceal-client-protocol/src/domain-vocabulary.ts
|
|
487
|
-
var CEAL_INTEGRATION_KINDS = vocabulary(["github", "google-workspace", "notion", "slack"]);
|
|
488
488
|
var CEAL_CONNECTOR_STATUSES = vocabulary(["active", "disabled", "disconnected"]);
|
|
489
489
|
var CEAL_CONNECTOR_CUSTODIES = vocabulary(["organization", "personal"]);
|
|
490
490
|
var CEAL_PROVIDER_BOUNDARY_KINDS = vocabulary([
|
|
@@ -851,7 +851,7 @@ var NON_REMEDY_NEXT_ACTION_VALUES = [
|
|
|
851
851
|
"operator_action",
|
|
852
852
|
"recover",
|
|
853
853
|
"reconcile",
|
|
854
|
-
// Reconciliation of one named occurrence, not of the deployment:
|
|
854
|
+
// Reconciliation of one named occurrence, not of the deployment: an
|
|
855
855
|
// occurrence with no admitted input commitment cannot be replayed safely and
|
|
856
856
|
// no edit to the call changes that. `reconcile` is the deployment-wide word.
|
|
857
857
|
"reconcile_occurrence",
|
|
@@ -981,7 +981,7 @@ var CEAL_ACTIVITY_V3_KINDS = vocabulary(["authored", "edited", "messaged", "resp
|
|
|
981
981
|
var CEAL_RESOURCE_TIME_BASES = vocabulary(["created", "modified", "viewed"]);
|
|
982
982
|
var CEAL_RESOURCE_SEARCH_ORDERS = vocabulary(["relevance", "modified", "viewed", "created"]);
|
|
983
983
|
var CEAL_RESOURCE_SEARCH_DIRECTIONS = vocabulary(["ascending", "descending"]);
|
|
984
|
-
var CEAL_RESOURCE_SEARCH_FILTERS = vocabulary(["query", "modified_since", "since", "until", "authored_by_me", "include_replies", "kinds", "container_ref", "container_refs", "addressed_to_me", "unread"]);
|
|
984
|
+
var CEAL_RESOURCE_SEARCH_FILTERS = vocabulary(["query", "modified_since", "since", "until", "authored_by_me", "include_replies", "kinds", "container_ref", "container_refs", "container_names", "addressed_to_me", "unread"]);
|
|
985
985
|
var CEAL_ARTIFACT_STAGE_TERMINALS = vocabulary(["chunk_accepted", "artifact_ready", "idempotency_replayed"]);
|
|
986
986
|
var CEAL_READ_ITEM_KINDS = vocabulary(["conversation", "identity", "usergroup", "message", "file", "document"]);
|
|
987
987
|
var CEAL_LEASED_MESSAGE_SEARCH_COMPLETENESS = vocabulary(["complete", "continuation_available", "truncated"]);
|
|
@@ -1035,6 +1035,7 @@ var RESOURCE_ROW_KEY_RULES = Object.freeze({
|
|
|
1035
1035
|
title: { required: true, timestamp: false },
|
|
1036
1036
|
container_label: { required: true, timestamp: false },
|
|
1037
1037
|
container_ref: { required: false, timestamp: false },
|
|
1038
|
+
source_url: { required: false, timestamp: false },
|
|
1038
1039
|
source: { required: true, timestamp: false },
|
|
1039
1040
|
owner: { required: false, timestamp: false },
|
|
1040
1041
|
counterparts: { required: false, timestamp: false },
|
|
@@ -1402,8 +1403,15 @@ var CEAL_REQUEST_GRAPH_NODE_PREPARE_READINESS_JSON_SCHEMA = {
|
|
|
1402
1403
|
var CEAL_HOST_INVOCATION_AUTHENTICATION_RESULT_SCHEMA = "ceal.host_invocation_authentication_result.v1";
|
|
1403
1404
|
var CEAL_HOST_INVOCATION_CONTEXT_PATH = "/api/ceal/v2/host-invocation-context";
|
|
1404
1405
|
var CEAL_HOST_INGRESS_PATH = "/api/ceal/v2/host-ingress";
|
|
1405
|
-
var
|
|
1406
|
-
var
|
|
1406
|
+
var CEAL_HOST_NONCE_ENCODED_CHARACTERS = 43;
|
|
1407
|
+
var CEAL_HOST_CLIENT_NONCE_PATTERN = new RegExp(`^[A-Za-z0-9_-]{${CEAL_HOST_NONCE_ENCODED_CHARACTERS}}$`, "u");
|
|
1408
|
+
var CEAL_HOST_CONTEXT_TOKEN_PATTERN = new RegExp(`^ceal_context_[A-Za-z0-9_-]{${CEAL_HOST_NONCE_ENCODED_CHARACTERS}}$`, "u");
|
|
1409
|
+
var CEAL_HOST_INVOCATION_AUTHENTICATION_RESULT_MAX_BYTES = new TextEncoder().encode(`${JSON.stringify({
|
|
1410
|
+
schema_version: CEAL_HOST_INVOCATION_AUTHENTICATION_RESULT_SCHEMA,
|
|
1411
|
+
context_token: `ceal_context_${"A".repeat(CEAL_HOST_NONCE_ENCODED_CHARACTERS)}`,
|
|
1412
|
+
expires_at: (/* @__PURE__ */ new Date("+010000-01-01T00:00:00.000Z")).toISOString()
|
|
1413
|
+
})}
|
|
1414
|
+
`).byteLength;
|
|
1407
1415
|
function decodeCealHostInvocationAuthenticationResult(value, now = /* @__PURE__ */ new Date()) {
|
|
1408
1416
|
if (!isCealJsonRecord(value) || !exactKeys(value, ["schema_version", "context_token", "expires_at"]) || value.schema_version !== CEAL_HOST_INVOCATION_AUTHENTICATION_RESULT_SCHEMA || typeof value.context_token !== "string" || !CEAL_HOST_CONTEXT_TOKEN_PATTERN.test(value.context_token) || typeof value.expires_at !== "string" || !validFutureTimestamp(value.expires_at, now)) {
|
|
1409
1417
|
throw new TypeError("The Host invocation authentication result is invalid.");
|
package/package.json
CHANGED
|
@@ -3,12 +3,12 @@
|
|
|
3
3
|
"product": "ceal-host",
|
|
4
4
|
"version_source": {
|
|
5
5
|
"product": "ceal-host",
|
|
6
|
-
"version": "1.0.
|
|
6
|
+
"version": "1.0.15"
|
|
7
7
|
},
|
|
8
8
|
"source": {
|
|
9
9
|
"repository": "corca-ai/ceal",
|
|
10
|
-
"commit": "
|
|
11
|
-
"tree": "
|
|
10
|
+
"commit": "0c54b8b955cfbb75c074f69787e799e0668da6c2",
|
|
11
|
+
"tree": "491b91d6d97c42a91f4d0c3618322110428bad07"
|
|
12
12
|
},
|
|
13
13
|
"target": "linux-arm64",
|
|
14
14
|
"required_features": [],
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
],
|
|
20
20
|
"executable": true,
|
|
21
21
|
"path": "bin/ceal-host",
|
|
22
|
-
"sha256": "
|
|
22
|
+
"sha256": "029369971771c8c8f0da91ef00b12a95df0057070ac7d9eace0079e6fc74c898"
|
|
23
23
|
},
|
|
24
24
|
{
|
|
25
25
|
"owners": [
|
|
@@ -27,7 +27,7 @@
|
|
|
27
27
|
],
|
|
28
28
|
"executable": false,
|
|
29
29
|
"path": "libexec/ceal-host/claude-hook.mjs",
|
|
30
|
-
"sha256": "
|
|
30
|
+
"sha256": "148af7c97276a026c852ef05dc5d855852a69fae969703a04aaed4680c031ba8"
|
|
31
31
|
},
|
|
32
32
|
{
|
|
33
33
|
"owners": [
|
|
@@ -35,7 +35,7 @@
|
|
|
35
35
|
],
|
|
36
36
|
"executable": false,
|
|
37
37
|
"path": "libexec/ceal-host/claude-invocation-authentication.mjs",
|
|
38
|
-
"sha256": "
|
|
38
|
+
"sha256": "59f233dca016bd9dd02af0c8ed9eab47cfba988ec7c9ec71e74f4468fe584ec0"
|
|
39
39
|
},
|
|
40
40
|
{
|
|
41
41
|
"owners": [
|
|
@@ -43,7 +43,7 @@
|
|
|
43
43
|
],
|
|
44
44
|
"executable": false,
|
|
45
45
|
"path": "libexec/ceal-host/claude-producer.mjs",
|
|
46
|
-
"sha256": "
|
|
46
|
+
"sha256": "e2c142a1e713d84ed45fe869c9d457aa345901543c5d0d2918c5e0949f47c566"
|
|
47
47
|
},
|
|
48
48
|
{
|
|
49
49
|
"owners": [
|
|
@@ -51,7 +51,7 @@
|
|
|
51
51
|
],
|
|
52
52
|
"executable": false,
|
|
53
53
|
"path": "libexec/ceal-host/codex-hook.mjs",
|
|
54
|
-
"sha256": "
|
|
54
|
+
"sha256": "efcae19be26da25815a8cfdf864944c9f7c3fad12cfef7270cd4401fa2b03775"
|
|
55
55
|
},
|
|
56
56
|
{
|
|
57
57
|
"owners": [
|
|
@@ -59,7 +59,7 @@
|
|
|
59
59
|
],
|
|
60
60
|
"executable": false,
|
|
61
61
|
"path": "libexec/ceal-host/codex-invocation-authentication.mjs",
|
|
62
|
-
"sha256": "
|
|
62
|
+
"sha256": "5548db74d1a7c4300f4b8bac1c833730139ce80fd93de2bda996820f9f6937fe"
|
|
63
63
|
},
|
|
64
64
|
{
|
|
65
65
|
"owners": [
|
|
@@ -67,7 +67,7 @@
|
|
|
67
67
|
],
|
|
68
68
|
"executable": false,
|
|
69
69
|
"path": "libexec/ceal-host/codex-producer.mjs",
|
|
70
|
-
"sha256": "
|
|
70
|
+
"sha256": "829a02387d7062a329010ab17ba7a6c292efcef482730d2a089de0ce0a2c2a7f"
|
|
71
71
|
},
|
|
72
72
|
{
|
|
73
73
|
"owners": [
|
|
@@ -75,7 +75,7 @@
|
|
|
75
75
|
],
|
|
76
76
|
"executable": false,
|
|
77
77
|
"path": "libexec/ceal-host/control.mjs",
|
|
78
|
-
"sha256": "
|
|
78
|
+
"sha256": "86d2db2ec3ec0deb7f8466fbfbc37bc5f0c8191bbafaf1993698811030646f20"
|
|
79
79
|
},
|
|
80
80
|
{
|
|
81
81
|
"owners": [
|
|
@@ -91,7 +91,7 @@
|
|
|
91
91
|
],
|
|
92
92
|
"executable": false,
|
|
93
93
|
"path": "libexec/ceal-host/relay.mjs",
|
|
94
|
-
"sha256": "
|
|
94
|
+
"sha256": "27c40cc04f720c038d013a15b2afb57dee78f85a307b9a7818e94e3e880d1aa3"
|
|
95
95
|
}
|
|
96
96
|
]
|
|
97
97
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"mediaType":"application/vnd.dev.sigstore.bundle.v0.3+json","verificationMaterial":{"certificate":{"rawBytes":"
|
|
1
|
+
{"mediaType":"application/vnd.dev.sigstore.bundle.v0.3+json","verificationMaterial":{"certificate":{"rawBytes":"MIIHDTCCBpOgAwIBAgIUQuL0lXeTwOD6PbvIta/jRCXhZtEwCgYIKoZIzj0EAwMwNzEVMBMGA1UEChMMc2lnc3RvcmUuZGV2MR4wHAYDVQQDExVzaWdzdG9yZS1pbnRlcm1lZGlhdGUwHhcNMjYwOTMwMDQzMjIwWhcNMjYwOTMwMDQ0MjIwWjAAMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEgWafeTGML1k/cvkDu9INDWv651+1cEaci4O6LSjfy/9sGd5QtK8l3qqE21rLQpdF51t4dc8gXdtdpxOesBpGJ6OCBbIwggWuMA4GA1UdDwEB/wQEAwIHgDATBgNVHSUEDDAKBggrBgEFBQcDAzAdBgNVHQ4EFgQUZSU7WB35xjHJbSoc8ysxhYKUa54wHwYDVR0jBBgwFoAU39Ppz1YkEZb5qNjpKFWixi4YZD8wZgYDVR0RAQH/BFwwWoZYaHR0cHM6Ly9naXRodWIuY29tL2NvcmNhLWFpL2NlYWwvLmdpdGh1Yi93b3JrZmxvd3MvcmVsZWFzZS1jYW5kaWRhdGUueW1sQHJlZnMvaGVhZHMvbWFpbjA5BgorBgEEAYO/MAEBBCtodHRwczovL3Rva2VuLmFjdGlvbnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tMB8GCisGAQQBg78wAQIEEXdvcmtmbG93X2Rpc3BhdGNoMDYGCisGAQQBg78wAQMEKDBjNTRiOGI5NTVjZmJiNzVjMDc0ZjY5Nzg3ZTc5OWUwNjY4ZGE2YzIwJAYKKwYBBAGDvzABBAQWQ2VhbCByZWxlYXNlIGNhbmRpZGF0ZTAbBgorBgEEAYO/MAEFBA1jb3JjYS1haS9jZWFsMB0GCisGAQQBg78wAQYED3JlZnMvaGVhZHMvbWFpbjA7BgorBgEEAYO/MAEIBC0MK2h0dHBzOi8vdG9rZW4uYWN0aW9ucy5naXRodWJ1c2VyY29udGVudC5jb20waAYKKwYBBAGDvzABCQRaDFhodHRwczovL2dpdGh1Yi5jb20vY29yY2EtYWkvY2VhbC8uZ2l0aHViL3dvcmtmbG93cy9yZWxlYXNlLWNhbmRpZGF0ZS55bWxAcmVmcy9oZWFkcy9tYWluMDgGCisGAQQBg78wAQoEKgwoMGM1NGI4Yjk1NWNmYmI3NWMwNzRmNjk3ODdlNzk5ZTA2NjhkYTZjMjAdBgorBgEEAYO/MAELBA8MDWdpdGh1Yi1ob3N0ZWQwMAYKKwYBBAGDvzABDAQiDCBodHRwczovL2dpdGh1Yi5jb20vY29yY2EtYWkvY2VhbDA4BgorBgEEAYO/MAENBCoMKDBjNTRiOGI5NTVjZmJiNzVjMDc0ZjY5Nzg3ZTc5OWUwNjY4ZGE2YzIwHwYKKwYBBAGDvzABDgQRDA9yZWZzL2hlYWRzL21haW4wGgYKKwYBBAGDvzABDwQMDAoxMTkxNTU0NTkzMCsGCisGAQQBg78wARAEHQwbaHR0cHM6Ly9naXRodWIuY29tL2NvcmNhLWFpMBgGCisGAQQBg78wAREECgwINzI5Nzg4NjAwaAYKKwYBBAGDvzABEgRaDFhodHRwczovL2dpdGh1Yi5jb20vY29yY2EtYWkvY2VhbC8uZ2l0aHViL3dvcmtmbG93cy9yZWxlYXNlLWNhbmRpZGF0ZS55bWxAcmVmcy9oZWFkcy9tYWluMDgGCisGAQQBg78wARMEKgwoMGM1NGI4Yjk1NWNmYmI3NWMwNzRmNjk3ODdlNzk5ZTA2NjhkYTZjMjAhBgorBgEEAYO/MAEUBBMMEXdvcmtmbG93X2Rpc3BhdGNoMFQGCisGAQQBg78wARUERgxEaHR0cHM6Ly9naXRodWIuY29tL2NvcmNhLWFpL2NlYWwvYWN0aW9ucy9ydW5zLzM2NjY4NjQzNDUwL2F0dGVtcHRzLzEwFwYKKwYBBAGDvzABFgQJDAdwcml2YXRlMDYGCisGAQQBg78wARgEKAwmcmVwbzpjb3JjYS1haS9jZWFsOnJlZjpyZWZzL2hlYWRzL21haW4wgYoGCisGAQQB1nkCBAIEfAR6AHgAdgDdPTBqxscRMmMZHhyZZzcCokpeuN48rf+HinKALynujgAAAaDwlb3KAAAEAwBHMEUCIQCZkEL3LFnGEJPByT0ANc0v0evRbELXa5eALbXprbrWZgIgfZTpATB5c1921k7jcf9WtHLHFTphnkamQMdGQKX80JAwCgYIKoZIzj0EAwMDaAAwZQIxANXAsZST5IPUOawoBGhtie4xVVtWdgOkCX2qvbCsGQhNfN2JFNKuZ3GO/x7gc2RdNgIwBInMiBxtQ/ywT8WIW6kS1jIh2oOq028RiVdDckpNGdRhB2ukQlYLso4RH87J7ZkS"},"tlogEntries":[{"logIndex":"3011874624","logId":{"keyId":"wNI9atQGlz+VWfO6LRygH4QUfY/8W4RFwiT5i5WRgB0="},"kindVersion":{"kind":"hashedrekord","version":"0.0.1"},"integratedTime":"1790742740","inclusionPromise":{"signedEntryTimestamp":"MEUCIQCWe9M/pa8ZpsWwGCM2FV+SS/7P53W2v85VesBgGU95OQIgNEjtFICmI9CuI2M+5VTTek5eDxa5AbrHnCxuZ4QtJIo="},"inclusionProof":{"logIndex":"2889970362","rootHash":"nxw67QVfMDxMpBpZkf4t78BG89uYWAIPv4ORWlxBM2M=","treeSize":"2889970508","hashes":["LYQU2O2/bTAqKJ98jN3k8UczqxGAdayKrKQadra09lE=","Cw8ecUyj1MHaL+TiClVn0CIPitaCaHlC4FZ2auwDNPQ=","wE+LcdBQhs8o9f9Lvl0loKEYMTc1LuMWBrS51Psk+fY=","tHYrlkMYHvCIb4c5YAmcA2s93aWplWxPMHrX5yT1koU=","KOOM5r/4DmS9TGU9NGE9SlRN/UTkSgW7i9AjhRGKhPI=","PPOEDsOYcxeTiO3UbFk7nrAu7C+vG8K75ZsTBhlyjEo=","fnewpvPCtfKB2849+yEMUGU3wxOu30TEmVzALrG6nVM=","OTbnfeiPcMiotNSCMXcGvWQlX5+xTFOvlabyC0zm2Gk=","1f4HuXfx4HhkSZzyCykYqSuyFLrKzQMwSa33kIsJB1A=","jxW22sZiYZUs+YcQJU6yqCMMvFk5Gm0JZaw96t/J+oY=","ta3660am42ZLs/z14zB+qQaiuhw3/EItsP0rYeHuNqs=","2QfQRJnkVWMZq09fw65BBTYt//DLYR+YlQHCjV+dItY=","J1MuyJ56RuX/C7rMjmx8UzC+/vZNw7cnqFKgEYUEY+Y=","S0F3rKdZXA/JqSkyOrtegIjjIFCJOYs1HnBajhvmywo=","/Tz8vh5sB85CyCunbqF0LbvXs2qKh5ZJbYldt93GyjU=","4lYk7cX8PszZLoyQMWjMDB1BOBn4f7hehtFiHo92e5Y=","ttpxd0TJprOUtb/8Wf5DeIzwNtUw72Q0YnXE2LFMIZo=","qxzHanAzz57SDdmJe0B7bJK72NTIBbwEMGBBKvDOROw=","xH/DCseLHr9eKoYT8qsORZK7zVdEGYWHuVtsVrD95wY="],"checkpoint":{"envelope":"rekor.sigstore.dev - 1193050959916656506\n2889970508\nnxw67QVfMDxMpBpZkf4t78BG89uYWAIPv4ORWlxBM2M=\n\n— rekor.sigstore.dev wNI9ajBFAiEAq6rlIu7YdYy1TptlIs5jwhRnzueo/1B2J6BMm7q1ZGgCID1vcaA1EVS0VWqLEqnIpmEIUE6s9py/CNFHTDN6MAjt\n"}},"canonicalizedBody":"eyJhcGlWZXJzaW9uIjoiMC4wLjEiLCJraW5kIjoiaGFzaGVkcmVrb3JkIiwic3BlYyI6eyJkYXRhIjp7Imhhc2giOnsiYWxnb3JpdGhtIjoic2hhMjU2IiwidmFsdWUiOiIzMTgyMmU3NTlmODU0ZjVjYjc0ZWRkYzk5NWQ3ZmZhYzI4Mzk2ZDU2Zjk2M2Y4NDI3OGIyZGYyYjk3NDVhMTUyIn19LCJzaWduYXR1cmUiOnsiY29udGVudCI6Ik1FWUNJUUN5c1B3Vm92REh3cFZ2cEI0OEt3aHNLeGJCUVRjWEVVVThwR1ZnSlQ3QkNRSWhBT2ZNSzczbTBtNUg4Y1QwaEpEMEt3Q0JzNFFibDBoN05BdEIwRGlpb003aCIsInB1YmxpY0tleSI6eyJjb250ZW50IjoiTFMwdExTMUNSVWRKVGlCRFJWSlVTVVpKUTBGVVJTMHRMUzB0Q2sxSlNVaEVWRU5EUW5CUFowRjNTVUpCWjBsVlVYVk1NR3hZWlZSM1QwUTJVR0oyU1hSaEwycFNRMWhvV25SRmQwTm5XVWxMYjFwSmVtb3dSVUYzVFhjS1RucEZWazFDVFVkQk1WVkZRMmhOVFdNeWJHNWpNMUoyWTIxVmRWcEhWakpOVWpSM1NFRlpSRlpSVVVSRmVGWjZZVmRrZW1SSE9YbGFVekZ3WW01U2JBcGpiVEZzV2tkc2FHUkhWWGRJYUdOT1RXcFpkMDlVVFhkTlJGRjZUV3BKZDFkb1kwNU5hbGwzVDFSTmQwMUVVVEJOYWtsM1YycEJRVTFHYTNkRmQxbElDa3R2V2tsNmFqQkRRVkZaU1V0dldrbDZhakJFUVZGalJGRm5RVVZuVjJGbVpWUkhUVXd4YXk5amRtdEVkVGxKVGtSWGRqWTFNU3N4WTBWaFkyazBUellLVEZOcVpua3ZPWE5IWkRWUmRFczRiRE54Y1VVeU1YSk1VWEJrUmpVeGREUmtZemhuV0dSMFpIQjRUMlZ6UW5CSFNqWlBRMEppU1hkbloxZDFUVUUwUndwQk1WVmtSSGRGUWk5M1VVVkJkMGxJWjBSQlZFSm5UbFpJVTFWRlJFUkJTMEpuWjNKQ1owVkdRbEZqUkVGNlFXUkNaMDVXU0ZFMFJVWm5VVlZhVTFVM0NsZENNelY0YWtoS1lsTnZZemg1YzNob1dVdFZZVFUwZDBoM1dVUldVakJxUWtKbmQwWnZRVlV6T1ZCd2VqRlphMFZhWWpWeFRtcHdTMFpYYVhocE5Ga0tXa1E0ZDFwbldVUldVakJTUVZGSUwwSkdkM2RYYjFwWllVaFNNR05JVFRaTWVUbHVZVmhTYjJSWFNYVlpNamwwVERKT2RtTnRUbWhNVjBad1RESk9iQXBaVjNkMlRHMWtjR1JIYURGWmFUa3pZak5LY2xwdGVIWmtNMDEyWTIxV2MxcFhSbnBhVXpGcVdWYzFhMkZYVW1oa1IxVjFaVmN4YzFGSVNteGFiazEyQ21GSFZtaGFTRTEyWWxkR2NHSnFRVFZDWjI5eVFtZEZSVUZaVHk5TlFVVkNRa04wYjJSSVVuZGplbTkyVEROU2RtRXlWblZNYlVacVpFZHNkbUp1VFhVS1dqSnNNR0ZJVm1sa1dFNXNZMjFPZG1KdVVteGlibEYxV1RJNWRFMUNPRWREYVhOSFFWRlJRbWMzT0hkQlVVbEZSVmhrZG1OdGRHMWlSemt6V0RKU2NBcGpNMEpvWkVkT2IwMUVXVWREYVhOSFFWRlJRbWMzT0hkQlVVMUZTMFJDYWs1VVVtbFBSMGsxVGxSV2FscHRTbWxPZWxacVRVUmpNRnBxV1RWT2VtY3pDbHBVWXpWUFYxVjNUbXBaTkZwSFJUSlpla2wzU2tGWlMwdDNXVUpDUVVkRWRucEJRa0pCVVZkUk1sWm9Za05DZVZwWGVHeFpXRTVzU1VkT2FHSnRVbkFLV2tkR01GcFVRV0pDWjI5eVFtZEZSVUZaVHk5TlFVVkdRa0V4YW1JelNtcFpVekZvWVZNNWFscFhSbk5OUWpCSFEybHpSMEZSVVVKbk56aDNRVkZaUlFwRU0wcHNXbTVOZG1GSFZtaGFTRTEyWWxkR2NHSnFRVGRDWjI5eVFtZEZSVUZaVHk5TlFVVkpRa013VFVzeWFEQmtTRUo2VDJrNGRtUkhPWEphVnpSMUNsbFhUakJoVnpsMVkzazFibUZZVW05a1Ywb3hZekpXZVZreU9YVmtSMVoxWkVNMWFtSXlNSGRoUVZsTFMzZFpRa0pCUjBSMmVrRkNRMUZTWVVSR2FHOEtaRWhTZDJONmIzWk1NbVJ3WkVkb01WbHBOV3BpTWpCMldUSTVlVmt5UlhSWlYydDJXVEpXYUdKRE9IVmFNbXd3WVVoV2FVd3paSFpqYlhSdFlrYzVNd3BqZVRsNVdsZDRiRmxZVG14TVYwNW9ZbTFTY0ZwSFJqQmFVelUxWWxkNFFXTnRWbTFqZVRsdldsZEdhMk41T1hSWlYyeDFUVVJuUjBOcGMwZEJVVkZDQ21jM09IZEJVVzlGUzJkM2IwMUhUVEZPUjBrMFdXcHJNVTVYVG0xWmJVa3pUbGROZDA1NlVtMU9hbXN6VDBSa2JFNTZhelZhVkVFeVRtcG9hMWxVV21vS1RXcEJaRUpuYjNKQ1owVkZRVmxQTDAxQlJVeENRVGhOUkZka2NHUkhhREZaYVRGdllqTk9NRnBYVVhkTlFWbExTM2RaUWtKQlIwUjJla0ZDUkVGUmFRcEVRMEp2WkVoU2QyTjZiM1pNTW1Sd1pFZG9NVmxwTldwaU1qQjJXVEk1ZVZreVJYUlpWMnQyV1RKV2FHSkVRVFJDWjI5eVFtZEZSVUZaVHk5TlFVVk9Da0pEYjAxTFJFSnFUbFJTYVU5SFNUVk9WRlpxV20xS2FVNTZWbXBOUkdNd1dtcFpOVTU2WnpOYVZHTTFUMWRWZDA1cVdUUmFSMFV5V1hwSmQwaDNXVXNLUzNkWlFrSkJSMFIyZWtGQ1JHZFJVa1JCT1hsYVYxcDZUREpvYkZsWFVucE1NakZvWVZjMGQwZG5XVXRMZDFsQ1FrRkhSSFo2UVVKRWQxRk5SRUZ2ZUFwTlZHdDRUbFJWTUU1VWEzcE5RM05IUTJselIwRlJVVUpuTnpoM1FWSkJSVWhSZDJKaFNGSXdZMGhOTmt4NU9XNWhXRkp2WkZkSmRWa3lPWFJNTWs1MkNtTnRUbWhNVjBad1RVSm5SME5wYzBkQlVWRkNaemM0ZDBGU1JVVkRaM2RKVG5wSk5VNTZaelJPYWtGM1lVRlpTMHQzV1VKQ1FVZEVkbnBCUWtWblVtRUtSRVpvYjJSSVVuZGplbTkyVERKa2NHUkhhREZaYVRWcVlqSXdkbGt5T1hsWk1rVjBXVmRyZGxreVZtaGlRemgxV2pKc01HRklWbWxNTTJSMlkyMTBiUXBpUnprelkzazVlVnBYZUd4WldFNXNURmRPYUdKdFVuQmFSMFl3V2xNMU5XSlhlRUZqYlZadFkzazViMXBYUm10amVUbDBXVmRzZFUxRVowZERhWE5IQ2tGUlVVSm5OemgzUVZKTlJVdG5kMjlOUjAweFRrZEpORmxxYXpGT1YwNXRXVzFKTTA1WFRYZE9lbEp0VG1wck0wOUVaR3hPZW1zMVdsUkJNazVxYUdzS1dWUmFhazFxUVdoQ1oyOXlRbWRGUlVGWlR5OU5RVVZWUWtKTlRVVllaSFpqYlhSdFlrYzVNMWd5VW5Cak0wSm9aRWRPYjAxR1VVZERhWE5IUVZGUlFncG5OemgzUVZKVlJWSm5lRVZoU0ZJd1kwaE5Oa3g1T1c1aFdGSnZaRmRKZFZreU9YUk1NazUyWTIxT2FFeFhSbkJNTWs1c1dWZDNkbGxYVGpCaFZ6bDFDbU41T1hsa1Z6VjZUSHBOTWs1cVdUUk9hbEY2VGtSVmQwd3lSakJrUjFaMFkwaFNla3g2UlhkR2QxbExTM2RaUWtKQlIwUjJla0ZDUm1kUlNrUkJaSGNLWTIxc01sbFlVbXhOUkZsSFEybHpSMEZSVVVKbk56aDNRVkpuUlV0QmQyMWpiVlozWW5wd2FtSXpTbXBaVXpGb1lWTTVhbHBYUm5OUGJrcHNXbXB3ZVFwYVYxcDZUREpvYkZsWFVucE1NakZvWVZjMGQyZFpiMGREYVhOSFFWRlJRakZ1YTBOQ1FVbEZaa0ZTTmtGSVowRmtaMFJrVUZSQ2NYaHpZMUpOYlUxYUNraG9lVnBhZW1ORGIydHdaWFZPTkRoeVppdElhVzVMUVV4NWJuVnFaMEZCUVdGRWQyeGlNMHRCUVVGRlFYZENTRTFGVlVOSlVVTmFhMFZNTTB4R2JrY0tSVXBRUW5sVU1FRk9ZekIyTUdWMlVtSkZURmhoTldWQlRHSlljSEppY2xkYVowbG5abHBVY0VGVVFqVmpNVGt5TVdzM2FtTm1PVmQwU0V4SVJsUndhQXB1YTJGdFVVMWtSMUZMV0Rnd1NrRjNRMmRaU1V0dldrbDZhakJGUVhkTlJHRkJRWGRhVVVsNFFVNVlRWE5hVTFRMVNWQlZUMkYzYjBKSGFIUnBaVFI0Q2xaV2RGZGtaMDlyUTFneWNYWmlRM05IVVdoT1prNHlTa1pPUzNWYU0wZFBMM2czWjJNeVVtUk9aMGwzUWtsdVRXbENlSFJSTDNsM1ZEaFhTVmMyYTFNS01XcEphREp2VDNFd01qaFNhVlprUkdOcmNFNUhaRkpvUWpKMWExRnNXVXh6YnpSU1NEZzNTamRhYTFNS0xTMHRMUzFGVGtRZ1EwVlNWRWxHU1VOQlZFVXRMUzB0TFFvPSJ9fX19"}]},"messageSignature":{"messageDigest":{"algorithm":"SHA2_256","digest":"MYIudZ+FT1y3Tt3Jldf/rCg5bVb5Y/hCeLLfK5dFoVI="},"signature":"MEYCIQCysPwVovDHwpVvpB48KwhsKxbBQTcXEUU8pGVgJT7BCQIhAOfMK73m0m5H8cT0hJD0KwCBs4Qbl0h7NAtB0DiioM7h"}}
|