@corca-org/ceal-host-linux-arm64 1.0.16 → 1.0.17

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.
@@ -212,7 +212,7 @@ var CEAL_GATEWAY_DERIVED_STORE_FAILURE_CLASSES = vocabulary(["storage_unavailabl
212
212
  var CEAL_POLICY_DECISIONS = vocabulary(["allowed", "denied", "not_evaluated"]);
213
213
  var CEAL_CONNECTOR_ROUTE_PHASES = vocabulary(["scope_observation", "target_selection", "route_resolution"]);
214
214
  var CEAL_CONNECTOR_ROUTE_CAUSES = vocabulary(["provider_throttled", "provider_unavailable", "binding_invalid", "scope_limit_exceeded"]);
215
- var CEAL_WRITE_SOURCE_KINDS = vocabulary(["authenticated_registered_client", "agent_lease_admission", "provider_authenticated_event"]);
215
+ var CEAL_WRITE_SOURCE_KINDS = vocabulary(["authenticated_registered_client", "provider_authenticated_event"]);
216
216
  var CEAL_REFRESH_DELIVERIES = vocabulary(["initial", "recovery", "replay", "terminal_failure", "recovery_unavailable"]);
217
217
  var CEAL_CLIENT_OPERATIONS = vocabulary(["handshake", "discover", "call", "readback"]);
218
218
  var CEAL_WRITE_IDEMPOTENCY_POSTURES = vocabulary(["required", "optional", "not_required"]);
@@ -365,6 +365,7 @@ var CEAL_OPERATION_WITHHELD_CAUSES = vocabulary(["provider_permission", "access_
365
365
  // packages/ceal-client-protocol/src/operation-contract-types.ts
366
366
  var CEAL_JSON_SCHEMA_2020_12 = "https://json-schema.org/draft/2020-12/schema";
367
367
  var CEAL_OPERATION_ERROR_SCHEMA_VERSION = "ceal.operation_error.v1";
368
+ var CEAL_ARTIFACT_STAGE_TERMINALS = vocabulary(["chunk_accepted", "artifact_ready", "idempotency_replayed"]);
368
369
  var CEAL_RETRY_AFTER_MAX_MS = 60 * 60 * 1e3;
369
370
  var CEAL_JSON_SCHEMA_TYPES = vocabulary(["object", "array", "string", "integer", "number", "boolean", "null"]);
370
371
  var OBSERVATION_POSTURES = vocabulary(["direct_readback", "approved_no_readback", "operator_mediated", "excluded"]);
@@ -738,9 +739,6 @@ var CEAL_OPERATION_AUTHORITY_POLICY_KEYS = Object.freeze(["access_group", "insta
738
739
  var MAX_OPERATION_INPUT_RESOLVER_BINDINGS = 96;
739
740
  var CEAL_OPERATION_DESCRIPTOR_REQUIRED_ENVELOPE_KEYS = Object.freeze(["schema_version", "id", "input_contract", "result_contract", "policy"]);
740
741
  var CEAL_OPERATION_DESCRIPTOR_OPTIONAL_ENVELOPE_KEYS = Object.freeze(["input_resolution", "summary"]);
741
- var CEAL_OPERATION_RESULT_KEYS = vocabulary(["ok", "operation_id", "operation_receipt", "schema_version", "value"]);
742
- var CEAL_OPERATION_COMPACT_RESULT_KEYS = vocabulary(["ok", "operation_evidence", "operation_id", "schema_version", "value"]);
743
- var CEAL_OPERATION_RESULT_OPTIONAL_KEYS = vocabulary(["model_disclosure", "result_complete", "resume"]);
744
742
 
745
743
  // packages/ceal-client-protocol/src/operation-catalog.ts
746
744
  var CEAL_OPERATION_CATALOG_SCHEMA_VERSION = "ceal.catalog.v3";
@@ -804,10 +802,6 @@ var CEAL_SCHEMA_LITERALS = [
804
802
  "ceal.host_observation.v1",
805
803
  "ceal.host_registration_request.v1",
806
804
  "ceal.host_registration_result.v1",
807
- "ceal.leased-resource-stream.v1",
808
- "ceal.leased_consumer_attachment_stream_frame.v1",
809
- "ceal.leased_consumer_attachment_stream_request.v1",
810
- "ceal.leased_consumer_attachment_stream_transport.v1",
811
805
  "ceal.operation_descriptor.v1",
812
806
  "ceal.operation_error.v1",
813
807
  "ceal.operation_failure.v1",
@@ -833,12 +827,6 @@ var CEAL_SCHEMA_LITERAL_SET = new Set(CEAL_SCHEMA_LITERALS);
833
827
  // packages/ceal-client-protocol/src/bounded-series.ts
834
828
  import { join } from "node:path";
835
829
  var CEAL_BOUNDED_SERIES_CATALOG = Object.freeze({
836
- usage_record: (root) => join(root, "run-usage.jsonl"),
837
- control_commit: (root) => join(root, "control-auto-commit.jsonl"),
838
- engagement_signal: (root) => join(root, "runtime-state", "slack-feedback.jsonl"),
839
- runtime_error: (root) => join(root, "runtime-state", "runtime-errors.jsonl"),
840
- turn_bridge_request: (root) => join(root, ".ceal", "turn-bridge", "requests.jsonl"),
841
- thread_run_events: (root) => join(root, "run-events.jsonl"),
842
830
  bounded_store_sidecar: (root) => `${root}.jsonl`,
843
831
  gateway_audit_archive: (root) => `${root}.jsonl`,
844
832
  gateway_access_group_connector_control_audit: (root) => `${root}.audit.jsonl`,
@@ -872,35 +860,6 @@ var CEAL_HOST_INSTALLATION_REF_PATTERN = new RegExp(`^host-installation:${CEAL_L
872
860
  var CEAL_HOST_SOURCE_REF_PATTERN = new RegExp(`^host-source:${CEAL_LOWERCASE_UUID_PATTERN}$`, "u");
873
861
  var CEAL_HOST_ACCESS_TOKEN_PATTERN = /^ceal_host_[A-Za-z0-9_-]{43}$/u;
874
862
 
875
- // packages/ceal-client-protocol/src/agent-session-handoff.ts
876
- var CEAL_AGENT_ADMISSION_PHASES = vocabulary([
877
- "incumbent_admitted",
878
- "incumbent_draining",
879
- "drained",
880
- "candidate_admitted",
881
- "candidate_draining",
882
- "rollback_admitted"
883
- ]);
884
- var CEAL_AGENT_SERVICE_SESSION_RECORD_KEYS = vocabulary([
885
- "admission_fence",
886
- "admission_state",
887
- "admission_state_generation",
888
- "bearer",
889
- "consumer_ref",
890
- "credential_generation",
891
- "expires_at",
892
- "gateway_instance",
893
- "gateway_origin",
894
- "gateway_serving_generation",
895
- "issued_at",
896
- "record_sha256",
897
- "renew_after",
898
- "renew_by",
899
- "schema_version",
900
- "session_revision"
901
- ]);
902
- var CEAL_AGENT_SESSION_COMMIT_KEYS = vocabulary(["attempt_ref", "expected_session_revision", "session_revision"]);
903
-
904
863
  // packages/ceal-client-protocol/src/operation-result-completeness.ts
905
864
  var CEAL_READ_VALUE_CONTINUATION_KEYS = vocabulary(["continuation", "continuation_ref", "next_cursor"]);
906
865
 
@@ -911,7 +870,9 @@ var CEAL_OPERATION_INVOKE_COMMAND = "invoke";
911
870
  var CEAL_OPERATION_INPUT_FLAG = "--input";
912
871
  var CEAL_OPERATION_ID_PLACEHOLDER = "<operation-id>";
913
872
  var CEAL_OPERATION_INPUT_PLACEHOLDER = "<json-object>";
914
- var CEAL_MODEL_INVOCATION_ARGUMENTS = [CEAL_OPERATION_INVOKE_COMMAND, CEAL_OPERATION_ID_PLACEHOLDER, CEAL_OPERATION_INPUT_FLAG, shellSingleQuoted(CEAL_OPERATION_INPUT_PLACEHOLDER)].join(" ");
873
+ var MODEL_INVOCATION_BASE_ARGUMENTS = [CEAL_OPERATION_INVOKE_COMMAND, CEAL_OPERATION_ID_PLACEHOLDER].join(" ");
874
+ var CEAL_MODEL_INVOCATION_ARGUMENTS = [MODEL_INVOCATION_BASE_ARGUMENTS, CEAL_OPERATION_INPUT_FLAG, shellSingleQuoted(CEAL_OPERATION_INPUT_PLACEHOLDER)].join(" ");
875
+ var CEAL_MODEL_INPUT_SOURCE_GUIDANCE = `For caller-owned fields, add ${CEAL_OPERATION_INPUT_FLAG} ${shellSingleQuoted(CEAL_OPERATION_INPUT_PLACEHOLDER)}. Use inline JSON for short input; for longer or generated input, put exactly one JSON object in a caller-owned regular non-symlink UTF-8 JSON file and pass --input @path; relative paths resolve from the command working directory.`;
915
876
  function shellSingleQuoted(value) {
916
877
  return `'${value.replaceAll("'", "'\\''")}'`;
917
878
  }
@@ -943,19 +904,73 @@ var CEAL_VERIFIED_ARTIFACT_DESCRIPTOR_JSON_SCHEMA = Object.freeze({
943
904
  }
944
905
  });
945
906
 
907
+ // packages/ceal-client-protocol/src/provider-operation-vocabulary.ts
908
+ var CEAL_FILE_TYPE_FAMILIES = vocabulary(["all", "image", "pdf"]);
909
+ var CEAL_GITHUB_ISSUE_STATES = vocabulary(["open", "closed", "all"]);
910
+ var CEAL_NOTION_UPDATABLE_BLOCK_TYPES = vocabulary([
911
+ "paragraph",
912
+ "heading_1",
913
+ "heading_2",
914
+ "heading_3",
915
+ "bulleted_list_item",
916
+ "numbered_list_item",
917
+ "to_do",
918
+ "code"
919
+ ]);
920
+ var CEAL_NOTION_NEUTRAL_TYPES = vocabulary([
921
+ "text",
922
+ "number",
923
+ "boolean",
924
+ "date",
925
+ "select",
926
+ "multi_select",
927
+ "people",
928
+ "url",
929
+ "email",
930
+ "phone",
931
+ "unsupported"
932
+ ]);
933
+ var CEAL_NOTION_IDENTITY_GAP_REASONS = vocabulary([
934
+ "identity_unavailable",
935
+ "identity_stale",
936
+ "identity_ambiguous",
937
+ "identity_revoked",
938
+ "identity_unlinked"
939
+ ]);
940
+ var CEAL_NOTION_STRING_VALUE_TYPES = vocabulary(["text", "select", "url", "email", "phone"]);
941
+
942
+ // packages/ceal-client-protocol/src/opaque-reference.ts
943
+ var CEAL_OPAQUE_HANDLE_KINDS = vocabulary(["target", "message", "thread", "artifact", "document", "block", "object"]);
944
+ var CEAL_OPAQUE_REF_KINDS = vocabulary([...CEAL_OPAQUE_HANDLE_KINDS, "result", "operation-receipt", "reply-receipt", "field", "notion-data-source"]);
945
+
946
946
  // packages/ceal-client-protocol/src/bare-document.ts
947
947
  var REQUIRED_FIELDS = CEAL_CLIENT_WIRE_CONTRACT.command_response.bare_document_fields;
948
948
  var OPTIONAL_FIELDS = CEAL_CLIENT_WIRE_CONTRACT.command_response.bare_document_optional_fields;
949
949
 
950
- // packages/ceal-client-protocol/src/leased-consumer-vocabulary.ts
951
- var CEAL_TERMINAL_DISPOSITIONS = vocabulary(["completed", "failed", "cancelled"]);
952
- var CEAL_LEASE_DISPOSITIONS = vocabulary([...CEAL_TERMINAL_DISPOSITIONS, "deferred"]);
953
- var CEAL_AUTOMATIC_FEEDBACK_INTENTS = vocabulary(["initial"]);
954
- var CEAL_LEASED_MESSAGE_DELIVERY_OPERATION_IDS = vocabulary(["message.send", "message.update", "message.delete"]);
950
+ // packages/ceal-client-protocol/src/resource-row.ts
951
+ var CEAL_RESOURCE_SEARCH_ORDERS = vocabulary(["relevance", "modified", "viewed", "created"]);
952
+ var CEAL_RESOURCE_SEARCH_DIRECTIONS = vocabulary(["ascending", "descending"]);
953
+ 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"]);
954
+ var CEAL_RESOURCE_TIME_BASES = vocabulary(["created", "modified", "viewed"]);
955
955
  var CEAL_REPOSITORY_VISIBILITIES = vocabulary(["public", "private", "internal"]);
956
- var CEAL_RESULT_DELIVERY_OFFERS = vocabulary(["pending", "offered", "transport_lost"]);
957
- var CEAL_RESULT_DELIVERY_STATES = vocabulary(["unavailable", ...CEAL_RESULT_DELIVERY_OFFERS]);
958
- var CEAL_PROVIDER_OUTCOMES = vocabulary(["not_attempted", "outcome_unknown", "verified"]);
956
+ var CEAL_ACTIVITY_V3_KINDS = vocabulary(["authored", "edited", "messaged", "responded"]);
957
+ var CEAL_ACTIVITY_TIMESTAMP_BASES = vocabulary([
958
+ "message_created",
959
+ "commit_authored",
960
+ "resource_created",
961
+ "review_submitted",
962
+ "comment_created",
963
+ "event_start",
964
+ "all_day_start",
965
+ "file_created",
966
+ "file_modified",
967
+ "file_modified_by_me",
968
+ "file_viewed_by_me",
969
+ "page_created",
970
+ "page_last_edited",
971
+ "resource_modified"
972
+ ]);
973
+ var CEAL_ACTIVITY_CONNECTOR_KINDS = vocabulary(["slack", "github", "google-calendar", "google-drive", "notion"]);
959
974
  var CEAL_ACTIVITY_GAP_CODES = vocabulary([
960
975
  "provider_page_budget",
961
976
  "call_deadline",
@@ -966,8 +981,6 @@ var CEAL_ACTIVITY_GAP_CODES = vocabulary([
966
981
  "unsupported_event_kind",
967
982
  "direct_messages_excluded"
968
983
  ]);
969
- var CEAL_ACTIVITY_CONNECTOR_KINDS = vocabulary(["slack", "github", "google-calendar", "google-drive", "notion"]);
970
- var CEAL_ACTIVITY_COVERAGE_STATUSES = vocabulary(["complete_for_target", "continuation_required", "blocked"]);
971
984
  var CEAL_ACTIVITY_EVENT_KINDS = vocabulary([
972
985
  "slack.message",
973
986
  "slack.reply",
@@ -1008,73 +1021,6 @@ var CEAL_ACTIVITY_EVENT_TIMESTAMP_BASIS_MAP = Object.freeze({
1008
1021
  "notion.page.created": "page_created",
1009
1022
  "notion.page.edited": "page_last_edited"
1010
1023
  });
1011
- var CEAL_ACTIVITY_TIMESTAMP_BASES = vocabulary([
1012
- "message_created",
1013
- "commit_authored",
1014
- "resource_created",
1015
- "review_submitted",
1016
- "comment_created",
1017
- "event_start",
1018
- "all_day_start",
1019
- "file_created",
1020
- "file_modified",
1021
- "file_modified_by_me",
1022
- "file_viewed_by_me",
1023
- "page_created",
1024
- "page_last_edited",
1025
- "resource_modified"
1026
- ]);
1027
- var CEAL_ACTIVITY_V3_KINDS = vocabulary(["authored", "edited", "messaged", "responded"]);
1028
- var CEAL_RESOURCE_TIME_BASES = vocabulary(["created", "modified", "viewed"]);
1029
- var CEAL_RESOURCE_SEARCH_ORDERS = vocabulary(["relevance", "modified", "viewed", "created"]);
1030
- var CEAL_RESOURCE_SEARCH_DIRECTIONS = vocabulary(["ascending", "descending"]);
1031
- 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"]);
1032
- var CEAL_ARTIFACT_STAGE_TERMINALS = vocabulary(["chunk_accepted", "artifact_ready", "idempotency_replayed"]);
1033
- var CEAL_READ_ITEM_KINDS = vocabulary(["conversation", "identity", "usergroup", "message", "file", "document"]);
1034
- var CEAL_LEASED_MESSAGE_SEARCH_COMPLETENESS = vocabulary(["complete", "continuation_available", "truncated"]);
1035
- var CEAL_OPAQUE_HANDLE_KINDS = vocabulary(["target", "message", "thread", "artifact", "document", "block", "object"]);
1036
- var CEAL_OPAQUE_REF_KINDS = vocabulary([...CEAL_OPAQUE_HANDLE_KINDS, "result", "operation-receipt", "reply-receipt", "field", "notion-data-source"]);
1037
- var CEAL_WRITE_OBJECT_KINDS = vocabulary(["document", "comment", "cell_range"]);
1038
- var CEAL_CONVERSATION_KINDS = vocabulary(["channel", "dm", "group"]);
1039
- var CEAL_FILE_TYPE_FAMILIES = vocabulary(["all", "image", "pdf"]);
1040
- var CEAL_GITHUB_ISSUE_STATES = vocabulary(["open", "closed", "all"]);
1041
- var CEAL_NOTION_UPDATABLE_BLOCK_TYPES = vocabulary([
1042
- "paragraph",
1043
- "heading_1",
1044
- "heading_2",
1045
- "heading_3",
1046
- "bulleted_list_item",
1047
- "numbered_list_item",
1048
- "to_do",
1049
- "code"
1050
- ]);
1051
- var CEAL_NOTION_NEUTRAL_TYPES = vocabulary([
1052
- "text",
1053
- "number",
1054
- "boolean",
1055
- "date",
1056
- "select",
1057
- "multi_select",
1058
- "people",
1059
- "url",
1060
- "email",
1061
- "phone",
1062
- "unsupported"
1063
- ]);
1064
- var CEAL_NOTION_IDENTITY_GAP_REASONS = vocabulary([
1065
- "identity_unavailable",
1066
- "identity_stale",
1067
- "identity_ambiguous",
1068
- "identity_revoked",
1069
- "identity_unlinked"
1070
- ]);
1071
- var CEAL_NOTION_STRING_VALUE_TYPES = vocabulary(["text", "select", "url", "email", "phone"]);
1072
- var CEAL_UNREAD_REASONS = vocabulary(["blocked", "unavailable", "too_large", "unsupported", "download_failed", "permission_denied"]);
1073
- var CEAL_PLAN_ITEM_STATUSES = vocabulary(["pending", "active", "completed"]);
1074
- var CEAL_FINAL_PRESENTATION_INTENTS = vocabulary(["final", "stop", "transient_notice"]);
1075
- var CEAL_PRESENTATION_INTENTS = vocabulary(["progress", ...CEAL_FINAL_PRESENTATION_INTENTS]);
1076
-
1077
- // packages/ceal-client-protocol/src/resource-row.ts
1078
1024
  var CEAL_DATED_NOTE_BASES = vocabulary(["recording", "calendar_event", "created_time"]);
1079
1025
  var CEAL_DATED_NOTE_TRANSCRIPT_STATES = vocabulary(["present", "absent", "unestablished"]);
1080
1026
  var CEAL_READ_SEARCH_COST_CLASSES = vocabulary(["native_index", "scan"]);
@@ -1159,17 +1105,6 @@ var CEAL_REFRESH_FAILURE_CODES = vocabulary([
1159
1105
  "refresh_recovery_expired"
1160
1106
  ]);
1161
1107
 
1162
- // packages/ceal-client-protocol/src/leased-artifact-contract.ts
1163
- var CEAL_LEASED_CONSUMER_ARTIFACT_CHUNK_MAX_BYTES = 12 * 1024;
1164
-
1165
- // packages/ceal-client-protocol/src/leased-resource-stream.ts
1166
- var CEAL_LEASED_CONSUMER_ATTACHMENT_STREAM_MAGIC = new Uint8Array([67, 69, 65, 76, 82, 83, 50, 0]);
1167
- var CEAL_LEASED_CONSUMER_ATTACHMENT_STREAM_RECORD_PREFIX_BYTES = 8;
1168
- var CEAL_LEASED_CONSUMER_ATTACHMENT_STREAM_MAX_HEADER_BYTES = 16 * 1024;
1169
- var CEAL_LEASED_CONSUMER_ATTACHMENT_STREAM_CHUNK_BYTES = 64 * 1024;
1170
- var CEAL_LEASED_CONSUMER_ATTACHMENT_STREAM_MAX_RECORD_BYTES = CEAL_LEASED_CONSUMER_ATTACHMENT_STREAM_RECORD_PREFIX_BYTES + CEAL_LEASED_CONSUMER_ATTACHMENT_STREAM_MAX_HEADER_BYTES + CEAL_LEASED_CONSUMER_ATTACHMENT_STREAM_CHUNK_BYTES;
1171
- var CEAL_ATTACHMENT_UNREAD_REASONS = vocabulary(["blocked", "unavailable", "too_large", "unsupported", "download_failed", "digest_mismatch"]);
1172
-
1173
1108
  // packages/ceal-client-protocol/src/request-validation-primitives.ts
1174
1109
  import { createHash } from "node:crypto";
1175
1110
  var DIGEST = /^[a-f0-9]{64}$/u;
@@ -1336,6 +1271,10 @@ var CEAL_REQUEST_RUN_BATCH_JSON_SCHEMA = {
1336
1271
  };
1337
1272
 
1338
1273
  // packages/ceal-client-protocol/src/host-observation.ts
1274
+ var CEAL_HOST_INPUT_KINDS = vocabulary(["human", "host_automatic"]);
1275
+ function isCealHostInputKind(value) {
1276
+ return typeof value === "string" && CEAL_HOST_INPUT_KINDS.some((kind) => kind === value);
1277
+ }
1339
1278
  var CEAL_HOST_OBSERVATION_REF_PREFIX = "host-observation:";
1340
1279
  function validateCealHostObservationDraft(value) {
1341
1280
  const record6 = operationRecord(value, "Ceal Host observation draft is invalid.");
@@ -1392,12 +1331,6 @@ var OWNER_WRITE_STATES = Object.freeze(["attempt_started", "provider_acknowledge
1392
1331
  var OWNER_EFFECT_STATES = Object.freeze(["none", "applied", "failed", "unknown", "reconciled"]);
1393
1332
  var OWNER_RECEIPT_STATES = Object.freeze(["pending", "available", "failed", "unknown", "reconciled"]);
1394
1333
 
1395
- // packages/ceal-client-protocol/src/thread-excerpt.ts
1396
- var CEAL_THREAD_RECENT_WINDOW = 6;
1397
- var CEAL_THREAD_LAST_APP_MESSAGES_WINDOW = 3;
1398
- var CEAL_THREAD_OLDER_SUMMARY_WINDOW = 4;
1399
- var CEAL_FED_THREAD_MESSAGE_LIMIT = CEAL_THREAD_RECENT_WINDOW + CEAL_THREAD_OLDER_SUMMARY_WINDOW + CEAL_THREAD_LAST_APP_MESSAGES_WINDOW;
1400
-
1401
1334
  // packages/ceal-client-protocol/src/request-graph-readiness.ts
1402
1335
  var REQUEST_GRAPH_PRODUCER_TO_APPEND_SCHEMA = {
1403
1336
  type: "object",
@@ -1502,26 +1435,11 @@ function exactKeys(value, expected) {
1502
1435
  }
1503
1436
 
1504
1437
  // packages/ceal-client-protocol/src/client-result-materialization.ts
1438
+ var CEAL_UNREAD_REASONS = vocabulary(["blocked", "unavailable", "too_large", "unsupported", "download_failed", "permission_denied"]);
1505
1439
  var CEAL_MODEL_VISIBLE_COMMAND_OUTPUT_MAX_BYTES = 32 * 1024;
1506
1440
  var REQUIRED_FIELDS2 = Object.freeze(["schema_version", "operation_id"]);
1507
1441
  var FIELDS = /* @__PURE__ */ new Set([...REQUIRED_FIELDS2, "read_argv", "local_result_root", "continue_argv", "model_disclosure", "item_read_argv"]);
1508
1442
 
1509
- // packages/ceal-client-protocol/src/session-start-affordance.ts
1510
- var CEAL_SESSION_ENTRY_INVOCATION = "ceal";
1511
- var CEAL_LINK_RESOURCE_PRECEDENCE = `When the user asks to use Ceal or provides a link to information that may be available through installed organizational capabilities, run bare \`${CEAL_SESSION_ENTRY_INVOCATION}\`. The Host supplies the current user prompt without exposing it to the client command, and the Gateway returns the applicable entry in that one response. Treat a supplied link as a candidate Ceal resource rather than a public web-search target. Reach for a generic web fetch or web search only when the Gateway offered nothing.`;
1512
-
1513
- // packages/ceal-client-protocol/src/conversation-contracts.ts
1514
- var CEAL_APPROVAL_POLICY_KINDS = vocabulary(["requester_only", "named_users", "role_based"]);
1515
- var CEAL_APPROVAL_TARGET_KINDS = vocabulary([
1516
- "repo_change",
1517
- "investigation",
1518
- "skill_creation",
1519
- "command_creation",
1520
- "connector_creation",
1521
- "generic"
1522
- ]);
1523
- var CEAL_PROGRESS_PHASES = vocabulary(["request_review", "information_gathering", "work_execution", "result_check"]);
1524
-
1525
1443
  // packages/ceal-client-protocol/src/gateway-cache-origin-validation.ts
1526
1444
  var CEAL_MAX_CACHE_ORIGIN_AGE_MS = 30 * 24 * 60 * 60 * 1e3;
1527
1445
 
@@ -1911,13 +1829,13 @@ function validTurn(value) {
1911
1829
  return exactOptional(value, ["local_session_ref", "local_turn_ref"], ["model", "observations"]) && safeRef(value.local_session_ref) && safeRef(value.local_turn_ref) && optionalText(value.model, 256) && validObservations(value.observations);
1912
1830
  }
1913
1831
  function validInput(value) {
1914
- return exactOptional(value, ["local_session_ref", "local_turn_ref", "local_input_ref", "origin_input", "observations"], ["decision", "local_turn_aliases", "context_expires_at"]) && safeRef(value.local_session_ref) && safeRef(value.local_turn_ref) && safeRef(value.local_input_ref) && validInputObservations(value.observations) && typeof value.origin_input === "boolean" && validInputOptionals(value);
1832
+ return exactOptional(value, ["local_session_ref", "local_turn_ref", "local_input_ref", "input_kind", "origin_input", "observations"], ["local_turn_aliases", "context_expires_at"]) && safeRef(value.local_session_ref) && safeRef(value.local_turn_ref) && safeRef(value.local_input_ref) && validInputObservations(value.observations) && isCealHostInputKind(value.input_kind) && typeof value.origin_input === "boolean" && validInputOptionals(value);
1915
1833
  }
1916
1834
  function validInputObservations(value) {
1917
1835
  return validObservations(value) && Array.isArray(value) && value.filter((item) => record(item) && item.observation_kind === "prompt").length === 1;
1918
1836
  }
1919
1837
  function validInputOptionals(value) {
1920
- return validDecision(value.decision) && optionalRefs(value.local_turn_aliases) && (value.context_expires_at === void 0 || timestamp(value.context_expires_at));
1838
+ return optionalRefs(value.local_turn_aliases) && (value.context_expires_at === void 0 || timestamp(value.context_expires_at));
1921
1839
  }
1922
1840
  function validTerminal(value) {
1923
1841
  return exactOptional(value, ["local_session_ref", "local_turn_ref", "terminal_state"], ["abort_reason", "duration_ms", "time_to_first_token_ms", "usage", "observations"]) && safeRef(value.local_session_ref) && safeRef(value.local_turn_ref) && validTerminalDisposition(value.terminal_state, value.abort_reason) && optionalNonNegative(value.duration_ms) && optionalNonNegative(value.time_to_first_token_ms) && (value.usage === void 0 || jsonValue(value.usage)) && validObservations(value.observations);
@@ -1928,9 +1846,6 @@ function validTerminalDisposition(state, reason) {
1928
1846
  function validStatus(value) {
1929
1847
  return exactOptional(value, ["status", "reason_code"], ["detail"]) && ["ready", "degraded", "stopping"].includes(String(value.status)) && safeRef(value.reason_code) && optionalText(value.detail, 4096);
1930
1848
  }
1931
- function validDecision(value) {
1932
- return value === void 0 || record(value) && exactKeys2(value, ["decision", "approval_ref"]) && (value.decision === "approved" || value.decision === "denied") && safeRef(value.approval_ref);
1933
- }
1934
1849
  function optionalText(value, maxLength) {
1935
1850
  return value === void 0 || typeof value === "string" && value.length > 0 && value.length <= maxLength;
1936
1851
  }
@@ -2693,6 +2608,8 @@ var RelayGatewayBridge = class {
2693
2608
  }
2694
2609
  async deliverInput(state, input) {
2695
2610
  const prepared = prepareInput(state, input, this.hostSourceRef);
2611
+ const priorRefusal = refusedUnboundInput(prepared.turn);
2612
+ if (priorRefusal !== void 0) return priorRefusal;
2696
2613
  const outcome = await this.submit(prepared.submission);
2697
2614
  if ("refusal" in outcome) {
2698
2615
  if (outcome.refusal.definitive && prepared.turn !== void 0) await this.writeState({ ...state, turns: { ...state.turns, [prepared.refs.host_turn_ref]: { ...prepared.turn, input_refused: { code: outcome.refusal.code, message: outcome.refusal.message } } } });
@@ -2701,14 +2618,18 @@ var RelayGatewayBridge = class {
2701
2618
  const acknowledgement2 = outcome.acknowledgement;
2702
2619
  const nextTurn = bindInput(prepared, acknowledgement2.request_ref, input.submission_ref);
2703
2620
  await this.writeState({ ...state, turns: { ...state.turns, [prepared.refs.host_turn_ref]: nextTurn } });
2704
- const binding = { frame: structuredClone(input.frame), request_ref: acknowledgement2.request_ref, prompt_ref: prepared.promptRef, host_binding: {
2621
+ if (!bindsOriginInput(prepared)) return { status: "created" };
2622
+ const bindingRequestRef = nextTurn.request_ref ?? acknowledgement2.request_ref;
2623
+ const bindingPromptRef = nextTurn.prompt_ref ?? prepared.promptRef;
2624
+ const bindingInputRef = nextTurn.origin_host_input_ref ?? prepared.hostInputRef;
2625
+ const binding = { frame: structuredClone(input.frame), request_ref: bindingRequestRef, prompt_ref: bindingPromptRef, host_binding: {
2705
2626
  host_source_ref: prepared.submission.identity.host_source_ref,
2706
2627
  host_session_ref: prepared.submission.identity.host_session_ref,
2707
2628
  host_turn_ref: prepared.submission.identity.host_turn_ref,
2708
- host_input_ref: prepared.hostInputRef,
2709
- prompt_ref: prepared.promptRef
2629
+ host_input_ref: bindingInputRef,
2630
+ prompt_ref: bindingPromptRef
2710
2631
  } };
2711
- const context = createRelayRequestWorkContext({ request_ref: acknowledgement2.request_ref, host_binding: binding.host_binding });
2632
+ const context = createRelayRequestWorkContext({ request_ref: bindingRequestRef, host_binding: binding.host_binding });
2712
2633
  try {
2713
2634
  await this.onRequestBound(binding, context);
2714
2635
  } catch (error) {
@@ -2728,6 +2649,7 @@ var RelayGatewayBridge = class {
2728
2649
  const outcome = await this.submit({
2729
2650
  identity: { host_source_ref: this.hostSourceRef, host_session_ref: refs.host_session_ref, host_turn_ref: refs.host_turn_ref },
2730
2651
  host_input_ref: turn.origin_host_input_ref,
2652
+ input_kind: "host_automatic",
2731
2653
  prompt_ref: turn.prompt_ref,
2732
2654
  observations: payloadObservations(input.frame),
2733
2655
  request_ref: turn.request_ref,
@@ -2789,9 +2711,9 @@ function prepareInput(state, input, hostSourceRef) {
2789
2711
  const submission = compactSubmission({
2790
2712
  identity: { host_source_ref: hostSourceRef, host_session_ref: refs.host_session_ref, host_turn_ref: refs.host_turn_ref },
2791
2713
  host_input_ref: hostInputRef,
2714
+ input_kind: payloadInputKind(input.frame),
2792
2715
  prompt_ref: promptRef,
2793
2716
  observations,
2794
- decision: payloadDecision(input.frame),
2795
2717
  request_ref: turn?.request_ref,
2796
2718
  submission_ref: input.submission_ref
2797
2719
  });
@@ -2802,11 +2724,18 @@ function bindInput(prepared, requestRef, submissionRef) {
2802
2724
  host_session_ref: prepared.refs.host_session_ref,
2803
2725
  observations: prepared.turn?.observations ?? [],
2804
2726
  submission_ref: prepared.turn?.submission_ref ?? submissionRef,
2805
- request_ref: requestRef,
2806
- prompt_ref: prepared.promptRef,
2727
+ request_ref: prepared.turn?.request_ref ?? requestRef,
2728
+ prompt_ref: prepared.turn?.prompt_ref ?? prepared.promptRef,
2807
2729
  origin_host_input_ref: prepared.turn?.origin_host_input_ref ?? prepared.hostInputRef
2808
2730
  };
2809
2731
  }
2732
+ function refusedUnboundInput(turn) {
2733
+ if (turn?.request_ref !== void 0 || turn?.input_refused === void 0) return void 0;
2734
+ return { status: "refused", code: "origin_input_refused", message: `The input frame names a turn whose origin input was refused (${turn.input_refused.code}: ${turn.input_refused.message}).` };
2735
+ }
2736
+ function bindsOriginInput(prepared) {
2737
+ return prepared.turn?.request_ref === void 0 || prepared.turn.origin_host_input_ref === prepared.hostInputRef;
2738
+ }
2810
2739
  function payloadRef(frame, key) {
2811
2740
  const value = frame.payload[key];
2812
2741
  if (typeof value !== "string" || !SAFE_REF4.test(value)) throw new TypeError("Host Relay frame reference is invalid.");
@@ -2820,16 +2749,17 @@ function payloadPromptDigest(frame) {
2820
2749
  function payloadObservations(frame) {
2821
2750
  return Array.isArray(frame.payload.observations) ? frame.payload.observations.filter(isObservation) : [];
2822
2751
  }
2823
- function payloadDecision(frame) {
2824
- const value = frame.payload.decision;
2825
- return isRecord(value) && (value.decision === "approved" || value.decision === "denied") && typeof value.approval_ref === "string" ? { decision: value.decision, approval_ref: value.approval_ref } : void 0;
2752
+ function payloadInputKind(frame) {
2753
+ const value = frame.payload.input_kind;
2754
+ if (!isCealHostInputKind(value)) throw new TypeError("Host Relay input kind is invalid.");
2755
+ return value;
2826
2756
  }
2827
2757
  function uniqueObservations(values) {
2828
2758
  const seen = /* @__PURE__ */ new Set();
2829
2759
  return values.filter((value) => !seen.has(value.observation_ref) && Boolean(seen.add(value.observation_ref)));
2830
2760
  }
2831
2761
  function compactSubmission(value) {
2832
- return { identity: value.identity, host_input_ref: value.host_input_ref, prompt_ref: value.prompt_ref, observations: value.observations, submission_ref: value.submission_ref, ...value.decision === void 0 ? {} : { decision: value.decision }, ...value.request_ref === void 0 ? {} : { request_ref: value.request_ref } };
2762
+ return { identity: value.identity, host_input_ref: value.host_input_ref, input_kind: value.input_kind, prompt_ref: value.prompt_ref, observations: value.observations, submission_ref: value.submission_ref, ...value.request_ref === void 0 ? {} : { request_ref: value.request_ref } };
2833
2763
  }
2834
2764
  function isObservation(value) {
2835
2765
  try {
@@ -2895,6 +2825,7 @@ import { dirname as dirname2 } from "node:path";
2895
2825
  // host/gateway-http.ts
2896
2826
  var SAFE_HOST_REF = /^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$/u;
2897
2827
  function hostIngressBody(input, invalidEventTime) {
2828
+ if (!isCealHostInputKind(input.input_kind)) throw new TypeError("Host ingress input kind is invalid.");
2898
2829
  const prompt = input.observations.find((observation) => observation.observation_kind === "prompt");
2899
2830
  const observedAt = prompt?.observed_at ?? input.observations[0]?.observed_at;
2900
2831
  if (observedAt === void 0 || !Number.isFinite(Date.parse(observedAt))) throw invalidEventTime();
@@ -2904,11 +2835,11 @@ function hostIngressBody(input, invalidEventTime) {
2904
2835
  host_session_ref: input.identity.host_session_ref,
2905
2836
  host_turn_ref: input.identity.host_turn_ref,
2906
2837
  host_input_ref: input.host_input_ref,
2838
+ input_kind: input.input_kind,
2907
2839
  prompt_ref: input.prompt_ref,
2908
2840
  observed_at: observedAt,
2909
2841
  observations: input.observations,
2910
- ...input.request_ref === void 0 ? {} : { request_ref: input.request_ref },
2911
- ...input.decision === void 0 ? {} : { decision: input.decision.decision, approval_ref: input.decision.approval_ref }
2842
+ ...input.request_ref === void 0 ? {} : { request_ref: input.request_ref }
2912
2843
  };
2913
2844
  }
2914
2845
  async function responseJson(response2, invalidResponse2) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@corca-org/ceal-host-linux-arm64",
3
- "version": "1.0.16",
3
+ "version": "1.0.17",
4
4
  "license": "MIT",
5
5
  "repository": {
6
6
  "type": "git",
@@ -3,12 +3,12 @@
3
3
  "product": "ceal-host",
4
4
  "version_source": {
5
5
  "product": "ceal-host",
6
- "version": "1.0.16"
6
+ "version": "1.0.17"
7
7
  },
8
8
  "source": {
9
9
  "repository": "corca-ai/ceal",
10
- "commit": "172fd546e4beee0f9911b6b073f32dd080f84136",
11
- "tree": "ccdd46d4bebf32f28c6c24f10b57118de6c458f6"
10
+ "commit": "980f065d3187628420b1c861efc38939916176b0",
11
+ "tree": "3ed016838b279d13ecdc39642187cd7a37221cab"
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": "b5dbc4edd15334d7ed2ea4a9627cb8fd0696740bf54aaca5b9df9d419607bc2a"
22
+ "sha256": "ec3a9b6fdd410a4ade10ecdf62df4dfbd781157cf0055538039ba69f46c094c0"
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": "7517e82da18655dbb479535f9aef7cd71a94a58e4497f15b0728c5b25c376915"
30
+ "sha256": "a4399d42969a612932b72a672625eb44ba8690e15651aa2747c878fb66eb32f4"
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": "6fd02ad954861bc661f30a8b691f46e1c24963b8c79fa738db61162cb639105e"
38
+ "sha256": "49e255a8e0907ff3736de3e44c896e84d9a2f512bae1c1cc9569c9415fe23b2f"
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": "50456cb23e1634b0d0f89511de5a99724a23f95598e15a85090b92789c963951"
46
+ "sha256": "f57686bfb2def3abd48ea68451bf2e25b866025c98271776f68051755043a234"
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": "cef2c32597685c455e5fba38d943305091cc7f5dee68805edcec415e7daf7ac1"
54
+ "sha256": "462df98c8b36b42f391f7fefd16dd1cc1f85e5ebe98fec11ce29027bea9673fe"
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": "e8d78964f783645e37387c4b856c745551ebefed318983f75bca5a4c005415f2"
62
+ "sha256": "0620eab8e4a807ffc2885d9ef0fa8e4261e5d13222cd6a64b71a0a7061ead829"
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": "69c35f9ae7d5c6e0a820c9c312097ac0a191f88207214ff0f259050347391ebc"
70
+ "sha256": "7f84cd036aba2d7ad4ccfae146f13341f17eb7fb37aa79dbfb824bb92c3a56f2"
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": "a6c7408b952176dff6f9ca6618a11f3ba610f7231a254a362fc7953403b17593"
78
+ "sha256": "5673617487608b52972038caec1c4f8dff89fd2d3905392a771905ae50fad306"
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": "0190e65a5a6fa6861d70e09f99b17c8e286d64fa91e7b52c4eb9401aa95168cb"
94
+ "sha256": "e98107fe701e43d3283dd4aa59f2178eb6a3ec9bd99f2e0c16a62580f15bd069"
95
95
  }
96
96
  ]
97
97
  }
@@ -1 +1 @@
1
- {"mediaType":"application/vnd.dev.sigstore.bundle.v0.3+json","verificationMaterial":{"certificate":{"rawBytes":"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"},"tlogEntries":[{"logIndex":"3104359145","logId":{"keyId":"wNI9atQGlz+VWfO6LRygH4QUfY/8W4RFwiT5i5WRgB0="},"kindVersion":{"kind":"hashedrekord","version":"0.0.1"},"integratedTime":"1791270973","inclusionPromise":{"signedEntryTimestamp":"MEUCIFpx7bewyOZf2v5eIWRAgUdbFaObiRXgoIKwJ6JDk0YDAiEAvppWxwZTjLRjWqoT3KJUYTalZNT/9KUE8mTc5NZjb18="},"inclusionProof":{"logIndex":"2982454883","rootHash":"q1o513Q8+/kQqwK4qffp9sIVq4kEq1VWe6UBrTV9d+k=","treeSize":"2982454939","hashes":["X+EKbjBIB4BwNhNjtWr3KtZmFqMlF/7jmpJfA7Bulvk=","b12sO91YT8bW4/NFTVBv1Ab379auXHPkPWffZIwp72M=","6E0YYD0lP8fzomc9GxFDhIOyM+9oJ977l7bSL2KMKfs=","B5eYoJkQ3bkTgGSb5k6Zof5wLaRj++e0WyeP70GUYMI=","G4XJ5G16gGw+Irb9Vx2EF9DKHaG6Fb+Ap4fJrVHDLfY=","DVw251EhdLXmruFQMeN+hRgK5tXxkgpkSEE63HbN8bM=","BTl5BSQAzbgTdYxow9vlUPid4qyd15jJvvtfxIsMfH8=","KTYM8v7wBIGr9G3DpqA6ei4tO9obpQR5GpagqRuIE8E=","9BC8wM6aE62y/Xi/Znm04MwvMb/mDS5B/t0HFh9Rlrg=","gvg5SiR6QeZ+LrC8v5sKaZjcI5wA5h4gya8lAjz9jqk=","KdDhAROUsYcRkglasQHoEauqWljNAJfEFnM9II6kjog=","7vKZxbBvymLzq0zTouigqYVNC74ccNCQC7OYTi9vvPo=","w2nH9N+92RYIaF33CQBH1BHzejgMjN+9NyloBszhYxM=","rvBG0Tm26GIMH3ljqRoWTbSJ27Zt7T2HgZ9NddA8ZpY=","0bsYk/hXJIlxXvrWb0QuCD1O04/aviGg6oFpPda2qbs=","qeYNMieVwcc8ixyheVVlxWji/0cnZo2bd/+umuu5TGM=","NlOclldmKPA1tMKIskqHAwuQDYHp31YwpK+OOMrMccc=","qxzHanAzz57SDdmJe0B7bJK72NTIBbwEMGBBKvDOROw=","xH/DCseLHr9eKoYT8qsORZK7zVdEGYWHuVtsVrD95wY="],"checkpoint":{"envelope":"rekor.sigstore.dev - 1193050959916656506\n2982454939\nq1o513Q8+/kQqwK4qffp9sIVq4kEq1VWe6UBrTV9d+k=\n\n— rekor.sigstore.dev wNI9ajBGAiEAvRYikmoncC/9wGiTu1H7guwteD+oBvSas77bgU16yTMCIQChm8F00VCNt9sBNSOhD96TvchxT6B2dGm49rivSJRfRw==\n"}},"canonicalizedBody":"eyJhcGlWZXJzaW9uIjoiMC4wLjEiLCJraW5kIjoiaGFzaGVkcmVrb3JkIiwic3BlYyI6eyJkYXRhIjp7Imhhc2giOnsiYWxnb3JpdGhtIjoic2hhMjU2IiwidmFsdWUiOiI4ODJiNGUxMTE4OTFmZWQwZjRiOWVhY2FiNGM2MjdmNDE4OWY1MGNlY2Q4OGZiNWE1Mjg1NDdiOWQyYzI3NmQwIn19LCJzaWduYXR1cmUiOnsiY29udGVudCI6Ik1FVUNJSHUrQmlZVStvM3kxUDQ3ay95SC9RM05oaTJUOVJKVGlCWFErdGxDcVZVdUFpRUE2Ujh3bDhCWE9Ga1ZMUFJ5UmlnS0FaU29rRmRqTlZ1bHRoOWUwS1R2eVJRPSIsInB1YmxpY0tleSI6eyJjb250ZW50IjoiTFMwdExTMUNSVWRKVGlCRFJWSlVTVVpKUTBGVVJTMHRMUzB0Q2sxSlNVYzNha05EUW01VFowRjNTVUpCWjBsVlZreEtOMjVrV0ZJeVMwUTJXVkY1WkVaaVMwUkdRa281WW5WUmQwTm5XVWxMYjFwSmVtb3dSVUYzVFhjS1RucEZWazFDVFVkQk1WVkZRMmhOVFdNeWJHNWpNMUoyWTIxVmRWcEhWakpOVWpSM1NFRlpSRlpSVVVSRmVGWjZZVmRrZW1SSE9YbGFVekZ3WW01U2JBcGpiVEZzV2tkc2FHUkhWWGRJYUdOT1RXcFplRTFFUVRKTlJHTjRUbXBGZVZkb1kwNU5hbGw0VFVSQk1rMUVZM2xPYWtWNVYycEJRVTFHYTNkRmQxbElDa3R2V2tsNmFqQkRRVkZaU1V0dldrbDZhakJFUVZGalJGRm5RVVZDYkVkNFVWRlVjVE4zUjNCNmNsTlBOMnBFUmtoeGFEVk9kVGhOZEV4ek9UTXliRGtLWlVwV1FuWk9kMlJMVUVwck1XaFVVMEZ5ZFM5NE56bGFOVTFRVEhwTGFGWjZNa3h2Vld4VVJIWTNZVmg0S3pGNVZrdFBRMEphVFhkbloxZFFUVUUwUndwQk1WVmtSSGRGUWk5M1VVVkJkMGxJWjBSQlZFSm5UbFpJVTFWRlJFUkJTMEpuWjNKQ1owVkdRbEZqUkVGNlFXWkNaMDVXU0ZOTlJVZEVRVmRuUWxSbUNqQXJibEJXYVZGU2JIWnRiekpQYTI5V1lVeEhUR2hvYTFCNlFtMUNaMDVXU0ZKRlFrRm1PRVZZUkVKaGFHeG9iMlJJVW5kamVtOTJUREprY0dSSGFERUtXV2sxYW1JeU1IWlpNamw1V1RKRmRGbFhhM1paTWxab1lrTTRkVm95YkRCaFNGWnBURE5rZG1OdGRHMWlSemt6WTNrNWVWcFhlR3haV0U1c1RGZE9hQXBpYlZKd1drZEdNRnBUTlRWaVYzaEJZMjFXYldONU9XOWFWMFpyWTNrNWRGbFhiSFZOUkd0SFEybHpSMEZSVVVKbk56aDNRVkZGUlVzeWFEQmtTRUo2Q2s5cE9IWmtSemx5V2xjMGRWbFhUakJoVnpsMVkzazFibUZZVW05a1Ywb3hZekpXZVZreU9YVmtSMVoxWkVNMWFtSXlNSGRJZDFsTFMzZFpRa0pCUjBRS2RucEJRa0ZuVVZKa01qbDVZVEphYzJJelpHWmFSMng2WTBkR01Ga3laM2RPWjFsTFMzZFpRa0pCUjBSMmVrRkNRWGRSYjAxVVkzbGFiVkV4VGtSYWJBcE9SMHBzV2xkVmQxcHFhelZOVkVacFRtMUpkMDU2VG0xTmVrcHJXa1JCTkUxSFdUUk9SRVY2VG1wQmEwSm5iM0pDWjBWRlFWbFBMMDFCUlVWQ1FscEVDbHBYUm5OSlNFcHNZa2RXYUdNeVZXZFpNa1oxV2tkc2ExbFlVbXhOUW5OSFEybHpSMEZSVVVKbk56aDNRVkZWUlVSWFRuWmpiVTVvVEZkR2NFd3lUbXdLV1ZkM2QwaFJXVXRMZDFsQ1FrRkhSSFo2UVVKQ1oxRlFZMjFXYldONU9XOWFWMFpyWTNrNWRGbFhiSFZOUkhOSFEybHpSMEZSVVVKbk56aDNRVkZuUlFwTVVYZHlZVWhTTUdOSVRUWk1lVGt3WWpKMGJHSnBOV2haTTFKd1lqSTFla3h0WkhCa1IyZ3hXVzVXZWxwWVNtcGlNalV3V2xjMU1FeHRUblppVkVKdkNrSm5iM0pDWjBWRlFWbFBMMDFCUlVwQ1JtOU5WMGRvTUdSSVFucFBhVGgyV2pKc01HRklWbWxNYlU1MllsTTVhbUl6U21wWlV6Rm9ZVk01YWxwWFJuTUtUSGsxYm1GWVVtOWtWMGwyWkRJNWVXRXlXbk5pTTJSNlRETktiR0pIVm1oak1sVjBXVEpHZFZwSGJHdFpXRkpzVEc1c2RHSkZRbmxhVjFwNlRESm9iQXBaVjFKNlRESXhhR0ZYTkhkUFFWbExTM2RaUWtKQlIwUjJla0ZDUTJkUmNVUkRaM2hPZWtwdFdrUlZNRTV0VlRCWmJWWnNXbFJDYlU5VWEzaE5WMGt5Q2xscVFUTk5NbGw2VFcxU2EwMUVaM2RhYW1jd1RWUk5NazFDTUVkRGFYTkhRVkZSUW1jM09IZEJVWE5GUkhkM1Rsb3liREJoU0ZacFRGZG9kbU16VW13S1drUkJkMEpuYjNKQ1owVkZRVmxQTDAxQlJVMUNRMGxOU1Vkb01HUklRbnBQYVRoMldqSnNNR0ZJVm1sTWJVNTJZbE01YW1JelNtcFpVekZvWVZNNWFncGFWMFp6VFVSblIwTnBjMGRCVVZGQ1p6YzRkMEZSTUVWTFozZHZUVlJqZVZwdFVURk9SRnBzVGtkS2JGcFhWWGRhYW1zMVRWUkdhVTV0U1hkT2VrNXRDazE2U210YVJFRTBUVWRaTkU1RVJYcE9ha0ZtUW1kdmNrSm5SVVZCV1U4dlRVRkZUMEpDUlUxRU0wcHNXbTVOZG1GSFZtaGFTRTEyWWxkR2NHSnFRV0VLUW1kdmNrSm5SVVZCV1U4dlRVRkZVRUpCZDAxRGFrVjRUMVJGTVU1VVVURlBWRTEzUzNkWlMwdDNXVUpDUVVkRWRucEJRa1ZCVVdSRVFuUnZaRWhTZHdwamVtOTJUREprY0dSSGFERlphVFZxWWpJd2Rsa3lPWGxaTWtWMFdWZHJkMGRCV1V0TGQxbENRa0ZIUkhaNlFVSkZVVkZMUkVGbk0wMXFhek5QUkdjeUNrMUVRbTlDWjI5eVFtZEZSVUZaVHk5TlFVVlRRa1p2VFZkSGFEQmtTRUo2VDJrNGRsb3liREJoU0ZacFRHMU9kbUpUT1dwaU0wcHFXVk14YUdGVE9Xb0tXbGRHYzB4NU5XNWhXRkp2WkZkSmRtUXlPWGxoTWxwellqTmtla3d6U214aVIxWm9ZekpWZEZreVJuVmFSMnhyV1ZoU2JFeHViSFJpUlVKNVdsZGFlZ3BNTW1oc1dWZFNla3d5TVdoaFZ6UjNUMEZaUzB0M1dVSkNRVWRFZG5wQlFrVjNVWEZFUTJkNFRucEtiVnBFVlRCT2JWVXdXVzFXYkZwVVFtMVBWR3Q0Q2sxWFNUSlpha0V6VFRKWmVrMXRVbXROUkdkM1dtcG5NRTFVVFRKTlEwVkhRMmx6UjBGUlVVSm5OemgzUVZKUlJVVjNkMUprTWpsNVlUSmFjMkl6WkdZS1drZHNlbU5IUmpCWk1tZDNWa0ZaUzB0M1dVSkNRVWRFZG5wQlFrWlJVa2RFUlZKdlpFaFNkMk42YjNaTU1tUndaRWRvTVZscE5XcGlNakIyV1RJNWVRcFpNa1YwV1ZkcmRsa3lWbWhpUXpsb1dUTlNjR0l5TlhwTU0wb3hZbTVOZGsxNll6Qk5hbU16VFVSak1FNVVXWFpaV0ZJd1dsY3hkMlJJVFhaTlZFRllDa0puYjNKQ1owVkZRVmxQTDAxQlJWZENRV3ROUWpOQ2VXRllXbWhrUjFWM1RtZFpTMHQzV1VKQ1FVZEVkbnBCUWtkQlVXOUVRMXA1V2xoQ2RrOXRUbllLWTIxT2FFeFhSbkJNTWs1c1dWZDNObU50Vm0xUGJrcHNXbTVOZG1GSFZtaGFTRTEyWWxkR2NHSnFRMEpwWjFsTFMzZFpRa0pCU0ZkbFVVbEZRV2RTT0FwQ1NHOUJaVUZDTWtGT01EbE5SM0pIZUhoRmVWbDRhMlZJU214dVRuZExhVk5zTmpRemFubDBMelJsUzJOdlFYWkxaVFpQUVVGQlFtOVNRVkkyTVVGQkNrRkJVVVJCUldOM1VsRkphRUZPTUZaVlRFdDFhVlJ3WVRObGFXWkdUSFJsVVdvMFJFd3pRMnRSYTNCcWJHUkRiRUY0TVdRemFuRmtRV2xDVXprdmFsSUtiRlpRVEhKWVRXUlBTbTVIUkhJeGJtOUdSMmhEYTBVMWJYQjRSamxsUm5WclQwSlViR3BCUzBKblozRm9hMnBQVUZGUlJFRjNUbTlCUkVKc1FXcENNd3BwYTJKVVZWcFZhbkEyZVZjelNqTTRaVXBYY2xWRmNHYzVUbU5HYUhscFJsVjFRM2h0TlVGTFNsbHlMMHROV0hKRGRrWnBlVUZ5WlVjMFFYcHpWSE5EQ2sxUlJGY3pTbVJHZVRkTFNtdHpPVEE1VTA4NVEydG5ZUzgyTTNKUFlURjNRakpMWjNwSlkxUkZibUkxUTBoMFVrd3ZOWGhoYnpjclQwOHdUVk50UVRJS05qTjNQUW90TFMwdExVVk9SQ0JEUlZKVVNVWkpRMEZVUlMwdExTMHRDZz09In19fX0="}]},"messageSignature":{"messageDigest":{"algorithm":"SHA2_256","digest":"iCtOERiR/tD0uerKtMYn9BifUM7NiPtaUoVHudLCdtA="},"signature":"MEUCIHu+BiYU+o3y1P47k/yH/Q3Nhi2T9RJTiBXQ+tlCqVUuAiEA6R8wl8BXOFkVLPRyRigKAZSokFdjNVulth9e0KTvyRQ="}}
1
+ {"mediaType":"application/vnd.dev.sigstore.bundle.v0.3+json","verificationMaterial":{"certificate":{"rawBytes":"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"},"tlogEntries":[{"logIndex":"3128547672","logId":{"keyId":"wNI9atQGlz+VWfO6LRygH4QUfY/8W4RFwiT5i5WRgB0="},"kindVersion":{"kind":"hashedrekord","version":"0.0.1"},"integratedTime":"1791366440","inclusionPromise":{"signedEntryTimestamp":"MEUCIQC6DO7APfHDL/StgQoyBgdZl1qI4ZRhHk6W6TXrqzVBRwIgGuH4Hdgnphs/uZ3ne2ARWLunBdFzeykayR5urHI1Yug="},"inclusionProof":{"logIndex":"3006643410","rootHash":"WXZ26vYalvyz9aDQ7ic/U2usBJyPMILUaXWDMjj0i4Q=","treeSize":"3006643445","hashes":["INRS4HbGvi7NO8VNspLAKD6WF6ol3r5pv4ZPFOVeLx0=","jomjZrwLncxel5p/LeKeAvrIk9/C833mWJARenh11B8=","kaK5uKMtoqkeOkkt0rkcLLSzcG7sQx+W4Z3glEXQlXc=","HnujNah4KgQDXVmULnUpyfifHGJIA8VnIigURlwC5Kg=","0V5pdSg58SkE/4K7hAuIC7fMfCLCM+qneBlAWpoklqI=","6HSn4rEh/wMKWLPGDjL01t5iWiGCQk4cLBecnzjKVDs=","47xA+fz7+qD2uj5Jj9LOTIweUSLkbQbtpPOC4iORi0E=","W1fKcRL1FrKDqmlyRUhK6TeRTd2y4MB97Bj9awbFDEo=","W5A/gAEQJZpRraeg9Dn/SG2uGoVyJmuYqbTdwOOMUvQ=","k/EKpDWojo6OPiY94uK41Hndso7w9paBdJy1WBjGOeI=","o8grXP/F6qlPjCPhab77tfSlvNkikB1xTlaNs6g+hY8=","pZgJHt3guSiHkvI0Lh5xHlh8y478YfQUdyNdPLaammY=","Yxe6ZGwfKX/nqpgUhUKJ1P4+LKFnBixdjJqU+sAR6gg=","4d496XmMaawAX5fndJYS/MpuIpD4Z0THjnaR3oRGOMc=","A9V18/bi4n6coZPrqnksxIr426UD0L/Z9ag729ebCVc=","5DLOk+VpBunLphADXMWyEyujySq1LBxtlkv3bSWinlg=","UBxsHzLB5R5DPBWQbXrY3XCd/Nn9Exvtg+VeX7vgpHM=","3fRFZuDepJD9y0NjNA9nqInlZuCxNImKQJJfr//qImA=","x9rXqkSu8+Vm4yqD2XeAwn305JZ4ZykdOwcD90FjP8o=","NlOclldmKPA1tMKIskqHAwuQDYHp31YwpK+OOMrMccc=","qxzHanAzz57SDdmJe0B7bJK72NTIBbwEMGBBKvDOROw=","xH/DCseLHr9eKoYT8qsORZK7zVdEGYWHuVtsVrD95wY="],"checkpoint":{"envelope":"rekor.sigstore.dev - 1193050959916656506\n3006643445\nWXZ26vYalvyz9aDQ7ic/U2usBJyPMILUaXWDMjj0i4Q=\n\n— rekor.sigstore.dev wNI9ajBGAiEA2duEavJmv78VR0uTZEwwbqlldDzfrs/us0bqT+/bsa8CIQDvUW/Hs/hTlvE2ntmGF2dqf7aPua8KbfXzqA2U9m423A==\n"}},"canonicalizedBody":"eyJhcGlWZXJzaW9uIjoiMC4wLjEiLCJraW5kIjoiaGFzaGVkcmVrb3JkIiwic3BlYyI6eyJkYXRhIjp7Imhhc2giOnsiYWxnb3JpdGhtIjoic2hhMjU2IiwidmFsdWUiOiI2NjA1MmNmMDIzNWJiNjczMTExZmJmOWI0NDc5Y2Y2YjhlOGZiMWI5NDYzZTRlMDQyNWYwNmQ3NGFkMzY0MmZiIn19LCJzaWduYXR1cmUiOnsiY29udGVudCI6Ik1FVUNJUUQ0cGptVkRWRmJzQmhGcGIxZXNIcUt3T1NOY1dRWWtzeDRFb3NEMVZnOU53SWdYZ1hKUlVOSjVKQmVxUXQ3NmNIY3hQUmJFbVdnQVVyT3dzUXo0YWpjTk1NPSIsInB1YmxpY0tleSI6eyJjb250ZW50IjoiTFMwdExTMUNSVWRKVGlCRFJWSlVTVVpKUTBGVVJTMHRMUzB0Q2sxSlNVYzNla05EUW01VFowRjNTVUpCWjBsVlkybzJZazk0UVVWME5VWXhhekZ0UTBrNWRVdDNaRE5NWkZsemQwTm5XVWxMYjFwSmVtb3dSVUYzVFhjS1RucEZWazFDVFVkQk1WVkZRMmhOVFdNeWJHNWpNMUoyWTIxVmRWcEhWakpOVWpSM1NFRlpSRlpSVVVSRmVGWjZZVmRrZW1SSE9YbGFVekZ3WW01U2JBcGpiVEZzV2tkc2FHUkhWWGRJYUdOT1RXcFplRTFFUVROTlJHc3dUbnBKZDFkb1kwNU5hbGw0VFVSQk0wMUVhekZPZWtsM1YycEJRVTFHYTNkRmQxbElDa3R2V2tsNmFqQkRRVkZaU1V0dldrbDZhakJFUVZGalJGRm5RVVY0VTBJd2NuWnlaMkpJYjJWUU1YcEZka1p4TnpWcFNHZHNWMU5yVTJsWU1IcDVRblVLWjNNNWVrVktia0Y0Y2xRMlNGTnliMGRrVm5GQ1J6aHhRbWR0VEZac2JWQk5RVVJ1VHpKdmJFcGpTSFZETkVoUVVHRlBRMEphVFhkbloxZFFUVUUwUndwQk1WVmtSSGRGUWk5M1VVVkJkMGxJWjBSQlZFSm5UbFpJVTFWRlJFUkJTMEpuWjNKQ1owVkdRbEZqUkVGNlFXWkNaMDVXU0ZOTlJVZEVRVmRuUWxSbUNqQXJibEJXYVZGU2JIWnRiekpQYTI5V1lVeEhUR2hvYTFCNlFtMUNaMDVXU0ZKRlFrRm1PRVZZUkVKaGFHeG9iMlJJVW5kamVtOTJUREprY0dSSGFERUtXV2sxYW1JeU1IWlpNamw1V1RKRmRGbFhhM1paTWxab1lrTTRkVm95YkRCaFNGWnBURE5rZG1OdGRHMWlSemt6WTNrNWVWcFhlR3haV0U1c1RGZE9hQXBpYlZKd1drZEdNRnBUTlRWaVYzaEJZMjFXYldONU9XOWFWMFpyWTNrNWRGbFhiSFZOUkd0SFEybHpSMEZSVVVKbk56aDNRVkZGUlVzeWFEQmtTRUo2Q2s5cE9IWmtSemx5V2xjMGRWbFhUakJoVnpsMVkzazFibUZZVW05a1Ywb3hZekpXZVZreU9YVmtSMVoxWkVNMWFtSXlNSGRJZDFsTFMzZFpRa0pCUjBRS2RucEJRa0ZuVVZKa01qbDVZVEphYzJJelpHWmFSMng2WTBkR01Ga3laM2RPWjFsTFMzZFpRa0pCUjBSMmVrRkNRWGRSYjA5VVozZGFha0V5VGxkUmVncE5WR2N6VG1wSk5FNUVTWGRaYWtacVQwUlplRnBYV21wTmVtYzFUWHByTlUxVVdYaE9lbHBwVFVSQmEwSm5iM0pDWjBWRlFWbFBMMDFCUlVWQ1FscEVDbHBYUm5OSlNFcHNZa2RXYUdNeVZXZFpNa1oxV2tkc2ExbFlVbXhOUW5OSFEybHpSMEZSVVVKbk56aDNRVkZWUlVSWFRuWmpiVTVvVEZkR2NFd3lUbXdLV1ZkM2QwaFJXVXRMZDFsQ1FrRkhSSFo2UVVKQ1oxRlFZMjFXYldONU9XOWFWMFpyWTNrNWRGbFhiSFZOUkhOSFEybHpSMEZSVVVKbk56aDNRVkZuUlFwTVVYZHlZVWhTTUdOSVRUWk1lVGt3WWpKMGJHSnBOV2haTTFKd1lqSTFla3h0WkhCa1IyZ3hXVzVXZWxwWVNtcGlNalV3V2xjMU1FeHRUblppVkVKdkNrSm5iM0pDWjBWRlFWbFBMMDFCUlVwQ1JtOU5WMGRvTUdSSVFucFBhVGgyV2pKc01HRklWbWxNYlU1MllsTTVhbUl6U21wWlV6Rm9ZVk01YWxwWFJuTUtUSGsxYm1GWVVtOWtWMGwyWkRJNWVXRXlXbk5pTTJSNlRETktiR0pIVm1oak1sVjBXVEpHZFZwSGJHdFpXRkpzVEc1c2RHSkZRbmxhVjFwNlRESm9iQXBaVjFKNlRESXhhR0ZYTkhkUFFWbExTM2RaUWtKQlIwUjJla0ZDUTJkUmNVUkRaelZQUkVKdFRVUlpNVnBFVFhoUFJHTXlUV3BuTUUxcVFtbE5WMDAwQ2s1cVJteGFiVTE2VDBScmVrOVVhM2hPYWtVelRtMUpkMDFDTUVkRGFYTkhRVkZSUW1jM09IZEJVWE5GUkhkM1Rsb3liREJoU0ZacFRGZG9kbU16VW13S1drUkJkMEpuYjNKQ1owVkZRVmxQTDAxQlJVMUNRMGxOU1Vkb01HUklRbnBQYVRoMldqSnNNR0ZJVm1sTWJVNTJZbE01YW1JelNtcFpVekZvWVZNNWFncGFWMFp6VFVSblIwTnBjMGRCVVZGQ1p6YzRkMEZSTUVWTFozZHZUMVJuZDFwcVFUSk9WMUY2VFZSbk0wNXFTVFJPUkVsM1dXcEdhazlFV1hoYVYxcHFDazE2WnpWTmVtczFUVlJaZUU1NldtbE5SRUZtUW1kdmNrSm5SVVZCV1U4dlRVRkZUMEpDUlUxRU0wcHNXbTVOZG1GSFZtaGFTRTEyWWxkR2NHSnFRV0VLUW1kdmNrSm5SVVZCV1U4dlRVRkZVRUpCZDAxRGFrVjRUMVJGTVU1VVVURlBWRTEzUzNkWlMwdDNXVUpDUVVkRWRucEJRa1ZCVVdSRVFuUnZaRWhTZHdwamVtOTJUREprY0dSSGFERlphVFZxWWpJd2Rsa3lPWGxaTWtWMFdWZHJkMGRCV1V0TGQxbENRa0ZIUkhaNlFVSkZVVkZMUkVGbk0wMXFhek5QUkdjeUNrMUVRbTlDWjI5eVFtZEZSVUZaVHk5TlFVVlRRa1p2VFZkSGFEQmtTRUo2VDJrNGRsb3liREJoU0ZacFRHMU9kbUpUT1dwaU0wcHFXVk14YUdGVE9Xb0tXbGRHYzB4NU5XNWhXRkp2WkZkSmRtUXlPWGxoTWxwellqTmtla3d6U214aVIxWm9ZekpWZEZreVJuVmFSMnhyV1ZoU2JFeHViSFJpUlVKNVdsZGFlZ3BNTW1oc1dWZFNla3d5TVdoaFZ6UjNUMEZaUzB0M1dVSkNRVWRFZG5wQlFrVjNVWEZFUTJjMVQwUkNiVTFFV1RGYVJFMTRUMFJqTWsxcVp6Qk5ha0pwQ2sxWFRUUk9ha1pzV20xTmVrOUVhM3BQVkd0NFRtcEZNMDV0U1hkTlEwVkhRMmx6UjBGUlVVSm5OemgzUVZKUlJVVjNkMUprTWpsNVlUSmFjMkl6WkdZS1drZHNlbU5IUmpCWk1tZDNWa0ZaUzB0M1dVSkNRVWRFZG5wQlFrWlJVa2RFUlZKdlpFaFNkMk42YjNaTU1tUndaRWRvTVZscE5XcGlNakIyV1RJNWVRcFpNa1YwV1ZkcmRsa3lWbWhpUXpsb1dUTlNjR0l5TlhwTU0wb3hZbTVOZGsxNll6Sk5SRWw0VDBSUmQwNXFTWFpaV0ZJd1dsY3hkMlJJVFhaTlZFRllDa0puYjNKQ1owVkZRVmxQTDAxQlJWZENRV3ROUWpOQ2VXRllXbWhrUjFWM1RtZFpTMHQzV1VKQ1FVZEVkbnBCUWtkQlVXOUVRMXA1V2xoQ2RrOXRUbllLWTIxT2FFeFhSbkJNTWs1c1dWZDNObU50Vm0xUGJrcHNXbTVOZG1GSFZtaGFTRTEyWWxkR2NHSnFRMEpwWjFsTFMzZFpRa0pCU0ZkbFVVbEZRV2RTT0FwQ1NHOUJaVUZDTWtGT01EbE5SM0pIZUhoRmVWbDRhMlZJU214dVRuZExhVk5zTmpRemFubDBMelJsUzJOdlFYWkxaVFpQUVVGQlFtOVNXRU53UzBWQkNrRkJVVVJCUldOM1VsRkpaMVZtYldoWUx6ZFZUa051WkhwVFpXMWFXRlI2UmtwbVVpdFJNQzl1V0RoMWVURmpTbVphWW1oeFJHZERTVkZFUjFKR2NHY0tPVlV4ZFRSVWVrZExSa1ZaTTBvNE0zcDZjak5YYWxsUFJXMUpUVVY1VTNnMFZtUnZNRVJCUzBKblozRm9hMnBQVUZGUlJFRjNUbkJCUkVKdFFXcEZRUW9ySzNCWE5HbHBWSGRtY2tWMmMwMWtURlJ4Ym1waFdGRnpjM2xKWnpsc1ZVa3lTa014WjI5S2JuWlhSV05pUm5sd1F6WTBValJ1Um0xWWR6a3dOaXN5Q2tGcVJVRnZSM0JzWkNzM1RXeEVSekpSYlVoTWFWQXJjMUJYZVc5MGEwTTVjREZYT0ZwVFVGWkpZalIyTDBkTmVETm1WMUUwUkVGRVRYSnNZVWRyTm5JS1drbzNNQW90TFMwdExVVk9SQ0JEUlZKVVNVWkpRMEZVUlMwdExTMHRDZz09In19fX0="}]},"messageSignature":{"messageDigest":{"algorithm":"SHA2_256","digest":"ZgUs8CNbtnMRH7+bRHnPa46PsblGPk4EJfBtdK02Qvs="},"signature":"MEUCIQD4pjmVDVFbsBhFpb1esHqKwOSNcWQYksx4EosD1Vg9NwIgXgXJRUNJ5JBeqQt76cHcxPRbEmWgAUrOwsQz4ajcNMM="}}