@nvisy/sdk 0.24.0 → 0.26.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.
@@ -5958,6 +5958,60 @@ interface paths {
5958
5958
  patch?: never;
5959
5959
  trace?: never;
5960
5960
  };
5961
+ "/notifications/unread/events/": {
5962
+ parameters: {
5963
+ query?: never;
5964
+ header?: never;
5965
+ path?: never;
5966
+ cookie?: never;
5967
+ };
5968
+ /**
5969
+ * Stream unread notifications count
5970
+ * @description Opens a Server-Sent Events stream of the account's unread notification count. Emits the current count immediately, then each change as notifications arrive or are marked read, until the client disconnects. Each event's `data` is an `UnreadCountEvent` (see the response schema). Authenticate with a Bearer token via a `fetch`-based client; the native `EventSource` cannot send an `Authorization` header.
5971
+ */
5972
+ get: {
5973
+ parameters: {
5974
+ query?: never;
5975
+ header?: never;
5976
+ path?: never;
5977
+ cookie?: never;
5978
+ };
5979
+ requestBody?: never;
5980
+ responses: {
5981
+ /** @description Server-sent event stream; each event's `data` is the payload below. */
5982
+ 200: {
5983
+ headers: {
5984
+ [name: string]: unknown;
5985
+ };
5986
+ content: {
5987
+ "text/event-stream": components["schemas"]["UnreadCountEvent"];
5988
+ };
5989
+ };
5990
+ /**
5991
+ * @description HTTP error response representation with security-conscious design.
5992
+ *
5993
+ * This struct contains all the information needed to serialize an error
5994
+ * response, including the error name, message, HTTP status code, resource
5995
+ * information, and user-friendly messages.
5996
+ */
5997
+ 401: {
5998
+ headers: {
5999
+ [name: string]: unknown;
6000
+ };
6001
+ content: {
6002
+ "application/json": components["schemas"]["ErrorResponse"];
6003
+ };
6004
+ };
6005
+ };
6006
+ };
6007
+ put?: never;
6008
+ post?: never;
6009
+ delete?: never;
6010
+ options?: never;
6011
+ head?: never;
6012
+ patch?: never;
6013
+ trace?: never;
6014
+ };
5961
6015
  "/notifications/read/": {
5962
6016
  parameters: {
5963
6017
  query?: never;
@@ -7688,13 +7742,6 @@ interface paths {
7688
7742
  };
7689
7743
  requestBody?: never;
7690
7744
  responses: {
7691
- /** @description no content */
7692
- 200: {
7693
- headers: {
7694
- [name: string]: unknown;
7695
- };
7696
- content?: never;
7697
- };
7698
7745
  /**
7699
7746
  * @description HTTP error response representation with security-conscious design.
7700
7747
  *
@@ -7745,13 +7792,6 @@ interface paths {
7745
7792
  };
7746
7793
  requestBody?: never;
7747
7794
  responses: {
7748
- /** @description no content */
7749
- 200: {
7750
- headers: {
7751
- [name: string]: unknown;
7752
- };
7753
- content?: never;
7754
- };
7755
7795
  /**
7756
7796
  * @description HTTP error response representation with security-conscious design.
7757
7797
  *
@@ -7832,22 +7872,28 @@ interface components {
7832
7872
  /** @description Handle of the account. */
7833
7873
  username: components["schemas"]["Handle"];
7834
7874
  };
7835
- /** @description Response type for a workspace activity. */
7875
+ /**
7876
+ * @description Response type for a workspace activity.
7877
+ *
7878
+ * The typed payload is nested under `payload`, so an activity is
7879
+ * `{ id, workspaceSlug, performedBy, payload: { activityType, <params...> }, createdAt }`.
7880
+ */
7836
7881
  Activity: {
7837
- /** @description Type of activity. */
7838
- activityType: components["schemas"]["ActivityType"];
7839
7882
  /**
7840
7883
  * Format: date-time
7841
7884
  * @description When the activity occurred.
7842
7885
  */
7843
7886
  createdAt: string;
7844
- /** @description Human-readable description. */
7845
- description: string;
7846
7887
  /**
7847
7888
  * Format: uuid
7848
7889
  * @description Unique activity identifier.
7849
7890
  */
7850
7891
  id: string;
7892
+ /**
7893
+ * @description The activity type and its typed params, absent when the stored params do
7894
+ * not decode into their `activityType`.
7895
+ */
7896
+ payload?: components["schemas"]["ActivityPayload"];
7851
7897
  /** @description Account that performed the activity. */
7852
7898
  performedBy: components["schemas"]["AccountRef"];
7853
7899
  /** @description Handle of the workspace this activity belongs to. */
@@ -7872,13 +7918,112 @@ interface components {
7872
7918
  total?: number;
7873
7919
  };
7874
7920
  /**
7875
- * @description Defines the type of activity performed in a workspace for audit logging.
7921
+ * @description The typed payload of an audit-log activity, tagged by `activityType`.
7876
7922
  *
7877
- * This enumeration corresponds to the `ACTIVITY_TYPE` PostgreSQL enum and is used
7878
- * to categorize different types of activities that occur within workspaces for comprehensive
7879
- * audit trail and activity tracking.
7923
+ * Each variant is one activity type carrying its own params. No rendered text is
7924
+ * included the client localizes the copy from `activityType` and the params.
7925
+ * The `activityType` values match the `ACTIVITY_TYPE` enum.
7880
7926
  */
7881
- ActivityType: "workspace:created" | "workspace:updated" | "workspace:deleted" | "workspace:exported" | "workspace:imported" | "member:deleted" | "member:updated" | "invite:created" | "invite:accepted" | "invite:declined" | "invite:canceled" | "connection:created" | "connection:updated" | "connection:deleted" | "connection:synced" | "webhook:created" | "webhook:updated" | "webhook:deleted" | "webhook:triggered" | "file:created" | "file:updated" | "file:deleted" | "file:verified" | "custom";
7927
+ ActivityPayload: ({
7928
+ /** @constant */
7929
+ activityType: "workspace.created";
7930
+ } & components["schemas"]["WorkspaceActivityParams"]) | ({
7931
+ /** @constant */
7932
+ activityType: "workspace.updated";
7933
+ } & components["schemas"]["WorkspaceActivityParams"]) | ({
7934
+ /** @constant */
7935
+ activityType: "workspace.deleted";
7936
+ } & components["schemas"]["WorkspaceActivityParams"]) | ({
7937
+ /** @constant */
7938
+ activityType: "member.added";
7939
+ } & components["schemas"]["MemberActivityParams"]) | ({
7940
+ /** @constant */
7941
+ activityType: "member.updated";
7942
+ } & components["schemas"]["MemberActivityParams"]) | ({
7943
+ /** @constant */
7944
+ activityType: "member.deleted";
7945
+ } & components["schemas"]["MemberActivityParams"]) | ({
7946
+ /** @constant */
7947
+ activityType: "invite.created";
7948
+ } & components["schemas"]["InviteActivityParams"]) | ({
7949
+ /** @constant */
7950
+ activityType: "invite.accepted";
7951
+ } & components["schemas"]["InviteActivityParams"]) | ({
7952
+ /** @constant */
7953
+ activityType: "invite.declined";
7954
+ } & components["schemas"]["InviteActivityParams"]) | ({
7955
+ /** @constant */
7956
+ activityType: "invite.canceled";
7957
+ } & components["schemas"]["InviteActivityParams"]) | ({
7958
+ /** @constant */
7959
+ activityType: "connection.created";
7960
+ } & components["schemas"]["ConnectionActivityParams"]) | ({
7961
+ /** @constant */
7962
+ activityType: "connection.updated";
7963
+ } & components["schemas"]["ConnectionActivityParams"]) | ({
7964
+ /** @constant */
7965
+ activityType: "connection.deleted";
7966
+ } & components["schemas"]["ConnectionActivityParams"]) | ({
7967
+ /** @constant */
7968
+ activityType: "connection.sync.completed";
7969
+ } & components["schemas"]["ConnectionActivityParams"]) | ({
7970
+ /** @constant */
7971
+ activityType: "connection.sync.failed";
7972
+ } & components["schemas"]["ConnectionActivityParams"]) | ({
7973
+ /** @constant */
7974
+ activityType: "webhook.created";
7975
+ } & components["schemas"]["WebhookActivityParams"]) | ({
7976
+ /** @constant */
7977
+ activityType: "webhook.updated";
7978
+ } & components["schemas"]["WebhookActivityParams"]) | ({
7979
+ /** @constant */
7980
+ activityType: "webhook.deleted";
7981
+ } & components["schemas"]["WebhookActivityParams"]) | ({
7982
+ /** @constant */
7983
+ activityType: "webhook.triggered";
7984
+ } & components["schemas"]["WebhookActivityParams"]) | ({
7985
+ /** @constant */
7986
+ activityType: "file.created";
7987
+ } & components["schemas"]["FileActivityParams"]) | ({
7988
+ /** @constant */
7989
+ activityType: "file.updated";
7990
+ } & components["schemas"]["FileActivityParams"]) | ({
7991
+ /** @constant */
7992
+ activityType: "file.deleted";
7993
+ } & components["schemas"]["FileActivityParams"]) | ({
7994
+ /** @constant */
7995
+ activityType: "file.verified";
7996
+ } & components["schemas"]["FileActivityParams"]) | ({
7997
+ /** @constant */
7998
+ activityType: "pipeline.created";
7999
+ } & components["schemas"]["PipelineActivityParams"]) | ({
8000
+ /** @constant */
8001
+ activityType: "pipeline.updated";
8002
+ } & components["schemas"]["PipelineActivityParams"]) | ({
8003
+ /** @constant */
8004
+ activityType: "pipeline.deleted";
8005
+ } & components["schemas"]["PipelineActivityParams"]) | ({
8006
+ /** @constant */
8007
+ activityType: "pipeline.run.started";
8008
+ } & components["schemas"]["PipelineRunActivityParams"]) | ({
8009
+ /** @constant */
8010
+ activityType: "pipeline.run.analyzed";
8011
+ } & components["schemas"]["PipelineRunActivityParams"]) | ({
8012
+ /** @constant */
8013
+ activityType: "pipeline.run.completed";
8014
+ } & components["schemas"]["PipelineRunActivityParams"]) | ({
8015
+ /** @constant */
8016
+ activityType: "pipeline.run.failed";
8017
+ } & components["schemas"]["PipelineRunActivityParams"]) | ({
8018
+ /** @constant */
8019
+ activityType: "policy.created";
8020
+ } & components["schemas"]["PolicyActivityParams"]) | ({
8021
+ /** @constant */
8022
+ activityType: "policy.updated";
8023
+ } & components["schemas"]["PolicyActivityParams"]) | ({
8024
+ /** @constant */
8025
+ activityType: "policy.deleted";
8026
+ } & components["schemas"]["PolicyActivityParams"]);
7882
8027
  /** @description Anthropic API credentials. */
7883
8028
  AnthropicCredentials: {
7884
8029
  /** @description Anthropic API key. */
@@ -7984,7 +8129,7 @@ interface components {
7984
8129
  * UUID, a jurisdiction) is that layer's concern — it can encode it in the
7985
8130
  * name or carry it separately.
7986
8131
  *
7987
- * [`Redaction`]: crate::entity::provenance::EventKind::Redaction
8132
+ * [`Redaction`]: crate::entity::audit::AuditKind::Redaction
7988
8133
  */
7989
8134
  Attribution: {
7990
8135
  /** @description Human-readable description (e.g. `"right to erasure"`), when given. */
@@ -7993,170 +8138,90 @@ interface components {
7993
8138
  name: string;
7994
8139
  };
7995
8140
  /**
7996
- * @description Per-call payload a recognizer inspects for the [`Audio`] modality.
7997
- *
7998
- * Carries the encoded audio bytes; an optional filename aids diagnostics
7999
- * and encoding inference (the container format a decoder should expect).
8000
- * The recognizable text — a timestamped transcript — is *not* held here;
8001
- * a speech-to-text [`Enricher`] stamps it onto the call's
8002
- * [`artifacts`], keeping
8003
- * `AudioData` the codec's payload alone.
8004
- *
8005
- * [`Audio`]: super::Audio
8006
- * [`Enricher`]: crate::recognition::Enricher
8007
- * [`artifacts`]: crate::recognition::RecognizerContext::artifacts
8008
- */
8009
- AudioData: {
8010
- /** @description Original filename, when known. */
8011
- filename?: string;
8012
- };
8013
- /**
8014
- * @description Detected piece of sensitive information within some medium.
8141
+ * @description One node in an entity's audit DAG: a thing that happened, with its
8142
+ * effect on confidence and its tamper-evident links.
8015
8143
  *
8016
- * Generic over the [`Modality`] `M`, which is what makes the model
8017
- * multimodal: a text pipeline yields `Entity<Text>`, an audio pipeline
8018
- * `Entity<Audio>`, and so on. The entity's location is the modality's
8019
- * [`Location`] type, `M::Location`.
8144
+ * Events are recorded on an entity's [`AuditLog`], forming the full audit
8145
+ * trail of its life: each recognizer that found it, the deduplication that
8146
+ * fused them, any score calibration, and the redaction that hid it. The
8147
+ * uniform spine (who, resulting score, when) is the same for every event; the
8148
+ * [`kind`] carries the event-specific detail *and* the explanation of why the
8149
+ * event happened.
8020
8150
  *
8021
- * # Birth and fusion
8151
+ * Each event links to its [`parents`] by their [`hash`]: a birth event (a
8152
+ * recognizer's first detection) has no parents, a normal step has one, and a
8153
+ * [fusion](crate::entity::audit::AuditLog::record_fusion) has several. Its own
8154
+ * [`hash`] folds the
8155
+ * payload together with the parents' hashes, so altering any event breaks
8156
+ * every event downstream of it: [`AuditLog::verify`] walks the DAG and
8157
+ * reports the first break.
8022
8158
  *
8023
- * A recognizer emits an entity directly, carrying a single recognition
8024
- * [`Event`] (its own finding) in the entity's [`provenance`]. When
8025
- * several recognizers find the same thing, a fusion step (in
8026
- * `elide`) combines their entities into one: the survivor's
8027
- * [`location`] and [`confidence`] are the *fused* values, and every
8028
- * contributing recognition event, plus a deduplication event, is
8029
- * retained in its provenance. The entity therefore carries its full
8030
- * audit trail with it.
8159
+ * `entity.confidence` always equals the [`confidence`] of the most recent
8160
+ * event. The confidence *flowing in* is not stored: it is the parents'
8161
+ * [`confidence`], recovered from the DAG.
8031
8162
  *
8032
- * [`Location`]: Modality::Location
8033
- * [`Event`]: crate::entity::provenance::Event
8034
- * [`provenance`]: Entity::provenance
8035
- * [`location`]: Entity::location
8036
- * [`confidence`]: Entity::confidence
8163
+ * [`AuditLog`]: crate::entity::audit::AuditLog
8164
+ * [`AuditLog::record_fusion`]: crate::entity::audit::AuditLog::record_fusion
8165
+ * [`AuditLog::verify`]: crate::entity::audit::AuditLog::verify
8166
+ * [`kind`]: AuditEvent::kind
8167
+ * [`parents`]: AuditEvent::parents
8168
+ * [`hash`]: AuditEvent::hash
8169
+ * [`confidence`]: AuditEvent::confidence
8037
8170
  */
8038
- AudioEntity: {
8039
- /** @description Effective confidence in `0.0..=1.0` (fused, if applicable). */
8040
- confidence: components["schemas"]["Confidence"];
8041
- /**
8042
- * @description Coreference identifier, if a recognizer resolved this entity as one
8043
- * mention of a cluster. Entities sharing an [`EntityCoRef`] denote the
8044
- * same real-world thing.
8045
- */
8046
- coref?: components["schemas"]["EntityCoRef"];
8047
- /**
8048
- * Format: uuid
8049
- * @description Stable unique identity for this entity (time-ordered UUIDv7), minted
8050
- * when the entity is assembled.
8051
- */
8052
- id: string;
8053
- /**
8054
- * @description What kind of sensitive information this is (resolved via a
8055
- * [`LabelCatalog`]).
8056
- */
8057
- label: components["schemas"]["LabelRef"];
8058
- /**
8059
- * @description The language of this entity's surrounding text, when a recognizer
8060
- * resolved one. `None` when unknown or language-agnostic.
8061
- */
8062
- language?: string;
8063
- /**
8064
- * @description Location of the entity within the medium (fused, if it came from more
8065
- * than one detection).
8066
- */
8067
- location: components["schemas"]["AudioLocation"];
8171
+ AudioAuditEvent: {
8068
8172
  /**
8069
- * @description Detection audit trail: every contributing detection and the fusion
8070
- * event, if any.
8173
+ * @description Confidence after this event: the entity's effective confidence once it
8174
+ * has happened.
8071
8175
  */
8072
- provenance: components["schemas"]["AudioProvenance"];
8176
+ confidence: components["schemas"]["Confidence"];
8073
8177
  /**
8074
- * @description Byte range of the match in the *recognized text* it was found in (the
8075
- * OCR layout text, the audio transcript, or the text payload itself) —
8076
- * the stable key back into that enrichment artifact, where the rich
8077
- * context lives (which OCR block, which speaker) that the geometric
8078
- * [`location`] cannot hold. `None` for entities not found via text
8079
- * recognition (e.g. a VLM box). Provenance, not a coordinate: redaction
8080
- * uses [`location`]; an audit uses this with the artifact.
8178
+ * @description This event's hash, over its payload and its parents' hashes. Assigned by
8179
+ * [`AuditLog`] when the event is recorded; read it through
8180
+ * [`hash`](Self::hash). Recomputing it is how the DAG is verified.
8081
8181
  *
8082
- * [`location`]: Entity::location
8083
- */
8084
- recognized_range?: components["schemas"]["Range_of_uint"];
8085
- };
8086
- /**
8087
- * @description One recognized entity plus the optional reviewer override.
8088
- *
8089
- * The bound mirrors elide's [`Entity<M>`]: serialization needs
8090
- * `M::Location` and `M::Data` (de)serializable, and JsonSchema
8091
- * derivation needs them schema-able. All four modalities elide
8092
- * ships satisfy these under the `serde` + `schema` features.
8093
- */
8094
- AudioEntityRecord: {
8095
- /** @description The elide entity, as recognition produced it. */
8096
- entity: components["schemas"]["AudioEntity"];
8097
- /**
8098
- * @description Reviewer-supplied redaction override.
8182
+ * Not publicly settable: only [`AuditLog`] assigns it, so a caller cannot
8183
+ * forge a self-consistent event outside the recording path.
8099
8184
  *
8100
- * `None` means "use the matching policy rule's decision";
8101
- * `Some(...)` overrides that rule for this specific entity
8102
- * at apply time. Reviewer overrides take precedence over
8103
- * every policy rule and inherit the authority of the
8104
- * [`Review::policy_id`] they name — the audit event's
8105
- * attribution stamps that policy so the trail names the
8106
- * authority under which the override fired.
8185
+ * [`AuditLog`]: crate::entity::audit::AuditLog
8107
8186
  */
8108
- review?: components["schemas"]["Review"];
8109
- };
8110
- /**
8111
- * @description One thing that happened to an entity, with its effect on confidence.
8112
- *
8113
- * Events are recorded in order on an entity's [`Provenance`], forming
8114
- * the full audit trail of its life: each recognizer that found it, the
8115
- * deduplication that fused them, any score calibration, and the
8116
- * redaction that hid it. The uniform spine (who, before/after score,
8117
- * when, why) is the same for every event; the [`kind`] carries the
8118
- * event-specific detail.
8119
- *
8120
- * `entity.confidence` always equals the [`after`] of the most recent
8121
- * event.
8122
- *
8123
- * [`Provenance`]: crate::entity::provenance::Provenance
8124
- * [`kind`]: Event::kind
8125
- * [`after`]: Event::after
8126
- */
8127
- AudioEvent: {
8128
- /** @description Confidence after this event. */
8129
- after: components["schemas"]["Confidence"];
8130
- /** @description When the event happened (UTC). */
8131
- at: string;
8187
+ hash: components["schemas"]["AuditHash"];
8188
+ /** @description Kind of event, with its event-specific detail and its rationale. */
8189
+ kind: components["schemas"]["AudioAuditKind"];
8132
8190
  /**
8133
- * @description Confidence before this event, if there was a prior value. `None` on
8134
- * the first (birth) event.
8191
+ * @description The events this one follows, by their hash. Empty for a birth event, one
8192
+ * entry for a normal step, several for a fusion. Assigned by [`AuditLog`]
8193
+ * when the event is recorded; read it through [`parents`](Self::parents).
8194
+ *
8195
+ * Not publicly settable: the links are the tamper-evident structure, so
8196
+ * only [`AuditLog::record`] / [`AuditLog::record_fusion`] assign them.
8197
+ *
8198
+ * [`AuditLog`]: crate::entity::audit::AuditLog
8199
+ * [`AuditLog::record`]: crate::entity::audit::AuditLog::record
8200
+ * [`AuditLog::record_fusion`]: crate::entity::audit::AuditLog::record_fusion
8135
8201
  */
8136
- before?: components["schemas"]["Confidence"];
8137
- /** @description Kind of event, with its event-specific detail. */
8138
- kind: components["schemas"]["AudioEventKind"];
8139
- /** @description Free-text explanation of what the event did and why. */
8140
- reason: string;
8202
+ parents: components["schemas"]["AuditHash"][];
8141
8203
  /**
8142
8204
  * @description Who produced this event: a recognizer name, a deduplication strategy,
8143
8205
  * an operator, or whatever acted.
8144
8206
  */
8145
8207
  source: string;
8208
+ /** @description When the event happened (UTC). */
8209
+ timestamp: string;
8146
8210
  };
8147
8211
  /**
8148
- * @description Kind of an [`Event`], carrying its event-specific detail.
8212
+ * @description Kind of an [`AuditEvent`], carrying its event-specific detail and the
8213
+ * rationale for why it happened.
8149
8214
  *
8150
8215
  * `#[non_exhaustive]`: new event kinds (verification, annotation, …)
8151
8216
  * can be added compatibly. The recognition kinds ([`Pattern`],
8152
8217
  * [`Model`]) carry the matched [`Location`]; the rest carry their own
8153
8218
  * data.
8154
8219
  *
8155
- * [`Pattern`]: EventKind::Pattern
8156
- * [`Model`]: EventKind::Model
8220
+ * [`Pattern`]: AuditKind::Pattern
8221
+ * [`Model`]: AuditKind::Model
8157
8222
  * [`Location`]: Modality::Location
8158
8223
  */
8159
- AudioEventKind: {
8224
+ AudioAuditKind: {
8160
8225
  /** @constant */
8161
8226
  kind: "pattern";
8162
8227
  /** @description Where the recognizer matched. */
@@ -8220,7 +8285,7 @@ interface components {
8220
8285
  * it is the keyword resolved through the modality's [`locate`] (a
8221
8286
  * pixel box for image, a time span for audio, the byte range for
8222
8287
  * text/tabular). `None` when the keyword's stream range could not be
8223
- * placed symmetric with a match the recognizer itself drops.
8288
+ * placed, symmetric with a match the recognizer itself drops.
8224
8289
  *
8225
8290
  * [`locate`]: crate::modality::TextRecognizable::locate
8226
8291
  */
@@ -8238,77 +8303,216 @@ interface components {
8238
8303
  /** @description How much the output leaks about the original. */
8239
8304
  leak_profile: components["schemas"]["LeakProfile"];
8240
8305
  /**
8241
- * @description Which selection rule chose this operator the automatic "why"
8306
+ * @description Which selection rule chose this operator: the automatic "why"
8242
8307
  * (matched a label, a tag, a predicate, or the fallback).
8243
8308
  */
8244
8309
  matched_by: components["schemas"]["RuleMatch"];
8245
8310
  /** @description Which operator (name + version) ran. */
8246
8311
  operator: components["schemas"]["OperatorId"];
8312
+ /**
8313
+ * @description BLAKE3 digest of the original text the operator hid, when the
8314
+ * redaction layer recorded it. Proves *what* was redacted without
8315
+ * storing the plaintext; `None` when the operator did not capture it.
8316
+ */
8317
+ span_hash?: components["schemas"]["AuditHash"];
8318
+ /**
8319
+ * Format: uint32
8320
+ * @description Byte length of the original text the operator hid, paired with
8321
+ * [`span_hash`](Self::Redaction::span_hash). `None` when not captured.
8322
+ */
8323
+ span_length?: number;
8247
8324
  };
8248
8325
  /**
8249
- * @description Located, typed piece of context a recognizer may treat as in-context
8250
- * for a nearby value.
8326
+ * @description Full audit trail of an [`Entity`]: every [`AuditEvent`] in its life, as a
8327
+ * tamper-evident DAG.
8251
8328
  *
8252
- * Out-of-band by nature: a hint is *not* a sub-span of the value it
8253
- * informs it lives elsewhere in the source (a table's column header, a
8254
- * JSON object key, a log field name). So `location` points at where the
8255
- * hint text actually sits, and `data` is the hint text itself. Carrying
8256
- * the location (rather than a bare string) lets a confidence boost record
8257
- * *which* hint lifted a score and *where* it came from — provenance a
8258
- * review consumer can resolve back to the document.
8329
+ * Where Presidio keeps a shallow, optional, per-stage explanation that is
8330
+ * stripped by default, an `AuditLog` is always present and records the
8331
+ * entity's *entire* life: each recognizer that found it, the deduplication
8332
+ * that fused them, any confidence calibration, and the redaction that hid it.
8333
+ * Nothing is collapsed: every recognizer keeps its own recognition event with
8334
+ * its location and score.
8259
8335
  *
8260
- * Mirrors [`Entity`]'s `location` + `data` shape, so the same
8261
- * serialization and lifting patterns apply.
8336
+ * The events form a **directed acyclic graph**, not a flat list. A recognizer
8337
+ * records a birth event (no parents); each later step links to the event it
8338
+ * follows; and a [fusion](Self::record_fusion) links to *several* parents at
8339
+ * once: the heads of the trails it combines. This is the true shape of a
8340
+ * deduplicated entity: two recognizers are siblings, then a fusion joins them.
8341
+ * The events are stored in the order they were recorded, which is a
8342
+ * topological order of the DAG (a parent is always recorded before its
8343
+ * children).
8262
8344
  *
8263
- * [`Entity`]: crate::entity::Entity
8264
- */
8265
- AudioHint: {
8266
- /** @description The hint text itself (a column header, a field name). */
8267
- data: components["schemas"]["AudioData"];
8268
- /** @description Where the hint text sits in the source (the header cell, the key). */
8269
- location: components["schemas"]["AudioLocation"];
8270
- };
8271
- /**
8272
- * @description A [`TimeSpan`] within audio content, with an optional speaker label.
8345
+ * Two chains ride the DAG's edges:
8273
8346
  *
8274
- * The time span is the coordinate; ordering and overlap consider only it.
8275
- * The optional [`speaker_id`] is a diarization label,
8276
- * not a coordinate: two utterances from different speakers at the same
8277
- * instant still overlap in time, so the speaker is carried for provenance
8278
- * but excluded from comparison.
8347
+ * - a **confidence chain**, where each event's [`confidence`] is the entity's
8348
+ * effective score after it; the score flowing *in* is its parents'
8349
+ * confidence, so [`final_confidence`] and the full history are recoverable;
8350
+ * - a **hash chain**, where each event's [`hash`] folds its payload together
8351
+ * with its parents' hashes, so any edit, reorder, insertion, or deletion of
8352
+ * an earlier event breaks every event downstream. [`verify`] walks the DAG
8353
+ * and reports the first break.
8279
8354
  *
8280
- * [`speaker_id`]: Self::speaker_id
8355
+ * [`Entity`]: crate::entity::Entity
8356
+ * [`confidence`]: AuditEvent::confidence
8357
+ * [`hash`]: AuditEvent::hash
8358
+ * [`final_confidence`]: Self::final_confidence
8359
+ * [`verify`]: Self::verify
8281
8360
  */
8282
- AudioLocation: {
8283
- /** @description Time span the location covers, in the stream's timeline. */
8284
- span: components["schemas"]["TimeSpan"];
8285
- /** @description Diarization label of the speaker, when a diarizer assigned one. */
8286
- speaker_id?: string;
8287
- };
8361
+ AudioAuditLog: components["schemas"]["AudioAuditEvent"][];
8288
8362
  /**
8289
- * @description Full audit trail of an [`Entity`]: every [`Event`] in its life, in
8290
- * order.
8291
- *
8292
- * This is the model's answer to "full provenance": where Presidio keeps
8293
- * a shallow, optional, per-stage explanation that is stripped by
8294
- * default, a `Provenance` is always present and records the entity's
8295
- * *entire* life as an ordered list of events: each recognizer that
8296
- * found it, the deduplication that fused them, any confidence
8297
- * calibration, and the redaction that hid it. Nothing is collapsed:
8298
- * every recognizer keeps its own recognition event with its location
8299
- * and score.
8363
+ * @description Per-call payload a recognizer inspects for the [`Audio`] modality.
8300
8364
  *
8301
- * The events form a confidence chain (each event's [`after`] is the
8302
- * next's [`before`]) so the final confidence and its full history are
8303
- * always recoverable.
8365
+ * Carries the encoded audio bytes; an optional filename aids diagnostics
8366
+ * and encoding inference (the container format a decoder should expect).
8367
+ * The recognizable text — a timestamped transcript — is *not* held here;
8368
+ * a speech-to-text [`Enricher`] stamps it onto the call's
8369
+ * [`artifacts`], keeping
8370
+ * `AudioData` the codec's payload alone.
8371
+ *
8372
+ * [`Audio`]: super::Audio
8373
+ * [`Enricher`]: crate::recognition::Enricher
8374
+ * [`artifacts`]: crate::recognition::RecognizerContext::artifacts
8375
+ */
8376
+ AudioData: {
8377
+ /** @description Original filename, when known. */
8378
+ filename?: string;
8379
+ };
8380
+ /**
8381
+ * @description Detected piece of sensitive information within some medium.
8382
+ *
8383
+ * Generic over the [`Modality`] `M`, which is what makes the model
8384
+ * multimodal: a text pipeline yields `Entity<Text>`, an audio pipeline
8385
+ * `Entity<Audio>`, and so on. The entity's location is the modality's
8386
+ * [`Location`] type, `M::Location`.
8387
+ *
8388
+ * # Birth and fusion
8389
+ *
8390
+ * A recognizer emits an entity directly, carrying a single recognition
8391
+ * [`AuditEvent`] (its own finding) in the entity's [`audit`] trail. When
8392
+ * several recognizers find the same thing, a fusion step (in
8393
+ * `elide`) combines their entities into one: the survivor's
8394
+ * [`location`] and [`confidence`] are the *fused* values, and every
8395
+ * contributing recognition event, plus a deduplication event, is
8396
+ * retained in its audit trail. The entity therefore carries its full
8397
+ * audit trail with it.
8398
+ *
8399
+ * [`Location`]: Modality::Location
8400
+ * [`AuditEvent`]: crate::entity::audit::AuditEvent
8401
+ * [`audit`]: Entity::audit
8402
+ * [`location`]: Entity::location
8403
+ * [`confidence`]: Entity::confidence
8404
+ */
8405
+ AudioEntity: {
8406
+ /**
8407
+ * @description Tamper-evident audit trail: every contributing detection, the fusion
8408
+ * event if any, and the redaction that hid it, as a hash-linked DAG.
8409
+ */
8410
+ audit: components["schemas"]["AudioAuditLog"];
8411
+ /** @description Effective confidence in `0.0..=1.0` (fused, if applicable). */
8412
+ confidence: components["schemas"]["Confidence"];
8413
+ /**
8414
+ * @description Coreference identifier, if a recognizer resolved this entity as one
8415
+ * mention of a cluster. Entities sharing an [`EntityCoRef`] denote the
8416
+ * same real-world thing.
8417
+ */
8418
+ coref?: components["schemas"]["EntityCoRef"];
8419
+ /**
8420
+ * Format: uuid
8421
+ * @description Stable unique identity for this entity (time-ordered UUIDv7), minted
8422
+ * when the entity is assembled.
8423
+ */
8424
+ id: string;
8425
+ /**
8426
+ * @description What kind of sensitive information this is (resolved via a
8427
+ * [`LabelCatalog`]).
8428
+ */
8429
+ label: components["schemas"]["LabelRef"];
8430
+ /**
8431
+ * @description The language of this entity's surrounding text, when a recognizer
8432
+ * resolved one. `None` when unknown or language-agnostic.
8433
+ */
8434
+ language?: string;
8435
+ /**
8436
+ * @description Location of the entity within the medium (fused, if it came from more
8437
+ * than one detection).
8438
+ */
8439
+ location: components["schemas"]["AudioLocation"];
8440
+ /**
8441
+ * @description Byte range of the match in the *recognized text* it was found in (the
8442
+ * OCR layout text, the audio transcript, or the text payload itself) —
8443
+ * the stable key back into that enrichment artifact, where the rich
8444
+ * context lives (which OCR block, which speaker) that the geometric
8445
+ * [`location`] cannot hold. `None` for entities not found via text
8446
+ * recognition (e.g. a VLM box). An audit key, not a coordinate: redaction
8447
+ * uses [`location`]; an audit uses this with the artifact.
8448
+ *
8449
+ * [`location`]: Entity::location
8450
+ */
8451
+ recognized_range?: components["schemas"]["Range_of_uint"];
8452
+ };
8453
+ /**
8454
+ * @description One recognized entity plus the optional reviewer override.
8455
+ *
8456
+ * The bound mirrors elide's [`Entity<M>`]: serialization needs
8457
+ * `M::Location` and `M::Data` (de)serializable, and JsonSchema
8458
+ * derivation needs them schema-able. All four modalities elide
8459
+ * ships satisfy these under the `serde` + `schema` features.
8460
+ */
8461
+ AudioEntityRecord: {
8462
+ /** @description The elide entity, as recognition produced it. */
8463
+ entity: components["schemas"]["AudioEntity"];
8464
+ /**
8465
+ * @description Reviewer-supplied redaction override.
8466
+ *
8467
+ * `None` means "use the matching policy rule's decision";
8468
+ * `Some(...)` overrides that rule for this specific entity
8469
+ * at apply time. Reviewer overrides take precedence over
8470
+ * every policy rule and inherit the authority of the
8471
+ * [`Review::policy_id`] they name — the audit event's
8472
+ * attribution stamps that policy so the trail names the
8473
+ * authority under which the override fired.
8474
+ */
8475
+ review?: components["schemas"]["Review"];
8476
+ };
8477
+ /**
8478
+ * @description Located, typed piece of context a recognizer may treat as in-context
8479
+ * for a nearby value.
8480
+ *
8481
+ * Out-of-band by nature: a hint is *not* a sub-span of the value it
8482
+ * informs — it lives elsewhere in the source (a table's column header, a
8483
+ * JSON object key, a log field name). So `location` points at where the
8484
+ * hint text actually sits, and `data` is the hint text itself. Carrying
8485
+ * the location (rather than a bare string) lets a confidence boost record
8486
+ * *which* hint lifted a score and *where* it came from — provenance a
8487
+ * review consumer can resolve back to the document.
8488
+ *
8489
+ * Mirrors [`Entity`]'s `location` + `data` shape, so the same
8490
+ * serialization and lifting patterns apply.
8304
8491
  *
8305
8492
  * [`Entity`]: crate::entity::Entity
8306
- * [`after`]: Event::after
8307
- * [`before`]: Event::before
8308
8493
  */
8309
- AudioProvenance: {
8310
- /** @description Events, in the order they happened. */
8311
- events: components["schemas"]["AudioEvent"][];
8494
+ AudioHint: {
8495
+ /** @description The hint text itself (a column header, a field name). */
8496
+ data: components["schemas"]["AudioData"];
8497
+ /** @description Where the hint text sits in the source (the header cell, the key). */
8498
+ location: components["schemas"]["AudioLocation"];
8499
+ };
8500
+ /**
8501
+ * @description A [`TimeSpan`] within audio content, with an optional speaker label.
8502
+ *
8503
+ * The time span is the coordinate; ordering and overlap consider only it.
8504
+ * The optional [`speaker_id`] is a diarization label,
8505
+ * not a coordinate: two utterances from different speakers at the same
8506
+ * instant still overlap in time, so the speaker is carried for provenance
8507
+ * but excluded from comparison.
8508
+ *
8509
+ * [`speaker_id`]: Self::speaker_id
8510
+ */
8511
+ AudioLocation: {
8512
+ /** @description Time span the location covers, in the stream's timeline. */
8513
+ span: components["schemas"]["TimeSpan"];
8514
+ /** @description Diarization label of the speaker, when a diarizer assigned one. */
8515
+ speaker_id?: string;
8312
8516
  };
8313
8517
  /** @description Operator spec a `redact` audio rule carries. */
8314
8518
  AudioRedaction: {
@@ -8466,6 +8670,21 @@ interface components {
8466
8670
  */
8467
8671
  ocrMode: components["schemas"]["OcrMode"];
8468
8672
  };
8673
+ /**
8674
+ * @description A 32-byte BLAKE3 digest.
8675
+ *
8676
+ * The tamper-evident link in an [`AuditLog`] DAG: each [`AuditEvent`] hashes
8677
+ * its payload together with its parents' hashes, so altering any event breaks
8678
+ * every event downstream of it. Displays and (with the `serde` feature)
8679
+ * (de)serializes as lowercase hex.
8680
+ *
8681
+ * The all-zero hash is [`GENESIS`](AuditHash::GENESIS), the link a birth event
8682
+ * (one with no parents) chains from.
8683
+ *
8684
+ * [`AuditLog`]: crate::entity::audit::AuditLog
8685
+ * [`AuditEvent`]: crate::entity::audit::AuditEvent
8686
+ */
8687
+ AuditHash: string;
8469
8688
  /** @description Response returned after successful authentication (login/signup). */
8470
8689
  AuthToken: {
8471
8690
  /** @description The JWT API token for authentication. */
@@ -8545,6 +8764,24 @@ interface components {
8545
8764
  /** @description Minimum corner (top-left, conventionally). */
8546
8765
  min: components["schemas"]["Point"];
8547
8766
  };
8767
+ /**
8768
+ * @description The coarse group a [`Label`] belongs to, for organizing detected entities
8769
+ * by kind (`financial`, `health`, `identity`, …).
8770
+ *
8771
+ * A category answers "what *sort* of information is this" at a display level:
8772
+ * a consumer groups a redaction audit into sections by category. It is
8773
+ * distinct from a label's [`tags`], which are cross-cutting sensitivity
8774
+ * markers (`pii`, `phi`, `pci`) a label may carry several of; a label has at
8775
+ * most **one** category. Built-in labels ship with a category; a custom
8776
+ * [`Label`] has none unless one is set.
8777
+ *
8778
+ * The value is an open, lowercase `snake_case` identifier, so a custom label
8779
+ * can define its own category rather than being confined to the shipped set.
8780
+ *
8781
+ * [`Label`]: super::Label
8782
+ * [`tags`]: super::Label::tags
8783
+ */
8784
+ Category: string;
8548
8785
  /**
8549
8786
  * @description Text a [`TextRedaction::Clamp`] emits for out-of-range values.
8550
8787
  *
@@ -8605,7 +8842,7 @@ interface components {
8605
8842
  * Format: float
8606
8843
  * @description Confidence score in the closed range `0.0..=1.0`.
8607
8844
  *
8608
- * Carried by every provenance [`Event`] (the `before`/`after` of a
8845
+ * Carried by every provenance [`AuditEvent`] (the `before`/`after` of a
8609
8846
  * recognition, fusion, or calibration) and by the effective confidence
8610
8847
  * of an [`Entity`]. The newtype enforces the range at construction so
8611
8848
  * no downstream code has to defend against values outside `[0, 1]`.
@@ -8615,7 +8852,7 @@ interface components {
8615
8852
  * *cutoff* configured to filter scores. Compare the two with
8616
8853
  * [`ConfidenceThreshold::passes`].
8617
8854
  *
8618
- * [`Event`]: crate::entity::provenance::Event
8855
+ * [`AuditEvent`]: crate::entity::audit::AuditEvent
8619
8856
  * [`Entity`]: crate::entity::Entity
8620
8857
  */
8621
8858
  Confidence: number;
@@ -8662,6 +8899,14 @@ interface components {
8662
8899
  /** @description Handle of the workspace this connection belongs to. */
8663
8900
  workspaceSlug: components["schemas"]["Handle"];
8664
8901
  };
8902
+ /** @description Params of a connection activity (`connection.*`). */
8903
+ ConnectionActivityParams: {
8904
+ /**
8905
+ * Format: uuid
8906
+ * @description Id of the connection.
8907
+ */
8908
+ connectionId: string;
8909
+ };
8665
8910
  /**
8666
8911
  * @description A fully-typed connection configuration for any capability.
8667
8912
  *
@@ -8739,7 +8984,7 @@ interface components {
8739
8984
  /** @description Account that triggered the sync. */
8740
8985
  triggeredBy: components["schemas"]["AccountRef"];
8741
8986
  };
8742
- /** @description Params of a `connection:sync.completed` notification. */
8987
+ /** @description Params of a `connection.sync.completed` notification. */
8743
8988
  ConnectionSyncCompletedParams: {
8744
8989
  /**
8745
8990
  * Format: uuid
@@ -8752,7 +8997,7 @@ interface components {
8752
8997
  */
8753
8998
  recordsSynced?: number;
8754
8999
  };
8755
- /** @description Params of a `connection:sync.failed` notification. */
9000
+ /** @description Params of a `connection.sync.failed` notification. */
8756
9001
  ConnectionSyncFailedParams: {
8757
9002
  /**
8758
9003
  * Format: uuid
@@ -9163,6 +9408,16 @@ interface components {
9163
9408
  /** @description Handle of the workspace this file belongs to. */
9164
9409
  workspaceSlug: components["schemas"]["Handle"];
9165
9410
  };
9411
+ /** @description Params of a file activity (`file.*`). */
9412
+ FileActivityParams: {
9413
+ /**
9414
+ * Format: uuid
9415
+ * @description Id of the file.
9416
+ */
9417
+ fileId: string;
9418
+ /** @description Display name of the file. */
9419
+ fileName: string;
9420
+ };
9166
9421
  /**
9167
9422
  * @description The role a file plays, which drives its data-retention scope and whether it
9168
9423
  * is a user-facing document.
@@ -9221,6 +9476,29 @@ interface components {
9221
9476
  */
9222
9477
  serviceAccountPath: string;
9223
9478
  };
9479
+ /**
9480
+ * @description The GDPR Article 9 template config — treatment axis fused
9481
+ * with sensitive-scope axis. Carried directly by
9482
+ * [`crate::PolicyTemplate::GdprArticle9`].
9483
+ */
9484
+ GdprArticle9: {
9485
+ /**
9486
+ * @description Which sensitive-data labels to cover. Defaults to
9487
+ * [`GdprSensitiveScope::Article9`] (nine Article 9(1)
9488
+ * categories only). Pick
9489
+ * [`GdprSensitiveScope::Article9WithReidHardening`] to add
9490
+ * Recital 26 quasi-identifiers, or
9491
+ * [`GdprSensitiveScope::Article9And10`] to also cover
9492
+ * Article 10 criminal-justice data.
9493
+ * @default article9
9494
+ */
9495
+ scope: components["schemas"]["GdprSensitiveScope"];
9496
+ /**
9497
+ * @description Which operator to apply to matches. See
9498
+ * [`GdprArticle9Treatment`] for the tradeoff.
9499
+ */
9500
+ treatment: components["schemas"]["GdprArticle9Treatment"];
9501
+ };
9224
9502
  /**
9225
9503
  * @description Which operator to apply to Article 9 special-category entities.
9226
9504
  *
@@ -9235,6 +9513,31 @@ interface components {
9235
9513
  * obligation to establish and document.
9236
9514
  */
9237
9515
  GdprArticle9Treatment: "erase" | "pseudonymize";
9516
+ /**
9517
+ * @description Which sensitive-data labels the template's group covers.
9518
+ *
9519
+ * Three tiers, each strictly widening the previous one so a
9520
+ * caller upgrading through the tiers never loses coverage:
9521
+ *
9522
+ * - [`Article9`](Self::Article9) — the nine Article 9(1)
9523
+ * special categories only. The default.
9524
+ * - [`Article9WithReidHardening`](Self::Article9WithReidHardening) —
9525
+ * Article 9 plus `date_of_birth` and `postal_code`. The two
9526
+ * quasi-identifiers Recital 26 highlights as re-identification
9527
+ * vectors when combined with special-category data. Non-
9528
+ * binding guidance, but reflects supervisory-authority
9529
+ * expectations on pseudonymization robustness.
9530
+ * - [`Article9And10`](Self::Article9And10) — Article 9 + Recital
9531
+ * 26 hardening + Article 10's criminal-justice labels
9532
+ * (`criminal_record`, `criminal_charge`, `judicial_narrative`).
9533
+ * Article 10 governs "personal data relating to criminal
9534
+ * convictions and offences", processed only under authorized
9535
+ * official-authority control or specific Union/Member-State
9536
+ * law. Callers with criminal-justice adjacency (background-
9537
+ * check services, court-records handling, HR compliance) pick
9538
+ * this tier.
9539
+ */
9540
+ GdprSensitiveScope: "article9" | "article9_with_reid_hardening" | "article9_and10";
9238
9541
  /** @description Request to generate a shareable invite code for a workspace. */
9239
9542
  GenerateInviteCode: {
9240
9543
  /** @description When the invite code expires. */
@@ -9255,6 +9558,29 @@ interface components {
9255
9558
  };
9256
9559
  /** @description Operational status of a service component. */
9257
9560
  HealthStatus: "healthy" | "degraded" | "unhealthy";
9561
+ /**
9562
+ * @description Which account-identifier labels §164.514(b)(2)(i)(J) covers.
9563
+ *
9564
+ * The regulation names "account numbers" without enumerating
9565
+ * them; HHS OCR's 2012 guidance doesn't narrow it either. In
9566
+ * practice, covered entities and de-ID vendors treat bank
9567
+ * accounts, IBANs, and payment cards as the core §(J) set —
9568
+ * [`Standard`](Self::Standard). Cryptocurrency wallet addresses
9569
+ * are the newer case: they identify a specific holder's account
9570
+ * by function, and the §(R) catch-all pulls in "any other unique
9571
+ * identifying number, characteristic, or code" tied to an
9572
+ * individual, which arguably captures them. Deployments where
9573
+ * crypto addresses can appear in patient-facing artifacts pick
9574
+ * [`Extended`](Self::Extended); deployments where they can't
9575
+ * stay on `Standard`.
9576
+ *
9577
+ * The compliant posture for anything account-shaped is
9578
+ * "remove"; the split is only about how broadly this template
9579
+ * pre-declares the account label scope. A caller who wants
9580
+ * broader coverage combines this template's policy with a
9581
+ * separate PII scope on the same request.
9582
+ */
9583
+ HipaaAccountNumbers: "standard" | "extended";
9258
9584
  /**
9259
9585
  * @description Which HIPAA §164.514 de-identification method to apply.
9260
9586
  *
@@ -9280,168 +9606,111 @@ interface components {
9280
9606
  */
9281
9607
  HipaaDeidMethod: "safe_harbor" | "limited_data_set" | "expert_determination";
9282
9608
  /**
9283
- * @description Per-call payload a recognizer inspects for the [`Image`] modality.
9284
- *
9285
- * Carries the encoded bytes plus the pixel [`Dimensions`], which a
9286
- * recognizer that emits unit-square boxes needs to scale them into pixel
9287
- * coordinates. An optional filename aids diagnostics and encoding
9288
- * inference.
9289
- *
9290
- * [`Image`]: super::Image
9609
+ * @description The HIPAA §164.514 template config method axis fused with
9610
+ * account-identifier axis. Carried directly by
9611
+ * [`crate::PolicyTemplate::HipaaDeidentification`].
9291
9612
  */
9292
- ImageData: {
9293
- /** @description Pixel dimensions of the encoded image. */
9294
- dimensions: components["schemas"]["Dimensions"];
9295
- /** @description Original filename, when known. */
9296
- filename?: string;
9613
+ HipaaDeidentification: {
9614
+ /**
9615
+ * @description Which §(J) account-identifier labels to remove. Defaults
9616
+ * to [`HipaaAccountNumbers::Standard`] (bank account +
9617
+ * IBAN + payment card). Pick
9618
+ * [`HipaaAccountNumbers::Extended`] to add crypto wallet
9619
+ * addresses under the §(R) catch-all reading.
9620
+ * @default standard
9621
+ */
9622
+ accounts: components["schemas"]["HipaaAccountNumbers"];
9623
+ /**
9624
+ * @description Which §164.514 method to apply. See [`HipaaDeidMethod`]
9625
+ * for the tradeoff.
9626
+ */
9627
+ method: components["schemas"]["HipaaDeidMethod"];
9297
9628
  };
9298
9629
  /**
9299
- * @description Detected piece of sensitive information within some medium.
9630
+ * @description One node in an entity's audit DAG: a thing that happened, with its
9631
+ * effect on confidence and its tamper-evident links.
9300
9632
  *
9301
- * Generic over the [`Modality`] `M`, which is what makes the model
9302
- * multimodal: a text pipeline yields `Entity<Text>`, an audio pipeline
9303
- * `Entity<Audio>`, and so on. The entity's location is the modality's
9304
- * [`Location`] type, `M::Location`.
9633
+ * Events are recorded on an entity's [`AuditLog`], forming the full audit
9634
+ * trail of its life: each recognizer that found it, the deduplication that
9635
+ * fused them, any score calibration, and the redaction that hid it. The
9636
+ * uniform spine (who, resulting score, when) is the same for every event; the
9637
+ * [`kind`] carries the event-specific detail *and* the explanation of why the
9638
+ * event happened.
9305
9639
  *
9306
- * # Birth and fusion
9640
+ * Each event links to its [`parents`] by their [`hash`]: a birth event (a
9641
+ * recognizer's first detection) has no parents, a normal step has one, and a
9642
+ * [fusion](crate::entity::audit::AuditLog::record_fusion) has several. Its own
9643
+ * [`hash`] folds the
9644
+ * payload together with the parents' hashes, so altering any event breaks
9645
+ * every event downstream of it: [`AuditLog::verify`] walks the DAG and
9646
+ * reports the first break.
9307
9647
  *
9308
- * A recognizer emits an entity directly, carrying a single recognition
9309
- * [`Event`] (its own finding) in the entity's [`provenance`]. When
9310
- * several recognizers find the same thing, a fusion step (in
9311
- * `elide`) combines their entities into one: the survivor's
9312
- * [`location`] and [`confidence`] are the *fused* values, and every
9313
- * contributing recognition event, plus a deduplication event, is
9314
- * retained in its provenance. The entity therefore carries its full
9315
- * audit trail with it.
9648
+ * `entity.confidence` always equals the [`confidence`] of the most recent
9649
+ * event. The confidence *flowing in* is not stored: it is the parents'
9650
+ * [`confidence`], recovered from the DAG.
9316
9651
  *
9317
- * [`Location`]: Modality::Location
9318
- * [`Event`]: crate::entity::provenance::Event
9319
- * [`provenance`]: Entity::provenance
9320
- * [`location`]: Entity::location
9321
- * [`confidence`]: Entity::confidence
9652
+ * [`AuditLog`]: crate::entity::audit::AuditLog
9653
+ * [`AuditLog::record_fusion`]: crate::entity::audit::AuditLog::record_fusion
9654
+ * [`AuditLog::verify`]: crate::entity::audit::AuditLog::verify
9655
+ * [`kind`]: AuditEvent::kind
9656
+ * [`parents`]: AuditEvent::parents
9657
+ * [`hash`]: AuditEvent::hash
9658
+ * [`confidence`]: AuditEvent::confidence
9322
9659
  */
9323
- ImageEntity: {
9324
- /** @description Effective confidence in `0.0..=1.0` (fused, if applicable). */
9325
- confidence: components["schemas"]["Confidence"];
9326
- /**
9327
- * @description Coreference identifier, if a recognizer resolved this entity as one
9328
- * mention of a cluster. Entities sharing an [`EntityCoRef`] denote the
9329
- * same real-world thing.
9330
- */
9331
- coref?: components["schemas"]["EntityCoRef"];
9332
- /**
9333
- * Format: uuid
9334
- * @description Stable unique identity for this entity (time-ordered UUIDv7), minted
9335
- * when the entity is assembled.
9336
- */
9337
- id: string;
9338
- /**
9339
- * @description What kind of sensitive information this is (resolved via a
9340
- * [`LabelCatalog`]).
9341
- */
9342
- label: components["schemas"]["LabelRef"];
9660
+ ImageAuditEvent: {
9343
9661
  /**
9344
- * @description The language of this entity's surrounding text, when a recognizer
9345
- * resolved one. `None` when unknown or language-agnostic.
9662
+ * @description Confidence after this event: the entity's effective confidence once it
9663
+ * has happened.
9346
9664
  */
9347
- language?: string;
9665
+ confidence: components["schemas"]["Confidence"];
9348
9666
  /**
9349
- * @description Location of the entity within the medium (fused, if it came from more
9350
- * than one detection).
9667
+ * @description This event's hash, over its payload and its parents' hashes. Assigned by
9668
+ * [`AuditLog`] when the event is recorded; read it through
9669
+ * [`hash`](Self::hash). Recomputing it is how the DAG is verified.
9670
+ *
9671
+ * Not publicly settable: only [`AuditLog`] assigns it, so a caller cannot
9672
+ * forge a self-consistent event outside the recording path.
9673
+ *
9674
+ * [`AuditLog`]: crate::entity::audit::AuditLog
9351
9675
  */
9352
- location: components["schemas"]["ImageLocation"];
9676
+ hash: components["schemas"]["AuditHash"];
9677
+ /** @description Kind of event, with its event-specific detail and its rationale. */
9678
+ kind: components["schemas"]["ImageAuditKind"];
9353
9679
  /**
9354
- * @description Detection audit trail: every contributing detection and the fusion
9355
- * event, if any.
9680
+ * @description The events this one follows, by their hash. Empty for a birth event, one
9681
+ * entry for a normal step, several for a fusion. Assigned by [`AuditLog`]
9682
+ * when the event is recorded; read it through [`parents`](Self::parents).
9683
+ *
9684
+ * Not publicly settable: the links are the tamper-evident structure, so
9685
+ * only [`AuditLog::record`] / [`AuditLog::record_fusion`] assign them.
9686
+ *
9687
+ * [`AuditLog`]: crate::entity::audit::AuditLog
9688
+ * [`AuditLog::record`]: crate::entity::audit::AuditLog::record
9689
+ * [`AuditLog::record_fusion`]: crate::entity::audit::AuditLog::record_fusion
9356
9690
  */
9357
- provenance: components["schemas"]["ImageProvenance"];
9691
+ parents: components["schemas"]["AuditHash"][];
9358
9692
  /**
9359
- * @description Byte range of the match in the *recognized text* it was found in (the
9360
- * OCR layout text, the audio transcript, or the text payload itself) —
9361
- * the stable key back into that enrichment artifact, where the rich
9362
- * context lives (which OCR block, which speaker) that the geometric
9363
- * [`location`] cannot hold. `None` for entities not found via text
9364
- * recognition (e.g. a VLM box). Provenance, not a coordinate: redaction
9365
- * uses [`location`]; an audit uses this with the artifact.
9366
- *
9367
- * [`location`]: Entity::location
9693
+ * @description Who produced this event: a recognizer name, a deduplication strategy,
9694
+ * an operator, or whatever acted.
9368
9695
  */
9369
- recognized_range?: components["schemas"]["Range_of_uint"];
9696
+ source: string;
9697
+ /** @description When the event happened (UTC). */
9698
+ timestamp: string;
9370
9699
  };
9371
9700
  /**
9372
- * @description One recognized entity plus the optional reviewer override.
9701
+ * @description Kind of an [`AuditEvent`], carrying its event-specific detail and the
9702
+ * rationale for why it happened.
9373
9703
  *
9374
- * The bound mirrors elide's [`Entity<M>`]: serialization needs
9375
- * `M::Location` and `M::Data` (de)serializable, and JsonSchema
9376
- * derivation needs them schema-able. All four modalities elide
9377
- * ships satisfy these under the `serde` + `schema` features.
9704
+ * `#[non_exhaustive]`: new event kinds (verification, annotation, …)
9705
+ * can be added compatibly. The recognition kinds ([`Pattern`],
9706
+ * [`Model`]) carry the matched [`Location`]; the rest carry their own
9707
+ * data.
9708
+ *
9709
+ * [`Pattern`]: AuditKind::Pattern
9710
+ * [`Model`]: AuditKind::Model
9711
+ * [`Location`]: Modality::Location
9378
9712
  */
9379
- ImageEntityRecord: {
9380
- /** @description The elide entity, as recognition produced it. */
9381
- entity: components["schemas"]["ImageEntity"];
9382
- /**
9383
- * @description Reviewer-supplied redaction override.
9384
- *
9385
- * `None` means "use the matching policy rule's decision";
9386
- * `Some(...)` overrides that rule for this specific entity
9387
- * at apply time. Reviewer overrides take precedence over
9388
- * every policy rule and inherit the authority of the
9389
- * [`Review::policy_id`] they name — the audit event's
9390
- * attribution stamps that policy so the trail names the
9391
- * authority under which the override fired.
9392
- */
9393
- review?: components["schemas"]["Review"];
9394
- };
9395
- /**
9396
- * @description One thing that happened to an entity, with its effect on confidence.
9397
- *
9398
- * Events are recorded in order on an entity's [`Provenance`], forming
9399
- * the full audit trail of its life: each recognizer that found it, the
9400
- * deduplication that fused them, any score calibration, and the
9401
- * redaction that hid it. The uniform spine (who, before/after score,
9402
- * when, why) is the same for every event; the [`kind`] carries the
9403
- * event-specific detail.
9404
- *
9405
- * `entity.confidence` always equals the [`after`] of the most recent
9406
- * event.
9407
- *
9408
- * [`Provenance`]: crate::entity::provenance::Provenance
9409
- * [`kind`]: Event::kind
9410
- * [`after`]: Event::after
9411
- */
9412
- ImageEvent: {
9413
- /** @description Confidence after this event. */
9414
- after: components["schemas"]["Confidence"];
9415
- /** @description When the event happened (UTC). */
9416
- at: string;
9417
- /**
9418
- * @description Confidence before this event, if there was a prior value. `None` on
9419
- * the first (birth) event.
9420
- */
9421
- before?: components["schemas"]["Confidence"];
9422
- /** @description Kind of event, with its event-specific detail. */
9423
- kind: components["schemas"]["ImageEventKind"];
9424
- /** @description Free-text explanation of what the event did and why. */
9425
- reason: string;
9426
- /**
9427
- * @description Who produced this event: a recognizer name, a deduplication strategy,
9428
- * an operator, or whatever acted.
9429
- */
9430
- source: string;
9431
- };
9432
- /**
9433
- * @description Kind of an [`Event`], carrying its event-specific detail.
9434
- *
9435
- * `#[non_exhaustive]`: new event kinds (verification, annotation, …)
9436
- * can be added compatibly. The recognition kinds ([`Pattern`],
9437
- * [`Model`]) carry the matched [`Location`]; the rest carry their own
9438
- * data.
9439
- *
9440
- * [`Pattern`]: EventKind::Pattern
9441
- * [`Model`]: EventKind::Model
9442
- * [`Location`]: Modality::Location
9443
- */
9444
- ImageEventKind: {
9713
+ ImageAuditKind: {
9445
9714
  /** @constant */
9446
9715
  kind: "pattern";
9447
9716
  /** @description Where the recognizer matched. */
@@ -9505,7 +9774,7 @@ interface components {
9505
9774
  * it is the keyword resolved through the modality's [`locate`] (a
9506
9775
  * pixel box for image, a time span for audio, the byte range for
9507
9776
  * text/tabular). `None` when the keyword's stream range could not be
9508
- * placed symmetric with a match the recognizer itself drops.
9777
+ * placed, symmetric with a match the recognizer itself drops.
9509
9778
  *
9510
9779
  * [`locate`]: crate::modality::TextRecognizable::locate
9511
9780
  */
@@ -9523,12 +9792,174 @@ interface components {
9523
9792
  /** @description How much the output leaks about the original. */
9524
9793
  leak_profile: components["schemas"]["LeakProfile"];
9525
9794
  /**
9526
- * @description Which selection rule chose this operator the automatic "why"
9795
+ * @description Which selection rule chose this operator: the automatic "why"
9527
9796
  * (matched a label, a tag, a predicate, or the fallback).
9528
9797
  */
9529
9798
  matched_by: components["schemas"]["RuleMatch"];
9530
9799
  /** @description Which operator (name + version) ran. */
9531
9800
  operator: components["schemas"]["OperatorId"];
9801
+ /**
9802
+ * @description BLAKE3 digest of the original text the operator hid, when the
9803
+ * redaction layer recorded it. Proves *what* was redacted without
9804
+ * storing the plaintext; `None` when the operator did not capture it.
9805
+ */
9806
+ span_hash?: components["schemas"]["AuditHash"];
9807
+ /**
9808
+ * Format: uint32
9809
+ * @description Byte length of the original text the operator hid, paired with
9810
+ * [`span_hash`](Self::Redaction::span_hash). `None` when not captured.
9811
+ */
9812
+ span_length?: number;
9813
+ };
9814
+ /**
9815
+ * @description Full audit trail of an [`Entity`]: every [`AuditEvent`] in its life, as a
9816
+ * tamper-evident DAG.
9817
+ *
9818
+ * Where Presidio keeps a shallow, optional, per-stage explanation that is
9819
+ * stripped by default, an `AuditLog` is always present and records the
9820
+ * entity's *entire* life: each recognizer that found it, the deduplication
9821
+ * that fused them, any confidence calibration, and the redaction that hid it.
9822
+ * Nothing is collapsed: every recognizer keeps its own recognition event with
9823
+ * its location and score.
9824
+ *
9825
+ * The events form a **directed acyclic graph**, not a flat list. A recognizer
9826
+ * records a birth event (no parents); each later step links to the event it
9827
+ * follows; and a [fusion](Self::record_fusion) links to *several* parents at
9828
+ * once: the heads of the trails it combines. This is the true shape of a
9829
+ * deduplicated entity: two recognizers are siblings, then a fusion joins them.
9830
+ * The events are stored in the order they were recorded, which is a
9831
+ * topological order of the DAG (a parent is always recorded before its
9832
+ * children).
9833
+ *
9834
+ * Two chains ride the DAG's edges:
9835
+ *
9836
+ * - a **confidence chain**, where each event's [`confidence`] is the entity's
9837
+ * effective score after it; the score flowing *in* is its parents'
9838
+ * confidence, so [`final_confidence`] and the full history are recoverable;
9839
+ * - a **hash chain**, where each event's [`hash`] folds its payload together
9840
+ * with its parents' hashes, so any edit, reorder, insertion, or deletion of
9841
+ * an earlier event breaks every event downstream. [`verify`] walks the DAG
9842
+ * and reports the first break.
9843
+ *
9844
+ * [`Entity`]: crate::entity::Entity
9845
+ * [`confidence`]: AuditEvent::confidence
9846
+ * [`hash`]: AuditEvent::hash
9847
+ * [`final_confidence`]: Self::final_confidence
9848
+ * [`verify`]: Self::verify
9849
+ */
9850
+ ImageAuditLog: components["schemas"]["ImageAuditEvent"][];
9851
+ /**
9852
+ * @description Per-call payload a recognizer inspects for the [`Image`] modality.
9853
+ *
9854
+ * Carries the encoded bytes plus the pixel [`Dimensions`], which a
9855
+ * recognizer that emits unit-square boxes needs to scale them into pixel
9856
+ * coordinates. An optional filename aids diagnostics and encoding
9857
+ * inference.
9858
+ *
9859
+ * [`Image`]: super::Image
9860
+ */
9861
+ ImageData: {
9862
+ /** @description Pixel dimensions of the encoded image. */
9863
+ dimensions: components["schemas"]["Dimensions"];
9864
+ /** @description Original filename, when known. */
9865
+ filename?: string;
9866
+ };
9867
+ /**
9868
+ * @description Detected piece of sensitive information within some medium.
9869
+ *
9870
+ * Generic over the [`Modality`] `M`, which is what makes the model
9871
+ * multimodal: a text pipeline yields `Entity<Text>`, an audio pipeline
9872
+ * `Entity<Audio>`, and so on. The entity's location is the modality's
9873
+ * [`Location`] type, `M::Location`.
9874
+ *
9875
+ * # Birth and fusion
9876
+ *
9877
+ * A recognizer emits an entity directly, carrying a single recognition
9878
+ * [`AuditEvent`] (its own finding) in the entity's [`audit`] trail. When
9879
+ * several recognizers find the same thing, a fusion step (in
9880
+ * `elide`) combines their entities into one: the survivor's
9881
+ * [`location`] and [`confidence`] are the *fused* values, and every
9882
+ * contributing recognition event, plus a deduplication event, is
9883
+ * retained in its audit trail. The entity therefore carries its full
9884
+ * audit trail with it.
9885
+ *
9886
+ * [`Location`]: Modality::Location
9887
+ * [`AuditEvent`]: crate::entity::audit::AuditEvent
9888
+ * [`audit`]: Entity::audit
9889
+ * [`location`]: Entity::location
9890
+ * [`confidence`]: Entity::confidence
9891
+ */
9892
+ ImageEntity: {
9893
+ /**
9894
+ * @description Tamper-evident audit trail: every contributing detection, the fusion
9895
+ * event if any, and the redaction that hid it, as a hash-linked DAG.
9896
+ */
9897
+ audit: components["schemas"]["ImageAuditLog"];
9898
+ /** @description Effective confidence in `0.0..=1.0` (fused, if applicable). */
9899
+ confidence: components["schemas"]["Confidence"];
9900
+ /**
9901
+ * @description Coreference identifier, if a recognizer resolved this entity as one
9902
+ * mention of a cluster. Entities sharing an [`EntityCoRef`] denote the
9903
+ * same real-world thing.
9904
+ */
9905
+ coref?: components["schemas"]["EntityCoRef"];
9906
+ /**
9907
+ * Format: uuid
9908
+ * @description Stable unique identity for this entity (time-ordered UUIDv7), minted
9909
+ * when the entity is assembled.
9910
+ */
9911
+ id: string;
9912
+ /**
9913
+ * @description What kind of sensitive information this is (resolved via a
9914
+ * [`LabelCatalog`]).
9915
+ */
9916
+ label: components["schemas"]["LabelRef"];
9917
+ /**
9918
+ * @description The language of this entity's surrounding text, when a recognizer
9919
+ * resolved one. `None` when unknown or language-agnostic.
9920
+ */
9921
+ language?: string;
9922
+ /**
9923
+ * @description Location of the entity within the medium (fused, if it came from more
9924
+ * than one detection).
9925
+ */
9926
+ location: components["schemas"]["ImageLocation"];
9927
+ /**
9928
+ * @description Byte range of the match in the *recognized text* it was found in (the
9929
+ * OCR layout text, the audio transcript, or the text payload itself) —
9930
+ * the stable key back into that enrichment artifact, where the rich
9931
+ * context lives (which OCR block, which speaker) that the geometric
9932
+ * [`location`] cannot hold. `None` for entities not found via text
9933
+ * recognition (e.g. a VLM box). An audit key, not a coordinate: redaction
9934
+ * uses [`location`]; an audit uses this with the artifact.
9935
+ *
9936
+ * [`location`]: Entity::location
9937
+ */
9938
+ recognized_range?: components["schemas"]["Range_of_uint"];
9939
+ };
9940
+ /**
9941
+ * @description One recognized entity plus the optional reviewer override.
9942
+ *
9943
+ * The bound mirrors elide's [`Entity<M>`]: serialization needs
9944
+ * `M::Location` and `M::Data` (de)serializable, and JsonSchema
9945
+ * derivation needs them schema-able. All four modalities elide
9946
+ * ships satisfy these under the `serde` + `schema` features.
9947
+ */
9948
+ ImageEntityRecord: {
9949
+ /** @description The elide entity, as recognition produced it. */
9950
+ entity: components["schemas"]["ImageEntity"];
9951
+ /**
9952
+ * @description Reviewer-supplied redaction override.
9953
+ *
9954
+ * `None` means "use the matching policy rule's decision";
9955
+ * `Some(...)` overrides that rule for this specific entity
9956
+ * at apply time. Reviewer overrides take precedence over
9957
+ * every policy rule and inherit the authority of the
9958
+ * [`Review::policy_id`] they name — the audit event's
9959
+ * attribution stamps that policy so the trail names the
9960
+ * authority under which the override fired.
9961
+ */
9962
+ review?: components["schemas"]["Review"];
9532
9963
  };
9533
9964
  /**
9534
9965
  * @description Located, typed piece of context a recognizer may treat as in-context
@@ -9575,31 +10006,6 @@ interface components {
9575
10006
  */
9576
10007
  polygon?: components["schemas"]["Polygon"];
9577
10008
  };
9578
- /**
9579
- * @description Full audit trail of an [`Entity`]: every [`Event`] in its life, in
9580
- * order.
9581
- *
9582
- * This is the model's answer to "full provenance": where Presidio keeps
9583
- * a shallow, optional, per-stage explanation that is stripped by
9584
- * default, a `Provenance` is always present and records the entity's
9585
- * *entire* life as an ordered list of events: each recognizer that
9586
- * found it, the deduplication that fused them, any confidence
9587
- * calibration, and the redaction that hid it. Nothing is collapsed:
9588
- * every recognizer keeps its own recognition event with its location
9589
- * and score.
9590
- *
9591
- * The events form a confidence chain (each event's [`after`] is the
9592
- * next's [`before`]) so the final confidence and its full history are
9593
- * always recoverable.
9594
- *
9595
- * [`Entity`]: crate::entity::Entity
9596
- * [`after`]: Event::after
9597
- * [`before`]: Event::before
9598
- */
9599
- ImageProvenance: {
9600
- /** @description Events, in the order they happened. */
9601
- events: components["schemas"]["ImageEvent"][];
9602
- };
9603
10009
  /** @description Operator spec a `redact` image rule carries. */
9604
10010
  ImageRedaction: {
9605
10011
  /** @constant */
@@ -9679,6 +10085,16 @@ interface components {
9679
10085
  /** @description Handle of the workspace the invitation is for. */
9680
10086
  workspaceSlug: components["schemas"]["Handle"];
9681
10087
  };
10088
+ /** @description Params of an invite activity (`invite.*`). */
10089
+ InviteActivityParams: {
10090
+ /** @description Email the invite was addressed to. */
10091
+ email: string;
10092
+ /**
10093
+ * Format: uuid
10094
+ * @description Id of the invite.
10095
+ */
10096
+ inviteId: string;
10097
+ };
9682
10098
  /** @description Response containing a generated shareable invite code. */
9683
10099
  InviteCode: {
9684
10100
  /**
@@ -9774,7 +10190,7 @@ interface components {
9774
10190
  InviteStatus: "pending" | "accepted" | "declined" | "canceled" | "expired" | "revoked";
9775
10191
  /**
9776
10192
  * @description Kind of sensitive information: a stable [`id`], per-language
9777
- * [`LabelLocale`]s, and zero or more tags.
10193
+ * [`LabelLocale`]s, an optional [`category`], and zero or more tags.
9778
10194
  *
9779
10195
  * # Identity
9780
10196
  *
@@ -9792,18 +10208,25 @@ interface components {
9792
10208
  * text — NER and LLM read the analysis language's name and description to
9793
10209
  * prompt the model, keyed by the stable id.
9794
10210
  *
9795
- * # Tags
10211
+ * # Category and tags
10212
+ *
10213
+ * [`category`] is the single coarse group a label belongs to (`financial`,
10214
+ * `health`, `identity`, …), for organizing detected entities by kind. Built-in
10215
+ * labels ship with one; a custom label has none unless set.
9796
10216
  *
9797
- * [`tags`] is a free-form list of short identifiers policy selectors can
9798
- * match against. Built-in labels carry category tags (`personal_identity`,
9799
- * `contact_info`, `financial`, ) plus cross-cutting tags where applicable
9800
- * (`pii`, `phi`, `pci`). Custom labels can ship with zero tags.
10217
+ * [`tags`] is a free-form list of *cross-cutting* markers a policy selector
10218
+ * matches against sensitivity flags a label may carry several of (`pii`,
10219
+ * `phi`, `pci`, `sad`, `secret`). Distinct from the category: a label has at
10220
+ * most one category but any number of tags. Custom labels can ship with zero
10221
+ * of either.
9801
10222
  *
9802
10223
  * [`id`]: Label::id
9803
10224
  * [`localization`]: Label::localization
10225
+ * [`category`]: Label::category
9804
10226
  * [`tags`]: Label::tags
9805
10227
  */
9806
10228
  Label: {
10229
+ category?: components["schemas"]["Category"];
9807
10230
  id: string;
9808
10231
  localizations: components["schemas"]["LocalizedText"];
9809
10232
  tags: string[];
@@ -10158,14 +10581,19 @@ interface components {
10158
10581
  /** @description Handle of the member's account. */
10159
10582
  username: components["schemas"]["Handle"];
10160
10583
  };
10161
- /** @description Params of a `member:invited` notification. */
10584
+ /** @description Params of a member activity (`member.*`). */
10585
+ MemberActivityParams: {
10586
+ /** @description Username of the member acted on. */
10587
+ memberUsername: components["schemas"]["Handle"];
10588
+ };
10589
+ /** @description Params of a `member.invited` notification. */
10162
10590
  MemberInvitedParams: {
10163
10591
  /** @description Username of the account that sent the invite, if known. */
10164
10592
  invitedBy?: string;
10165
10593
  /** @description Slug of the workspace the account was invited to. */
10166
10594
  workspaceSlug: string;
10167
10595
  };
10168
- /** @description Params of a `member:joined` notification. */
10596
+ /** @description Params of a `member.joined` notification. */
10169
10597
  MemberJoinedParams: {
10170
10598
  /** @description Username of the member that joined. */
10171
10599
  memberUsername: string;
@@ -10235,8 +10663,8 @@ interface components {
10235
10663
  /**
10236
10664
  * @description Response type for an account notification.
10237
10665
  *
10238
- * The typed [`NotificationPayload`] is nested under `payload`, so a notification
10239
- * is `{ id, payload: { notifyType, <params...> }, isRead, ... }`.
10666
+ * The typed payload is nested under `payload`, so a notification is
10667
+ * `{ id, payload: { notifyType, <params...> }, readAt, ... }`.
10240
10668
  */
10241
10669
  Notification: {
10242
10670
  /**
@@ -10254,13 +10682,14 @@ interface components {
10254
10682
  * @description Unique notification identifier.
10255
10683
  */
10256
10684
  id: string;
10257
- /** @description Whether the notification has been read. */
10258
- isRead: boolean;
10259
- /** @description The notification type and its typed params. */
10260
- payload: components["schemas"]["NotificationPayload"];
10685
+ /**
10686
+ * @description The notification type and its typed params, absent when the stored params
10687
+ * do not decode into their `notifyType`.
10688
+ */
10689
+ payload?: components["schemas"]["NotificationPayload"];
10261
10690
  /**
10262
10691
  * Format: date-time
10263
- * @description When the notification was read.
10692
+ * @description When the notification was read; absent means unread.
10264
10693
  */
10265
10694
  readAt?: string;
10266
10695
  };
@@ -10272,7 +10701,7 @@ interface components {
10272
10701
  * The values mirror the [`WebhookEvent`](super::WebhookEvent) naming for the
10273
10702
  * events the two channels share.
10274
10703
  */
10275
- NotificationEvent: "member:invited" | "member:joined" | "connection:sync.completed" | "connection:sync.failed" | "pipeline:run.analyzed" | "pipeline:run.completed" | "pipeline:run.failed" | "system:announcement" | "system:report";
10704
+ NotificationEvent: "member.invited" | "member.joined" | "connection.sync.completed" | "connection.sync.failed" | "pipeline.run.analyzed" | "pipeline.run.completed" | "pipeline.run.failed" | "system.announcement" | "system.report";
10276
10705
  /**
10277
10706
  * @description Generic paginated response wrapper.
10278
10707
  *
@@ -10307,38 +10736,37 @@ interface components {
10307
10736
  /**
10308
10737
  * @description The typed payload of a notification, tagged by `notifyType`.
10309
10738
  *
10310
- * Each variant is one notification type carrying its own params struct. No
10311
- * rendered text is included the client localizes the copy from `notifyType`
10312
- * and the params. The `notifyType` values match the `NOTIFICATION_EVENT` enum,
10313
- * so the same key drives the member's per-event preferences.
10739
+ * Each variant is one notification type carrying its own params struct. The
10740
+ * `notifyType` values match [`NotificationEvent`], so the same key drives the
10741
+ * member's per-event preferences.
10314
10742
  */
10315
10743
  NotificationPayload: ({
10316
10744
  /** @constant */
10317
- notifyType: "member:invited";
10745
+ notifyType: "member.invited";
10318
10746
  } & components["schemas"]["MemberInvitedParams"]) | ({
10319
10747
  /** @constant */
10320
- notifyType: "member:joined";
10748
+ notifyType: "member.joined";
10321
10749
  } & components["schemas"]["MemberJoinedParams"]) | ({
10322
10750
  /** @constant */
10323
- notifyType: "connection:sync.completed";
10751
+ notifyType: "connection.sync.completed";
10324
10752
  } & components["schemas"]["ConnectionSyncCompletedParams"]) | ({
10325
10753
  /** @constant */
10326
- notifyType: "connection:sync.failed";
10754
+ notifyType: "connection.sync.failed";
10327
10755
  } & components["schemas"]["ConnectionSyncFailedParams"]) | ({
10328
10756
  /** @constant */
10329
- notifyType: "pipeline:run.analyzed";
10757
+ notifyType: "pipeline.run.analyzed";
10330
10758
  } & components["schemas"]["PipelineRunAnalyzedParams"]) | ({
10331
10759
  /** @constant */
10332
- notifyType: "pipeline:run.completed";
10760
+ notifyType: "pipeline.run.completed";
10333
10761
  } & components["schemas"]["PipelineRunCompletedParams"]) | ({
10334
10762
  /** @constant */
10335
- notifyType: "pipeline:run.failed";
10763
+ notifyType: "pipeline.run.failed";
10336
10764
  } & components["schemas"]["PipelineRunFailedParams"]) | ({
10337
10765
  /** @constant */
10338
- notifyType: "system:announcement";
10766
+ notifyType: "system.announcement";
10339
10767
  } & components["schemas"]["SystemAnnouncementParams"]) | ({
10340
10768
  /** @constant */
10341
- notifyType: "system:report";
10769
+ notifyType: "system.report";
10342
10770
  } & components["schemas"]["SystemReportParams"]);
10343
10771
  /** @description Response for notification settings within a workspace. */
10344
10772
  NotificationSettings: {
@@ -10497,6 +10925,11 @@ interface components {
10497
10925
  /** @description Handle of the workspace this pipeline belongs to. */
10498
10926
  workspaceSlug: components["schemas"]["Handle"];
10499
10927
  };
10928
+ /** @description Params of a pipeline activity (`pipeline.*`, non-run). */
10929
+ PipelineActivityParams: {
10930
+ /** @description Slug of the pipeline. */
10931
+ pipelineSlug: components["schemas"]["Handle"];
10932
+ };
10500
10933
  /**
10501
10934
  * @description A pipeline's detection + governance intent.
10502
10935
  *
@@ -10570,7 +11003,7 @@ interface components {
10570
11003
  */
10571
11004
  inputFileName?: string;
10572
11005
  /** @description Non-encrypted metadata for filtering/display. */
10573
- metadata: unknown;
11006
+ metadata: components["schemas"]["RunMetadata"];
10574
11007
  /**
10575
11008
  * Format: uuid
10576
11009
  * @description Redacted document produced by the run, once it completes.
@@ -10599,7 +11032,17 @@ interface components {
10599
11032
  /** @description Handle of the workspace this run belongs to. */
10600
11033
  workspaceSlug: components["schemas"]["Handle"];
10601
11034
  };
10602
- /** @description Params of a `pipeline:run.analyzed` notification. */
11035
+ /** @description Params of a pipeline-run activity (`pipeline.run.*`). */
11036
+ PipelineRunActivityParams: {
11037
+ /** @description Slug of the owning pipeline. */
11038
+ pipelineSlug: components["schemas"]["Handle"];
11039
+ /**
11040
+ * Format: uuid
11041
+ * @description Id of the run.
11042
+ */
11043
+ runId: string;
11044
+ };
11045
+ /** @description Params of a `pipeline.run.analyzed` notification. */
10603
11046
  PipelineRunAnalyzedParams: {
10604
11047
  /** @description Display name of the analyzed file, if known. */
10605
11048
  inputFileName?: string;
@@ -10611,7 +11054,7 @@ interface components {
10611
11054
  */
10612
11055
  runId: string;
10613
11056
  };
10614
- /** @description Params of a `pipeline:run.completed` notification. */
11057
+ /** @description Params of a `pipeline.run.completed` notification. */
10615
11058
  PipelineRunCompletedParams: {
10616
11059
  /** @description Display name of the analyzed file, if known. */
10617
11060
  inputFileName?: string;
@@ -10623,7 +11066,7 @@ interface components {
10623
11066
  */
10624
11067
  runId: string;
10625
11068
  };
10626
- /** @description Params of a `pipeline:run.failed` notification. */
11069
+ /** @description Params of a `pipeline.run.failed` notification. */
10627
11070
  PipelineRunFailedParams: {
10628
11071
  /** @description Failure reason, if available. */
10629
11072
  error?: string;
@@ -10796,6 +11239,14 @@ interface components {
10796
11239
  /** @description Handle of the workspace this policy belongs to. */
10797
11240
  workspaceSlug: components["schemas"]["Handle"];
10798
11241
  };
11242
+ /** @description Params of a policy activity (`policy.*`). */
11243
+ PolicyActivityParams: {
11244
+ /**
11245
+ * Format: uuid
11246
+ * @description Id of the policy.
11247
+ */
11248
+ policyId: string;
11249
+ };
10799
11250
  /**
10800
11251
  * @description A named governance policy.
10801
11252
  *
@@ -10831,7 +11282,7 @@ interface components {
10831
11282
  * [`Attribution::name`] so reviewers can find this policy
10832
11283
  * from any redaction it drove.
10833
11284
  *
10834
- * [`Attribution::name`]: elide_core::entity::provenance::Attribution::name
11285
+ * [`Attribution::name`]: elide_core::entity::audit::Attribution::name
10835
11286
  */
10836
11287
  id: string;
10837
11288
  /**
@@ -10879,7 +11330,7 @@ interface components {
10879
11330
  * reviewers can trace which rule fired. Every attachment a
10880
11331
  * [`RuleDispatch::Table`] expands into shares this UUID.
10881
11332
  *
10882
- * [`Attribution::description`]: elide_core::entity::provenance::Attribution::description
11333
+ * [`Attribution::description`]: elide_core::entity::audit::Attribution::description
10883
11334
  */
10884
11335
  id: string;
10885
11336
  /** @description Human-readable name. Display-only. */
@@ -10971,23 +11422,13 @@ interface components {
10971
11422
  * operator options,
10972
11423
  * `{"kind": "pci_dss_pan", "render": "hmac_sha256"}`.
10973
11424
  */
10974
- PolicyTemplate: {
11425
+ PolicyTemplate: ({
10975
11426
  /** @constant */
10976
11427
  kind: "hipaa_deidentification";
10977
- /**
10978
- * @description Which §164.514 method to apply. See [`HipaaDeidMethod`]
10979
- * for the tradeoff.
10980
- */
10981
- method: components["schemas"]["HipaaDeidMethod"];
10982
- } | {
11428
+ } & components["schemas"]["HipaaDeidentification"]) | ({
10983
11429
  /** @constant */
10984
11430
  kind: "gdpr_article9";
10985
- /**
10986
- * @description Which operator to apply to Article 9 matches. See
10987
- * [`GdprArticle9Treatment`] for the tradeoff.
10988
- */
10989
- treatment: components["schemas"]["GdprArticle9Treatment"];
10990
- } | {
11431
+ } & components["schemas"]["GdprArticle9"]) | {
10991
11432
  /** @constant */
10992
11433
  kind: "pci_dss";
10993
11434
  /**
@@ -10998,6 +11439,9 @@ interface components {
10998
11439
  } | {
10999
11440
  /** @constant */
11000
11441
  kind: "ccpa";
11442
+ } | {
11443
+ /** @constant */
11444
+ kind: "soc2_secrets";
11001
11445
  };
11002
11446
  /**
11003
11447
  * @description Closed polygon, given by its ordered vertices.
@@ -11238,7 +11682,7 @@ interface components {
11238
11682
  * closure into provenance, so [`Predicate`] records only that a predicate
11239
11683
  * matched, not which one.
11240
11684
  *
11241
- * [`Redaction`]: crate::entity::provenance::EventKind::Redaction
11685
+ * [`Redaction`]: crate::entity::audit::AuditKind::Redaction
11242
11686
  * [`Predicate`]: RuleMatch::Predicate
11243
11687
  */
11244
11688
  RuleMatch: {
@@ -11248,6 +11692,13 @@ interface components {
11248
11692
  } | "predicate" | "fallback";
11249
11693
  /** @description Opaque run identifier (run_<uuid>). */
11250
11694
  RunId: string;
11695
+ /** @description Structured metadata for a pipeline run. */
11696
+ RunMetadata: {
11697
+ /** @description Failure reason recorded when the run failed. */
11698
+ error?: string;
11699
+ /** @description Free-form labels attached to the run. */
11700
+ tags?: string[];
11701
+ };
11251
11702
  /**
11252
11703
  * @description A run's status change, broadcast on the core-NATS subject [`run_subject`].
11253
11704
  *
@@ -11559,12 +12010,12 @@ interface components {
11559
12010
  * to track whether a run was manually triggered, scheduled, or triggered by a webhook.
11560
12011
  */
11561
12012
  SyncTriggerType: "manual" | "scheduled" | "webhook";
11562
- /** @description Params of a `system:announcement` notification. */
12013
+ /** @description Params of a `system.announcement` notification. */
11563
12014
  SystemAnnouncementParams: {
11564
12015
  /** @description Announcement message key or body. */
11565
12016
  message: string;
11566
12017
  };
11567
- /** @description Params of a `system:report` notification. */
12018
+ /** @description Params of a `system.report` notification. */
11568
12019
  SystemReportParams: {
11569
12020
  /**
11570
12021
  * Format: uuid
@@ -11573,152 +12024,90 @@ interface components {
11573
12024
  reportId?: string;
11574
12025
  };
11575
12026
  /**
11576
- * @description Detected piece of sensitive information within some medium.
12027
+ * @description One node in an entity's audit DAG: a thing that happened, with its
12028
+ * effect on confidence and its tamper-evident links.
11577
12029
  *
11578
- * Generic over the [`Modality`] `M`, which is what makes the model
11579
- * multimodal: a text pipeline yields `Entity<Text>`, an audio pipeline
11580
- * `Entity<Audio>`, and so on. The entity's location is the modality's
11581
- * [`Location`] type, `M::Location`.
12030
+ * Events are recorded on an entity's [`AuditLog`], forming the full audit
12031
+ * trail of its life: each recognizer that found it, the deduplication that
12032
+ * fused them, any score calibration, and the redaction that hid it. The
12033
+ * uniform spine (who, resulting score, when) is the same for every event; the
12034
+ * [`kind`] carries the event-specific detail *and* the explanation of why the
12035
+ * event happened.
11582
12036
  *
11583
- * # Birth and fusion
12037
+ * Each event links to its [`parents`] by their [`hash`]: a birth event (a
12038
+ * recognizer's first detection) has no parents, a normal step has one, and a
12039
+ * [fusion](crate::entity::audit::AuditLog::record_fusion) has several. Its own
12040
+ * [`hash`] folds the
12041
+ * payload together with the parents' hashes, so altering any event breaks
12042
+ * every event downstream of it: [`AuditLog::verify`] walks the DAG and
12043
+ * reports the first break.
11584
12044
  *
11585
- * A recognizer emits an entity directly, carrying a single recognition
11586
- * [`Event`] (its own finding) in the entity's [`provenance`]. When
11587
- * several recognizers find the same thing, a fusion step (in
11588
- * `elide`) combines their entities into one: the survivor's
11589
- * [`location`] and [`confidence`] are the *fused* values, and every
11590
- * contributing recognition event, plus a deduplication event, is
11591
- * retained in its provenance. The entity therefore carries its full
11592
- * audit trail with it.
12045
+ * `entity.confidence` always equals the [`confidence`] of the most recent
12046
+ * event. The confidence *flowing in* is not stored: it is the parents'
12047
+ * [`confidence`], recovered from the DAG.
11593
12048
  *
11594
- * [`Location`]: Modality::Location
11595
- * [`Event`]: crate::entity::provenance::Event
11596
- * [`provenance`]: Entity::provenance
11597
- * [`location`]: Entity::location
11598
- * [`confidence`]: Entity::confidence
12049
+ * [`AuditLog`]: crate::entity::audit::AuditLog
12050
+ * [`AuditLog::record_fusion`]: crate::entity::audit::AuditLog::record_fusion
12051
+ * [`AuditLog::verify`]: crate::entity::audit::AuditLog::verify
12052
+ * [`kind`]: AuditEvent::kind
12053
+ * [`parents`]: AuditEvent::parents
12054
+ * [`hash`]: AuditEvent::hash
12055
+ * [`confidence`]: AuditEvent::confidence
11599
12056
  */
11600
- TabularEntity: {
11601
- /** @description Effective confidence in `0.0..=1.0` (fused, if applicable). */
11602
- confidence: components["schemas"]["Confidence"];
11603
- /**
11604
- * @description Coreference identifier, if a recognizer resolved this entity as one
11605
- * mention of a cluster. Entities sharing an [`EntityCoRef`] denote the
11606
- * same real-world thing.
11607
- */
11608
- coref?: components["schemas"]["EntityCoRef"];
11609
- /**
11610
- * Format: uuid
11611
- * @description Stable unique identity for this entity (time-ordered UUIDv7), minted
11612
- * when the entity is assembled.
11613
- */
11614
- id: string;
12057
+ TabularAuditEvent: {
11615
12058
  /**
11616
- * @description What kind of sensitive information this is (resolved via a
11617
- * [`LabelCatalog`]).
12059
+ * @description Confidence after this event: the entity's effective confidence once it
12060
+ * has happened.
11618
12061
  */
11619
- label: components["schemas"]["LabelRef"];
12062
+ confidence: components["schemas"]["Confidence"];
11620
12063
  /**
11621
- * @description The language of this entity's surrounding text, when a recognizer
11622
- * resolved one. `None` when unknown or language-agnostic.
12064
+ * @description This event's hash, over its payload and its parents' hashes. Assigned by
12065
+ * [`AuditLog`] when the event is recorded; read it through
12066
+ * [`hash`](Self::hash). Recomputing it is how the DAG is verified.
12067
+ *
12068
+ * Not publicly settable: only [`AuditLog`] assigns it, so a caller cannot
12069
+ * forge a self-consistent event outside the recording path.
12070
+ *
12071
+ * [`AuditLog`]: crate::entity::audit::AuditLog
11623
12072
  */
11624
- language?: string;
12073
+ hash: components["schemas"]["AuditHash"];
12074
+ /** @description Kind of event, with its event-specific detail and its rationale. */
12075
+ kind: components["schemas"]["TabularAuditKind"];
11625
12076
  /**
11626
- * @description Location of the entity within the medium (fused, if it came from more
11627
- * than one detection).
12077
+ * @description The events this one follows, by their hash. Empty for a birth event, one
12078
+ * entry for a normal step, several for a fusion. Assigned by [`AuditLog`]
12079
+ * when the event is recorded; read it through [`parents`](Self::parents).
12080
+ *
12081
+ * Not publicly settable: the links are the tamper-evident structure, so
12082
+ * only [`AuditLog::record`] / [`AuditLog::record_fusion`] assign them.
12083
+ *
12084
+ * [`AuditLog`]: crate::entity::audit::AuditLog
12085
+ * [`AuditLog::record`]: crate::entity::audit::AuditLog::record
12086
+ * [`AuditLog::record_fusion`]: crate::entity::audit::AuditLog::record_fusion
11628
12087
  */
11629
- location: components["schemas"]["TabularLocation"];
12088
+ parents: components["schemas"]["AuditHash"][];
11630
12089
  /**
11631
- * @description Detection audit trail: every contributing detection and the fusion
11632
- * event, if any.
11633
- */
11634
- provenance: components["schemas"]["TabularProvenance"];
11635
- /**
11636
- * @description Byte range of the match in the *recognized text* it was found in (the
11637
- * OCR layout text, the audio transcript, or the text payload itself) —
11638
- * the stable key back into that enrichment artifact, where the rich
11639
- * context lives (which OCR block, which speaker) that the geometric
11640
- * [`location`] cannot hold. `None` for entities not found via text
11641
- * recognition (e.g. a VLM box). Provenance, not a coordinate: redaction
11642
- * uses [`location`]; an audit uses this with the artifact.
11643
- *
11644
- * [`location`]: Entity::location
11645
- */
11646
- recognized_range?: components["schemas"]["Range_of_uint"];
11647
- };
11648
- /**
11649
- * @description One recognized entity plus the optional reviewer override.
11650
- *
11651
- * The bound mirrors elide's [`Entity<M>`]: serialization needs
11652
- * `M::Location` and `M::Data` (de)serializable, and JsonSchema
11653
- * derivation needs them schema-able. All four modalities elide
11654
- * ships satisfy these under the `serde` + `schema` features.
11655
- */
11656
- TabularEntityRecord: {
11657
- /** @description The elide entity, as recognition produced it. */
11658
- entity: components["schemas"]["TabularEntity"];
11659
- /**
11660
- * @description Reviewer-supplied redaction override.
11661
- *
11662
- * `None` means "use the matching policy rule's decision";
11663
- * `Some(...)` overrides that rule for this specific entity
11664
- * at apply time. Reviewer overrides take precedence over
11665
- * every policy rule and inherit the authority of the
11666
- * [`Review::policy_id`] they name — the audit event's
11667
- * attribution stamps that policy so the trail names the
11668
- * authority under which the override fired.
11669
- */
11670
- review?: components["schemas"]["Review"];
11671
- };
11672
- /**
11673
- * @description One thing that happened to an entity, with its effect on confidence.
11674
- *
11675
- * Events are recorded in order on an entity's [`Provenance`], forming
11676
- * the full audit trail of its life: each recognizer that found it, the
11677
- * deduplication that fused them, any score calibration, and the
11678
- * redaction that hid it. The uniform spine (who, before/after score,
11679
- * when, why) is the same for every event; the [`kind`] carries the
11680
- * event-specific detail.
11681
- *
11682
- * `entity.confidence` always equals the [`after`] of the most recent
11683
- * event.
11684
- *
11685
- * [`Provenance`]: crate::entity::provenance::Provenance
11686
- * [`kind`]: Event::kind
11687
- * [`after`]: Event::after
11688
- */
11689
- TabularEvent: {
11690
- /** @description Confidence after this event. */
11691
- after: components["schemas"]["Confidence"];
11692
- /** @description When the event happened (UTC). */
11693
- at: string;
11694
- /**
11695
- * @description Confidence before this event, if there was a prior value. `None` on
11696
- * the first (birth) event.
11697
- */
11698
- before?: components["schemas"]["Confidence"];
11699
- /** @description Kind of event, with its event-specific detail. */
11700
- kind: components["schemas"]["TabularEventKind"];
11701
- /** @description Free-text explanation of what the event did and why. */
11702
- reason: string;
11703
- /**
11704
- * @description Who produced this event: a recognizer name, a deduplication strategy,
11705
- * an operator, or whatever acted.
12090
+ * @description Who produced this event: a recognizer name, a deduplication strategy,
12091
+ * an operator, or whatever acted.
11706
12092
  */
11707
12093
  source: string;
12094
+ /** @description When the event happened (UTC). */
12095
+ timestamp: string;
11708
12096
  };
11709
12097
  /**
11710
- * @description Kind of an [`Event`], carrying its event-specific detail.
12098
+ * @description Kind of an [`AuditEvent`], carrying its event-specific detail and the
12099
+ * rationale for why it happened.
11711
12100
  *
11712
12101
  * `#[non_exhaustive]`: new event kinds (verification, annotation, …)
11713
12102
  * can be added compatibly. The recognition kinds ([`Pattern`],
11714
12103
  * [`Model`]) carry the matched [`Location`]; the rest carry their own
11715
12104
  * data.
11716
12105
  *
11717
- * [`Pattern`]: EventKind::Pattern
11718
- * [`Model`]: EventKind::Model
12106
+ * [`Pattern`]: AuditKind::Pattern
12107
+ * [`Model`]: AuditKind::Model
11719
12108
  * [`Location`]: Modality::Location
11720
12109
  */
11721
- TabularEventKind: {
12110
+ TabularAuditKind: {
11722
12111
  /** @constant */
11723
12112
  kind: "pattern";
11724
12113
  /** @description Where the recognizer matched. */
@@ -11782,7 +12171,7 @@ interface components {
11782
12171
  * it is the keyword resolved through the modality's [`locate`] (a
11783
12172
  * pixel box for image, a time span for audio, the byte range for
11784
12173
  * text/tabular). `None` when the keyword's stream range could not be
11785
- * placed symmetric with a match the recognizer itself drops.
12174
+ * placed, symmetric with a match the recognizer itself drops.
11786
12175
  *
11787
12176
  * [`locate`]: crate::modality::TextRecognizable::locate
11788
12177
  */
@@ -11800,12 +12189,158 @@ interface components {
11800
12189
  /** @description How much the output leaks about the original. */
11801
12190
  leak_profile: components["schemas"]["LeakProfile"];
11802
12191
  /**
11803
- * @description Which selection rule chose this operator the automatic "why"
12192
+ * @description Which selection rule chose this operator: the automatic "why"
11804
12193
  * (matched a label, a tag, a predicate, or the fallback).
11805
12194
  */
11806
12195
  matched_by: components["schemas"]["RuleMatch"];
11807
12196
  /** @description Which operator (name + version) ran. */
11808
12197
  operator: components["schemas"]["OperatorId"];
12198
+ /**
12199
+ * @description BLAKE3 digest of the original text the operator hid, when the
12200
+ * redaction layer recorded it. Proves *what* was redacted without
12201
+ * storing the plaintext; `None` when the operator did not capture it.
12202
+ */
12203
+ span_hash?: components["schemas"]["AuditHash"];
12204
+ /**
12205
+ * Format: uint32
12206
+ * @description Byte length of the original text the operator hid, paired with
12207
+ * [`span_hash`](Self::Redaction::span_hash). `None` when not captured.
12208
+ */
12209
+ span_length?: number;
12210
+ };
12211
+ /**
12212
+ * @description Full audit trail of an [`Entity`]: every [`AuditEvent`] in its life, as a
12213
+ * tamper-evident DAG.
12214
+ *
12215
+ * Where Presidio keeps a shallow, optional, per-stage explanation that is
12216
+ * stripped by default, an `AuditLog` is always present and records the
12217
+ * entity's *entire* life: each recognizer that found it, the deduplication
12218
+ * that fused them, any confidence calibration, and the redaction that hid it.
12219
+ * Nothing is collapsed: every recognizer keeps its own recognition event with
12220
+ * its location and score.
12221
+ *
12222
+ * The events form a **directed acyclic graph**, not a flat list. A recognizer
12223
+ * records a birth event (no parents); each later step links to the event it
12224
+ * follows; and a [fusion](Self::record_fusion) links to *several* parents at
12225
+ * once: the heads of the trails it combines. This is the true shape of a
12226
+ * deduplicated entity: two recognizers are siblings, then a fusion joins them.
12227
+ * The events are stored in the order they were recorded, which is a
12228
+ * topological order of the DAG (a parent is always recorded before its
12229
+ * children).
12230
+ *
12231
+ * Two chains ride the DAG's edges:
12232
+ *
12233
+ * - a **confidence chain**, where each event's [`confidence`] is the entity's
12234
+ * effective score after it; the score flowing *in* is its parents'
12235
+ * confidence, so [`final_confidence`] and the full history are recoverable;
12236
+ * - a **hash chain**, where each event's [`hash`] folds its payload together
12237
+ * with its parents' hashes, so any edit, reorder, insertion, or deletion of
12238
+ * an earlier event breaks every event downstream. [`verify`] walks the DAG
12239
+ * and reports the first break.
12240
+ *
12241
+ * [`Entity`]: crate::entity::Entity
12242
+ * [`confidence`]: AuditEvent::confidence
12243
+ * [`hash`]: AuditEvent::hash
12244
+ * [`final_confidence`]: Self::final_confidence
12245
+ * [`verify`]: Self::verify
12246
+ */
12247
+ TabularAuditLog: components["schemas"]["TabularAuditEvent"][];
12248
+ /**
12249
+ * @description Detected piece of sensitive information within some medium.
12250
+ *
12251
+ * Generic over the [`Modality`] `M`, which is what makes the model
12252
+ * multimodal: a text pipeline yields `Entity<Text>`, an audio pipeline
12253
+ * `Entity<Audio>`, and so on. The entity's location is the modality's
12254
+ * [`Location`] type, `M::Location`.
12255
+ *
12256
+ * # Birth and fusion
12257
+ *
12258
+ * A recognizer emits an entity directly, carrying a single recognition
12259
+ * [`AuditEvent`] (its own finding) in the entity's [`audit`] trail. When
12260
+ * several recognizers find the same thing, a fusion step (in
12261
+ * `elide`) combines their entities into one: the survivor's
12262
+ * [`location`] and [`confidence`] are the *fused* values, and every
12263
+ * contributing recognition event, plus a deduplication event, is
12264
+ * retained in its audit trail. The entity therefore carries its full
12265
+ * audit trail with it.
12266
+ *
12267
+ * [`Location`]: Modality::Location
12268
+ * [`AuditEvent`]: crate::entity::audit::AuditEvent
12269
+ * [`audit`]: Entity::audit
12270
+ * [`location`]: Entity::location
12271
+ * [`confidence`]: Entity::confidence
12272
+ */
12273
+ TabularEntity: {
12274
+ /**
12275
+ * @description Tamper-evident audit trail: every contributing detection, the fusion
12276
+ * event if any, and the redaction that hid it, as a hash-linked DAG.
12277
+ */
12278
+ audit: components["schemas"]["TabularAuditLog"];
12279
+ /** @description Effective confidence in `0.0..=1.0` (fused, if applicable). */
12280
+ confidence: components["schemas"]["Confidence"];
12281
+ /**
12282
+ * @description Coreference identifier, if a recognizer resolved this entity as one
12283
+ * mention of a cluster. Entities sharing an [`EntityCoRef`] denote the
12284
+ * same real-world thing.
12285
+ */
12286
+ coref?: components["schemas"]["EntityCoRef"];
12287
+ /**
12288
+ * Format: uuid
12289
+ * @description Stable unique identity for this entity (time-ordered UUIDv7), minted
12290
+ * when the entity is assembled.
12291
+ */
12292
+ id: string;
12293
+ /**
12294
+ * @description What kind of sensitive information this is (resolved via a
12295
+ * [`LabelCatalog`]).
12296
+ */
12297
+ label: components["schemas"]["LabelRef"];
12298
+ /**
12299
+ * @description The language of this entity's surrounding text, when a recognizer
12300
+ * resolved one. `None` when unknown or language-agnostic.
12301
+ */
12302
+ language?: string;
12303
+ /**
12304
+ * @description Location of the entity within the medium (fused, if it came from more
12305
+ * than one detection).
12306
+ */
12307
+ location: components["schemas"]["TabularLocation"];
12308
+ /**
12309
+ * @description Byte range of the match in the *recognized text* it was found in (the
12310
+ * OCR layout text, the audio transcript, or the text payload itself) —
12311
+ * the stable key back into that enrichment artifact, where the rich
12312
+ * context lives (which OCR block, which speaker) that the geometric
12313
+ * [`location`] cannot hold. `None` for entities not found via text
12314
+ * recognition (e.g. a VLM box). An audit key, not a coordinate: redaction
12315
+ * uses [`location`]; an audit uses this with the artifact.
12316
+ *
12317
+ * [`location`]: Entity::location
12318
+ */
12319
+ recognized_range?: components["schemas"]["Range_of_uint"];
12320
+ };
12321
+ /**
12322
+ * @description One recognized entity plus the optional reviewer override.
12323
+ *
12324
+ * The bound mirrors elide's [`Entity<M>`]: serialization needs
12325
+ * `M::Location` and `M::Data` (de)serializable, and JsonSchema
12326
+ * derivation needs them schema-able. All four modalities elide
12327
+ * ships satisfy these under the `serde` + `schema` features.
12328
+ */
12329
+ TabularEntityRecord: {
12330
+ /** @description The elide entity, as recognition produced it. */
12331
+ entity: components["schemas"]["TabularEntity"];
12332
+ /**
12333
+ * @description Reviewer-supplied redaction override.
12334
+ *
12335
+ * `None` means "use the matching policy rule's decision";
12336
+ * `Some(...)` overrides that rule for this specific entity
12337
+ * at apply time. Reviewer overrides take precedence over
12338
+ * every policy rule and inherit the authority of the
12339
+ * [`Review::policy_id`] they name — the audit event's
12340
+ * attribution stamps that policy so the trail names the
12341
+ * authority under which the override fired.
12342
+ */
12343
+ review?: components["schemas"]["Review"];
11809
12344
  };
11810
12345
  /**
11811
12346
  * @description Located, typed piece of context a recognizer may treat as in-context
@@ -11877,31 +12412,6 @@ interface components {
11877
12412
  */
11878
12413
  start_offset?: number;
11879
12414
  };
11880
- /**
11881
- * @description Full audit trail of an [`Entity`]: every [`Event`] in its life, in
11882
- * order.
11883
- *
11884
- * This is the model's answer to "full provenance": where Presidio keeps
11885
- * a shallow, optional, per-stage explanation that is stripped by
11886
- * default, a `Provenance` is always present and records the entity's
11887
- * *entire* life as an ordered list of events: each recognizer that
11888
- * found it, the deduplication that fused them, any confidence
11889
- * calibration, and the redaction that hid it. Nothing is collapsed:
11890
- * every recognizer keeps its own recognition event with its location
11891
- * and score.
11892
- *
11893
- * The events form a confidence chain (each event's [`after`] is the
11894
- * next's [`before`]) so the final confidence and its full history are
11895
- * always recoverable.
11896
- *
11897
- * [`Entity`]: crate::entity::Entity
11898
- * [`after`]: Event::after
11899
- * [`before`]: Event::before
11900
- */
11901
- TabularProvenance: {
11902
- /** @description Events, in the order they happened. */
11903
- events: components["schemas"]["TabularEvent"][];
11904
- };
11905
12415
  /** @description Operator spec a `redact` tabular rule carries. */
11906
12416
  TabularRedaction: {
11907
12417
  /** @constant */
@@ -11979,163 +12489,90 @@ interface components {
11979
12489
  payload?: unknown;
11980
12490
  };
11981
12491
  /**
11982
- * @description Run of text.
11983
- *
11984
- * Either the payload a text recognizer inspects, or the value sliced out
11985
- * at an entity's location for an operator.
11986
- *
11987
- * Held as a [`HipStr`] so short values inline and longer ones share a
11988
- * refcounted buffer, making cheap clones when one payload is passed to
11989
- * several recognizers.
11990
- */
11991
- TextData: string;
11992
- /**
11993
- * @description Detected piece of sensitive information within some medium.
12492
+ * @description One node in an entity's audit DAG: a thing that happened, with its
12493
+ * effect on confidence and its tamper-evident links.
11994
12494
  *
11995
- * Generic over the [`Modality`] `M`, which is what makes the model
11996
- * multimodal: a text pipeline yields `Entity<Text>`, an audio pipeline
11997
- * `Entity<Audio>`, and so on. The entity's location is the modality's
11998
- * [`Location`] type, `M::Location`.
12495
+ * Events are recorded on an entity's [`AuditLog`], forming the full audit
12496
+ * trail of its life: each recognizer that found it, the deduplication that
12497
+ * fused them, any score calibration, and the redaction that hid it. The
12498
+ * uniform spine (who, resulting score, when) is the same for every event; the
12499
+ * [`kind`] carries the event-specific detail *and* the explanation of why the
12500
+ * event happened.
11999
12501
  *
12000
- * # Birth and fusion
12502
+ * Each event links to its [`parents`] by their [`hash`]: a birth event (a
12503
+ * recognizer's first detection) has no parents, a normal step has one, and a
12504
+ * [fusion](crate::entity::audit::AuditLog::record_fusion) has several. Its own
12505
+ * [`hash`] folds the
12506
+ * payload together with the parents' hashes, so altering any event breaks
12507
+ * every event downstream of it: [`AuditLog::verify`] walks the DAG and
12508
+ * reports the first break.
12001
12509
  *
12002
- * A recognizer emits an entity directly, carrying a single recognition
12003
- * [`Event`] (its own finding) in the entity's [`provenance`]. When
12004
- * several recognizers find the same thing, a fusion step (in
12005
- * `elide`) combines their entities into one: the survivor's
12006
- * [`location`] and [`confidence`] are the *fused* values, and every
12007
- * contributing recognition event, plus a deduplication event, is
12008
- * retained in its provenance. The entity therefore carries its full
12009
- * audit trail with it.
12510
+ * `entity.confidence` always equals the [`confidence`] of the most recent
12511
+ * event. The confidence *flowing in* is not stored: it is the parents'
12512
+ * [`confidence`], recovered from the DAG.
12010
12513
  *
12011
- * [`Location`]: Modality::Location
12012
- * [`Event`]: crate::entity::provenance::Event
12013
- * [`provenance`]: Entity::provenance
12014
- * [`location`]: Entity::location
12015
- * [`confidence`]: Entity::confidence
12514
+ * [`AuditLog`]: crate::entity::audit::AuditLog
12515
+ * [`AuditLog::record_fusion`]: crate::entity::audit::AuditLog::record_fusion
12516
+ * [`AuditLog::verify`]: crate::entity::audit::AuditLog::verify
12517
+ * [`kind`]: AuditEvent::kind
12518
+ * [`parents`]: AuditEvent::parents
12519
+ * [`hash`]: AuditEvent::hash
12520
+ * [`confidence`]: AuditEvent::confidence
12016
12521
  */
12017
- TextEntity: {
12018
- /** @description Effective confidence in `0.0..=1.0` (fused, if applicable). */
12019
- confidence: components["schemas"]["Confidence"];
12522
+ TextAuditEvent: {
12020
12523
  /**
12021
- * @description Coreference identifier, if a recognizer resolved this entity as one
12022
- * mention of a cluster. Entities sharing an [`EntityCoRef`] denote the
12023
- * same real-world thing.
12024
- */
12025
- coref?: components["schemas"]["EntityCoRef"];
12026
- /**
12027
- * Format: uuid
12028
- * @description Stable unique identity for this entity (time-ordered UUIDv7), minted
12029
- * when the entity is assembled.
12524
+ * @description Confidence after this event: the entity's effective confidence once it
12525
+ * has happened.
12030
12526
  */
12031
- id: string;
12032
- /**
12033
- * @description What kind of sensitive information this is (resolved via a
12034
- * [`LabelCatalog`]).
12035
- */
12036
- label: components["schemas"]["LabelRef"];
12037
- /**
12038
- * @description The language of this entity's surrounding text, when a recognizer
12039
- * resolved one. `None` when unknown or language-agnostic.
12040
- */
12041
- language?: string;
12042
- /**
12043
- * @description Location of the entity within the medium (fused, if it came from more
12044
- * than one detection).
12045
- */
12046
- location: components["schemas"]["TextLocation"];
12047
- /**
12048
- * @description Detection audit trail: every contributing detection and the fusion
12049
- * event, if any.
12050
- */
12051
- provenance: components["schemas"]["TextProvenance"];
12527
+ confidence: components["schemas"]["Confidence"];
12052
12528
  /**
12053
- * @description Byte range of the match in the *recognized text* it was found in (the
12054
- * OCR layout text, the audio transcript, or the text payload itself) —
12055
- * the stable key back into that enrichment artifact, where the rich
12056
- * context lives (which OCR block, which speaker) that the geometric
12057
- * [`location`] cannot hold. `None` for entities not found via text
12058
- * recognition (e.g. a VLM box). Provenance, not a coordinate: redaction
12059
- * uses [`location`]; an audit uses this with the artifact.
12529
+ * @description This event's hash, over its payload and its parents' hashes. Assigned by
12530
+ * [`AuditLog`] when the event is recorded; read it through
12531
+ * [`hash`](Self::hash). Recomputing it is how the DAG is verified.
12060
12532
  *
12061
- * [`location`]: Entity::location
12062
- */
12063
- recognized_range?: components["schemas"]["Range_of_uint"];
12064
- };
12065
- /**
12066
- * @description One recognized entity plus the optional reviewer override.
12067
- *
12068
- * The bound mirrors elide's [`Entity<M>`]: serialization needs
12069
- * `M::Location` and `M::Data` (de)serializable, and JsonSchema
12070
- * derivation needs them schema-able. All four modalities elide
12071
- * ships satisfy these under the `serde` + `schema` features.
12072
- */
12073
- TextEntityRecord: {
12074
- /** @description The elide entity, as recognition produced it. */
12075
- entity: components["schemas"]["TextEntity"];
12076
- /**
12077
- * @description Reviewer-supplied redaction override.
12533
+ * Not publicly settable: only [`AuditLog`] assigns it, so a caller cannot
12534
+ * forge a self-consistent event outside the recording path.
12078
12535
  *
12079
- * `None` means "use the matching policy rule's decision";
12080
- * `Some(...)` overrides that rule for this specific entity
12081
- * at apply time. Reviewer overrides take precedence over
12082
- * every policy rule and inherit the authority of the
12083
- * [`Review::policy_id`] they name — the audit event's
12084
- * attribution stamps that policy so the trail names the
12085
- * authority under which the override fired.
12536
+ * [`AuditLog`]: crate::entity::audit::AuditLog
12086
12537
  */
12087
- review?: components["schemas"]["Review"];
12088
- };
12089
- /**
12090
- * @description One thing that happened to an entity, with its effect on confidence.
12091
- *
12092
- * Events are recorded in order on an entity's [`Provenance`], forming
12093
- * the full audit trail of its life: each recognizer that found it, the
12094
- * deduplication that fused them, any score calibration, and the
12095
- * redaction that hid it. The uniform spine (who, before/after score,
12096
- * when, why) is the same for every event; the [`kind`] carries the
12097
- * event-specific detail.
12098
- *
12099
- * `entity.confidence` always equals the [`after`] of the most recent
12100
- * event.
12101
- *
12102
- * [`Provenance`]: crate::entity::provenance::Provenance
12103
- * [`kind`]: Event::kind
12104
- * [`after`]: Event::after
12105
- */
12106
- TextEvent: {
12107
- /** @description Confidence after this event. */
12108
- after: components["schemas"]["Confidence"];
12109
- /** @description When the event happened (UTC). */
12110
- at: string;
12538
+ hash: components["schemas"]["AuditHash"];
12539
+ /** @description Kind of event, with its event-specific detail and its rationale. */
12540
+ kind: components["schemas"]["TextAuditKind"];
12111
12541
  /**
12112
- * @description Confidence before this event, if there was a prior value. `None` on
12113
- * the first (birth) event.
12542
+ * @description The events this one follows, by their hash. Empty for a birth event, one
12543
+ * entry for a normal step, several for a fusion. Assigned by [`AuditLog`]
12544
+ * when the event is recorded; read it through [`parents`](Self::parents).
12545
+ *
12546
+ * Not publicly settable: the links are the tamper-evident structure, so
12547
+ * only [`AuditLog::record`] / [`AuditLog::record_fusion`] assign them.
12548
+ *
12549
+ * [`AuditLog`]: crate::entity::audit::AuditLog
12550
+ * [`AuditLog::record`]: crate::entity::audit::AuditLog::record
12551
+ * [`AuditLog::record_fusion`]: crate::entity::audit::AuditLog::record_fusion
12114
12552
  */
12115
- before?: components["schemas"]["Confidence"];
12116
- /** @description Kind of event, with its event-specific detail. */
12117
- kind: components["schemas"]["TextEventKind"];
12118
- /** @description Free-text explanation of what the event did and why. */
12119
- reason: string;
12553
+ parents: components["schemas"]["AuditHash"][];
12120
12554
  /**
12121
12555
  * @description Who produced this event: a recognizer name, a deduplication strategy,
12122
12556
  * an operator, or whatever acted.
12123
12557
  */
12124
12558
  source: string;
12559
+ /** @description When the event happened (UTC). */
12560
+ timestamp: string;
12125
12561
  };
12126
12562
  /**
12127
- * @description Kind of an [`Event`], carrying its event-specific detail.
12563
+ * @description Kind of an [`AuditEvent`], carrying its event-specific detail and the
12564
+ * rationale for why it happened.
12128
12565
  *
12129
12566
  * `#[non_exhaustive]`: new event kinds (verification, annotation, …)
12130
12567
  * can be added compatibly. The recognition kinds ([`Pattern`],
12131
12568
  * [`Model`]) carry the matched [`Location`]; the rest carry their own
12132
12569
  * data.
12133
12570
  *
12134
- * [`Pattern`]: EventKind::Pattern
12135
- * [`Model`]: EventKind::Model
12571
+ * [`Pattern`]: AuditKind::Pattern
12572
+ * [`Model`]: AuditKind::Model
12136
12573
  * [`Location`]: Modality::Location
12137
12574
  */
12138
- TextEventKind: {
12575
+ TextAuditKind: {
12139
12576
  /** @constant */
12140
12577
  kind: "pattern";
12141
12578
  /** @description Where the recognizer matched. */
@@ -12199,7 +12636,7 @@ interface components {
12199
12636
  * it is the keyword resolved through the modality's [`locate`] (a
12200
12637
  * pixel box for image, a time span for audio, the byte range for
12201
12638
  * text/tabular). `None` when the keyword's stream range could not be
12202
- * placed symmetric with a match the recognizer itself drops.
12639
+ * placed, symmetric with a match the recognizer itself drops.
12203
12640
  *
12204
12641
  * [`locate`]: crate::modality::TextRecognizable::locate
12205
12642
  */
@@ -12217,12 +12654,169 @@ interface components {
12217
12654
  /** @description How much the output leaks about the original. */
12218
12655
  leak_profile: components["schemas"]["LeakProfile"];
12219
12656
  /**
12220
- * @description Which selection rule chose this operator the automatic "why"
12657
+ * @description Which selection rule chose this operator: the automatic "why"
12221
12658
  * (matched a label, a tag, a predicate, or the fallback).
12222
12659
  */
12223
12660
  matched_by: components["schemas"]["RuleMatch"];
12224
12661
  /** @description Which operator (name + version) ran. */
12225
12662
  operator: components["schemas"]["OperatorId"];
12663
+ /**
12664
+ * @description BLAKE3 digest of the original text the operator hid, when the
12665
+ * redaction layer recorded it. Proves *what* was redacted without
12666
+ * storing the plaintext; `None` when the operator did not capture it.
12667
+ */
12668
+ span_hash?: components["schemas"]["AuditHash"];
12669
+ /**
12670
+ * Format: uint32
12671
+ * @description Byte length of the original text the operator hid, paired with
12672
+ * [`span_hash`](Self::Redaction::span_hash). `None` when not captured.
12673
+ */
12674
+ span_length?: number;
12675
+ };
12676
+ /**
12677
+ * @description Full audit trail of an [`Entity`]: every [`AuditEvent`] in its life, as a
12678
+ * tamper-evident DAG.
12679
+ *
12680
+ * Where Presidio keeps a shallow, optional, per-stage explanation that is
12681
+ * stripped by default, an `AuditLog` is always present and records the
12682
+ * entity's *entire* life: each recognizer that found it, the deduplication
12683
+ * that fused them, any confidence calibration, and the redaction that hid it.
12684
+ * Nothing is collapsed: every recognizer keeps its own recognition event with
12685
+ * its location and score.
12686
+ *
12687
+ * The events form a **directed acyclic graph**, not a flat list. A recognizer
12688
+ * records a birth event (no parents); each later step links to the event it
12689
+ * follows; and a [fusion](Self::record_fusion) links to *several* parents at
12690
+ * once: the heads of the trails it combines. This is the true shape of a
12691
+ * deduplicated entity: two recognizers are siblings, then a fusion joins them.
12692
+ * The events are stored in the order they were recorded, which is a
12693
+ * topological order of the DAG (a parent is always recorded before its
12694
+ * children).
12695
+ *
12696
+ * Two chains ride the DAG's edges:
12697
+ *
12698
+ * - a **confidence chain**, where each event's [`confidence`] is the entity's
12699
+ * effective score after it; the score flowing *in* is its parents'
12700
+ * confidence, so [`final_confidence`] and the full history are recoverable;
12701
+ * - a **hash chain**, where each event's [`hash`] folds its payload together
12702
+ * with its parents' hashes, so any edit, reorder, insertion, or deletion of
12703
+ * an earlier event breaks every event downstream. [`verify`] walks the DAG
12704
+ * and reports the first break.
12705
+ *
12706
+ * [`Entity`]: crate::entity::Entity
12707
+ * [`confidence`]: AuditEvent::confidence
12708
+ * [`hash`]: AuditEvent::hash
12709
+ * [`final_confidence`]: Self::final_confidence
12710
+ * [`verify`]: Self::verify
12711
+ */
12712
+ TextAuditLog: components["schemas"]["TextAuditEvent"][];
12713
+ /**
12714
+ * @description Run of text.
12715
+ *
12716
+ * Either the payload a text recognizer inspects, or the value sliced out
12717
+ * at an entity's location for an operator.
12718
+ *
12719
+ * Held as a [`HipStr`] so short values inline and longer ones share a
12720
+ * refcounted buffer, making cheap clones when one payload is passed to
12721
+ * several recognizers.
12722
+ */
12723
+ TextData: string;
12724
+ /**
12725
+ * @description Detected piece of sensitive information within some medium.
12726
+ *
12727
+ * Generic over the [`Modality`] `M`, which is what makes the model
12728
+ * multimodal: a text pipeline yields `Entity<Text>`, an audio pipeline
12729
+ * `Entity<Audio>`, and so on. The entity's location is the modality's
12730
+ * [`Location`] type, `M::Location`.
12731
+ *
12732
+ * # Birth and fusion
12733
+ *
12734
+ * A recognizer emits an entity directly, carrying a single recognition
12735
+ * [`AuditEvent`] (its own finding) in the entity's [`audit`] trail. When
12736
+ * several recognizers find the same thing, a fusion step (in
12737
+ * `elide`) combines their entities into one: the survivor's
12738
+ * [`location`] and [`confidence`] are the *fused* values, and every
12739
+ * contributing recognition event, plus a deduplication event, is
12740
+ * retained in its audit trail. The entity therefore carries its full
12741
+ * audit trail with it.
12742
+ *
12743
+ * [`Location`]: Modality::Location
12744
+ * [`AuditEvent`]: crate::entity::audit::AuditEvent
12745
+ * [`audit`]: Entity::audit
12746
+ * [`location`]: Entity::location
12747
+ * [`confidence`]: Entity::confidence
12748
+ */
12749
+ TextEntity: {
12750
+ /**
12751
+ * @description Tamper-evident audit trail: every contributing detection, the fusion
12752
+ * event if any, and the redaction that hid it, as a hash-linked DAG.
12753
+ */
12754
+ audit: components["schemas"]["TextAuditLog"];
12755
+ /** @description Effective confidence in `0.0..=1.0` (fused, if applicable). */
12756
+ confidence: components["schemas"]["Confidence"];
12757
+ /**
12758
+ * @description Coreference identifier, if a recognizer resolved this entity as one
12759
+ * mention of a cluster. Entities sharing an [`EntityCoRef`] denote the
12760
+ * same real-world thing.
12761
+ */
12762
+ coref?: components["schemas"]["EntityCoRef"];
12763
+ /**
12764
+ * Format: uuid
12765
+ * @description Stable unique identity for this entity (time-ordered UUIDv7), minted
12766
+ * when the entity is assembled.
12767
+ */
12768
+ id: string;
12769
+ /**
12770
+ * @description What kind of sensitive information this is (resolved via a
12771
+ * [`LabelCatalog`]).
12772
+ */
12773
+ label: components["schemas"]["LabelRef"];
12774
+ /**
12775
+ * @description The language of this entity's surrounding text, when a recognizer
12776
+ * resolved one. `None` when unknown or language-agnostic.
12777
+ */
12778
+ language?: string;
12779
+ /**
12780
+ * @description Location of the entity within the medium (fused, if it came from more
12781
+ * than one detection).
12782
+ */
12783
+ location: components["schemas"]["TextLocation"];
12784
+ /**
12785
+ * @description Byte range of the match in the *recognized text* it was found in (the
12786
+ * OCR layout text, the audio transcript, or the text payload itself) —
12787
+ * the stable key back into that enrichment artifact, where the rich
12788
+ * context lives (which OCR block, which speaker) that the geometric
12789
+ * [`location`] cannot hold. `None` for entities not found via text
12790
+ * recognition (e.g. a VLM box). An audit key, not a coordinate: redaction
12791
+ * uses [`location`]; an audit uses this with the artifact.
12792
+ *
12793
+ * [`location`]: Entity::location
12794
+ */
12795
+ recognized_range?: components["schemas"]["Range_of_uint"];
12796
+ };
12797
+ /**
12798
+ * @description One recognized entity plus the optional reviewer override.
12799
+ *
12800
+ * The bound mirrors elide's [`Entity<M>`]: serialization needs
12801
+ * `M::Location` and `M::Data` (de)serializable, and JsonSchema
12802
+ * derivation needs them schema-able. All four modalities elide
12803
+ * ships satisfy these under the `serde` + `schema` features.
12804
+ */
12805
+ TextEntityRecord: {
12806
+ /** @description The elide entity, as recognition produced it. */
12807
+ entity: components["schemas"]["TextEntity"];
12808
+ /**
12809
+ * @description Reviewer-supplied redaction override.
12810
+ *
12811
+ * `None` means "use the matching policy rule's decision";
12812
+ * `Some(...)` overrides that rule for this specific entity
12813
+ * at apply time. Reviewer overrides take precedence over
12814
+ * every policy rule and inherit the authority of the
12815
+ * [`Review::policy_id`] they name — the audit event's
12816
+ * attribution stamps that policy so the trail names the
12817
+ * authority under which the override fired.
12818
+ */
12819
+ review?: components["schemas"]["Review"];
12226
12820
  };
12227
12821
  /**
12228
12822
  * @description Located, typed piece of context a recognizer may treat as in-context
@@ -12271,31 +12865,6 @@ interface components {
12271
12865
  */
12272
12866
  start: number;
12273
12867
  };
12274
- /**
12275
- * @description Full audit trail of an [`Entity`]: every [`Event`] in its life, in
12276
- * order.
12277
- *
12278
- * This is the model's answer to "full provenance": where Presidio keeps
12279
- * a shallow, optional, per-stage explanation that is stripped by
12280
- * default, a `Provenance` is always present and records the entity's
12281
- * *entire* life as an ordered list of events: each recognizer that
12282
- * found it, the deduplication that fused them, any confidence
12283
- * calibration, and the redaction that hid it. Nothing is collapsed:
12284
- * every recognizer keeps its own recognition event with its location
12285
- * and score.
12286
- *
12287
- * The events form a confidence chain (each event's [`after`] is the
12288
- * next's [`before`]) so the final confidence and its full history are
12289
- * always recoverable.
12290
- *
12291
- * [`Entity`]: crate::entity::Entity
12292
- * [`after`]: Event::after
12293
- * [`before`]: Event::before
12294
- */
12295
- TextProvenance: {
12296
- /** @description Events, in the order they happened. */
12297
- events: components["schemas"]["TextEvent"][];
12298
- };
12299
12868
  /** @description Operator spec a `redact` text rule carries. */
12300
12869
  TextRedaction: {
12301
12870
  /** @constant */
@@ -12489,6 +13058,21 @@ interface components {
12489
13058
  */
12490
13059
  tokenId: string;
12491
13060
  };
13061
+ /**
13062
+ * @description An account's current unread-notification count, broadcast on the account's
13063
+ * core-NATS unread subject.
13064
+ *
13065
+ * Fan-out to any watching SSE connections so a badge updates live; the stored
13066
+ * rows in Postgres remain the source of truth, so a missed broadcast is
13067
+ * recoverable by re-reading the count.
13068
+ */
13069
+ UnreadCountEvent: {
13070
+ /**
13071
+ * Format: int64
13072
+ * @description The account's current number of unread notifications.
13073
+ */
13074
+ unreadCount: number;
13075
+ };
12492
13076
  /** @description Response type for unread notifications status. */
12493
13077
  UnreadStatus: {
12494
13078
  /**
@@ -12699,6 +13283,14 @@ interface components {
12699
13283
  /** @description Handle of the workspace this webhook belongs to. */
12700
13284
  workspaceSlug: components["schemas"]["Handle"];
12701
13285
  };
13286
+ /** @description Params of a webhook activity (`webhook.*`). */
13287
+ WebhookActivityParams: {
13288
+ /**
13289
+ * Format: uuid
13290
+ * @description Id of the webhook.
13291
+ */
13292
+ webhookId: string;
13293
+ };
12702
13294
  /**
12703
13295
  * @description Webhook creation response that includes the secret (visible only once).
12704
13296
  *
@@ -12766,7 +13358,7 @@ interface components {
12766
13358
  * This enumeration corresponds to the `WEBHOOK_EVENT` PostgreSQL enum and is used
12767
13359
  * to configure which events a webhook should receive notifications for.
12768
13360
  */
12769
- WebhookEvent: "file:created" | "file:updated" | "file:deleted" | "member:added" | "member:deleted" | "member:updated" | "connection:created" | "connection:updated" | "connection:deleted" | "connection:sync.started" | "connection:sync.completed" | "connection:sync.failed" | "pipeline:created" | "pipeline:updated" | "pipeline:deleted" | "pipeline:run.started" | "pipeline:run.analyzed" | "pipeline:run.completed" | "pipeline:run.failed" | "policy:created" | "policy:updated" | "policy:deleted";
13361
+ WebhookEvent: "file.created" | "file.updated" | "file.deleted" | "member.added" | "member.deleted" | "member.updated" | "connection.created" | "connection.updated" | "connection.deleted" | "connection.sync.started" | "connection.sync.completed" | "connection.sync.failed" | "pipeline.created" | "pipeline.updated" | "pipeline.deleted" | "pipeline.run.started" | "pipeline.run.analyzed" | "pipeline.run.completed" | "pipeline.run.failed" | "policy.created" | "policy.updated" | "policy.deleted";
12770
13362
  /** @description Opaque whk identifier (whk_<uuid>). */
12771
13363
  WebhookId: string;
12772
13364
  /**
@@ -12840,6 +13432,11 @@ interface components {
12840
13432
  */
12841
13433
  updatedAt: string;
12842
13434
  };
13435
+ /** @description Params of a workspace-scoped activity (`workspace.*`). */
13436
+ WorkspaceActivityParams: {
13437
+ /** @description Slug of the workspace acted on. */
13438
+ workspaceSlug: components["schemas"]["Handle"];
13439
+ };
12843
13440
  /** @description Path parameters for file operations within a workspace context. */
12844
13441
  WorkspaceFilePathParams: {
12845
13442
  /**
@@ -12957,8 +13554,17 @@ type AccountRef = Schemas$19["AccountRef"];
12957
13554
  //#region src/datatypes/activity.d.ts
12958
13555
  type Schemas$18 = components["schemas"];
12959
13556
  type Activity = Schemas$18["Activity"];
12960
- type ActivityType = Schemas$18["ActivityType"];
12961
13557
  type ActivityPage = Schemas$18["ActivityPage"];
13558
+ type ActivityPayload = Schemas$18["ActivityPayload"];
13559
+ type WorkspaceActivityParams = Schemas$18["WorkspaceActivityParams"];
13560
+ type MemberActivityParams = Schemas$18["MemberActivityParams"];
13561
+ type InviteActivityParams = Schemas$18["InviteActivityParams"];
13562
+ type ConnectionActivityParams = Schemas$18["ConnectionActivityParams"];
13563
+ type PipelineActivityParams = Schemas$18["PipelineActivityParams"];
13564
+ type PipelineRunActivityParams = Schemas$18["PipelineRunActivityParams"];
13565
+ type PolicyActivityParams = Schemas$18["PolicyActivityParams"];
13566
+ type FileActivityParams = Schemas$18["FileActivityParams"];
13567
+ type WebhookActivityParams = Schemas$18["WebhookActivityParams"];
12962
13568
  //#endregion
12963
13569
  //#region src/datatypes/api-token.d.ts
12964
13570
  type Schemas$17 = components["schemas"];
@@ -12984,6 +13590,8 @@ type RuleMatch = Schemas$16["RuleMatch"];
12984
13590
  type ModelEvent = Schemas$16["ModelEvent"];
12985
13591
  type PatternEvent = Schemas$16["PatternEvent"];
12986
13592
  type OperatorId = Schemas$16["OperatorId"];
13593
+ type AuditHash = Schemas$16["AuditHash"];
13594
+ type Category = Schemas$16["Category"];
12987
13595
  /** Half-open `[start, end)` index range. Generated name; a plain uint range. */
12988
13596
  type RangeOfUint = Schemas$16["Range_of_uint"];
12989
13597
  type BoundingBox = Schemas$16["BoundingBox"];
@@ -12993,35 +13601,35 @@ type Dimensions = Schemas$16["Dimensions"];
12993
13601
  type TimeSpan = Schemas$16["TimeSpan"];
12994
13602
  type TextEntity = Schemas$16["TextEntity"];
12995
13603
  type TextEntityRecord = Schemas$16["TextEntityRecord"];
12996
- type TextEvent = Schemas$16["TextEvent"];
12997
- type TextEventKind = Schemas$16["TextEventKind"];
13604
+ type TextAuditEvent = Schemas$16["TextAuditEvent"];
13605
+ type TextAuditKind = Schemas$16["TextAuditKind"];
12998
13606
  type TextHint = Schemas$16["TextHint"];
12999
13607
  type TextLocation = Schemas$16["TextLocation"];
13000
- type TextProvenance = Schemas$16["TextProvenance"];
13608
+ type TextAuditLog = Schemas$16["TextAuditLog"];
13001
13609
  type TextData = Schemas$16["TextData"];
13002
13610
  type ImageEntity = Schemas$16["ImageEntity"];
13003
13611
  type ImageEntityRecord = Schemas$16["ImageEntityRecord"];
13004
- type ImageEvent = Schemas$16["ImageEvent"];
13005
- type ImageEventKind = Schemas$16["ImageEventKind"];
13612
+ type ImageAuditEvent = Schemas$16["ImageAuditEvent"];
13613
+ type ImageAuditKind = Schemas$16["ImageAuditKind"];
13006
13614
  type ImageHint = Schemas$16["ImageHint"];
13007
13615
  type ImageLocation = Schemas$16["ImageLocation"];
13008
- type ImageProvenance = Schemas$16["ImageProvenance"];
13616
+ type ImageAuditLog = Schemas$16["ImageAuditLog"];
13009
13617
  type ImageData = Schemas$16["ImageData"];
13010
13618
  type AudioEntity = Schemas$16["AudioEntity"];
13011
13619
  type AudioEntityRecord = Schemas$16["AudioEntityRecord"];
13012
- type AudioEvent = Schemas$16["AudioEvent"];
13013
- type AudioEventKind = Schemas$16["AudioEventKind"];
13620
+ type AudioAuditEvent = Schemas$16["AudioAuditEvent"];
13621
+ type AudioAuditKind = Schemas$16["AudioAuditKind"];
13014
13622
  type AudioHint = Schemas$16["AudioHint"];
13015
13623
  type AudioLocation = Schemas$16["AudioLocation"];
13016
- type AudioProvenance = Schemas$16["AudioProvenance"];
13624
+ type AudioAuditLog = Schemas$16["AudioAuditLog"];
13017
13625
  type AudioData = Schemas$16["AudioData"];
13018
13626
  type TabularEntity = Schemas$16["TabularEntity"];
13019
13627
  type TabularEntityRecord = Schemas$16["TabularEntityRecord"];
13020
- type TabularEvent = Schemas$16["TabularEvent"];
13021
- type TabularEventKind = Schemas$16["TabularEventKind"];
13628
+ type TabularAuditEvent = Schemas$16["TabularAuditEvent"];
13629
+ type TabularAuditKind = Schemas$16["TabularAuditKind"];
13022
13630
  type TabularHint = Schemas$16["TabularHint"];
13023
13631
  type TabularLocation = Schemas$16["TabularLocation"];
13024
- type TabularProvenance = Schemas$16["TabularProvenance"];
13632
+ type TabularAuditLog = Schemas$16["TabularAuditLog"];
13025
13633
  //#endregion
13026
13634
  //#region src/datatypes/auth.d.ts
13027
13635
  type Schemas$15 = components["schemas"];
@@ -13117,6 +13725,7 @@ type UpdateNotificationSettings = Schemas$7["UpdateNotificationSettings"];
13117
13725
  type UnreadStatus = Schemas$7["UnreadStatus"];
13118
13726
  type NotificationPage = Schemas$7["NotificationPage"];
13119
13727
  type MarkedReadStatus = Schemas$7["MarkedReadStatus"];
13728
+ type UnreadCountEvent = Schemas$7["UnreadCountEvent"];
13120
13729
  type NotificationPayload = Schemas$7["NotificationPayload"];
13121
13730
  type MemberInvitedParams = Schemas$7["MemberInvitedParams"];
13122
13731
  type MemberJoinedParams = Schemas$7["MemberJoinedParams"];
@@ -13154,8 +13763,12 @@ type CreatePolicy = Schemas$4["CreatePolicy"];
13154
13763
  type UpdatePolicy = Schemas$4["UpdatePolicy"];
13155
13764
  type PolicyRule = Schemas$4["PolicyRule"];
13156
13765
  type PolicyTemplate = Schemas$4["PolicyTemplate"];
13766
+ type HipaaDeidentification = Schemas$4["HipaaDeidentification"];
13157
13767
  type HipaaDeidMethod = Schemas$4["HipaaDeidMethod"];
13768
+ type HipaaAccountNumbers = Schemas$4["HipaaAccountNumbers"];
13769
+ type GdprArticle9 = Schemas$4["GdprArticle9"];
13158
13770
  type GdprArticle9Treatment = Schemas$4["GdprArticle9Treatment"];
13771
+ type GdprSensitiveScope = Schemas$4["GdprSensitiveScope"];
13159
13772
  type PciDssPart = Schemas$4["PciDssPart"];
13160
13773
  type PciPanRender = Schemas$4["PciPanRender"];
13161
13774
  type Predicate = Schemas$4["Predicate"];
@@ -13183,6 +13796,7 @@ type TerminalFallback = Schemas$4["TerminalFallback"];
13183
13796
  //#region src/datatypes/run.d.ts
13184
13797
  type Schemas$3 = components["schemas"];
13185
13798
  type PipelineRun = Schemas$3["PipelineRun"];
13799
+ type RunMetadata = Schemas$3["RunMetadata"];
13186
13800
  type CreatePipelineRun = Schemas$3["CreatePipelineRun"];
13187
13801
  type PipelineRunStatus = Schemas$3["PipelineRunStatus"];
13188
13802
  type PipelineRunPage = Schemas$3["PipelineRunPage"];
@@ -13226,5 +13840,5 @@ type Retention = Schemas["Retention"];
13226
13840
  type RetentionSettings = Schemas["RetentionSettings"];
13227
13841
  type RetentionOverride = Schemas["RetentionOverride"];
13228
13842
  //#endregion
13229
- export { PciDssPart as $, AudioLocation as $n, PublicAccount as $r, InviteSent as $t, PipelineRun as A, S3Credentials as An, TabularLocation as Ar, NotificationEvent as At, DateGranularity as B, LabelCatalog as Bn, TimeSpan as Br, UpdateNotificationSettings as Bt, LanguageProvenance as C, ConnectionSyncPage as Cn, Review as Cr, CursorPagination as Ct, ScopeParams as D, GcsCredentials as Dn, TabularEvent as Dr, MemberInvitedParams as Dt, ScopeMetadata as E, CreateConnection as En, TabularEntityRecord as Er, MarkedReadStatus as Et, AudioRedaction as F, SyncSchedule as Fn, TextEvent as Fr, PipelineRunCompletedParams as Ft, Label as G, Signup as Gn, CreateApiToken as Gr, UpdateMember as Gt, GdprArticle9Treatment as H, RegisteredRecognizer as Hn, ApiTokenPage as Hr, Member as Ht, ClampBucket as I, SyncScheduleInput as In, TextEventKind as Ir, PipelineRunFailedParams as It, LabelLocale as J, AudioEntity as Jn, Activity as Jr, Invite as Jt, LabelEntry as K, Attribution as Kn, TokenExpiration as Kr, CreateInvite as Kt, Color as L, SyncStatus as Ln, TextHint as Lr, SystemAnnouncementParams as Lt, PipelineRunStatus as M, SyncConnection as Mn, TextData as Mr, NotificationPayload as Mt, PipelineRunsQuery as N, SyncDeletionPolicy as Nn, TextEntity as Nr, NotificationSettings as Nt, Audit as O, LlmConfig as On, TabularEventKind as Or, MemberJoinedParams as Ot, RunStatusEvent as P, SyncMode as Pn, TextEntityRecord as Pr, PipelineRunAnalyzedParams as Pt, ModalityRedactions as Q, AudioHint as Qn, AccountRef as Qr, InvitePreview as Qt, ConfidenceThreshold as R, SyncTriggerType as Rn, TextLocation as Rr, SystemReportParams as Rt, Language as S, ConnectionSync as Sn, RangeOfUint as Sr, UpdatePipeline as St, Languages as T, ConnectionsQuery as Tn, TabularEntity as Tr, ConnectionSyncFailedParams as Tt, HipaaDeidMethod as U, AuthToken as Un, ApiTokenType as Ur, MemberPage as Ut, DateStyle as V, RecognizerCatalog as Vn, ApiToken as Vr, ListMembers as Vt, ImageRedaction as W, Login as Wn, ApiTokenWithJWT as Wr, MemberSortField as Wt, LanguageTag as X, AudioEvent as Xn, ActivityType as Xr, InviteExpiration as Xt, Labels as Y, AudioEntityRecord as Yn, ActivityPage as Yr, InviteCode as Yt, LocalizedText as Z, AudioEventKind as Zn, Account as Zr, InvitePage as Zt, WebhookPage as _, AnthropicCredentials as _n, OcrMode as _r, PipelineFilter as _t, RetentionSettings as a, ComponentHealth as an, EntityCoRef as ar, PolicySummaryPage as at, Confidence as b, ConnectionConfig as bn, Point as br, PipelineSummaryPage as bt, WorkspacePage as c, File as cn, ImageEntity as cr, Sha2Algorithm as ct, CreateWebhook as d, FormatToken as dn, ImageEventKind as dr, TextRedaction as dt, UpdateAccount as ei, InviteSortField as en, AudioProvenance as er, PciPanRender as et, TestWebhook as f, ListFiles as fn, ImageHint as fr, UpdatePolicy as ft, WebhookEvent as g, ValidationErrorDetail as gn, ModelEvent as gr, PipelineDefinition as gt, WebhookCreated as h, ErrorResponse as hn, LeakProfile as hr, Pipeline as ht, RetentionOverride as i, SortOrder as in, Dpi as ir, PolicySummary as it, PipelineRunPage as j, StorageConfig as jn, TabularProvenance as jr, NotificationPage as jt, CreatePipelineRun as k, OpenAiCredentials as kn, TabularHint as kr, Notification as kt, WorkspaceRole as l, FileKind as ln, ImageEntityRecord as lr, TabularRedaction as lt, Webhook as m, UpdateFile as mn, ImageProvenance as mr, CreatePipeline as mt, OcrPolicy as n, ListInvites as nn, BoundingBox as nr, PolicyDefinition as nt, UpdateWorkspace as o, Health as on, EntityGroup as or, PolicyTemplate as ot, UpdateWebhook as p, ModalityToken as pn, ImageLocation as pr, Waveform as pt, LabelGroup as q, AudioData as qn, UpdateApiToken as qr, GenerateInviteCode as qt, Retention as r, ReplyInvite as rn, Dimensions as rr, PolicyRule as rt, Workspace as s, HealthStatus as sn, ImageData as sr, Predicate as st, CreateWorkspace as t, paths as ti, InviteStatus as tn, AuditContext as tr, Policy as tt, WorkspaceSettings as u, FilePage as un, ImageEvent as ur, TerminalFallback as ut, WebhookResult as v, AzureCredentials as vn, OperatorId as vr, PipelineStatus as vt, LanguageSpan as w, ConnectionVerification as wn, RuleMatch as wr, ConnectionSyncCompletedParams as wt, CountryCode as x, ConnectionPage as xn, Polygon as xr, PipelineTriggerType as xt, WebhookStatus as y, Connection as yn, PatternEvent as yr, PipelineSummary as yt, CreatePolicy as z, UpdateConnection as zn, TextProvenance as zr, UnreadStatus as zt };
13230
- //# sourceMappingURL=index-BZcmqZdX.d.ts.map
13843
+ export { LabelLocale as $, AudioAuditEvent as $n, CreateApiToken as $r, GenerateInviteCode as $t, PipelineRun as A, ConnectionVerification as An, RangeOfUint as Ar, ConnectionSyncFailedParams as At, CreatePolicy as B, SyncMode as Bn, TextAuditEvent as Br, PipelineRunCompletedParams as Bt, LanguageProvenance as C, AnthropicCredentials as Cn, LeakProfile as Cr, PipelineStatus as Ct, ScopeParams as D, ConnectionPage as Dn, PatternEvent as Dr, UpdatePipeline as Dt, ScopeMetadata as E, ConnectionConfig as En, OperatorId as Er, PipelineTriggerType as Et, RunStatusEvent as F, OpenAiCredentials as Fn, TabularAuditLog as Fr, NotificationEvent as Ft, GdprSensitiveScope as G, UpdateConnection as Gn, TextEntityRecord as Gr, UnreadStatus as Gt, DateStyle as H, SyncScheduleInput as Hn, TextAuditLog as Hr, SystemAnnouncementParams as Ht, AudioRedaction as I, S3Credentials as In, TabularEntity as Ir, NotificationPage as It, HipaaDeidentification as J, RegisteredRecognizer as Jn, TimeSpan as Jr, Member as Jt, HipaaAccountNumbers as K, LabelCatalog as Kn, TextHint as Kr, UpdateNotificationSettings as Kt, ClampBucket as L, StorageConfig as Ln, TabularEntityRecord as Lr, NotificationPayload as Lt, PipelineRunStatus as M, CreateConnection as Mn, RuleMatch as Mr, MemberInvitedParams as Mt, PipelineRunsQuery as N, GcsCredentials as Nn, TabularAuditEvent as Nr, MemberJoinedParams as Nt, Audit as O, ConnectionSync as On, Point as Or, CursorPagination as Ot, RunMetadata as P, LlmConfig as Pn, TabularAuditKind as Pr, Notification as Pt, LabelGroup as Q, Attribution as Qn, ApiTokenWithJWT as Qr, CreateInvite as Qt, Color as R, SyncConnection as Rn, TabularHint as Rr, NotificationSettings as Rt, Language as S, ValidationErrorDetail as Sn, ImageLocation as Sr, PipelineFilter as St, Languages as T, Connection as Tn, OcrMode as Tr, PipelineSummaryPage as Tt, GdprArticle9 as U, SyncStatus as Un, TextData as Ur, SystemReportParams as Ut, DateGranularity as V, SyncSchedule as Vn, TextAuditKind as Vr, PipelineRunFailedParams as Vt, GdprArticle9Treatment as W, SyncTriggerType as Wn, TextEntity as Wr, UnreadCountEvent as Wt, Label as X, Login as Xn, ApiTokenPage as Xr, MemberSortField as Xt, ImageRedaction as Y, AuthToken as Yn, ApiToken as Yr, MemberPage as Yt, LabelEntry as Z, Signup as Zn, ApiTokenType as Zr, UpdateMember as Zt, WebhookPage as _, UpdateAccount as _i, FormatToken as _n, ImageAuditLog as _r, UpdatePolicy as _t, RetentionSettings as a, ConnectionActivityParams as ai, InviteSent as an, AudioHint as ar, PciPanRender as at, Confidence as b, UpdateFile as bn, ImageEntityRecord as br, Pipeline as bt, WorkspacePage as c, MemberActivityParams as ci, ListInvites as cn, AuditHash as cr, PolicyRule as ct, CreateWebhook as d, PolicyActivityParams as di, ComponentHealth as dn, Dimensions as dr, PolicyTemplate as dt, TokenExpiration as ei, Invite as en, AudioAuditKind as er, Labels as et, TestWebhook as f, WebhookActivityParams as fi, Health as fn, Dpi as fr, Predicate as ft, WebhookEvent as g, PublicAccount as gi, FilePage as gn, ImageAuditKind as gr, TextRedaction as gt, WebhookCreated as h, AccountRef as hi, FileKind as hn, ImageAuditEvent as hr, TerminalFallback as ht, RetentionOverride as i, ActivityPayload as ii, InvitePreview as in, AudioEntityRecord as ir, PciDssPart as it, PipelineRunPage as j, ConnectionsQuery as jn, Review as jr, MarkedReadStatus as jt, CreatePipelineRun as k, ConnectionSyncPage as kn, Polygon as kr, ConnectionSyncCompletedParams as kt, WorkspaceRole as l, PipelineActivityParams as li, ReplyInvite as ln, BoundingBox as lr, PolicySummary as lt, Webhook as m, Account as mi, File as mn, EntityGroup as mr, TabularRedaction as mt, OcrPolicy as n, Activity as ni, InviteExpiration as nn, AudioData as nr, LocalizedText as nt, UpdateWorkspace as o, FileActivityParams as oi, InviteSortField as on, AudioLocation as or, Policy as ot, UpdateWebhook as p, WorkspaceActivityParams as pi, HealthStatus as pn, EntityCoRef as pr, Sha2Algorithm as pt, HipaaDeidMethod as q, RecognizerCatalog as qn, TextLocation as qr, ListMembers as qt, Retention as r, ActivityPage as ri, InvitePage as rn, AudioEntity as rr, ModalityRedactions as rt, Workspace as s, InviteActivityParams as si, InviteStatus as sn, AuditContext as sr, PolicyDefinition as st, CreateWorkspace as t, UpdateApiToken as ti, InviteCode as tn, AudioAuditLog as tr, LanguageTag as tt, WorkspaceSettings as u, PipelineRunActivityParams as ui, SortOrder as un, Category as ur, PolicySummaryPage as ut, WebhookResult as v, paths as vi, ListFiles as vn, ImageData as vr, Waveform as vt, LanguageSpan as w, AzureCredentials as wn, ModelEvent as wr, PipelineSummary as wt, CountryCode as x, ErrorResponse as xn, ImageHint as xr, PipelineDefinition as xt, WebhookStatus as y, ModalityToken as yn, ImageEntity as yr, CreatePipeline as yt, ConfidenceThreshold as z, SyncDeletionPolicy as zn, TabularLocation as zr, PipelineRunAnalyzedParams as zt };
13844
+ //# sourceMappingURL=index-Zd5G8h44.d.ts.map