@nvisy/sdk 0.13.0 → 0.14.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.
@@ -6134,30 +6134,27 @@ interface paths {
6134
6134
  /**
6135
6135
  * @description What detection found in one document.
6136
6136
  *
6137
- * The body group plus per-container-part groups (each tagged
6138
- * by modality) plus a snapshot of the recognition [`Scope`] the
6139
- * entities were scored against.
6137
+ * The body group plus per-container-part groups (each tagged by
6138
+ * modality) plus the recognition [`AuditContext`] the entities
6139
+ * were scored against.
6140
6140
  *
6141
- * The scope snapshot travels with the entities so anonymize
6142
- * can rebuild an orchestrator against exactly the vocabulary
6143
- * analyze used. Anything a policy predicate compares against
6144
- * (label catalog, document-level classification labels,
6145
- * asserted languages / jurisdictions) is here.
6141
+ * The context travels with the entities so anonymize can rebuild
6142
+ * an orchestrator against exactly the vocabulary analyze used.
6143
+ * Anything a policy predicate compares against beyond the label
6144
+ * catalog (asserted languages, jurisdictions, document tags) is
6145
+ * here; labels are re-derived from the policy set on each
6146
+ * anonymize call.
6146
6147
  *
6147
- * `correlation_id` on the persisted scope is always `None`; the
6148
- * anonymize call supplies a fresh id from the passed
6149
- * [`Document`] so anonymize-side tracing spans are distinct
6150
- * from the analyze-side ones.
6151
- *
6152
- * [`Document`]: nvisy_schema::file::Document
6153
- * [`Scope`]: elide::recognition::Scope
6148
+ * No [`Default`] a well-formed audit must carry a real
6149
+ * [`AuditContext`] with a real correlation id. Callers building
6150
+ * an audit outside the analyze path construct it explicitly.
6154
6151
  */
6155
6152
  200: {
6156
6153
  headers: {
6157
6154
  [name: string]: unknown;
6158
6155
  };
6159
6156
  content: {
6160
- "application/json": components["schemas"]["AnalyzedDocument"];
6157
+ "application/json": components["schemas"]["Audit"];
6161
6158
  };
6162
6159
  };
6163
6160
  /**
@@ -6435,9 +6432,9 @@ interface paths {
6435
6432
  /**
6436
6433
  * @description Request payload for creating a new workspace policy.
6437
6434
  *
6438
- * The `definition` is a structured policy the redaction engine consumes;
6439
- * its `name` and `description` drive the stored columns unless overridden
6440
- * here.
6435
+ * The body comes from a template or an inline definition (see [`PolicyBody`]).
6436
+ * The body's `name` and `description` drive the stored columns unless
6437
+ * overridden here.
6441
6438
  */
6442
6439
  requestBody: {
6443
6440
  content: {
@@ -7303,65 +7300,6 @@ interface components {
7303
7300
  * audit trail and activity tracking.
7304
7301
  */
7305
7302
  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";
7306
- /**
7307
- * @description What detection found in one document.
7308
- *
7309
- * The body group plus per-container-part groups (each tagged
7310
- * by modality) plus a snapshot of the recognition [`Scope`] the
7311
- * entities were scored against.
7312
- *
7313
- * The scope snapshot travels with the entities so anonymize
7314
- * can rebuild an orchestrator against exactly the vocabulary
7315
- * analyze used. Anything a policy predicate compares against
7316
- * (label catalog, document-level classification labels,
7317
- * asserted languages / jurisdictions) is here.
7318
- *
7319
- * `correlation_id` on the persisted scope is always `None`; the
7320
- * anonymize call supplies a fresh id from the passed
7321
- * [`Document`] so anonymize-side tracing spans are distinct
7322
- * from the analyze-side ones.
7323
- *
7324
- * [`Document`]: nvisy_schema::file::Document
7325
- * [`Scope`]: elide::recognition::Scope
7326
- */
7327
- AnalyzedDocument: {
7328
- /**
7329
- * @description The body group.
7330
- *
7331
- * `None` when no body pipeline produced entities (pre-analyze,
7332
- * or the codec resolved the doc to a modality with no
7333
- * pipeline).
7334
- */
7335
- body?: components["schemas"]["RecognizedGroup"];
7336
- /**
7337
- * @description One entry per container part the orchestrator surfaced.
7338
- *
7339
- * Keyed by the container-private part id (e.g. a DOCX zip
7340
- * entry name like `"word/media/image1.png"`); each value
7341
- * carries that part's modality + entities.
7342
- */
7343
- parts?: {
7344
- [key: string]: components["schemas"]["RecognizedGroup"];
7345
- };
7346
- /**
7347
- * @description Recognition scope snapshot.
7348
- *
7349
- * The resolved label catalog + asserted languages,
7350
- * countries, and document labels. Held so
7351
- * [`Engine::anonymize_document`] can compile against the same
7352
- * vocabulary analyze used without the caller re-passing an
7353
- * `AnalyzerParams`.
7354
- *
7355
- * Required on the wire. A missing scope on an incoming
7356
- * [`AnalyzedDocument`] would default to an empty catalog and
7357
- * silently underfire every `TagOneOf` policy predicate;
7358
- * rejecting at deserialize time surfaces the shape mismatch
7359
- * at load, not at apply.
7360
- *
7361
- * [`Engine::anonymize_document`]: super::Engine::anonymize_document
7362
- */
7363
- scope: components["schemas"]["Scope"];
7364
- };
7365
7303
  /** @description API token response structure. */
7366
7304
  ApiToken: {
7367
7305
  /**
@@ -7480,23 +7418,29 @@ interface components {
7480
7418
  */
7481
7419
  ArtifactType: "input" | "output" | "intermediate";
7482
7420
  /**
7483
- * @description Author-supplied rationale for a redaction: the policy it enforces and
7484
- * a reason.
7421
+ * @description Author-supplied rationale for a redaction: a policy name and an optional
7422
+ * description.
7485
7423
  *
7486
7424
  * Where the matched selection rule answers *which rule fired*, an
7487
7425
  * `Attribution` answers *under what authority* — a compliance clause, an
7488
7426
  * internal policy, a data-handling rule. A policy author attaches it to a
7489
- * selection rule (the anonymizer's `because`); the anonymizer records it on
7490
- * the entity's [`Redaction`] event so an audit can trace a change back to
7491
- * the policy that demanded it.
7427
+ * selection rule (`Rule::because` in `elide-redaction`); the anonymizer
7428
+ * records it on the entity's [`Redaction`] event so an audit can trace a
7429
+ * change back to the policy that demanded it.
7430
+ *
7431
+ * The `name` is the author's label for that policy (`"gdpr-art-17"`,
7432
+ * `"hipaa-safe-harbor"`, `"PII removal"`); an optional `description` adds
7433
+ * human context. Any stable machine identity a policy layer needs (a rule
7434
+ * UUID, a jurisdiction) is that layer's concern — it can encode it in the
7435
+ * name or carry it separately.
7492
7436
  *
7493
7437
  * [`Redaction`]: crate::entity::provenance::EventKind::Redaction
7494
7438
  */
7495
7439
  Attribution: {
7496
- /** @description Stable policy / rule identifier (e.g. `"gdpr-art-17"`, `"pci-dss-3.4"`). */
7497
- policy_id: string;
7498
- /** @description Human-readable reason (e.g. `"right to erasure"`), when given. */
7499
- reason?: string;
7440
+ /** @description Human-readable description (e.g. `"right to erasure"`), when given. */
7441
+ description?: string;
7442
+ /** @description The policy's name (e.g. `"gdpr-art-17"`, `"hipaa-safe-harbor"`). */
7443
+ name: string;
7500
7444
  };
7501
7445
  /**
7502
7446
  * @description Per-call payload a recognizer inspects for the [`Audio`] modality.
@@ -7601,12 +7545,17 @@ interface components {
7601
7545
  /** @description The elide entity, as recognition produced it. */
7602
7546
  entity: components["schemas"]["AudioEntity"];
7603
7547
  /**
7604
- * @description Reviewer-supplied override.
7548
+ * @description Reviewer-supplied redaction override.
7605
7549
  *
7606
- * `None` means "use the policy's decision"; `Some(action)`
7607
- * overrides it for this specific entity at apply time.
7550
+ * `None` means "use the matching policy rule's decision";
7551
+ * `Some(...)` overrides that rule for this specific entity
7552
+ * at apply time. Reviewer overrides take precedence over
7553
+ * every policy rule and inherit the authority of the
7554
+ * [`Review::policy_id`] they name — the audit event's
7555
+ * attribution stamps that policy so the trail names the
7556
+ * authority under which the override fired.
7608
7557
  */
7609
- reviewerOverride?: components["schemas"]["ModalityRedactions"];
7558
+ review?: components["schemas"]["Review"];
7610
7559
  };
7611
7560
  /**
7612
7561
  * @description One thing that happened to an entity, with its effect on confidence.
@@ -7844,6 +7793,117 @@ interface components {
7844
7793
  */
7845
7794
  waveform: components["schemas"]["Waveform"];
7846
7795
  };
7796
+ /**
7797
+ * @description What detection found in one document.
7798
+ *
7799
+ * The body group plus per-container-part groups (each tagged by
7800
+ * modality) plus the recognition [`AuditContext`] the entities
7801
+ * were scored against.
7802
+ *
7803
+ * The context travels with the entities so anonymize can rebuild
7804
+ * an orchestrator against exactly the vocabulary analyze used.
7805
+ * Anything a policy predicate compares against beyond the label
7806
+ * catalog (asserted languages, jurisdictions, document tags) is
7807
+ * here; labels are re-derived from the policy set on each
7808
+ * anonymize call.
7809
+ *
7810
+ * No [`Default`] — a well-formed audit must carry a real
7811
+ * [`AuditContext`] with a real correlation id. Callers building
7812
+ * an audit outside the analyze path construct it explicitly.
7813
+ */
7814
+ Audit: {
7815
+ /**
7816
+ * @description The body group.
7817
+ *
7818
+ * `None` when no body pipeline produced entities (pre-analyze,
7819
+ * or the codec resolved the doc to a modality with no
7820
+ * pipeline).
7821
+ */
7822
+ body?: components["schemas"]["EntityGroup"];
7823
+ /**
7824
+ * @description Recognition context.
7825
+ *
7826
+ * The asserted languages, countries, document tags, and the
7827
+ * analyze-side correlation id. Held so
7828
+ * [`Engine::anonymize`] can compile against the same
7829
+ * vocabulary analyze used without the caller re-passing an
7830
+ * `AnalyzerParams`.
7831
+ *
7832
+ * Required on the wire — a missing context on an incoming
7833
+ * [`Audit`] rejects at deserialize time so the shape
7834
+ * mismatch surfaces at load, not at apply.
7835
+ *
7836
+ * [`Engine::anonymize`]: super::Engine::anonymize
7837
+ */
7838
+ context: components["schemas"]["AuditContext"];
7839
+ /**
7840
+ * @description One entry per container part the orchestrator surfaced.
7841
+ *
7842
+ * Keyed by the container-private part id (e.g. a DOCX zip
7843
+ * entry name like `"word/media/image1.png"`); each value
7844
+ * carries that part's modality + entities.
7845
+ */
7846
+ parts?: {
7847
+ [key: string]: components["schemas"]["EntityGroup"];
7848
+ };
7849
+ };
7850
+ /**
7851
+ * @description Recognition-side facts that travel from analyze to anonymize.
7852
+ *
7853
+ * Mirrors elide's [`Scope`] shape one-for-one: direct fields
7854
+ * for `languages` and `countries` (typed, elide-native), a
7855
+ * [`metadata`] sub-struct for free-form classification strings
7856
+ * (`tags`, `purpose`, `audience`), and the analyze-time
7857
+ * [`correlation_id`]. The label catalog is not on here —
7858
+ * labels are policy-owned, and anonymize re-derives them from
7859
+ * the policy set it was handed.
7860
+ *
7861
+ * No [`Default`] — `correlation_id` has no meaningful default
7862
+ * (a nil UUID would silently collapse unrelated audits under
7863
+ * one bucket in downstream trace aggregators), so callers
7864
+ * supply one explicitly. Everything else defaults to empty.
7865
+ *
7866
+ * [`Scope`]: elide::recognition::Scope
7867
+ * [`metadata`]: Self::metadata
7868
+ * [`correlation_id`]: Self::correlation_id
7869
+ */
7870
+ AuditContext: {
7871
+ /**
7872
+ * Format: uuid
7873
+ * @description Analyze-time correlation id.
7874
+ *
7875
+ * Threaded into every tracing span on the recognition path;
7876
+ * carried over so the anonymize path can link its own spans
7877
+ * to the same request. The anonymize call supplies a fresh
7878
+ * id from the passed [`Document`] as the anonymize-side
7879
+ * correlation id — this one stays as the analyze-side
7880
+ * pointer.
7881
+ *
7882
+ * Required on the wire.
7883
+ *
7884
+ * [`Document`]: nvisy_schema::file::Document
7885
+ */
7886
+ correlationId: string;
7887
+ /**
7888
+ * @description Caller-asserted jurisdictions.
7889
+ *
7890
+ * Recorded from `AnalyzerParams.scope.countries`.
7891
+ */
7892
+ countries?: components["schemas"]["CountryCode"][];
7893
+ /**
7894
+ * @description Caller-asserted languages for the analysis.
7895
+ *
7896
+ * Recorded from `AnalyzerParams.scope.languages` at analyze
7897
+ * time; anonymize re-uses them verbatim.
7898
+ * @default []
7899
+ */
7900
+ languages: components["schemas"]["Languages"];
7901
+ /**
7902
+ * @description Free-form request context: document tags, request purpose,
7903
+ * output audience. See elide's [`ScopeMetadata`].
7904
+ */
7905
+ metadata?: components["schemas"]["ScopeMetadata"];
7906
+ };
7847
7907
  /** @description Response returned after successful authentication (login/signup). */
7848
7908
  AuthToken: {
7849
7909
  /** @description The JWT API token for authentication. */
@@ -7923,6 +7983,32 @@ interface components {
7923
7983
  /** @description Minimum corner (top-left, conventionally). */
7924
7984
  min: components["schemas"]["Point"];
7925
7985
  };
7986
+ /**
7987
+ * @description Text a [`TextRedaction::Clamp`] emits for out-of-range values.
7988
+ *
7989
+ * Three forms, deserialized untagged so callers can pick the
7990
+ * terser one for the case at hand:
7991
+ *
7992
+ * - **Plain string** (`"90 or older"`) — English-only shorthand.
7993
+ * - **Localized map** (`{"en": "90 or older", "fr": "90 ou plus"}`)
7994
+ * — one entry per language the deployment ships; missing
7995
+ * locales fall back to English at render time.
7996
+ * - **Format template** (`{"format": "{n} or older"}`) — the
7997
+ * engine substitutes `{n}` for the threshold, so a ceiling of
7998
+ * `90` renders `"90 or older"` without the caller repeating the
7999
+ * number. Same rendering in every language.
8000
+ *
8001
+ * Round-trips through serde as whichever form the caller wrote.
8002
+ */
8003
+ ClampBucket: string | {
8004
+ /**
8005
+ * @description The template string. `{n}` is substituted; other text
8006
+ * is literal.
8007
+ */
8008
+ format: string;
8009
+ } | {
8010
+ [key: string]: string;
8011
+ };
7926
8012
  /**
7927
8013
  * @description Color as 8-bit RGB.
7928
8014
  *
@@ -8276,20 +8362,33 @@ interface components {
8276
8362
  /**
8277
8363
  * @description Request payload for creating a new workspace policy.
8278
8364
  *
8279
- * The `definition` is a structured policy the redaction engine consumes;
8280
- * its `name` and `description` drive the stored columns unless overridden
8281
- * here.
8365
+ * The body comes from a template or an inline definition (see [`PolicyBody`]).
8366
+ * The body's `name` and `description` drive the stored columns unless
8367
+ * overridden here.
8282
8368
  */
8283
8369
  CreatePolicy: {
8284
- /** @description The structured policy body consumed by the engine. */
8285
- definition: components["schemas"]["PolicyDefinition"];
8286
8370
  /** @description Optional description override. Defaults to the policy's own description. */
8287
8371
  description?: string;
8288
8372
  /** @description Optional display name override. Defaults to the policy's own name. */
8289
8373
  displayName?: string;
8290
8374
  /** @description URL slug, unique within the workspace and immutable after creation. */
8291
8375
  slug: components["schemas"]["Handle"];
8292
- };
8376
+ } & ({
8377
+ /** @constant */
8378
+ source: "template";
8379
+ /** @description The built-in policy template to seed from. */
8380
+ template: components["schemas"]["PolicyTemplate"];
8381
+ } | {
8382
+ /**
8383
+ * @description The structured policy body.
8384
+ *
8385
+ * Boxed to keep the enum small: an inline body is much larger than a
8386
+ * template id, and most requests use a template.
8387
+ */
8388
+ definition: components["schemas"]["PolicyDefinition"];
8389
+ /** @constant */
8390
+ source: "inline";
8391
+ });
8293
8392
  /** @description Request payload for creating a new workspace webhook. */
8294
8393
  CreateWebhook: {
8295
8394
  /** @description Detailed description of the webhook's purpose (max 500 characters). */
@@ -8496,6 +8595,24 @@ interface components {
8496
8595
  */
8497
8596
  validator?: string;
8498
8597
  };
8598
+ /**
8599
+ * @description The coarseness a [`GeneralizeDate`] reduces a date/timestamp to.
8600
+ *
8601
+ * Every rendering is an ISO-8601 form, so the output is locale-independent
8602
+ * by construction — no localized month names or week markers to configure.
8603
+ */
8604
+ DateGranularity: "year" | "year_month" | "hour";
8605
+ /**
8606
+ * @description Which written date convention a [`GeneralizeDate`] accepts on *input*.
8607
+ *
8608
+ * This governs only how the entity value is *parsed*; the output mirrors
8609
+ * each value's own convention (see [`GeneralizeDate::render`]). The choice
8610
+ * is explicit, never inferred from the entity's language: `03/04/1987` is
8611
+ * a real date under both conventions (March 4 vs. April 3), so a wrong
8612
+ * guess would silently emit a plausible-but-wrong month. The policy
8613
+ * author, who knows the corpus's convention, sets it.
8614
+ */
8615
+ DateStyle: "iso" | "us";
8499
8616
  /**
8500
8617
  * @description Pixel dimensions of an image or any 2-D canvas.
8501
8618
  *
@@ -8563,6 +8680,36 @@ interface components {
8563
8680
  * mentions, not a global key.
8564
8681
  */
8565
8682
  EntityCoRef: string;
8683
+ /**
8684
+ * @description A modality-tagged group of recognised entities.
8685
+ *
8686
+ * The unit [`Audit`] stores in `body` and in every `parts`
8687
+ * entry.
8688
+ *
8689
+ * Tagged by `modality` (snake_case) so deserialization picks the
8690
+ * right variant and the entity vec inside is statically typed
8691
+ * per modality — apply-time we hand each variant back to elide
8692
+ * as a `Vec<Entity<M>>` for the appropriate `M`.
8693
+ *
8694
+ * [`Audit`]: crate::Audit
8695
+ */
8696
+ EntityGroup: {
8697
+ entities: components["schemas"]["TextEntityRecord"][];
8698
+ /** @constant */
8699
+ modality: "text";
8700
+ } | {
8701
+ entities: components["schemas"]["TabularEntityRecord"][];
8702
+ /** @constant */
8703
+ modality: "tabular";
8704
+ } | {
8705
+ entities: components["schemas"]["ImageEntityRecord"][];
8706
+ /** @constant */
8707
+ modality: "image";
8708
+ } | {
8709
+ entities: components["schemas"]["AudioEntityRecord"][];
8710
+ /** @constant */
8711
+ modality: "audio";
8712
+ };
8566
8713
  /**
8567
8714
  * @description HTTP error response representation with security-conscious design.
8568
8715
  *
@@ -8697,14 +8844,6 @@ interface components {
8697
8844
  };
8698
8845
  /** @description Lowercase, dash-separated identifier used in URLs and as account handles. */
8699
8846
  Handle: string;
8700
- /**
8701
- * @description SHA-2 variant for the [`TextRedaction::Hash`] operator.
8702
- *
8703
- * Wire mirror of elide's `Sha2Algorithm`; the runtime `From`
8704
- * conversion is on the engine side so this crate stays free
8705
- * of the elide-redaction dep.
8706
- */
8707
- HashAlgorithm: "sha256" | "sha512";
8708
8847
  /** @description Response body for `GET /health/`. */
8709
8848
  Health: {
8710
8849
  /** @description Per-component health checks. */
@@ -8817,12 +8956,17 @@ interface components {
8817
8956
  /** @description The elide entity, as recognition produced it. */
8818
8957
  entity: components["schemas"]["ImageEntity"];
8819
8958
  /**
8820
- * @description Reviewer-supplied override.
8959
+ * @description Reviewer-supplied redaction override.
8821
8960
  *
8822
- * `None` means "use the policy's decision"; `Some(action)`
8823
- * overrides it for this specific entity at apply time.
8961
+ * `None` means "use the matching policy rule's decision";
8962
+ * `Some(...)` overrides that rule for this specific entity
8963
+ * at apply time. Reviewer overrides take precedence over
8964
+ * every policy rule and inherit the authority of the
8965
+ * [`Review::policy_id`] they name — the audit event's
8966
+ * attribution stamps that policy so the trail names the
8967
+ * authority under which the override fired.
8824
8968
  */
8825
- reviewerOverride?: components["schemas"]["ModalityRedactions"];
8969
+ review?: components["schemas"]["Review"];
8826
8970
  };
8827
8971
  /**
8828
8972
  * @description One thing that happened to an entity, with its effect on confidence.
@@ -9207,76 +9351,163 @@ interface components {
9207
9351
  */
9208
9352
  InviteStatus: "pending" | "accepted" | "declined" | "canceled" | "expired" | "revoked";
9209
9353
  /**
9210
- * @description Kind of sensitive information: a name, an optional description, and
9211
- * zero or more tags.
9212
- *
9213
- * Names are conventionally `SCREAMING_SNAKE_CASE` (`"PHONE_NUMBER"`),
9214
- * matching Presidio, but this is convention, not enforcement. The
9215
- * taxonomy is open: a [`Label`] can be minted for any name a recognizer
9216
- * or configuration needs.
9354
+ * @description Kind of sensitive information: a stable [`id`], per-language
9355
+ * [`LabelLocale`]s, and zero or more tags.
9217
9356
  *
9218
9357
  * # Identity
9219
9358
  *
9220
- * Labels are identified by [`name`]; selectors match by name. Note that
9221
- * derived equality is *structural*: two labels with the same name but
9222
- * different descriptions or tags are not `==`. Code that wants
9223
- * name-only equality should compare [`name`] explicitly.
9359
+ * Labels are identified by [`id`] a stable lowercase `snake_case`
9360
+ * string (`"phone_number"`), never localized, and the catalog key that a
9361
+ * [`LabelRef`] resolves through. Selectors match by id. Derived equality
9362
+ * is *structural*: two labels with the same id but different
9363
+ * localizations or tags are not `==`; compare [`id`] for identity.
9364
+ *
9365
+ * # Localization
9366
+ *
9367
+ * The display name and description are localized per [`LanguageTag`].
9368
+ * English (`"en"`) is required at construction and is the fallback when a
9369
+ * requested locale is absent, so [`localization`] always returns some
9370
+ * text — NER and LLM read the analysis language's name and description to
9371
+ * prompt the model, keyed by the stable id.
9224
9372
  *
9225
9373
  * # Tags
9226
9374
  *
9227
- * [`tags`] is a free-form list of short identifiers policy selectors
9228
- * can match against. Built-in labels carry category tags
9229
- * (`personal_identity`, `contact_info`, `financial`, …) plus
9230
- * cross-cutting tags where applicable (`pii`, `phi`, `pci`). Custom
9231
- * labels can ship with zero tags.
9375
+ * [`tags`] is a free-form list of short identifiers policy selectors can
9376
+ * match against. Built-in labels carry category tags (`personal_identity`,
9377
+ * `contact_info`, `financial`, …) plus cross-cutting tags where applicable
9378
+ * (`pii`, `phi`, `pci`). Custom labels can ship with zero tags.
9232
9379
  *
9233
- * [`name`]: Label::name
9380
+ * [`id`]: Label::id
9381
+ * [`localization`]: Label::localization
9234
9382
  * [`tags`]: Label::tags
9235
9383
  */
9236
9384
  Label: {
9237
- description?: string;
9238
- name: string;
9385
+ id: string;
9386
+ localizations: components["schemas"]["LocalizedText"];
9239
9387
  tags: string[];
9240
9388
  };
9241
9389
  /**
9242
- * @description Registry of [`Label`]s, keyed by name.
9243
- *
9244
- * Holds the authoritative definitions (names + descriptions) for a run.
9245
- * A [`LabelRef`] carried on a detection or entity is resolved back to
9246
- * its full [`Label`] with [`get`].
9390
+ * @description One entry inside a [`TableRule`]: the label to match plus the
9391
+ * per-modality operators to run.
9247
9392
  *
9248
- * [`get`]: LabelCatalog::get
9393
+ * Kept as a named struct rather than a `(LabelRef, ModalityRedactions)`
9394
+ * tuple so the wire JSON reads `{"label": "email", "action": {…}}`
9395
+ * instead of a positional pair.
9249
9396
  */
9250
- LabelCatalog: {
9251
- [key: string]: components["schemas"]["Label"];
9397
+ LabelEntry: {
9398
+ /** @description Per-modality operators to run for matching entities. */
9399
+ action: components["schemas"]["ModalityRedactions"];
9400
+ /** @description Label the entry matches on. */
9401
+ label: components["schemas"]["LabelRef"];
9252
9402
  };
9253
9403
  /**
9254
- * @description Per-request label-catalog selection.
9404
+ * @description Named cluster of [`LabelRef`]s a policy's rules can reference
9405
+ * by name via [`Predicate::LabelInGroup`].
9255
9406
  *
9256
- * Picks builtins by name + adds inline custom schemas.
9407
+ * Groups live on the [`PolicyDefinition`] that declares them
9408
+ * and are visible only to that policy's own rules. Templates
9409
+ * ship one group per canonical label list (`"hipaa_18"`,
9410
+ * `"gdpr_article_9"`, `"pci_chd"`, `"pci_sad"`), and every
9411
+ * rule that targets that list references the group by name
9412
+ * instead of respelling the labels. When elide adds a new label
9413
+ * to a category, extending the group covers every rule that
9414
+ * referenced it — no rule edit.
9415
+ *
9416
+ * **Compilation**: at request time the engine synthesises a
9417
+ * `group:<policy_id>:<name>` tag on every label listed in the
9418
+ * group, then rewrites [`Predicate::LabelInGroup { group }`]
9419
+ * into [`Predicate::TagOneOf { tags: ["group:<policy_id>:<name>"] }`].
9420
+ * That routes through the same `Anonymizer::with_tag` fast
9421
+ * path as any authored tag — no new engine machinery, no
9422
+ * per-request walk over group membership. Scoping the tag by
9423
+ * `policy_id` keeps two policies that both declare `hipaa_18`
9424
+ * with different labelsets from stepping on each other.
9425
+ *
9426
+ * **Unknown group names error at request validation**, not at
9427
+ * apply time. A typo doesn't silently underfire.
9428
+ *
9429
+ * [`PolicyDefinition`]: super::PolicyDefinition
9430
+ * [`Predicate::LabelInGroup`]: super::predicate::Predicate::LabelInGroup
9431
+ * [`Predicate::LabelInGroup { group }`]: super::predicate::Predicate::LabelInGroup
9432
+ * [`Predicate::TagOneOf { tags: ["group:<policy_id>:<name>"] }`]: super::predicate::Predicate::TagOneOf
9257
9433
  */
9258
- LabelCatalogParams: {
9434
+ LabelGroup: {
9435
+ /** @description Optional description for reviewers. */
9436
+ description?: string;
9259
9437
  /**
9260
- * @description Builtin label names to enable.
9438
+ * @description Labels this group covers, by ref.
9261
9439
  *
9262
- * E.g. `"email_address"`, `"phone_number"`. Unknown names
9263
- * log a warning and are skipped.
9440
+ * A label that doesn't appear in the request's compiled
9441
+ * [`LabelCatalog`] is silently skipped at tag-synthesis time
9442
+ * — a group can safely list labels the current build
9443
+ * doesn't emit (e.g. modality-gated ones); rules keyed off
9444
+ * the group still fire on whatever labels *are* present.
9445
+ *
9446
+ * [`LabelCatalog`]: elide_core::entity::LabelCatalog
9264
9447
  */
9265
- builtins?: string[];
9266
- /** @description Custom labels defined inline by the caller. */
9267
- custom?: components["schemas"]["Label"][];
9448
+ labels: components["schemas"]["LabelRef"][];
9449
+ /**
9450
+ * @description Stable name a [`Predicate::LabelInGroup`] references.
9451
+ *
9452
+ * Free-form; a policy layer picks the vocabulary. Recommend
9453
+ * snake_case identifiers (`hipaa_18`, `gdpr_article_9`) —
9454
+ * they compile to `group:hipaa_18` tags on the catalog and
9455
+ * read cleanly in audit provenance.
9456
+ *
9457
+ * [`Predicate::LabelInGroup`]: super::predicate::Predicate::LabelInGroup
9458
+ */
9459
+ name: string;
9460
+ };
9461
+ /**
9462
+ * @description A label's human-facing text in one language: a display name and an
9463
+ * optional fuller description.
9464
+ *
9465
+ * The `name` is a short, natural-language phrase (`"phone number"`) — the
9466
+ * label a zero-shot NER model like GLiNER matches on, and the primary
9467
+ * text an LLM prompt shows. The `description` is optional extra guidance
9468
+ * for backends that consume it (GLiNER-2.0's bi-encoder, an LLM); leave
9469
+ * it `None` when the name alone is clear.
9470
+ */
9471
+ LabelLocale: {
9472
+ /**
9473
+ * @description Optional fuller description, for description-capable backends
9474
+ * (GLiNER-2.0, LLM). `None` when the name suffices.
9475
+ */
9476
+ description?: string;
9477
+ /**
9478
+ * @description Short natural-language display name (e.g. `"phone number"`). What a
9479
+ * zero-shot NER model matches on and an LLM prompt surfaces.
9480
+ */
9481
+ name: string;
9268
9482
  };
9269
9483
  /**
9270
- * @description Lightweight reference to a [`Label`], carrying only its name.
9484
+ * @description Lightweight reference to a [`Label`], carrying only its id.
9271
9485
  *
9272
9486
  * This is what detections and entities hold: cloning is cheap (short
9273
- * names inline into the [`HipStr`]), and the full [`Label`], with its
9274
- * description, is resolved on demand from a [`LabelCatalog`].
9487
+ * ids inline into the [`HipStr`]), and the full [`Label`], with its
9488
+ * localized names and descriptions, is resolved on demand from a
9489
+ * [`LabelCatalog`].
9275
9490
  *
9276
9491
  * [`Label`]: crate::entity::Label
9277
9492
  * [`LabelCatalog`]: crate::entity::LabelCatalog
9278
9493
  */
9279
9494
  LabelRef: string;
9495
+ /**
9496
+ * @description Per-policy label-catalog selection.
9497
+ *
9498
+ * Picks builtins by name + adds inline custom schemas.
9499
+ */
9500
+ Labels: {
9501
+ /**
9502
+ * @description Builtin label names to enable.
9503
+ *
9504
+ * E.g. `"email_address"`, `"phone_number"`. Unknown names
9505
+ * log a warning and are skipped.
9506
+ */
9507
+ builtins?: components["schemas"]["LabelRef"][];
9508
+ /** @description Custom labels defined inline by the caller. */
9509
+ custom?: components["schemas"]["Label"][];
9510
+ };
9280
9511
  /**
9281
9512
  * @description Single language detection result.
9282
9513
  *
@@ -9396,6 +9627,28 @@ interface components {
9396
9627
  /** @description Sort by field. */
9397
9628
  sortBy?: components["schemas"]["MemberSortField"];
9398
9629
  };
9630
+ /**
9631
+ * @description A value localized per [`LanguageTag`], with an English-first fallback.
9632
+ *
9633
+ * The reusable mechanism behind any text that varies by language: a
9634
+ * [`Label`]'s display name and description, a redaction operator's bucket
9635
+ * label, and so on. English (`"en"`) is the conventional anchor —
9636
+ * constructors seed it, and [`resolve`] falls back to it (then to any
9637
+ * entry) when a requested locale is absent, so a caller that supplied
9638
+ * English always gets *some* value.
9639
+ *
9640
+ * Generic over the stored value `T`, so it carries a bare `HipStr`
9641
+ * (a bucket label) or a richer struct (a label's name-plus-description)
9642
+ * equally. It is a thin wrapper over a `HashMap<LanguageTag, T>`; the
9643
+ * added value is the fallback policy in [`resolve`], kept in one place
9644
+ * rather than reimplemented at each use site.
9645
+ *
9646
+ * [`Label`]: crate::entity::Label
9647
+ * [`resolve`]: LocalizedText::resolve
9648
+ */
9649
+ LocalizedText: {
9650
+ [key: string]: components["schemas"]["LabelLocale"];
9651
+ };
9399
9652
  /** @description Request payload for login. */
9400
9653
  Login: {
9401
9654
  /** @description Email address or username of the account. */
@@ -9684,16 +9937,19 @@ interface components {
9684
9937
  /**
9685
9938
  * @description A pipeline's detection + governance intent.
9686
9939
  *
9687
- * Holds what a pipeline author decides — which recognizers to run, the entity
9688
- * labels, the default scope, and the policies to apply. Infrastructure config
9689
- * (enrichment backends, deduplication calibration) is server-wide and lives in
9690
- * the engine config, not here. Stored as JSON in the pipeline's `definition`
9691
- * column but validated against this schema at the API boundary.
9940
+ * Holds what a pipeline author decides — which recognizers to run, the default
9941
+ * scope, and the policies to apply. Infrastructure config (enrichment backends,
9942
+ * deduplication calibration) is server-wide and lives in the engine config, not
9943
+ * here. Stored as JSON in the pipeline's `definition` column but validated
9944
+ * against this schema at the API boundary.
9945
+ *
9946
+ * The label catalog is not part of this: the policies own the label vocabulary,
9947
+ * and the engine derives the detection catalog from them at run time.
9692
9948
  *
9693
9949
  * The split:
9694
9950
  *
9695
- * - `recognizers` / `deduplication` / `label_catalog` — the detection intent,
9696
- * merged with the server-wide engine defaults into an `AnalyzerParams`.
9951
+ * - `recognizers` / `deduplication` — the detection intent, merged with the
9952
+ * server-wide engine defaults into an `AnalyzerParams`.
9697
9953
  * - `default_scope` — optional pipeline-wide scope a document may override.
9698
9954
  * - `policy_slugs` — references to the workspace's policies, resolved at run
9699
9955
  * time.
@@ -9711,14 +9967,6 @@ interface components {
9711
9967
  * the document must assert its own.
9712
9968
  */
9713
9969
  defaultScope?: components["schemas"]["ScopeParams"];
9714
- /**
9715
- * @description Entity-label catalog: which entity types the recognizers emit.
9716
- *
9717
- * Reusable across the pipeline's documents, so it lives here rather than in
9718
- * per-document scope.
9719
- * @default {}
9720
- */
9721
- labelCatalog: components["schemas"]["LabelCatalogParams"];
9722
9970
  /**
9723
9971
  * @description Slugs of workspace policies applied at redaction.
9724
9972
  *
@@ -9931,27 +10179,40 @@ interface components {
9931
10179
  * fallback per policy" at the type level.
9932
10180
  */
9933
10181
  fallback?: components["schemas"]["ModalityRedactions"];
10182
+ /**
10183
+ * @description Named clusters of [`LabelRef`]s this policy's rules may
10184
+ * reference by name via [`Predicate::LabelInGroup`]. Scoped
10185
+ * to this policy — a rule can only name a group its own
10186
+ * policy declared; unknown references error at request
10187
+ * validation. Two policies that both declare `hipaa_18` with
10188
+ * different labelsets stay independent.
10189
+ *
10190
+ * [`LabelRef`]: elide_core::entity::LabelRef
10191
+ * [`Predicate::LabelInGroup`]: predicate::Predicate::LabelInGroup
10192
+ */
10193
+ groups?: components["schemas"]["LabelGroup"][];
9934
10194
  /**
9935
10195
  * Format: uuid
9936
10196
  * @description Stable identifier. UUIDv7 recommended (time-ordered);
9937
10197
  * customer-supplied so re-submissions carry the same id.
9938
10198
  * Engine stamps this into the redaction event's
9939
- * [`Attribution::policy_id`] so reviewers can find this
9940
- * policy from any redaction it drove.
10199
+ * [`Attribution::name`] so reviewers can find this policy
10200
+ * from any redaction it drove.
9941
10201
  *
9942
- * [`Attribution::policy_id`]: elide_core::entity::provenance::Attribution::policy_id
10202
+ * [`Attribution::name`]: elide_core::entity::provenance::Attribution::name
9943
10203
  */
9944
10204
  id: string;
9945
10205
  /**
9946
- * @description Vocabulary the policy operates over. Engine unions every
9947
- * submitted policy's `labels` into a per-request
10206
+ * @description Vocabulary the policy operates over: builtins picked by
10207
+ * name plus caller-authored custom label schemas. Engine
10208
+ * unions every submitted policy's `labels` into a per-request
9948
10209
  * [`LabelCatalog`] used to drive recognizer dispatch and
9949
10210
  * tag-based [`Predicate::TagOneOf`] matching.
9950
10211
  *
9951
10212
  * [`LabelCatalog`]: elide_core::entity::LabelCatalog
9952
10213
  * [`Predicate::TagOneOf`]: predicate::Predicate::TagOneOf
9953
10214
  */
9954
- labels?: components["schemas"]["Label"][];
10215
+ labels?: components["schemas"]["Labels"];
9955
10216
  /** @description Human-readable name. Display-only. Does not key anything. */
9956
10217
  name: string;
9957
10218
  /** @description Lifecycle rules for content under this policy. */
@@ -9978,41 +10239,16 @@ interface components {
9978
10239
  policySlug: string;
9979
10240
  };
9980
10241
  /**
9981
- * @description One rule inside a [`PolicyDefinition`]. Identity is the UUID; `name` /
9982
- * `description` are display-only.
10242
+ * @description One rule inside a [`PolicyDefinition`]. Identity is the UUID;
10243
+ * `name` / `description` are display-only.
10244
+ *
10245
+ * Untagged on the wire: distinguished by the presence of
10246
+ * `predicate` (predicated) vs. `operators` (table). Existing
10247
+ * JSON keeps working.
9983
10248
  *
9984
10249
  * [`PolicyDefinition`]: super::PolicyDefinition
9985
10250
  */
9986
- PolicyRule: {
9987
- /**
9988
- * @description Per-modality redaction operators applied when the
9989
- * predicate matches. Modalities the rule doesn't cover fall
9990
- * through to the policy fallback (or the next policy in the
9991
- * chain).
9992
- */
9993
- action: components["schemas"]["ModalityRedactions"];
9994
- /** @description Optional description for reviewers. */
9995
- description?: string;
9996
- /**
9997
- * Format: uuid
9998
- * @description Stable identifier. UUIDv7 recommended (time-ordered);
9999
- * customer-supplied so re-submissions carry the same id.
10000
- * Engine stamps this into the redaction event's
10001
- * [`Attribution::reason`] so reviewers can trace back which
10002
- * rule fired.
10003
- *
10004
- * [`Attribution::reason`]: elide_core::entity::provenance::Attribution::reason
10005
- */
10006
- id: string;
10007
- /** @description Human-readable name. Display-only. Does not key anything. */
10008
- name: string;
10009
- /**
10010
- * @description Entity-level predicate that decides whether the rule fires
10011
- * on a given recognised entity. Composable; see
10012
- * [`Predicate`] for the full grammar.
10013
- */
10014
- predicate: components["schemas"]["Predicate"];
10015
- };
10251
+ PolicyRule: components["schemas"]["PredicatedRule"] | components["schemas"]["TableRule"];
10016
10252
  /**
10017
10253
  * @description Lightweight policy view for lists.
10018
10254
  *
@@ -10060,6 +10296,17 @@ interface components {
10060
10296
  */
10061
10297
  total?: number;
10062
10298
  };
10299
+ /**
10300
+ * @description A regulatory posture this crate ships a [`Template`] for.
10301
+ *
10302
+ * Serialises as a snake_case string matching the produced
10303
+ * template's [`Template::id`] (`"hipaa_safe_harbor"`,
10304
+ * `"gdpr_article_9"`, ...) so a wire caller can round-trip
10305
+ * `template: "hipaa_safe_harbor"` through JSON directly into
10306
+ * a variant. Iterate every variant via `PolicyTemplate::iter()`
10307
+ * (from [`strum::IntoEnumIterator`]).
10308
+ */
10309
+ PolicyTemplate: "hipaa_safe_harbor" | "gdpr_article9" | "pci_dss_pan_truncate" | "pci_dss_pan_hmac" | "ccpa";
10063
10310
  /**
10064
10311
  * @description Closed polygon, given by its ordered vertices.
10065
10312
  *
@@ -10085,12 +10332,21 @@ interface components {
10085
10332
  /** @constant */
10086
10333
  kind: "labelOneOf";
10087
10334
  /** @description Allowed labels. */
10088
- labels: string[];
10335
+ labels: components["schemas"]["LabelRef"][];
10089
10336
  } | {
10090
10337
  /** @constant */
10091
10338
  kind: "tagOneOf";
10092
10339
  /** @description Allowed tags. */
10093
10340
  tags: string[];
10341
+ } | {
10342
+ /**
10343
+ * @description Name of the [`LabelGroup`] to match against.
10344
+ *
10345
+ * [`LabelGroup`]: super::LabelGroup
10346
+ */
10347
+ group: string;
10348
+ /** @constant */
10349
+ kind: "labelInGroup";
10094
10350
  } | {
10095
10351
  /** @description Cluster id to match. */
10096
10352
  coref: string;
@@ -10112,6 +10368,31 @@ interface components {
10112
10368
  /** @description Negated predicate. */
10113
10369
  not: components["schemas"]["Predicate"];
10114
10370
  };
10371
+ /** @description Predicate-gated rule: one predicate, one action. */
10372
+ PredicatedRule: {
10373
+ /**
10374
+ * @description Per-modality redaction operators applied when the
10375
+ * predicate matches. Modalities the rule doesn't cover fall
10376
+ * through to the policy fallback (or the next policy in the
10377
+ * chain).
10378
+ */
10379
+ action: components["schemas"]["ModalityRedactions"];
10380
+ /** @description Optional description for reviewers. */
10381
+ description?: string;
10382
+ /**
10383
+ * Format: uuid
10384
+ * @description Stable identifier. UUIDv7 recommended.
10385
+ */
10386
+ id: string;
10387
+ /** @description Human-readable name. Display-only. */
10388
+ name: string;
10389
+ /**
10390
+ * @description Entity-level predicate that decides whether the rule fires
10391
+ * on a given recognised entity. Composable; see
10392
+ * [`Predicate`] for the full grammar.
10393
+ */
10394
+ predicate: components["schemas"]["Predicate"];
10395
+ };
10115
10396
  /**
10116
10397
  * @description How to pick recognizers out of a deployment-configured lineup.
10117
10398
  *
@@ -10150,38 +10431,6 @@ interface components {
10150
10431
  /** Format: uint */
10151
10432
  start: number;
10152
10433
  };
10153
- /**
10154
- * @description A modality-tagged group of recognized entities.
10155
- *
10156
- * The unit [`AnalyzedDocument`] stores in `body` and in every
10157
- * `parts` entry.
10158
- *
10159
- * Tagged by `modality` (snake_case) so deserialization picks the
10160
- * right variant and the entity vec inside is statically typed
10161
- * per modality — apply-time we hand each variant back to elide
10162
- * as a `Vec<Entity<M>>` for the appropriate `M`.
10163
- */
10164
- RecognizedGroup: {
10165
- /** @description Recognized entities, in source-coordinate order. */
10166
- entities: components["schemas"]["TextEntityRecord"][];
10167
- /** @constant */
10168
- modality: "text";
10169
- } | {
10170
- /** @description Recognized entities, in source-coordinate order. */
10171
- entities: components["schemas"]["TabularEntityRecord"][];
10172
- /** @constant */
10173
- modality: "tabular";
10174
- } | {
10175
- /** @description Recognized entities, in source-coordinate order. */
10176
- entities: components["schemas"]["ImageEntityRecord"][];
10177
- /** @constant */
10178
- modality: "image";
10179
- } | {
10180
- /** @description Recognized entities, in source-coordinate order. */
10181
- entities: components["schemas"]["AudioEntityRecord"][];
10182
- /** @constant */
10183
- modality: "audio";
10184
- };
10185
10434
  /**
10186
10435
  * @description Recognizer slots an analyzer can fill.
10187
10436
  *
@@ -10255,6 +10504,38 @@ interface components {
10255
10504
  };
10256
10505
  /** @description What class of data a retention policy applies to. */
10257
10506
  RetentionScope: "original_content" | "redacted_output" | "audit_logs";
10507
+ /**
10508
+ * @description A reviewer-supplied redaction override with the policy
10509
+ * authority it draws from.
10510
+ *
10511
+ * The `policy_id` isn't just for audit — it also picks which
10512
+ * per-policy pseudonym vault and per-policy [`KeyProvider`] the
10513
+ * override's operator resolves against, so an override using
10514
+ * [`Pseudonymize`] or [`HmacHash`] stays consistent with the
10515
+ * authoring policy's other rules.
10516
+ *
10517
+ * [`KeyProvider`]: elide::redaction::operators::KeyProvider
10518
+ * [`Pseudonymize`]: elide::redaction::operators::Pseudonymize
10519
+ * [`HmacHash`]: elide::redaction::operators::HmacHash
10520
+ */
10521
+ Review: {
10522
+ /**
10523
+ * @description The per-modality redaction operators to run for this
10524
+ * entity. Overrides whatever the policy set would have
10525
+ * picked for the same entity.
10526
+ */
10527
+ action: components["schemas"]["ModalityRedactions"];
10528
+ /**
10529
+ * Format: uuid
10530
+ * @description The policy whose authority the reviewer exercises. Must
10531
+ * match the `id` of a [`PolicyDefinition`] submitted with
10532
+ * the anonymize request. The audit event stamps this UUID
10533
+ * as the attribution `name`.
10534
+ *
10535
+ * [`PolicyDefinition`]: nvisy_schema::policy::PolicyDefinition
10536
+ */
10537
+ policyId: string;
10538
+ };
10258
10539
  /**
10259
10540
  * @description A serializable summary of *which selection rule* bound an operator to an
10260
10541
  * entity — the automatic "why" behind a redaction.
@@ -10322,7 +10603,7 @@ interface components {
10322
10603
  * analyzer, which borrows it into a fresh [`RecognizerContext`] per
10323
10604
  * payload. It holds only what the *caller* asserts about the analysis as a
10324
10605
  * whole — languages, jurisdictions, document labels, the target catalog, a
10325
- * correlation id — none of which depends on the medium, so one `Scope`
10606
+ * correlation id — none of which depends on the medium, so one [`Scope`]
10326
10607
  * drives a text, image, or audio analysis alike.
10327
10608
  *
10328
10609
  * Per-medium regions (caller-supplied inclusions and exclusions, which are
@@ -10332,40 +10613,42 @@ interface components {
10332
10613
  *
10333
10614
  * [`RecognizerContext`]: super::RecognizerContext
10334
10615
  * [`Annotations`]: super::annotation::Annotations
10335
- */
10336
- Scope: {
10337
- /**
10338
- * @description The entity types recognizers are asked to emit. A zero-shot NER
10339
- * model requests exactly this set; an LLM prompt lists it as the
10340
- * labels to find. Empty means "the recognizer's own default" a
10341
- * recognizer with its own configured label set keeps it; one without
10342
- * emits whatever its backend natively produces.
10343
- * @default {}
10344
- */
10345
- catalog: components["schemas"]["LabelCatalog"];
10346
- /**
10347
- * Format: uuid
10348
- * @description Correlation UUID propagated through the tracing span for this
10349
- * analysis.
10350
- * @default null
10351
- */
10352
- correlation_id: string;
10353
- /**
10354
- * @description Caller-asserted jurisdictions. When non-empty, recognizers that
10355
- * carry per-rule country scopes skip rules that match none of them.
10356
- * An empty list means "any": rules that declare countries still run
10357
- * as a permissive fallback so callers who don't assert a jurisdiction
10358
- * don't lose detections. A document spanning several jurisdictions
10359
- * can assert all of them; a rule runs when any one matches.
10616
+ * Free-form, caller-asserted request context: the *document* it is about and
10617
+ * the *request* driving it.
10618
+ *
10619
+ * Three axes of opaque classification strings elide neither ships nor
10620
+ * interprets a downstream policy layer chooses what `"medical"` or
10621
+ * `"fraud_detection"` or `"auditor"` mean. They are read in two places: a
10622
+ * recognizer may bias its detection on them (the LLM prompt lists them so the
10623
+ * model attends to the right terms), and a scope-aware operator predicate may
10624
+ * branch on them at selection time (redact the same document differently per
10625
+ * [`audience`]).
10626
+ *
10627
+ * - [`tags`] classify the *document* (`"medical"`, `"gdpr-request"`).
10628
+ * - [`purpose`] is why the request exists (`"fraud_detection"`).
10629
+ * - [`audience`] is who the redacted output is for (`"support_agent"`,
10630
+ * `"auditor"`) — the axis PCI-style "same document, two masks" branches on.
10631
+ *
10632
+ * [`tags`]: Self::tags
10633
+ * [`purpose`]: Self::purpose
10634
+ * [`audience`]: Self::audience
10635
+ */
10636
+ ScopeMetadata: {
10637
+ /**
10638
+ * @description Who the redacted output is for (e.g. `"support_agent"`, `"auditor"`).
10639
+ * The axis a per-audience redaction branches on: one detected document,
10640
+ * selected differently per audience. May hold several.
10360
10641
  * @default []
10361
10642
  */
10362
- countries: components["schemas"]["CountryCode"][];
10643
+ audience: string[];
10363
10644
  /**
10364
- * @description Caller-asserted languages for the analysis. Empty means the caller
10365
- * asserted none, leaving detection (if an enricher runs) to fill in.
10366
- * @default []
10645
+ * @description The caller-asserted business purpose driving this request (e.g.
10646
+ * `"fraud_detection"`, `"gdpr_erasure_request"`). A scope-aware operator
10647
+ * predicate may skip or swap a rule based on it; a recognizer may bias
10648
+ * detection on it. `None` when the caller asserts no purpose.
10649
+ * @default null
10367
10650
  */
10368
- languages: components["schemas"]["Languages"];
10651
+ purpose: string;
10369
10652
  /**
10370
10653
  * @description Document-level classification tags (e.g. `"medical"`,
10371
10654
  * `"gdpr-request"`). Recognizers may use these to bias their behavior
@@ -10373,9 +10656,9 @@ interface components {
10373
10656
  *
10374
10657
  * Named `tags`, not `labels`, to keep "label" reserved for the entity
10375
10658
  * taxonomy ([`LabelRef`]/[`LabelCatalog`]): these classify the
10376
- * *document*, whereas [`catalog`] names the entity *types* to emit.
10659
+ * *document*, whereas the scope's catalog names the entity *types* to
10660
+ * emit.
10377
10661
  *
10378
- * [`catalog`]: Self::catalog
10379
10662
  * [`LabelRef`]: crate::entity::LabelRef
10380
10663
  * [`LabelCatalog`]: crate::entity::LabelCatalog
10381
10664
  * @default []
@@ -10385,10 +10668,12 @@ interface components {
10385
10668
  /**
10386
10669
  * @description Caller-asserted scope for one request.
10387
10670
  *
10388
- * Mirrors the wire-visible knobs of `elide::recognition::Scope`.
10389
- * The engine assembles this plus a server-minted
10390
- * `correlation_id` into the orchestrator's `Scope` at compile
10391
- * time.
10671
+ * A narrower wire projection of `elide::recognition::Scope`:
10672
+ * `languages` and `countries` (typed, elide-native), plus
10673
+ * elide's [`ScopeMetadata`] block for free-form classification
10674
+ * strings (`tags`, `purpose`, `audience`). The engine assembles
10675
+ * this plus a server-minted `correlation_id` and a policy-derived
10676
+ * label catalog into the orchestrator's `Scope` at compile time.
10392
10677
  */
10393
10678
  ScopeParams: {
10394
10679
  /**
@@ -10401,17 +10686,6 @@ interface components {
10401
10686
  * jurisdiction don't lose detections.
10402
10687
  */
10403
10688
  countries?: components["schemas"]["CountryCode"][];
10404
- /**
10405
- * @description Per-request entity-label catalog.
10406
- *
10407
- * Builtins selected by name + custom inline schemas. Drives
10408
- * what recognizers are asked to emit and tag-based selector
10409
- * matching in the anonymizer. Engine resolves this into the
10410
- * assembled `elide::recognition::Scope`'s `catalog` field at
10411
- * compile time.
10412
- * @default {}
10413
- */
10414
- labelCatalog: components["schemas"]["LabelCatalogParams"];
10415
10689
  /**
10416
10690
  * @description Caller-asserted languages for the analysis.
10417
10691
  *
@@ -10421,20 +10695,22 @@ interface components {
10421
10695
  */
10422
10696
  languages: components["schemas"]["Languages"];
10423
10697
  /**
10424
- * @description Document-level classification tags.
10425
- *
10426
- * E.g. `"medical"`, `"gdpr-request"`. Recognizers may use
10427
- * these to bias their behaviour for domain-specific terms;
10428
- * those that don't ignore the field.
10429
- *
10430
- * Distinct from [`label_catalog`]: tags classify the
10431
- * *document*, whereas the catalog names the entity *types*
10432
- * to emit.
10433
- *
10434
- * [`label_catalog`]: ScopeParams::label_catalog
10698
+ * @description Free-form request context: document tags, request purpose,
10699
+ * output audience. See elide's [`ScopeMetadata`].
10435
10700
  */
10436
- tags?: string[];
10701
+ metadata?: components["schemas"]["ScopeMetadata"];
10437
10702
  };
10703
+ /**
10704
+ * @description Which SHA-2 variant a hashing operator uses.
10705
+ *
10706
+ * Shared by [`Sha2Hash`] (unkeyed digest) and [`HmacHash`] (keyed HMAC):
10707
+ * both pick the same underlying width, so the choice lives in one enum
10708
+ * rather than one per operator.
10709
+ *
10710
+ * [`Sha2Hash`]: super::Sha2Hash
10711
+ * [`HmacHash`]: super::HmacHash
10712
+ */
10713
+ Sha2Algorithm: "sha256" | "sha512";
10438
10714
  /** @description Request payload for signup. */
10439
10715
  Signup: {
10440
10716
  /** @description Optional display name of the account. */
@@ -10511,6 +10787,42 @@ interface components {
10511
10787
  * to track whether a run was manually triggered, scheduled, or triggered by a webhook.
10512
10788
  */
10513
10789
  SyncTriggerType: "manual" | "scheduled" | "webhook";
10790
+ /**
10791
+ * @description Per-label table rule: N labels, N actions, one shared identity.
10792
+ *
10793
+ * Each entry compiles to an elide `Rule::label` attachment under
10794
+ * this rule's shared UUID / name / description — so the audit
10795
+ * trail records "rule X fired" without exposing the fan-out to
10796
+ * the reviewer. Meant for templates where a single policy intent
10797
+ * (e.g. "HIPAA Safe Harbor identifiers") routes different labels
10798
+ * to different operators.
10799
+ */
10800
+ TableRule: {
10801
+ /** @description Optional description for reviewers. */
10802
+ description?: string;
10803
+ /**
10804
+ * Format: uuid
10805
+ * @description Stable identifier — shared by every entry the table
10806
+ * expands into. UUIDv7 recommended.
10807
+ */
10808
+ id: string;
10809
+ /** @description Human-readable name. Display-only. */
10810
+ name: string;
10811
+ /**
10812
+ * @description Per-label operator dispatch. Every entity whose label
10813
+ * matches a listed [`LabelRef`] attaches the paired
10814
+ * [`ModalityRedactions`]. Labels absent from the list are not
10815
+ * affected by this rule and fall through to the next rule or
10816
+ * the policy fallback.
10817
+ *
10818
+ * A [`Vec`] rather than a map keeps the author-supplied
10819
+ * order — elide's anonymizer is first-match-wins, so wire
10820
+ * order determines which entry fires when two match the
10821
+ * same entity. Duplicate labels are the caller's bug; the
10822
+ * engine attaches every entry, and the first one wins.
10823
+ */
10824
+ operators: components["schemas"]["LabelEntry"][];
10825
+ };
10514
10826
  /**
10515
10827
  * @description Detected piece of sensitive information within some medium.
10516
10828
  *
@@ -10596,12 +10908,17 @@ interface components {
10596
10908
  /** @description The elide entity, as recognition produced it. */
10597
10909
  entity: components["schemas"]["TabularEntity"];
10598
10910
  /**
10599
- * @description Reviewer-supplied override.
10911
+ * @description Reviewer-supplied redaction override.
10600
10912
  *
10601
- * `None` means "use the policy's decision"; `Some(action)`
10602
- * overrides it for this specific entity at apply time.
10913
+ * `None` means "use the matching policy rule's decision";
10914
+ * `Some(...)` overrides that rule for this specific entity
10915
+ * at apply time. Reviewer overrides take precedence over
10916
+ * every policy rule and inherit the authority of the
10917
+ * [`Review::policy_id`] they name — the audit event's
10918
+ * attribution stamps that policy so the trail names the
10919
+ * authority under which the override fired.
10603
10920
  */
10604
- reviewerOverride?: components["schemas"]["ModalityRedactions"];
10921
+ review?: components["schemas"]["Review"];
10605
10922
  };
10606
10923
  /**
10607
10924
  * @description One thing that happened to an entity, with its effect on confidence.
@@ -10853,6 +11170,57 @@ interface components {
10853
11170
  /** @constant */
10854
11171
  kind: "drop_column";
10855
11172
  };
11173
+ /**
11174
+ * @description Fallback operator that runs when a declinable primary
11175
+ * ([`TextRedaction::Clamp`], [`TextRedaction::GeneralizeDate`])
11176
+ * doesn't apply to the entity value.
11177
+ *
11178
+ * The four operators that always apply and produce a deterministic
11179
+ * output without needing engine-side infrastructure (no key
11180
+ * provider, no vault). Enough to satisfy every regulatory
11181
+ * pattern I know: `Clamp/GeneralizeDate → Erase` (the safe
11182
+ * default), `→ Replace { template }` (an explicit placeholder),
11183
+ * or `→ Mask` / `→ Keep` on the rare occasion those fit.
11184
+ *
11185
+ * Absent from the primary's spec, elide's baked-in default is
11186
+ * [`Erase`] — a bare [`TextRedaction::Clamp`] without a `fallback`
11187
+ * erases values that aren't numeric.
11188
+ *
11189
+ * [`Erase`]: TerminalFallback::Erase
11190
+ */
11191
+ TerminalFallback: {
11192
+ /** @constant */
11193
+ kind: "erase";
11194
+ } | {
11195
+ /** @constant */
11196
+ kind: "keep";
11197
+ } | {
11198
+ /** @constant */
11199
+ kind: "replace";
11200
+ /**
11201
+ * @description Template string. Default `[{label}]`.
11202
+ * @default [{label}]
11203
+ */
11204
+ template: string;
11205
+ } | {
11206
+ /**
11207
+ * Format: uint
11208
+ * @description Characters to leave unmasked at the start of the value.
11209
+ */
11210
+ keep_prefix?: number;
11211
+ /**
11212
+ * Format: uint
11213
+ * @description Characters to leave unmasked at the end of the value.
11214
+ */
11215
+ keep_suffix?: number;
11216
+ /** @constant */
11217
+ kind: "mask";
11218
+ /**
11219
+ * @description The character that replaces masked positions.
11220
+ * @default *
11221
+ */
11222
+ mask_char: string;
11223
+ };
10856
11224
  /** @description Request payload for testing a webhook. */
10857
11225
  TestWebhook: {
10858
11226
  /**
@@ -10957,12 +11325,17 @@ interface components {
10957
11325
  /** @description The elide entity, as recognition produced it. */
10958
11326
  entity: components["schemas"]["TextEntity"];
10959
11327
  /**
10960
- * @description Reviewer-supplied override.
11328
+ * @description Reviewer-supplied redaction override.
10961
11329
  *
10962
- * `None` means "use the policy's decision"; `Some(action)`
10963
- * overrides it for this specific entity at apply time.
11330
+ * `None` means "use the matching policy rule's decision";
11331
+ * `Some(...)` overrides that rule for this specific entity
11332
+ * at apply time. Reviewer overrides take precedence over
11333
+ * every policy rule and inherit the authority of the
11334
+ * [`Review::policy_id`] they name — the audit event's
11335
+ * attribution stamps that policy so the trail names the
11336
+ * authority under which the override fired.
10964
11337
  */
10965
- reviewerOverride?: components["schemas"]["ModalityRedactions"];
11338
+ review?: components["schemas"]["Review"];
10966
11339
  };
10967
11340
  /**
10968
11341
  * @description One thing that happened to an entity, with its effect on confidence.
@@ -11214,7 +11587,7 @@ interface components {
11214
11587
  * @description SHA-256 (default) or SHA-512.
11215
11588
  * @default sha256
11216
11589
  */
11217
- algorithm: components["schemas"]["HashAlgorithm"];
11590
+ algorithm: components["schemas"]["Sha2Algorithm"];
11218
11591
  /** @constant */
11219
11592
  kind: "hash";
11220
11593
  /** @description Salt prepended to the value before hashing. */
@@ -11250,6 +11623,75 @@ interface components {
11250
11623
  } | {
11251
11624
  /** @constant */
11252
11625
  kind: "encrypt";
11626
+ } | {
11627
+ /**
11628
+ * @description HMAC-SHA-256 (default) or HMAC-SHA-512.
11629
+ * @default sha256
11630
+ */
11631
+ algorithm: components["schemas"]["Sha2Algorithm"];
11632
+ /** @constant */
11633
+ kind: "hmac_hash";
11634
+ } | {
11635
+ /**
11636
+ * Format: uint
11637
+ * @description Characters to keep at the start of the value.
11638
+ */
11639
+ keep_prefix?: number;
11640
+ /**
11641
+ * Format: uint
11642
+ * @description Characters to keep at the end of the value.
11643
+ */
11644
+ keep_suffix?: number;
11645
+ /** @constant */
11646
+ kind: "truncate";
11647
+ } | {
11648
+ /**
11649
+ * Format: double
11650
+ * @description Threshold at or above which values collapse to
11651
+ * `ceiling_bucket`. `None` disables the ceiling.
11652
+ */
11653
+ ceiling?: number;
11654
+ /**
11655
+ * @description Bucket label for values at or above `ceiling`. Required
11656
+ * when `ceiling` is set; ignored otherwise.
11657
+ */
11658
+ ceiling_bucket?: components["schemas"]["ClampBucket"];
11659
+ /**
11660
+ * @description Operator that runs when the entity value isn't a
11661
+ * finite number. `None` erases (elide's default).
11662
+ */
11663
+ fallback?: components["schemas"]["TerminalFallback"];
11664
+ /**
11665
+ * Format: double
11666
+ * @description Threshold at or below which values collapse to
11667
+ * `floor_bucket`. `None` disables the floor.
11668
+ */
11669
+ floor?: number;
11670
+ /**
11671
+ * @description Bucket label for values at or below `floor`. Required
11672
+ * when `floor` is set; ignored otherwise.
11673
+ */
11674
+ floor_bucket?: components["schemas"]["ClampBucket"];
11675
+ /** @constant */
11676
+ kind: "clamp";
11677
+ } | {
11678
+ /**
11679
+ * @description Operator that runs when the entity value isn't a
11680
+ * parseable date. `None` erases (elide's default).
11681
+ */
11682
+ fallback?: components["schemas"]["TerminalFallback"];
11683
+ /**
11684
+ * @description Coarseness of the output. Default `Year`.
11685
+ * @default year
11686
+ */
11687
+ granularity: components["schemas"]["DateGranularity"];
11688
+ /** @constant */
11689
+ kind: "generalize_date";
11690
+ /**
11691
+ * @description Which input convention to accept. Default `Iso`.
11692
+ * @default iso
11693
+ */
11694
+ style: components["schemas"]["DateStyle"];
11253
11695
  };
11254
11696
  /**
11255
11697
  * @description How the structural reconciler picks a winner across labels.
@@ -11578,7 +12020,7 @@ interface components {
11578
12020
  * This enumeration corresponds to the `WEBHOOK_EVENT` PostgreSQL enum and is used
11579
12021
  * to configure which events a webhook should receive notifications for.
11580
12022
  */
11581
- WebhookEvent: "file:created" | "file:updated" | "file:deleted" | "member:added" | "member:deleted" | "member:updated" | "connection:created" | "connection:updated" | "connection:deleted" | "connection:synced" | "connection:desynced";
12023
+ 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.completed" | "pipeline:run.failed" | "policy:created" | "policy:updated" | "policy:deleted";
11582
12024
  /** @description Opaque whk identifier (whk_<uuid>). */
11583
12025
  WebhookId: string;
11584
12026
  /**
@@ -11839,6 +12281,34 @@ type PolicyDefinition = Schemas$3["PolicyDefinition"];
11839
12281
  type CreatePolicy = Schemas$3["CreatePolicy"];
11840
12282
  type UpdatePolicy = Schemas$3["UpdatePolicy"];
11841
12283
  type PolicyRule = Schemas$3["PolicyRule"];
12284
+ type PolicyTemplate = Schemas$3["PolicyTemplate"];
12285
+ type PredicatedRule = Schemas$3["PredicatedRule"];
12286
+ type TableRule = Schemas$3["TableRule"];
12287
+ type Predicate = Schemas$3["Predicate"];
12288
+ type DocumentPredicate = Schemas$3["DocumentPredicate"];
12289
+ type ModalityRedactions = Schemas$3["ModalityRedactions"];
12290
+ type TextRedaction = Schemas$3["TextRedaction"];
12291
+ type ImageRedaction = Schemas$3["ImageRedaction"];
12292
+ type AudioRedaction = Schemas$3["AudioRedaction"];
12293
+ type TabularRedaction = Schemas$3["TabularRedaction"];
12294
+ type RetentionPolicy = Schemas$3["RetentionPolicy"];
12295
+ type Retention = Schemas$3["Retention"];
12296
+ type RetentionScope = Schemas$3["RetentionScope"];
12297
+ type Labels = Schemas$3["Labels"];
12298
+ type LabelGroup = Schemas$3["LabelGroup"];
12299
+ type LabelEntry = Schemas$3["LabelEntry"];
12300
+ type LabelLocale = Schemas$3["LabelLocale"];
12301
+ type Label = Schemas$3["Label"];
12302
+ type LocalizedText = Schemas$3["LocalizedText"];
12303
+ type Color = Schemas$3["Color"];
12304
+ type Waveform = Schemas$3["Waveform"];
12305
+ type ClampBucket = Schemas$3["ClampBucket"];
12306
+ type ConfidenceThreshold = Schemas$3["ConfidenceThreshold"];
12307
+ type DateStyle = Schemas$3["DateStyle"];
12308
+ type DateGranularity = Schemas$3["DateGranularity"];
12309
+ type LanguageTag = Schemas$3["LanguageTag"];
12310
+ type Sha2Algorithm = Schemas$3["Sha2Algorithm"];
12311
+ type TerminalFallback = Schemas$3["TerminalFallback"];
11842
12312
  //#endregion
11843
12313
  //#region src/datatypes/run.d.ts
11844
12314
  type Schemas$2 = components["schemas"];
@@ -11846,7 +12316,7 @@ type PipelineRun = Schemas$2["PipelineRun"];
11846
12316
  type CreatePipelineRun = Schemas$2["CreatePipelineRun"];
11847
12317
  type PipelineRunStatus = Schemas$2["PipelineRunStatus"];
11848
12318
  type PipelineRunPage = Schemas$2["PipelineRunPage"];
11849
- type AnalyzedDocument = Schemas$2["AnalyzedDocument"];
12319
+ type Audit = Schemas$2["Audit"];
11850
12320
  type Artifact = Schemas$2["Artifact"];
11851
12321
  //#endregion
11852
12322
  //#region src/datatypes/webhook.d.ts
@@ -11869,5 +12339,5 @@ type UpdateWorkspace = Schemas["UpdateWorkspace"];
11869
12339
  type WorkspaceRole = Schemas["WorkspaceRole"];
11870
12340
  type WorkspacePage = Schemas["WorkspacePage"];
11871
12341
  //#endregion
11872
- export { InviteExpiration as $, UpdateAccount as $t, PipelineDefinition as A, S3Credentials as At, NotificationPage as B, ApiToken as Bt, PolicyDefinition as C, ConnectionPage as Ct, UpdatePolicy as D, ConnectionsQuery as Dt, PolicySummaryPage as E, ConnectionVerification as Et, PipelineTriggerType as F, SyncTriggerType as Ft, Member as G, TokenExpiration as Gt, UnreadStatus as H, ApiTokenType as Ht, UpdatePipeline as I, UpdateConnection as It, UpdateMember as J, ActivityPage as Jt, MemberPage as K, UpdateApiToken as Kt, CursorPagination as L, AuthToken as Lt, PipelineStatus as M, SyncDeletionPolicy as Mt, PipelineSummary as N, SyncMode as Nt, CreatePipeline as O, CreateConnection as Ot, PipelineSummaryPage as P, SyncStatus as Pt, InviteCode as Q, PublicAccount as Qt, Notification as R, Login as Rt, Policy as S, ConnectionConfig as St, PolicySummary as T, ConnectionSyncPage as Tt, UpdateNotificationSettings as U, ApiTokenWithJWT as Ut, NotificationSettings as V, ApiTokenPage as Vt, ListMembers as W, CreateApiToken as Wt, GenerateInviteCode as X, Account as Xt, CreateInvite as Y, ActivityType as Yt, Invite as Z, AccountRef as Zt, CreatePipelineRun as _, UpdateFile as _t, WorkspaceRole as a, ListInvites as at, PipelineRunStatus as b, AzureCredentials as bt, UpdateWebhook as c, ComponentHealth as ct, WebhookEvent as d, File as dt, paths as en, InvitePage as et, WebhookPage as f, FilePage as ft, Artifact as g, ModalityToken as gt, AnalyzedDocument as h, ListFiles as ht, WorkspacePage as i, InviteStatus as it, PipelineFilter as j, SyncConnection as jt, Pipeline as k, GcsCredentials as kt, Webhook as l, Health as lt, WebhookStatus as m, FormatToken as mt, UpdateWorkspace as n, InviteSent as nt, CreateWebhook as o, ReplyInvite as ot, WebhookResult as p, FileSource as pt, MemberSortField as q, Activity as qt, Workspace as r, InviteSortField as rt, TestWebhook as s, SortOrder as st, CreateWorkspace as t, InvitePreview as tt, WebhookCreated as u, HealthStatus as ut, PipelineRun as v, ErrorResponse as vt, PolicyRule as w, ConnectionSync as wt, CreatePolicy as x, Connection as xt, PipelineRunPage as y, ValidationErrorDetail as yt, NotificationEvent as z, Signup as zt };
11873
- //# sourceMappingURL=index-HUG77R_t.d.ts.map
12342
+ export { TextRedaction as $, ConnectionSyncPage as $t, Label as A, InviteSent as At, PolicyRule as B, FilePage as Bt, Color as C, ActivityType as Cn, CreateInvite as Ct, DateStyle as D, UpdateAccount as Dn, InviteExpiration as Dt, DateGranularity as E, PublicAccount as En, InviteCode as Et, LanguageTag as F, SortOrder as Ft, PredicatedRule as G, UpdateFile as Gt, PolicySummaryPage as H, FormatToken as Ht, LocalizedText as I, ComponentHealth as It, RetentionScope as J, AzureCredentials as Jt, Retention as K, ErrorResponse as Kt, ModalityRedactions as L, Health as Lt, LabelGroup as M, InviteStatus as Mt, LabelLocale as N, ListInvites as Nt, DocumentPredicate as O, paths as On, InvitePage as Ot, Labels as P, ReplyInvite as Pt, TerminalFallback as Q, ConnectionSync as Qt, Policy as R, HealthStatus as Rt, ClampBucket as S, ActivityPage as Sn, UpdateMember as St, CreatePolicy as T, AccountRef as Tn, Invite as Tt, PolicyTemplate as U, ListFiles as Ut, PolicySummary as V, FileSource as Vt, Predicate as W, ModalityToken as Wt, TableRule as X, ConnectionConfig as Xt, Sha2Algorithm as Y, Connection as Yt, TabularRedaction as Z, ConnectionPage as Zt, CreatePipelineRun as _, ApiTokenWithJWT as _n, UpdateNotificationSettings as _t, WorkspaceRole as a, SyncConnection as an, PipelineFilter as at, PipelineRunStatus as b, UpdateApiToken as bn, MemberPage as bt, UpdateWebhook as c, SyncStatus as cn, PipelineSummaryPage as ct, WebhookEvent as d, AuthToken as dn, CursorPagination as dt, ConnectionVerification as en, UpdatePolicy as et, WebhookPage as f, Login as fn, Notification as ft, Audit as g, ApiTokenType as gn, UnreadStatus as gt, Artifact as h, ApiTokenPage as hn, NotificationSettings as ht, WorkspacePage as i, S3Credentials as in, PipelineDefinition as it, LabelEntry as j, InviteSortField as jt, ImageRedaction as k, InvitePreview as kt, Webhook as l, SyncTriggerType as ln, PipelineTriggerType as lt, WebhookStatus as m, ApiToken as mn, NotificationPage as mt, UpdateWorkspace as n, CreateConnection as nn, CreatePipeline as nt, CreateWebhook as o, SyncDeletionPolicy as on, PipelineStatus as ot, WebhookResult as p, Signup as pn, NotificationEvent as pt, RetentionPolicy as q, ValidationErrorDetail as qt, Workspace as r, GcsCredentials as rn, Pipeline as rt, TestWebhook as s, SyncMode as sn, PipelineSummary as st, CreateWorkspace as t, ConnectionsQuery as tn, Waveform as tt, WebhookCreated as u, UpdateConnection as un, UpdatePipeline as ut, PipelineRun as v, CreateApiToken as vn, ListMembers as vt, ConfidenceThreshold as w, Account as wn, GenerateInviteCode as wt, AudioRedaction as x, Activity as xn, MemberSortField as xt, PipelineRunPage as y, TokenExpiration as yn, Member as yt, PolicyDefinition as z, File as zt };
12343
+ //# sourceMappingURL=index-DTr3_MW7.d.ts.map