@nvisy/sdk 0.13.0 → 0.15.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.
@@ -3719,7 +3719,7 @@ interface paths {
3719
3719
  };
3720
3720
  };
3721
3721
  responses: {
3722
- /** @description A connection sync run (import or export). */
3722
+ /** @description A connection sync (import or export). */
3723
3723
  202: {
3724
3724
  headers: {
3725
3725
  [name: string]: unknown;
@@ -3944,7 +3944,7 @@ interface paths {
3944
3944
  };
3945
3945
  requestBody?: never;
3946
3946
  responses: {
3947
- /** @description A connection sync run (import or export). */
3947
+ /** @description A connection sync (import or export). */
3948
3948
  200: {
3949
3949
  headers: {
3950
3950
  [name: string]: unknown;
@@ -4037,7 +4037,7 @@ interface paths {
4037
4037
  };
4038
4038
  requestBody?: never;
4039
4039
  responses: {
4040
- /** @description A connection sync run (import or export). */
4040
+ /** @description A connection sync (import or export). */
4041
4041
  200: {
4042
4042
  headers: {
4043
4043
  [name: string]: unknown;
@@ -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,64 +7300,10 @@ 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"];
7303
+ /** @description Anthropic API credentials. */
7304
+ AnthropicCredentials: {
7305
+ /** @description Anthropic API key. */
7306
+ apiKey: string;
7364
7307
  };
7365
7308
  /** @description API token response structure. */
7366
7309
  ApiToken: {
@@ -7480,23 +7423,29 @@ interface components {
7480
7423
  */
7481
7424
  ArtifactType: "input" | "output" | "intermediate";
7482
7425
  /**
7483
- * @description Author-supplied rationale for a redaction: the policy it enforces and
7484
- * a reason.
7426
+ * @description Author-supplied rationale for a redaction: a policy name and an optional
7427
+ * description.
7485
7428
  *
7486
7429
  * Where the matched selection rule answers *which rule fired*, an
7487
7430
  * `Attribution` answers *under what authority* — a compliance clause, an
7488
7431
  * 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.
7432
+ * selection rule (`Rule::because` in `elide-redaction`); the anonymizer
7433
+ * records it on the entity's [`Redaction`] event so an audit can trace a
7434
+ * change back to the policy that demanded it.
7435
+ *
7436
+ * The `name` is the author's label for that policy (`"gdpr-art-17"`,
7437
+ * `"hipaa-safe-harbor"`, `"PII removal"`); an optional `description` adds
7438
+ * human context. Any stable machine identity a policy layer needs (a rule
7439
+ * UUID, a jurisdiction) is that layer's concern — it can encode it in the
7440
+ * name or carry it separately.
7492
7441
  *
7493
7442
  * [`Redaction`]: crate::entity::provenance::EventKind::Redaction
7494
7443
  */
7495
7444
  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;
7445
+ /** @description Human-readable description (e.g. `"right to erasure"`), when given. */
7446
+ description?: string;
7447
+ /** @description The policy's name (e.g. `"gdpr-art-17"`, `"hipaa-safe-harbor"`). */
7448
+ name: string;
7500
7449
  };
7501
7450
  /**
7502
7451
  * @description Per-call payload a recognizer inspects for the [`Audio`] modality.
@@ -7601,12 +7550,17 @@ interface components {
7601
7550
  /** @description The elide entity, as recognition produced it. */
7602
7551
  entity: components["schemas"]["AudioEntity"];
7603
7552
  /**
7604
- * @description Reviewer-supplied override.
7553
+ * @description Reviewer-supplied redaction override.
7605
7554
  *
7606
- * `None` means "use the policy's decision"; `Some(action)`
7607
- * overrides it for this specific entity at apply time.
7555
+ * `None` means "use the matching policy rule's decision";
7556
+ * `Some(...)` overrides that rule for this specific entity
7557
+ * at apply time. Reviewer overrides take precedence over
7558
+ * every policy rule and inherit the authority of the
7559
+ * [`Review::policy_id`] they name — the audit event's
7560
+ * attribution stamps that policy so the trail names the
7561
+ * authority under which the override fired.
7608
7562
  */
7609
- reviewerOverride?: components["schemas"]["ModalityRedactions"];
7563
+ review?: components["schemas"]["Review"];
7610
7564
  };
7611
7565
  /**
7612
7566
  * @description One thing that happened to an entity, with its effect on confidence.
@@ -7844,6 +7798,117 @@ interface components {
7844
7798
  */
7845
7799
  waveform: components["schemas"]["Waveform"];
7846
7800
  };
7801
+ /**
7802
+ * @description What detection found in one document.
7803
+ *
7804
+ * The body group plus per-container-part groups (each tagged by
7805
+ * modality) plus the recognition [`AuditContext`] the entities
7806
+ * were scored against.
7807
+ *
7808
+ * The context travels with the entities so anonymize can rebuild
7809
+ * an orchestrator against exactly the vocabulary analyze used.
7810
+ * Anything a policy predicate compares against beyond the label
7811
+ * catalog (asserted languages, jurisdictions, document tags) is
7812
+ * here; labels are re-derived from the policy set on each
7813
+ * anonymize call.
7814
+ *
7815
+ * No [`Default`] — a well-formed audit must carry a real
7816
+ * [`AuditContext`] with a real correlation id. Callers building
7817
+ * an audit outside the analyze path construct it explicitly.
7818
+ */
7819
+ Audit: {
7820
+ /**
7821
+ * @description The body group.
7822
+ *
7823
+ * `None` when no body pipeline produced entities (pre-analyze,
7824
+ * or the codec resolved the doc to a modality with no
7825
+ * pipeline).
7826
+ */
7827
+ body?: components["schemas"]["EntityGroup"];
7828
+ /**
7829
+ * @description Recognition context.
7830
+ *
7831
+ * The asserted languages, countries, document tags, and the
7832
+ * analyze-side correlation id. Held so
7833
+ * [`Engine::anonymize`] can compile against the same
7834
+ * vocabulary analyze used without the caller re-passing an
7835
+ * `AnalyzerParams`.
7836
+ *
7837
+ * Required on the wire — a missing context on an incoming
7838
+ * [`Audit`] rejects at deserialize time so the shape
7839
+ * mismatch surfaces at load, not at apply.
7840
+ *
7841
+ * [`Engine::anonymize`]: super::Engine::anonymize
7842
+ */
7843
+ context: components["schemas"]["AuditContext"];
7844
+ /**
7845
+ * @description One entry per container part the orchestrator surfaced.
7846
+ *
7847
+ * Keyed by the container-private part id (e.g. a DOCX zip
7848
+ * entry name like `"word/media/image1.png"`); each value
7849
+ * carries that part's modality + entities.
7850
+ */
7851
+ parts?: {
7852
+ [key: string]: components["schemas"]["EntityGroup"];
7853
+ };
7854
+ };
7855
+ /**
7856
+ * @description Recognition-side facts that travel from analyze to anonymize.
7857
+ *
7858
+ * Mirrors elide's [`Scope`] shape one-for-one: direct fields
7859
+ * for `languages` and `countries` (typed, elide-native), a
7860
+ * [`metadata`] sub-struct for free-form classification strings
7861
+ * (`tags`, `purpose`, `audience`), and the analyze-time
7862
+ * [`correlation_id`]. The label catalog is not on here —
7863
+ * labels are policy-owned, and anonymize re-derives them from
7864
+ * the policy set it was handed.
7865
+ *
7866
+ * No [`Default`] — `correlation_id` has no meaningful default
7867
+ * (a nil UUID would silently collapse unrelated audits under
7868
+ * one bucket in downstream trace aggregators), so callers
7869
+ * supply one explicitly. Everything else defaults to empty.
7870
+ *
7871
+ * [`Scope`]: elide::recognition::Scope
7872
+ * [`metadata`]: Self::metadata
7873
+ * [`correlation_id`]: Self::correlation_id
7874
+ */
7875
+ AuditContext: {
7876
+ /**
7877
+ * Format: uuid
7878
+ * @description Analyze-time correlation id.
7879
+ *
7880
+ * Threaded into every tracing span on the recognition path;
7881
+ * carried over so the anonymize path can link its own spans
7882
+ * to the same request. The anonymize call supplies a fresh
7883
+ * id from the passed [`Document`] as the anonymize-side
7884
+ * correlation id — this one stays as the analyze-side
7885
+ * pointer.
7886
+ *
7887
+ * Required on the wire.
7888
+ *
7889
+ * [`Document`]: nvisy_schema::file::Document
7890
+ */
7891
+ correlationId: string;
7892
+ /**
7893
+ * @description Caller-asserted jurisdictions.
7894
+ *
7895
+ * Recorded from `AnalyzerParams.scope.countries`.
7896
+ */
7897
+ countries?: components["schemas"]["CountryCode"][];
7898
+ /**
7899
+ * @description Caller-asserted languages for the analysis.
7900
+ *
7901
+ * Recorded from `AnalyzerParams.scope.languages` at analyze
7902
+ * time; anonymize re-uses them verbatim.
7903
+ * @default []
7904
+ */
7905
+ languages: components["schemas"]["Languages"];
7906
+ /**
7907
+ * @description Free-form request context: document tags, request purpose,
7908
+ * output audience. See elide's [`ScopeMetadata`].
7909
+ */
7910
+ metadata?: components["schemas"]["ScopeMetadata"];
7911
+ };
7847
7912
  /** @description Response returned after successful authentication (login/signup). */
7848
7913
  AuthToken: {
7849
7914
  /** @description The JWT API token for authentication. */
@@ -7923,6 +7988,32 @@ interface components {
7923
7988
  /** @description Minimum corner (top-left, conventionally). */
7924
7989
  min: components["schemas"]["Point"];
7925
7990
  };
7991
+ /**
7992
+ * @description Text a [`TextRedaction::Clamp`] emits for out-of-range values.
7993
+ *
7994
+ * Three forms, deserialized untagged so callers can pick the
7995
+ * terser one for the case at hand:
7996
+ *
7997
+ * - **Plain string** (`"90 or older"`) — English-only shorthand.
7998
+ * - **Localized map** (`{"en": "90 or older", "fr": "90 ou plus"}`)
7999
+ * — one entry per language the deployment ships; missing
8000
+ * locales fall back to English at render time.
8001
+ * - **Format template** (`{"format": "{n} or older"}`) — the
8002
+ * engine substitutes `{n}` for the threshold, so a ceiling of
8003
+ * `90` renders `"90 or older"` without the caller repeating the
8004
+ * number. Same rendering in every language.
8005
+ *
8006
+ * Round-trips through serde as whichever form the caller wrote.
8007
+ */
8008
+ ClampBucket: string | {
8009
+ /**
8010
+ * @description The template string. `{n}` is substituted; other text
8011
+ * is literal.
8012
+ */
8013
+ format: string;
8014
+ } | {
8015
+ [key: string]: string;
8016
+ };
7926
8017
  /**
7927
8018
  * @description Color as 8-bit RGB.
7928
8019
  *
@@ -7996,25 +8087,16 @@ interface components {
7996
8087
  createdAt: string;
7997
8088
  /** @description Account that created this connection. */
7998
8089
  createdBy: components["schemas"]["AccountRef"];
7999
- /** @description How an import reconciles files whose source object was deleted. */
8000
- deletionPolicy: components["schemas"]["SyncDeletionPolicy"];
8001
8090
  /** @description Human-readable connection display name. */
8002
8091
  displayName: string;
8003
8092
  /** @description Opaque identifier of the connection. */
8004
8093
  id: components["schemas"]["ConnectionId"];
8005
- /** @description Whether the connection is enabled for syncing. */
8094
+ /** @description Whether the connection is enabled. */
8006
8095
  isActive: boolean;
8007
- /**
8008
- * Format: date-time
8009
- * @description When the connection last synced successfully, if ever.
8010
- */
8011
- lastSynced?: string;
8012
- /** @description Object store provider (`s3`, `azure`, `gcs`). */
8096
+ /** @description Provider identifier (`s3`, `azure`, `gcs`, `openai`, `ollama`, ...). */
8013
8097
  provider: string;
8014
- /** @description Cron expression for scheduled imports, if configured. */
8015
- scheduleCron?: string;
8016
- /** @description Whether the connection imports data in or exports data out. */
8017
- syncMode: components["schemas"]["SyncMode"];
8098
+ /** @description Sync configuration; present only for sync-capable connections. */
8099
+ sync?: components["schemas"]["SyncSchedule"];
8018
8100
  /**
8019
8101
  * Format: date-time
8020
8102
  * @description When the connection was last updated.
@@ -8024,39 +8106,12 @@ interface components {
8024
8106
  workspaceSlug: components["schemas"]["Handle"];
8025
8107
  };
8026
8108
  /**
8027
- * @description A fully-typed object-store connection configuration.
8109
+ * @description A fully-typed connection configuration for any capability.
8028
8110
  *
8029
- * The `provider` tag selects the variant and thereby the credential shape, so
8030
- * an S3 connection cannot carry Azure credentials. Each variant carries a
8031
- * shared optional `root_path` and a nested `credentials` object, giving a wire
8032
- * shape like
8033
- * `{ "provider": "s3", "rootPath": "in/", "credentials": { "bucket": "b", "accessKeyId": "..." } }`.
8034
- *
8035
- * Secrets are masked in [`Debug`]; serialization exists only to persist the
8036
- * config encrypted at rest, never to return it in API responses.
8111
+ * Untagged: the two inner enums have disjoint `provider` values, so serde
8112
+ * resolves the variant from the flat payload without an outer discriminator.
8037
8113
  */
8038
- ConnectionConfig: {
8039
- /** @description S3 credentials. */
8040
- credentials: components["schemas"]["S3Credentials"];
8041
- /** @constant */
8042
- provider: "s3";
8043
- /** @description Optional root prefix within the bucket; keys resolve relative to it. */
8044
- rootPath?: string;
8045
- } | {
8046
- /** @description Azure credentials. */
8047
- credentials: components["schemas"]["AzureCredentials"];
8048
- /** @constant */
8049
- provider: "azure";
8050
- /** @description Optional root prefix within the container; keys resolve relative to it. */
8051
- rootPath?: string;
8052
- } | {
8053
- /** @description GCS credentials. */
8054
- credentials: components["schemas"]["GcsCredentials"];
8055
- /** @constant */
8056
- provider: "gcs";
8057
- /** @description Optional root prefix within the bucket; keys resolve relative to it. */
8058
- rootPath?: string;
8059
- };
8114
+ ConnectionConfig: components["schemas"]["StorageConfig"] | components["schemas"]["LlmConfig"];
8060
8115
  /** @description Opaque conn identifier (conn_<uuid>). */
8061
8116
  ConnectionId: string;
8062
8117
  /**
@@ -8089,7 +8144,7 @@ interface components {
8089
8144
  /** @description Opaque identifier of the connection. */
8090
8145
  connectionId: components["schemas"]["ConnectionId"];
8091
8146
  };
8092
- /** @description A connection sync run (import or export). */
8147
+ /** @description A connection sync (import or export). */
8093
8148
  ConnectionSync: {
8094
8149
  /**
8095
8150
  * Format: int32
@@ -8197,30 +8252,23 @@ interface components {
8197
8252
  /** @description Request payload for creating a new workspace connection. */
8198
8253
  CreateConnection: {
8199
8254
  /**
8200
- * @description Typed provider configuration (provider tag + its credentials + optional
8201
- * root path), encrypted at rest. The `provider` tag selects which
8202
- * credential shape is required.
8255
+ * @description Typed provider configuration (provider tag + its credentials), encrypted
8256
+ * at rest. The `provider` tag selects which credential shape is required and
8257
+ * which capability the connection has.
8203
8258
  */
8204
8259
  config: components["schemas"]["ConnectionConfig"];
8205
- /**
8206
- * @description How an import reconciles files whose source object was deleted.
8207
- * @default ignore
8208
- */
8209
- deletionPolicy: components["schemas"]["SyncDeletionPolicy"];
8210
8260
  /** @description Human-readable connection display name. */
8211
8261
  displayName: string;
8212
8262
  /**
8213
- * @description Whether the connection is enabled for syncing. Omit to default to active;
8214
- * set `false` to create it disabled.
8263
+ * @description Whether the connection is enabled. Omit to default to active; set `false`
8264
+ * to create it disabled.
8215
8265
  */
8216
8266
  isActive?: boolean;
8217
- /** @description Cron expression for scheduled imports; omit for manual-only. */
8218
- scheduleCron?: string;
8219
8267
  /**
8220
- * @description Whether the connection imports data in or exports data out.
8221
- * @default import
8268
+ * @description Sync configuration. Applies only to sync-capable providers (object
8269
+ * stores); rejected for others. Omit for manual-only defaults.
8222
8270
  */
8223
- syncMode: components["schemas"]["SyncMode"];
8271
+ sync?: components["schemas"]["SyncScheduleInput"];
8224
8272
  };
8225
8273
  /** @description Request payload for creating a new workspace invite. */
8226
8274
  CreateInvite: {
@@ -8276,20 +8324,33 @@ interface components {
8276
8324
  /**
8277
8325
  * @description Request payload for creating a new workspace policy.
8278
8326
  *
8279
- * The `definition` is a structured policy the redaction engine consumes;
8280
- * its `name` and `description` drive the stored columns unless overridden
8281
- * here.
8327
+ * The body comes from a template or an inline definition (see [`PolicyBody`]).
8328
+ * The body's `name` and `description` drive the stored columns unless
8329
+ * overridden here.
8282
8330
  */
8283
8331
  CreatePolicy: {
8284
- /** @description The structured policy body consumed by the engine. */
8285
- definition: components["schemas"]["PolicyDefinition"];
8286
8332
  /** @description Optional description override. Defaults to the policy's own description. */
8287
8333
  description?: string;
8288
8334
  /** @description Optional display name override. Defaults to the policy's own name. */
8289
8335
  displayName?: string;
8290
8336
  /** @description URL slug, unique within the workspace and immutable after creation. */
8291
8337
  slug: components["schemas"]["Handle"];
8292
- };
8338
+ } & ({
8339
+ /** @constant */
8340
+ source: "template";
8341
+ /** @description The built-in policy template to seed from. */
8342
+ template: components["schemas"]["PolicyTemplate"];
8343
+ } | {
8344
+ /**
8345
+ * @description The structured policy body.
8346
+ *
8347
+ * Boxed to keep the enum small: an inline body is much larger than a
8348
+ * template id, and most requests use a template.
8349
+ */
8350
+ definition: components["schemas"]["PolicyDefinition"];
8351
+ /** @constant */
8352
+ source: "inline";
8353
+ });
8293
8354
  /** @description Request payload for creating a new workspace webhook. */
8294
8355
  CreateWebhook: {
8295
8356
  /** @description Detailed description of the webhook's purpose (max 500 characters). */
@@ -8496,6 +8557,24 @@ interface components {
8496
8557
  */
8497
8558
  validator?: string;
8498
8559
  };
8560
+ /**
8561
+ * @description The coarseness a [`GeneralizeDate`] reduces a date/timestamp to.
8562
+ *
8563
+ * Every rendering is an ISO-8601 form, so the output is locale-independent
8564
+ * by construction — no localized month names or week markers to configure.
8565
+ */
8566
+ DateGranularity: "year" | "year_month" | "hour";
8567
+ /**
8568
+ * @description Which written date convention a [`GeneralizeDate`] accepts on *input*.
8569
+ *
8570
+ * This governs only how the entity value is *parsed*; the output mirrors
8571
+ * each value's own convention (see [`GeneralizeDate::render`]). The choice
8572
+ * is explicit, never inferred from the entity's language: `03/04/1987` is
8573
+ * a real date under both conventions (March 4 vs. April 3), so a wrong
8574
+ * guess would silently emit a plausible-but-wrong month. The policy
8575
+ * author, who knows the corpus's convention, sets it.
8576
+ */
8577
+ DateStyle: "iso" | "us";
8499
8578
  /**
8500
8579
  * @description Pixel dimensions of an image or any 2-D canvas.
8501
8580
  *
@@ -8563,6 +8642,36 @@ interface components {
8563
8642
  * mentions, not a global key.
8564
8643
  */
8565
8644
  EntityCoRef: string;
8645
+ /**
8646
+ * @description A modality-tagged group of recognised entities.
8647
+ *
8648
+ * The unit [`Audit`] stores in `body` and in every `parts`
8649
+ * entry.
8650
+ *
8651
+ * Tagged by `modality` (snake_case) so deserialization picks the
8652
+ * right variant and the entity vec inside is statically typed
8653
+ * per modality — apply-time we hand each variant back to elide
8654
+ * as a `Vec<Entity<M>>` for the appropriate `M`.
8655
+ *
8656
+ * [`Audit`]: crate::Audit
8657
+ */
8658
+ EntityGroup: {
8659
+ entities: components["schemas"]["TextEntityRecord"][];
8660
+ /** @constant */
8661
+ modality: "text";
8662
+ } | {
8663
+ entities: components["schemas"]["TabularEntityRecord"][];
8664
+ /** @constant */
8665
+ modality: "tabular";
8666
+ } | {
8667
+ entities: components["schemas"]["ImageEntityRecord"][];
8668
+ /** @constant */
8669
+ modality: "image";
8670
+ } | {
8671
+ entities: components["schemas"]["AudioEntityRecord"][];
8672
+ /** @constant */
8673
+ modality: "audio";
8674
+ };
8566
8675
  /**
8567
8676
  * @description HTTP error response representation with security-conscious design.
8568
8677
  *
@@ -8688,6 +8797,20 @@ interface components {
8688
8797
  */
8689
8798
  serviceAccountPath: string;
8690
8799
  };
8800
+ /**
8801
+ * @description Which operator to apply to Article 9 special-category entities.
8802
+ *
8803
+ * - [`Erase`](Self::Erase) — the default no-lawful-basis posture.
8804
+ * Every match is removed.
8805
+ * - [`Pseudonymize`](Self::Pseudonymize) — identity-preserving
8806
+ * surrogate. Suitable when an Article 9(2) carve-out
8807
+ * (explicit consent, employment law, public-health public
8808
+ * interest, ...) authorizes retention and downstream
8809
+ * analytics need per-entity coreference across mentions. The
8810
+ * 9(2) basis itself remains the caller's out-of-band
8811
+ * obligation to establish and document.
8812
+ */
8813
+ GdprArticle9Treatment: "erase" | "pseudonymize";
8691
8814
  /** @description Request to generate a shareable invite code for a workspace. */
8692
8815
  GenerateInviteCode: {
8693
8816
  /** @description When the invite code expires. */
@@ -8697,14 +8820,6 @@ interface components {
8697
8820
  };
8698
8821
  /** @description Lowercase, dash-separated identifier used in URLs and as account handles. */
8699
8822
  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
8823
  /** @description Response body for `GET /health/`. */
8709
8824
  Health: {
8710
8825
  /** @description Per-component health checks. */
@@ -8716,6 +8831,30 @@ interface components {
8716
8831
  };
8717
8832
  /** @description Operational status of a service component. */
8718
8833
  HealthStatus: "healthy" | "degraded" | "unhealthy";
8834
+ /**
8835
+ * @description Which HIPAA §164.514 de-identification method to apply.
8836
+ *
8837
+ * The tradeoff is analytic yield vs. downstream constraint:
8838
+ *
8839
+ * - [`SafeHarbor`](Self::SafeHarbor) — strips all eighteen
8840
+ * identifier categories. No Data Use Agreement or statistician
8841
+ * required, but dates, coarse geography, and ages ≥ 90 all
8842
+ * disappear or collapse.
8843
+ * - [`LimitedDataSet`](Self::LimitedDataSet) — narrower
8844
+ * subtraction (§164.514(e)(2)) that keeps dates, town/city,
8845
+ * state, ZIP, and ages verbatim. Suitable for research and
8846
+ * public-health handoffs *only when* a Data Use Agreement
8847
+ * governs the recipient's use.
8848
+ * - [`ExpertDetermination`](Self::ExpertDetermination) —
8849
+ * starting scaffold for §164.514(b)(1). Same label set as
8850
+ * Safe Harbor with pseudonymization as the default terminal
8851
+ * (identity-preserving across mentions). **Does not certify
8852
+ * de-identification** — a qualified statistician must
8853
+ * document that re-identification risk is "very small" under
8854
+ * the applicable methodology before the output can be treated
8855
+ * as de-identified.
8856
+ */
8857
+ HipaaDeidMethod: "safe_harbor" | "limited_data_set" | "expert_determination";
8719
8858
  /**
8720
8859
  * @description Per-call payload a recognizer inspects for the [`Image`] modality.
8721
8860
  *
@@ -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,12 +9627,68 @@ interface components {
9396
9627
  /** @description Sort by field. */
9397
9628
  sortBy?: components["schemas"]["MemberSortField"];
9398
9629
  };
9399
- /** @description Request payload for login. */
9400
- Login: {
9401
- /** @description Email address or username of the account. */
9402
- identifier: string;
9403
- /** @description Password of the account. */
9404
- password: string;
9630
+ /**
9631
+ * @description A fully-typed LLM inference connection configuration.
9632
+ *
9633
+ * The `provider` tag selects the variant and thereby the credential shape, so
9634
+ * an OpenAI connection cannot carry Anthropic credentials. Serialization exists
9635
+ * only to persist the config encrypted at rest, never to return it in API
9636
+ * responses.
9637
+ */
9638
+ LlmConfig: {
9639
+ /** @description Override the API base URL (for Azure OpenAI or a proxy). Optional. */
9640
+ baseUrl?: string;
9641
+ /** @description OpenAI credentials. */
9642
+ credentials: components["schemas"]["OpenAiCredentials"];
9643
+ /** @description Default model to use when a request does not specify one. Optional. */
9644
+ defaultModel?: string;
9645
+ /** @constant */
9646
+ provider: "openai";
9647
+ } | {
9648
+ /** @description Base URL of the Ollama server (e.g. `http://localhost:11434`). */
9649
+ baseUrl: string;
9650
+ /** @description Default model to use when a request does not specify one. Optional. */
9651
+ defaultModel?: string;
9652
+ /** @constant */
9653
+ provider: "ollama";
9654
+ } | {
9655
+ /** @description Override the API base URL. Optional. */
9656
+ baseUrl?: string;
9657
+ /** @description Anthropic credentials. */
9658
+ credentials: components["schemas"]["AnthropicCredentials"];
9659
+ /** @description Default model to use when a request does not specify one. Optional. */
9660
+ defaultModel?: string;
9661
+ /** @constant */
9662
+ provider: "anthropic";
9663
+ };
9664
+ /**
9665
+ * @description A value localized per [`LanguageTag`], with an English-first fallback.
9666
+ *
9667
+ * The reusable mechanism behind any text that varies by language: a
9668
+ * [`Label`]'s display name and description, a redaction operator's bucket
9669
+ * label, and so on. English (`"en"`) is the conventional anchor —
9670
+ * constructors seed it, and [`resolve`] falls back to it (then to any
9671
+ * entry) when a requested locale is absent, so a caller that supplied
9672
+ * English always gets *some* value.
9673
+ *
9674
+ * Generic over the stored value `T`, so it carries a bare `HipStr`
9675
+ * (a bucket label) or a richer struct (a label's name-plus-description)
9676
+ * equally. It is a thin wrapper over a `HashMap<LanguageTag, T>`; the
9677
+ * added value is the fallback policy in [`resolve`], kept in one place
9678
+ * rather than reimplemented at each use site.
9679
+ *
9680
+ * [`Label`]: crate::entity::Label
9681
+ * [`resolve`]: LocalizedText::resolve
9682
+ */
9683
+ LocalizedText: {
9684
+ [key: string]: components["schemas"]["LabelLocale"];
9685
+ };
9686
+ /** @description Request payload for login. */
9687
+ Login: {
9688
+ /** @description Email address or username of the account. */
9689
+ identifier: string;
9690
+ /** @description Password of the account. */
9691
+ password: string;
9405
9692
  /**
9406
9693
  * @description Whether to remember this device for extended session. Defaults to false.
9407
9694
  * @default false
@@ -9567,6 +9854,11 @@ interface components {
9567
9854
  /** @description Whether to send email notifications. */
9568
9855
  notifyViaEmail: boolean;
9569
9856
  };
9857
+ /** @description OpenAI API credentials. */
9858
+ OpenAiCredentials: {
9859
+ /** @description OpenAI API key. */
9860
+ apiKey: string;
9861
+ };
9570
9862
  /**
9571
9863
  * @description Identifies a redaction operator, for the redaction audit a higher
9572
9864
  * layer assembles.
@@ -9637,6 +9929,54 @@ interface components {
9637
9929
  */
9638
9930
  customDictionaries?: components["schemas"]["CustomDictionary"][];
9639
9931
  };
9932
+ /**
9933
+ * @description Which PCI DSS subsection this template addresses.
9934
+ *
9935
+ * - [`PanRender`](Self::PanRender) — §3.5.1 render posture for
9936
+ * stored Primary Account Numbers. Carries a [`PciPanRender`]
9937
+ * picking between the shipped render approaches.
9938
+ * - [`SavErase`](Self::SavErase) — §3.3.1 prohibition on
9939
+ * storing Sensitive Authentication Data (CVV/CVC, track data,
9940
+ * PIN blocks) after authorization. No options — SAV has one
9941
+ * posture: erase.
9942
+ */
9943
+ PciDssPart: {
9944
+ /** @constant */
9945
+ part: "pan_render";
9946
+ /**
9947
+ * @description Which of the §3.5.1-permitted render approaches to
9948
+ * apply.
9949
+ */
9950
+ render: components["schemas"]["PciPanRender"];
9951
+ } | {
9952
+ /** @constant */
9953
+ part: "sav_erase";
9954
+ };
9955
+ /**
9956
+ * @description Which PCI DSS §3.5.1-permitted render approach to apply to
9957
+ * stored PAN.
9958
+ *
9959
+ * The truncation / hash split is a real operational decision,
9960
+ * not a style knob:
9961
+ *
9962
+ * - Truncation is irreversible with no key material to protect;
9963
+ * destroys uniqueness (two PANs sharing the retained digits
9964
+ * collapse to the same string), so unsuitable when downstream
9965
+ * joins or dedup need per-row identity across a PAN column.
9966
+ * - HMAC preserves 1:1 uniqueness (same PAN → same digest),
9967
+ * enabling joins, dedup, and fraud-scoring on the digest. But
9968
+ * the tenant owns a key the engine reads via
9969
+ * [`Engine::with_key_provider`]; a leaked key permits offline
9970
+ * PAN enumeration against the shipped digests.
9971
+ *
9972
+ * The two axes inside truncation and inside HMAC are narrower.
9973
+ *
9974
+ * Callers wanting more than one dispatched from one policy
9975
+ * compose multiple templates.
9976
+ *
9977
+ * [`Engine::with_key_provider`]: https://docs.rs/nvisy-engine/latest/nvisy_engine/struct.Engine.html
9978
+ */
9979
+ PciPanRender: "truncate" | "truncate_last_four" | "hmac_sha256" | "hmac_sha512";
9640
9980
  /** @description Pipeline response. */
9641
9981
  Pipeline: {
9642
9982
  /** @description Artifacts produced by pipeline runs. */
@@ -9684,16 +10024,19 @@ interface components {
9684
10024
  /**
9685
10025
  * @description A pipeline's detection + governance intent.
9686
10026
  *
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.
10027
+ * Holds what a pipeline author decides — which recognizers to run, the default
10028
+ * scope, and the policies to apply. Infrastructure config (enrichment backends,
10029
+ * deduplication calibration) is server-wide and lives in the engine config, not
10030
+ * here. Stored as JSON in the pipeline's `definition` column but validated
10031
+ * against this schema at the API boundary.
10032
+ *
10033
+ * The label catalog is not part of this: the policies own the label vocabulary,
10034
+ * and the engine derives the detection catalog from them at run time.
9692
10035
  *
9693
10036
  * The split:
9694
10037
  *
9695
- * - `recognizers` / `deduplication` / `label_catalog` — the detection intent,
9696
- * merged with the server-wide engine defaults into an `AnalyzerParams`.
10038
+ * - `recognizers` / `deduplication` — the detection intent, merged with the
10039
+ * server-wide engine defaults into an `AnalyzerParams`.
9697
10040
  * - `default_scope` — optional pipeline-wide scope a document may override.
9698
10041
  * - `policy_slugs` — references to the workspace's policies, resolved at run
9699
10042
  * time.
@@ -9711,14 +10054,6 @@ interface components {
9711
10054
  * the document must assert its own.
9712
10055
  */
9713
10056
  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
10057
  /**
9723
10058
  * @description Slugs of workspace policies applied at redaction.
9724
10059
  *
@@ -9931,27 +10266,40 @@ interface components {
9931
10266
  * fallback per policy" at the type level.
9932
10267
  */
9933
10268
  fallback?: components["schemas"]["ModalityRedactions"];
10269
+ /**
10270
+ * @description Named clusters of [`LabelRef`]s this policy's rules may
10271
+ * reference by name via [`Predicate::LabelInGroup`]. Scoped
10272
+ * to this policy — a rule can only name a group its own
10273
+ * policy declared; unknown references error at request
10274
+ * validation. Two policies that both declare `hipaa_18` with
10275
+ * different labelsets stay independent.
10276
+ *
10277
+ * [`LabelRef`]: elide_core::entity::LabelRef
10278
+ * [`Predicate::LabelInGroup`]: predicate::Predicate::LabelInGroup
10279
+ */
10280
+ groups?: components["schemas"]["LabelGroup"][];
9934
10281
  /**
9935
10282
  * Format: uuid
9936
10283
  * @description Stable identifier. UUIDv7 recommended (time-ordered);
9937
10284
  * customer-supplied so re-submissions carry the same id.
9938
10285
  * Engine stamps this into the redaction event's
9939
- * [`Attribution::policy_id`] so reviewers can find this
9940
- * policy from any redaction it drove.
10286
+ * [`Attribution::name`] so reviewers can find this policy
10287
+ * from any redaction it drove.
9941
10288
  *
9942
- * [`Attribution::policy_id`]: elide_core::entity::provenance::Attribution::policy_id
10289
+ * [`Attribution::name`]: elide_core::entity::provenance::Attribution::name
9943
10290
  */
9944
10291
  id: string;
9945
10292
  /**
9946
- * @description Vocabulary the policy operates over. Engine unions every
9947
- * submitted policy's `labels` into a per-request
10293
+ * @description Vocabulary the policy operates over: builtins picked by
10294
+ * name plus caller-authored custom label schemas. Engine
10295
+ * unions every submitted policy's `labels` into a per-request
9948
10296
  * [`LabelCatalog`] used to drive recognizer dispatch and
9949
10297
  * tag-based [`Predicate::TagOneOf`] matching.
9950
10298
  *
9951
10299
  * [`LabelCatalog`]: elide_core::entity::LabelCatalog
9952
10300
  * [`Predicate::TagOneOf`]: predicate::Predicate::TagOneOf
9953
10301
  */
9954
- labels?: components["schemas"]["Label"][];
10302
+ labels?: components["schemas"]["Labels"];
9955
10303
  /** @description Human-readable name. Display-only. Does not key anything. */
9956
10304
  name: string;
9957
10305
  /** @description Lifecycle rules for content under this policy. */
@@ -9978,41 +10326,16 @@ interface components {
9978
10326
  policySlug: string;
9979
10327
  };
9980
10328
  /**
9981
- * @description One rule inside a [`PolicyDefinition`]. Identity is the UUID; `name` /
9982
- * `description` are display-only.
10329
+ * @description One rule inside a [`PolicyDefinition`]. Identity is the UUID;
10330
+ * `name` / `description` are display-only.
10331
+ *
10332
+ * Untagged on the wire: distinguished by the presence of
10333
+ * `predicate` (predicated) vs. `operators` (table). Existing
10334
+ * JSON keeps working.
9983
10335
  *
9984
10336
  * [`PolicyDefinition`]: super::PolicyDefinition
9985
10337
  */
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
- };
10338
+ PolicyRule: components["schemas"]["PredicatedRule"] | components["schemas"]["TableRule"];
10016
10339
  /**
10017
10340
  * @description Lightweight policy view for lists.
10018
10341
  *
@@ -10060,6 +10383,45 @@ interface components {
10060
10383
  */
10061
10384
  total?: number;
10062
10385
  };
10386
+ /**
10387
+ * @description A regulatory posture this crate ships a [`Template`] for.
10388
+ *
10389
+ * Serialises as an internally-tagged object under `kind`,
10390
+ * matching the house pattern for option-bearing enums
10391
+ * (`Predicate`, `TextRedaction`, `AnyRedaction`). A caller
10392
+ * wire-picks a template as
10393
+ * `{"kind": "hipaa_safe_harbor"}` or, for variants with
10394
+ * operator options,
10395
+ * `{"kind": "pci_dss_pan", "render": "hmac_sha256"}`.
10396
+ */
10397
+ PolicyTemplate: {
10398
+ /** @constant */
10399
+ kind: "hipaa_deidentification";
10400
+ /**
10401
+ * @description Which §164.514 method to apply. See [`HipaaDeidMethod`]
10402
+ * for the tradeoff.
10403
+ */
10404
+ method: components["schemas"]["HipaaDeidMethod"];
10405
+ } | {
10406
+ /** @constant */
10407
+ kind: "gdpr_article9";
10408
+ /**
10409
+ * @description Which operator to apply to Article 9 matches. See
10410
+ * [`GdprArticle9Treatment`] for the tradeoff.
10411
+ */
10412
+ treatment: components["schemas"]["GdprArticle9Treatment"];
10413
+ } | {
10414
+ /** @constant */
10415
+ kind: "pci_dss";
10416
+ /**
10417
+ * @description Which DSS subsection this template addresses. See
10418
+ * [`PciDssPart`] for the shipped subsections.
10419
+ */
10420
+ part: components["schemas"]["PciDssPart"];
10421
+ } | {
10422
+ /** @constant */
10423
+ kind: "ccpa";
10424
+ };
10063
10425
  /**
10064
10426
  * @description Closed polygon, given by its ordered vertices.
10065
10427
  *
@@ -10085,12 +10447,21 @@ interface components {
10085
10447
  /** @constant */
10086
10448
  kind: "labelOneOf";
10087
10449
  /** @description Allowed labels. */
10088
- labels: string[];
10450
+ labels: components["schemas"]["LabelRef"][];
10089
10451
  } | {
10090
10452
  /** @constant */
10091
10453
  kind: "tagOneOf";
10092
10454
  /** @description Allowed tags. */
10093
10455
  tags: string[];
10456
+ } | {
10457
+ /**
10458
+ * @description Name of the [`LabelGroup`] to match against.
10459
+ *
10460
+ * [`LabelGroup`]: super::LabelGroup
10461
+ */
10462
+ group: string;
10463
+ /** @constant */
10464
+ kind: "labelInGroup";
10094
10465
  } | {
10095
10466
  /** @description Cluster id to match. */
10096
10467
  coref: string;
@@ -10112,6 +10483,31 @@ interface components {
10112
10483
  /** @description Negated predicate. */
10113
10484
  not: components["schemas"]["Predicate"];
10114
10485
  };
10486
+ /** @description Predicate-gated rule: one predicate, one action. */
10487
+ PredicatedRule: {
10488
+ /**
10489
+ * @description Per-modality redaction operators applied when the
10490
+ * predicate matches. Modalities the rule doesn't cover fall
10491
+ * through to the policy fallback (or the next policy in the
10492
+ * chain).
10493
+ */
10494
+ action: components["schemas"]["ModalityRedactions"];
10495
+ /** @description Optional description for reviewers. */
10496
+ description?: string;
10497
+ /**
10498
+ * Format: uuid
10499
+ * @description Stable identifier. UUIDv7 recommended.
10500
+ */
10501
+ id: string;
10502
+ /** @description Human-readable name. Display-only. */
10503
+ name: string;
10504
+ /**
10505
+ * @description Entity-level predicate that decides whether the rule fires
10506
+ * on a given recognised entity. Composable; see
10507
+ * [`Predicate`] for the full grammar.
10508
+ */
10509
+ predicate: components["schemas"]["Predicate"];
10510
+ };
10115
10511
  /**
10116
10512
  * @description How to pick recognizers out of a deployment-configured lineup.
10117
10513
  *
@@ -10150,38 +10546,6 @@ interface components {
10150
10546
  /** Format: uint */
10151
10547
  start: number;
10152
10548
  };
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
10549
  /**
10186
10550
  * @description Recognizer slots an analyzer can fill.
10187
10551
  *
@@ -10255,6 +10619,38 @@ interface components {
10255
10619
  };
10256
10620
  /** @description What class of data a retention policy applies to. */
10257
10621
  RetentionScope: "original_content" | "redacted_output" | "audit_logs";
10622
+ /**
10623
+ * @description A reviewer-supplied redaction override with the policy
10624
+ * authority it draws from.
10625
+ *
10626
+ * The `policy_id` isn't just for audit — it also picks which
10627
+ * per-policy pseudonym vault and per-policy [`KeyProvider`] the
10628
+ * override's operator resolves against, so an override using
10629
+ * [`Pseudonymize`] or [`HmacHash`] stays consistent with the
10630
+ * authoring policy's other rules.
10631
+ *
10632
+ * [`KeyProvider`]: elide::redaction::operators::KeyProvider
10633
+ * [`Pseudonymize`]: elide::redaction::operators::Pseudonymize
10634
+ * [`HmacHash`]: elide::redaction::operators::HmacHash
10635
+ */
10636
+ Review: {
10637
+ /**
10638
+ * @description The per-modality redaction operators to run for this
10639
+ * entity. Overrides whatever the policy set would have
10640
+ * picked for the same entity.
10641
+ */
10642
+ action: components["schemas"]["ModalityRedactions"];
10643
+ /**
10644
+ * Format: uuid
10645
+ * @description The policy whose authority the reviewer exercises. Must
10646
+ * match the `id` of a [`PolicyDefinition`] submitted with
10647
+ * the anonymize request. The audit event stamps this UUID
10648
+ * as the attribution `name`.
10649
+ *
10650
+ * [`PolicyDefinition`]: nvisy_schema::policy::PolicyDefinition
10651
+ */
10652
+ policyId: string;
10653
+ };
10258
10654
  /**
10259
10655
  * @description A serializable summary of *which selection rule* bound an operator to an
10260
10656
  * entity — the automatic "why" behind a redaction.
@@ -10322,7 +10718,7 @@ interface components {
10322
10718
  * analyzer, which borrows it into a fresh [`RecognizerContext`] per
10323
10719
  * payload. It holds only what the *caller* asserts about the analysis as a
10324
10720
  * whole — languages, jurisdictions, document labels, the target catalog, a
10325
- * correlation id — none of which depends on the medium, so one `Scope`
10721
+ * correlation id — none of which depends on the medium, so one [`Scope`]
10326
10722
  * drives a text, image, or audio analysis alike.
10327
10723
  *
10328
10724
  * Per-medium regions (caller-supplied inclusions and exclusions, which are
@@ -10332,40 +10728,42 @@ interface components {
10332
10728
  *
10333
10729
  * [`RecognizerContext`]: super::RecognizerContext
10334
10730
  * [`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.
10731
+ * Free-form, caller-asserted request context: the *document* it is about and
10732
+ * the *request* driving it.
10733
+ *
10734
+ * Three axes of opaque classification strings elide neither ships nor
10735
+ * interprets a downstream policy layer chooses what `"medical"` or
10736
+ * `"fraud_detection"` or `"auditor"` mean. They are read in two places: a
10737
+ * recognizer may bias its detection on them (the LLM prompt lists them so the
10738
+ * model attends to the right terms), and a scope-aware operator predicate may
10739
+ * branch on them at selection time (redact the same document differently per
10740
+ * [`audience`]).
10741
+ *
10742
+ * - [`tags`] classify the *document* (`"medical"`, `"gdpr-request"`).
10743
+ * - [`purpose`] is why the request exists (`"fraud_detection"`).
10744
+ * - [`audience`] is who the redacted output is for (`"support_agent"`,
10745
+ * `"auditor"`) — the axis PCI-style "same document, two masks" branches on.
10746
+ *
10747
+ * [`tags`]: Self::tags
10748
+ * [`purpose`]: Self::purpose
10749
+ * [`audience`]: Self::audience
10750
+ */
10751
+ ScopeMetadata: {
10752
+ /**
10753
+ * @description Who the redacted output is for (e.g. `"support_agent"`, `"auditor"`).
10754
+ * The axis a per-audience redaction branches on: one detected document,
10755
+ * selected differently per audience. May hold several.
10360
10756
  * @default []
10361
10757
  */
10362
- countries: components["schemas"]["CountryCode"][];
10758
+ audience: string[];
10363
10759
  /**
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 []
10760
+ * @description The caller-asserted business purpose driving this request (e.g.
10761
+ * `"fraud_detection"`, `"gdpr_erasure_request"`). A scope-aware operator
10762
+ * predicate may skip or swap a rule based on it; a recognizer may bias
10763
+ * detection on it. `None` when the caller asserts no purpose.
10764
+ * @default null
10367
10765
  */
10368
- languages: components["schemas"]["Languages"];
10766
+ purpose: string;
10369
10767
  /**
10370
10768
  * @description Document-level classification tags (e.g. `"medical"`,
10371
10769
  * `"gdpr-request"`). Recognizers may use these to bias their behavior
@@ -10373,9 +10771,9 @@ interface components {
10373
10771
  *
10374
10772
  * Named `tags`, not `labels`, to keep "label" reserved for the entity
10375
10773
  * taxonomy ([`LabelRef`]/[`LabelCatalog`]): these classify the
10376
- * *document*, whereas [`catalog`] names the entity *types* to emit.
10774
+ * *document*, whereas the scope's catalog names the entity *types* to
10775
+ * emit.
10377
10776
  *
10378
- * [`catalog`]: Self::catalog
10379
10777
  * [`LabelRef`]: crate::entity::LabelRef
10380
10778
  * [`LabelCatalog`]: crate::entity::LabelCatalog
10381
10779
  * @default []
@@ -10385,10 +10783,12 @@ interface components {
10385
10783
  /**
10386
10784
  * @description Caller-asserted scope for one request.
10387
10785
  *
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.
10786
+ * A narrower wire projection of `elide::recognition::Scope`:
10787
+ * `languages` and `countries` (typed, elide-native), plus
10788
+ * elide's [`ScopeMetadata`] block for free-form classification
10789
+ * strings (`tags`, `purpose`, `audience`). The engine assembles
10790
+ * this plus a server-minted `correlation_id` and a policy-derived
10791
+ * label catalog into the orchestrator's `Scope` at compile time.
10392
10792
  */
10393
10793
  ScopeParams: {
10394
10794
  /**
@@ -10401,17 +10801,6 @@ interface components {
10401
10801
  * jurisdiction don't lose detections.
10402
10802
  */
10403
10803
  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
10804
  /**
10416
10805
  * @description Caller-asserted languages for the analysis.
10417
10806
  *
@@ -10421,20 +10810,22 @@ interface components {
10421
10810
  */
10422
10811
  languages: components["schemas"]["Languages"];
10423
10812
  /**
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
10813
+ * @description Free-form request context: document tags, request purpose,
10814
+ * output audience. See elide's [`ScopeMetadata`].
10435
10815
  */
10436
- tags?: string[];
10816
+ metadata?: components["schemas"]["ScopeMetadata"];
10437
10817
  };
10818
+ /**
10819
+ * @description Which SHA-2 variant a hashing operator uses.
10820
+ *
10821
+ * Shared by [`Sha2Hash`] (unkeyed digest) and [`HmacHash`] (keyed HMAC):
10822
+ * both pick the same underlying width, so the choice lives in one enum
10823
+ * rather than one per operator.
10824
+ *
10825
+ * [`Sha2Hash`]: super::Sha2Hash
10826
+ * [`HmacHash`]: super::HmacHash
10827
+ */
10828
+ Sha2Algorithm: "sha256" | "sha512";
10438
10829
  /** @description Request payload for signup. */
10439
10830
  Signup: {
10440
10831
  /** @description Optional display name of the account. */
@@ -10464,6 +10855,40 @@ interface components {
10464
10855
  };
10465
10856
  /** @description Sort order direction. */
10466
10857
  SortOrder: "asc" | "desc";
10858
+ /**
10859
+ * @description A fully-typed object-store connection configuration.
10860
+ *
10861
+ * The `provider` tag selects the variant and thereby the credential shape, so
10862
+ * an S3 connection cannot carry Azure credentials. Each variant carries a
10863
+ * shared optional `root_path` and a nested `credentials` object, giving a wire
10864
+ * shape like
10865
+ * `{ "provider": "s3", "rootPath": "in/", "credentials": { "bucket": "b", "accessKeyId": "..." } }`.
10866
+ *
10867
+ * Secrets are masked in [`Debug`]; serialization exists only to persist the
10868
+ * config encrypted at rest, never to return it in API responses.
10869
+ */
10870
+ StorageConfig: {
10871
+ /** @description S3 credentials. */
10872
+ credentials: components["schemas"]["S3Credentials"];
10873
+ /** @constant */
10874
+ provider: "s3";
10875
+ /** @description Optional root prefix within the bucket; keys resolve relative to it. */
10876
+ rootPath?: string;
10877
+ } | {
10878
+ /** @description Azure credentials. */
10879
+ credentials: components["schemas"]["AzureCredentials"];
10880
+ /** @constant */
10881
+ provider: "azure";
10882
+ /** @description Optional root prefix within the container; keys resolve relative to it. */
10883
+ rootPath?: string;
10884
+ } | {
10885
+ /** @description GCS credentials. */
10886
+ credentials: components["schemas"]["GcsCredentials"];
10887
+ /** @constant */
10888
+ provider: "gcs";
10889
+ /** @description Optional root prefix within the bucket; keys resolve relative to it. */
10890
+ rootPath?: string;
10891
+ };
10467
10892
  /**
10468
10893
  * @description Request payload to trigger a connection sync.
10469
10894
  *
@@ -10497,6 +10922,40 @@ interface components {
10497
10922
  * the connection into the workspace; `Export` pushes workspace files out.
10498
10923
  */
10499
10924
  SyncMode: "import" | "export";
10925
+ /** @description A connection's sync configuration, present only for sync-capable connections. */
10926
+ SyncSchedule: {
10927
+ /** @description How an import reconciles files whose source object was deleted. */
10928
+ deletionPolicy: components["schemas"]["SyncDeletionPolicy"];
10929
+ /**
10930
+ * Format: date-time
10931
+ * @description When the connection last synced successfully, if ever.
10932
+ */
10933
+ lastSynced?: string;
10934
+ /** @description Cron expression for scheduled imports, if configured. */
10935
+ scheduleCron?: string;
10936
+ /** @description Whether the connection imports data in or exports data out. */
10937
+ syncMode: components["schemas"]["SyncMode"];
10938
+ };
10939
+ /**
10940
+ * @description Sync configuration for a sync-capable connection (object stores).
10941
+ *
10942
+ * Only meaningful for connections whose provider supports syncing; omitted for
10943
+ * connections that do not (e.g. LLM inference).
10944
+ */
10945
+ SyncScheduleInput: {
10946
+ /**
10947
+ * @description How an import reconciles files whose source object was deleted.
10948
+ * @default ignore
10949
+ */
10950
+ deletionPolicy: components["schemas"]["SyncDeletionPolicy"];
10951
+ /** @description Cron expression for scheduled imports; omit for manual-only. */
10952
+ scheduleCron?: string;
10953
+ /**
10954
+ * @description Whether the connection imports data in or exports data out.
10955
+ * @default import
10956
+ */
10957
+ syncMode: components["schemas"]["SyncMode"];
10958
+ };
10500
10959
  /**
10501
10960
  * @description Defines the execution status of a connection sync run.
10502
10961
  *
@@ -10511,6 +10970,42 @@ interface components {
10511
10970
  * to track whether a run was manually triggered, scheduled, or triggered by a webhook.
10512
10971
  */
10513
10972
  SyncTriggerType: "manual" | "scheduled" | "webhook";
10973
+ /**
10974
+ * @description Per-label table rule: N labels, N actions, one shared identity.
10975
+ *
10976
+ * Each entry compiles to an elide `Rule::label` attachment under
10977
+ * this rule's shared UUID / name / description — so the audit
10978
+ * trail records "rule X fired" without exposing the fan-out to
10979
+ * the reviewer. Meant for templates where a single policy intent
10980
+ * (e.g. "HIPAA Safe Harbor identifiers") routes different labels
10981
+ * to different operators.
10982
+ */
10983
+ TableRule: {
10984
+ /** @description Optional description for reviewers. */
10985
+ description?: string;
10986
+ /**
10987
+ * Format: uuid
10988
+ * @description Stable identifier — shared by every entry the table
10989
+ * expands into. UUIDv7 recommended.
10990
+ */
10991
+ id: string;
10992
+ /** @description Human-readable name. Display-only. */
10993
+ name: string;
10994
+ /**
10995
+ * @description Per-label operator dispatch. Every entity whose label
10996
+ * matches a listed [`LabelRef`] attaches the paired
10997
+ * [`ModalityRedactions`]. Labels absent from the list are not
10998
+ * affected by this rule and fall through to the next rule or
10999
+ * the policy fallback.
11000
+ *
11001
+ * A [`Vec`] rather than a map keeps the author-supplied
11002
+ * order — elide's anonymizer is first-match-wins, so wire
11003
+ * order determines which entry fires when two match the
11004
+ * same entity. Duplicate labels are the caller's bug; the
11005
+ * engine attaches every entry, and the first one wins.
11006
+ */
11007
+ operators: components["schemas"]["LabelEntry"][];
11008
+ };
10514
11009
  /**
10515
11010
  * @description Detected piece of sensitive information within some medium.
10516
11011
  *
@@ -10596,12 +11091,17 @@ interface components {
10596
11091
  /** @description The elide entity, as recognition produced it. */
10597
11092
  entity: components["schemas"]["TabularEntity"];
10598
11093
  /**
10599
- * @description Reviewer-supplied override.
11094
+ * @description Reviewer-supplied redaction override.
10600
11095
  *
10601
- * `None` means "use the policy's decision"; `Some(action)`
10602
- * overrides it for this specific entity at apply time.
11096
+ * `None` means "use the matching policy rule's decision";
11097
+ * `Some(...)` overrides that rule for this specific entity
11098
+ * at apply time. Reviewer overrides take precedence over
11099
+ * every policy rule and inherit the authority of the
11100
+ * [`Review::policy_id`] they name — the audit event's
11101
+ * attribution stamps that policy so the trail names the
11102
+ * authority under which the override fired.
10603
11103
  */
10604
- reviewerOverride?: components["schemas"]["ModalityRedactions"];
11104
+ review?: components["schemas"]["Review"];
10605
11105
  };
10606
11106
  /**
10607
11107
  * @description One thing that happened to an entity, with its effect on confidence.
@@ -10853,6 +11353,57 @@ interface components {
10853
11353
  /** @constant */
10854
11354
  kind: "drop_column";
10855
11355
  };
11356
+ /**
11357
+ * @description Fallback operator that runs when a declinable primary
11358
+ * ([`TextRedaction::Clamp`], [`TextRedaction::GeneralizeDate`])
11359
+ * doesn't apply to the entity value.
11360
+ *
11361
+ * The four operators that always apply and produce a deterministic
11362
+ * output without needing engine-side infrastructure (no key
11363
+ * provider, no vault). Enough to satisfy every regulatory
11364
+ * pattern I know: `Clamp/GeneralizeDate → Erase` (the safe
11365
+ * default), `→ Replace { template }` (an explicit placeholder),
11366
+ * or `→ Mask` / `→ Keep` on the rare occasion those fit.
11367
+ *
11368
+ * Absent from the primary's spec, elide's baked-in default is
11369
+ * [`Erase`] — a bare [`TextRedaction::Clamp`] without a `fallback`
11370
+ * erases values that aren't numeric.
11371
+ *
11372
+ * [`Erase`]: TerminalFallback::Erase
11373
+ */
11374
+ TerminalFallback: {
11375
+ /** @constant */
11376
+ kind: "erase";
11377
+ } | {
11378
+ /** @constant */
11379
+ kind: "keep";
11380
+ } | {
11381
+ /** @constant */
11382
+ kind: "replace";
11383
+ /**
11384
+ * @description Template string. Default `[{label}]`.
11385
+ * @default [{label}]
11386
+ */
11387
+ template: string;
11388
+ } | {
11389
+ /**
11390
+ * Format: uint
11391
+ * @description Characters to leave unmasked at the start of the value.
11392
+ */
11393
+ keep_prefix?: number;
11394
+ /**
11395
+ * Format: uint
11396
+ * @description Characters to leave unmasked at the end of the value.
11397
+ */
11398
+ keep_suffix?: number;
11399
+ /** @constant */
11400
+ kind: "mask";
11401
+ /**
11402
+ * @description The character that replaces masked positions.
11403
+ * @default *
11404
+ */
11405
+ mask_char: string;
11406
+ };
10856
11407
  /** @description Request payload for testing a webhook. */
10857
11408
  TestWebhook: {
10858
11409
  /**
@@ -10957,12 +11508,17 @@ interface components {
10957
11508
  /** @description The elide entity, as recognition produced it. */
10958
11509
  entity: components["schemas"]["TextEntity"];
10959
11510
  /**
10960
- * @description Reviewer-supplied override.
11511
+ * @description Reviewer-supplied redaction override.
10961
11512
  *
10962
- * `None` means "use the policy's decision"; `Some(action)`
10963
- * overrides it for this specific entity at apply time.
11513
+ * `None` means "use the matching policy rule's decision";
11514
+ * `Some(...)` overrides that rule for this specific entity
11515
+ * at apply time. Reviewer overrides take precedence over
11516
+ * every policy rule and inherit the authority of the
11517
+ * [`Review::policy_id`] they name — the audit event's
11518
+ * attribution stamps that policy so the trail names the
11519
+ * authority under which the override fired.
10964
11520
  */
10965
- reviewerOverride?: components["schemas"]["ModalityRedactions"];
11521
+ review?: components["schemas"]["Review"];
10966
11522
  };
10967
11523
  /**
10968
11524
  * @description One thing that happened to an entity, with its effect on confidence.
@@ -11214,7 +11770,7 @@ interface components {
11214
11770
  * @description SHA-256 (default) or SHA-512.
11215
11771
  * @default sha256
11216
11772
  */
11217
- algorithm: components["schemas"]["HashAlgorithm"];
11773
+ algorithm: components["schemas"]["Sha2Algorithm"];
11218
11774
  /** @constant */
11219
11775
  kind: "hash";
11220
11776
  /** @description Salt prepended to the value before hashing. */
@@ -11250,6 +11806,75 @@ interface components {
11250
11806
  } | {
11251
11807
  /** @constant */
11252
11808
  kind: "encrypt";
11809
+ } | {
11810
+ /**
11811
+ * @description HMAC-SHA-256 (default) or HMAC-SHA-512.
11812
+ * @default sha256
11813
+ */
11814
+ algorithm: components["schemas"]["Sha2Algorithm"];
11815
+ /** @constant */
11816
+ kind: "hmac_hash";
11817
+ } | {
11818
+ /**
11819
+ * Format: uint
11820
+ * @description Characters to keep at the start of the value.
11821
+ */
11822
+ keep_prefix?: number;
11823
+ /**
11824
+ * Format: uint
11825
+ * @description Characters to keep at the end of the value.
11826
+ */
11827
+ keep_suffix?: number;
11828
+ /** @constant */
11829
+ kind: "truncate";
11830
+ } | {
11831
+ /**
11832
+ * Format: double
11833
+ * @description Threshold at or above which values collapse to
11834
+ * `ceiling_bucket`. `None` disables the ceiling.
11835
+ */
11836
+ ceiling?: number;
11837
+ /**
11838
+ * @description Bucket label for values at or above `ceiling`. Required
11839
+ * when `ceiling` is set; ignored otherwise.
11840
+ */
11841
+ ceiling_bucket?: components["schemas"]["ClampBucket"];
11842
+ /**
11843
+ * @description Operator that runs when the entity value isn't a
11844
+ * finite number. `None` erases (elide's default).
11845
+ */
11846
+ fallback?: components["schemas"]["TerminalFallback"];
11847
+ /**
11848
+ * Format: double
11849
+ * @description Threshold at or below which values collapse to
11850
+ * `floor_bucket`. `None` disables the floor.
11851
+ */
11852
+ floor?: number;
11853
+ /**
11854
+ * @description Bucket label for values at or below `floor`. Required
11855
+ * when `floor` is set; ignored otherwise.
11856
+ */
11857
+ floor_bucket?: components["schemas"]["ClampBucket"];
11858
+ /** @constant */
11859
+ kind: "clamp";
11860
+ } | {
11861
+ /**
11862
+ * @description Operator that runs when the entity value isn't a
11863
+ * parseable date. `None` erases (elide's default).
11864
+ */
11865
+ fallback?: components["schemas"]["TerminalFallback"];
11866
+ /**
11867
+ * @description Coarseness of the output. Default `Year`.
11868
+ * @default year
11869
+ */
11870
+ granularity: components["schemas"]["DateGranularity"];
11871
+ /** @constant */
11872
+ kind: "generalize_date";
11873
+ /**
11874
+ * @description Which input convention to accept. Default `Iso`.
11875
+ * @default iso
11876
+ */
11877
+ style: components["schemas"]["DateStyle"];
11253
11878
  };
11254
11879
  /**
11255
11880
  * @description How the structural reconciler picks a winner across labels.
@@ -11339,23 +11964,18 @@ interface components {
11339
11964
  * config (and, with it, the provider). Omit to leave it unchanged.
11340
11965
  */
11341
11966
  config?: components["schemas"]["ConnectionConfig"];
11342
- /** @description How an import reconciles files whose source object was deleted. */
11343
- deletionPolicy?: components["schemas"]["SyncDeletionPolicy"];
11344
11967
  /** @description Human-readable connection display name. */
11345
11968
  displayName?: string;
11346
11969
  /**
11347
- * @description Whether the connection is enabled for syncing. `false` disables it
11348
- * (pausing scheduled syncs and rejecting manual ones); omit to leave
11349
- * unchanged.
11970
+ * @description Whether the connection is enabled. `false` disables it (pausing scheduled
11971
+ * syncs and rejecting manual ones); omit to leave unchanged.
11350
11972
  */
11351
11973
  isActive?: boolean;
11352
11974
  /**
11353
- * @description Cron expression for scheduled imports. Omit to leave unchanged; send
11354
- * `null` to clear it (make the connection manual-only).
11975
+ * @description Sync configuration. Applies only to sync-capable providers. Omit to leave
11976
+ * unchanged.
11355
11977
  */
11356
- scheduleCron?: string;
11357
- /** @description Whether the connection imports data in or exports data out. */
11358
- syncMode?: components["schemas"]["SyncMode"];
11978
+ sync?: components["schemas"]["SyncScheduleInput"];
11359
11979
  };
11360
11980
  /** @description Request to update file metadata. */
11361
11981
  UpdateFile: {
@@ -11578,7 +12198,7 @@ interface components {
11578
12198
  * This enumeration corresponds to the `WEBHOOK_EVENT` PostgreSQL enum and is used
11579
12199
  * to configure which events a webhook should receive notifications for.
11580
12200
  */
11581
- WebhookEvent: "file:created" | "file:updated" | "file:deleted" | "member:added" | "member:deleted" | "member:updated" | "connection:created" | "connection:updated" | "connection:deleted" | "connection:synced" | "connection:desynced";
12201
+ 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
12202
  /** @description Opaque whk identifier (whk_<uuid>). */
11583
12203
  WebhookId: string;
11584
12204
  /**
@@ -11712,133 +12332,193 @@ interface components {
11712
12332
  }
11713
12333
  //#endregion
11714
12334
  //#region src/datatypes/account.d.ts
11715
- type Schemas$16 = components["schemas"];
11716
- type Account = Schemas$16["Account"];
11717
- type PublicAccount = Schemas$16["PublicAccount"];
11718
- type UpdateAccount = Schemas$16["UpdateAccount"];
11719
- type AccountRef = Schemas$16["AccountRef"];
12335
+ type Schemas$17 = components["schemas"];
12336
+ type Account = Schemas$17["Account"];
12337
+ type PublicAccount = Schemas$17["PublicAccount"];
12338
+ type UpdateAccount = Schemas$17["UpdateAccount"];
12339
+ type AccountRef = Schemas$17["AccountRef"];
11720
12340
  //#endregion
11721
12341
  //#region src/datatypes/activity.d.ts
11722
- type Schemas$15 = components["schemas"];
11723
- type Activity = Schemas$15["Activity"];
11724
- type ActivityType = Schemas$15["ActivityType"];
11725
- type ActivityPage = Schemas$15["ActivityPage"];
12342
+ type Schemas$16 = components["schemas"];
12343
+ type Activity = Schemas$16["Activity"];
12344
+ type ActivityType = Schemas$16["ActivityType"];
12345
+ type ActivityPage = Schemas$16["ActivityPage"];
11726
12346
  //#endregion
11727
12347
  //#region src/datatypes/api-token.d.ts
11728
- type Schemas$14 = components["schemas"];
11729
- type ApiToken = Schemas$14["ApiToken"];
11730
- type ApiTokenWithJWT = Schemas$14["ApiTokenWithJWT"];
11731
- type ApiTokenType = Schemas$14["ApiTokenType"];
11732
- type CreateApiToken = Schemas$14["CreateApiToken"];
11733
- type UpdateApiToken = Schemas$14["UpdateApiToken"];
11734
- type TokenExpiration = Schemas$14["TokenExpiration"];
11735
- type ApiTokenPage = Schemas$14["ApiTokenPage"];
12348
+ type Schemas$15 = components["schemas"];
12349
+ type ApiToken = Schemas$15["ApiToken"];
12350
+ type ApiTokenWithJWT = Schemas$15["ApiTokenWithJWT"];
12351
+ type ApiTokenType = Schemas$15["ApiTokenType"];
12352
+ type CreateApiToken = Schemas$15["CreateApiToken"];
12353
+ type UpdateApiToken = Schemas$15["UpdateApiToken"];
12354
+ type TokenExpiration = Schemas$15["TokenExpiration"];
12355
+ type ApiTokenPage = Schemas$15["ApiTokenPage"];
11736
12356
  //#endregion
11737
12357
  //#region src/datatypes/auth.d.ts
11738
- type Schemas$13 = components["schemas"];
11739
- type Login = Schemas$13["Login"];
11740
- type Signup = Schemas$13["Signup"];
11741
- type AuthToken = Schemas$13["AuthToken"];
12358
+ type Schemas$14 = components["schemas"];
12359
+ type Login = Schemas$14["Login"];
12360
+ type Signup = Schemas$14["Signup"];
12361
+ type AuthToken = Schemas$14["AuthToken"];
11742
12362
  //#endregion
11743
12363
  //#region src/datatypes/connection.d.ts
11744
- type Schemas$12 = components["schemas"];
11745
- type Connection = Schemas$12["Connection"];
11746
- type CreateConnection = Schemas$12["CreateConnection"];
11747
- type UpdateConnection = Schemas$12["UpdateConnection"];
11748
- type ConnectionsQuery = Schemas$12["ConnectionsQuery"];
11749
- type ConnectionPage = Schemas$12["ConnectionPage"];
11750
- type SyncConnection = Schemas$12["SyncConnection"];
11751
- type ConnectionSync = Schemas$12["ConnectionSync"];
11752
- type ConnectionSyncPage = Schemas$12["ConnectionSyncPage"];
11753
- type ConnectionVerification = Schemas$12["ConnectionVerification"];
11754
- type SyncMode = Schemas$12["SyncMode"];
11755
- type SyncStatus = Schemas$12["SyncStatus"];
11756
- type SyncTriggerType = Schemas$12["SyncTriggerType"];
11757
- type SyncDeletionPolicy = Schemas$12["SyncDeletionPolicy"];
11758
- type ConnectionConfig = Schemas$12["ConnectionConfig"];
11759
- type S3Credentials = Schemas$12["S3Credentials"];
11760
- type AzureCredentials = Schemas$12["AzureCredentials"];
11761
- type GcsCredentials = Schemas$12["GcsCredentials"];
12364
+ type Schemas$13 = components["schemas"];
12365
+ type Connection = Schemas$13["Connection"];
12366
+ type CreateConnection = Schemas$13["CreateConnection"];
12367
+ type UpdateConnection = Schemas$13["UpdateConnection"];
12368
+ type ConnectionsQuery = Schemas$13["ConnectionsQuery"];
12369
+ type ConnectionPage = Schemas$13["ConnectionPage"];
12370
+ type SyncConnection = Schemas$13["SyncConnection"];
12371
+ type ConnectionSync = Schemas$13["ConnectionSync"];
12372
+ type ConnectionSyncPage = Schemas$13["ConnectionSyncPage"];
12373
+ type ConnectionVerification = Schemas$13["ConnectionVerification"];
12374
+ type SyncMode = Schemas$13["SyncMode"];
12375
+ type SyncStatus = Schemas$13["SyncStatus"];
12376
+ type SyncTriggerType = Schemas$13["SyncTriggerType"];
12377
+ type SyncDeletionPolicy = Schemas$13["SyncDeletionPolicy"];
12378
+ type ConnectionConfig = Schemas$13["ConnectionConfig"];
12379
+ type StorageConfig = Schemas$13["StorageConfig"];
12380
+ type S3Credentials = Schemas$13["S3Credentials"];
12381
+ type AzureCredentials = Schemas$13["AzureCredentials"];
12382
+ type GcsCredentials = Schemas$13["GcsCredentials"];
12383
+ type LlmConfig = Schemas$13["LlmConfig"];
12384
+ type AnthropicCredentials = Schemas$13["AnthropicCredentials"];
12385
+ type OpenAiCredentials = Schemas$13["OpenAiCredentials"];
12386
+ type SyncSchedule = Schemas$13["SyncSchedule"];
12387
+ type SyncScheduleInput = Schemas$13["SyncScheduleInput"];
11762
12388
  //#endregion
11763
12389
  //#region src/datatypes/error.d.ts
11764
- type Schemas$11 = components["schemas"];
11765
- type ErrorResponse = Schemas$11["ErrorResponse"];
11766
- type ValidationErrorDetail = Schemas$11["ValidationErrorDetail"];
12390
+ type Schemas$12 = components["schemas"];
12391
+ type ErrorResponse = Schemas$12["ErrorResponse"];
12392
+ type ValidationErrorDetail = Schemas$12["ValidationErrorDetail"];
11767
12393
  //#endregion
11768
12394
  //#region src/datatypes/file.d.ts
11769
- type Schemas$10 = components["schemas"];
11770
- type File = Schemas$10["File"];
11771
- type UpdateFile = Schemas$10["UpdateFile"];
11772
- type FileSource = Schemas$10["FileSource"];
11773
- type FormatToken = Schemas$10["FormatToken"];
11774
- type ModalityToken = Schemas$10["ModalityToken"];
11775
- type ListFiles = Schemas$10["ListFiles"];
11776
- type FilePage = Schemas$10["FilePage"];
12395
+ type Schemas$11 = components["schemas"];
12396
+ type File = Schemas$11["File"];
12397
+ type UpdateFile = Schemas$11["UpdateFile"];
12398
+ type FileSource = Schemas$11["FileSource"];
12399
+ type FormatToken = Schemas$11["FormatToken"];
12400
+ type ModalityToken = Schemas$11["ModalityToken"];
12401
+ type ListFiles = Schemas$11["ListFiles"];
12402
+ type FilePage = Schemas$11["FilePage"];
11777
12403
  //#endregion
11778
12404
  //#region src/datatypes/health.d.ts
11779
- type Schemas$9 = components["schemas"];
11780
- type Health = Schemas$9["Health"];
11781
- type HealthStatus = Schemas$9["HealthStatus"];
11782
- type ComponentHealth = Schemas$9["ComponentHealth"];
12405
+ type Schemas$10 = components["schemas"];
12406
+ type Health = Schemas$10["Health"];
12407
+ type HealthStatus = Schemas$10["HealthStatus"];
12408
+ type ComponentHealth = Schemas$10["ComponentHealth"];
11783
12409
  //#endregion
11784
12410
  //#region src/datatypes/invite.d.ts
11785
- type Schemas$8 = components["schemas"];
11786
- type Invite = Schemas$8["Invite"];
11787
- type InviteSent = Schemas$8["InviteSent"];
11788
- type CreateInvite = Schemas$8["CreateInvite"];
11789
- type ReplyInvite = Schemas$8["ReplyInvite"];
11790
- type GenerateInviteCode = Schemas$8["GenerateInviteCode"];
11791
- type InviteCode = Schemas$8["InviteCode"];
11792
- type InviteStatus = Schemas$8["InviteStatus"];
11793
- type InviteExpiration = Schemas$8["InviteExpiration"];
11794
- type ListInvites = Schemas$8["ListInvites"];
11795
- type InviteSortField = Schemas$8["InviteSortField"];
11796
- type SortOrder = Schemas$8["SortOrder"];
11797
- type InvitePreview = Schemas$8["InvitePreview"];
11798
- type InvitePage = Schemas$8["InvitePage"];
12411
+ type Schemas$9 = components["schemas"];
12412
+ type Invite = Schemas$9["Invite"];
12413
+ type InviteSent = Schemas$9["InviteSent"];
12414
+ type CreateInvite = Schemas$9["CreateInvite"];
12415
+ type ReplyInvite = Schemas$9["ReplyInvite"];
12416
+ type GenerateInviteCode = Schemas$9["GenerateInviteCode"];
12417
+ type InviteCode = Schemas$9["InviteCode"];
12418
+ type InviteStatus = Schemas$9["InviteStatus"];
12419
+ type InviteExpiration = Schemas$9["InviteExpiration"];
12420
+ type ListInvites = Schemas$9["ListInvites"];
12421
+ type InviteSortField = Schemas$9["InviteSortField"];
12422
+ type SortOrder = Schemas$9["SortOrder"];
12423
+ type InvitePreview = Schemas$9["InvitePreview"];
12424
+ type InvitePage = Schemas$9["InvitePage"];
11799
12425
  //#endregion
11800
12426
  //#region src/datatypes/member.d.ts
11801
- type Schemas$7 = components["schemas"];
11802
- type Member = Schemas$7["Member"];
11803
- type UpdateMember = Schemas$7["UpdateMember"];
11804
- type ListMembers = Schemas$7["ListMembers"];
11805
- type MemberSortField = Schemas$7["MemberSortField"];
11806
- type MemberPage = Schemas$7["MemberPage"];
12427
+ type Schemas$8 = components["schemas"];
12428
+ type Member = Schemas$8["Member"];
12429
+ type UpdateMember = Schemas$8["UpdateMember"];
12430
+ type ListMembers = Schemas$8["ListMembers"];
12431
+ type MemberSortField = Schemas$8["MemberSortField"];
12432
+ type MemberPage = Schemas$8["MemberPage"];
11807
12433
  //#endregion
11808
12434
  //#region src/datatypes/notification.d.ts
11809
- type Schemas$6 = components["schemas"];
11810
- type Notification = Schemas$6["Notification"];
11811
- type NotificationEvent = Schemas$6["NotificationEvent"];
11812
- type NotificationSettings = Schemas$6["NotificationSettings"];
11813
- type UpdateNotificationSettings = Schemas$6["UpdateNotificationSettings"];
11814
- type UnreadStatus = Schemas$6["UnreadStatus"];
11815
- type NotificationPage = Schemas$6["NotificationPage"];
12435
+ type Schemas$7 = components["schemas"];
12436
+ type Notification = Schemas$7["Notification"];
12437
+ type NotificationEvent = Schemas$7["NotificationEvent"];
12438
+ type NotificationSettings = Schemas$7["NotificationSettings"];
12439
+ type UpdateNotificationSettings = Schemas$7["UpdateNotificationSettings"];
12440
+ type UnreadStatus = Schemas$7["UnreadStatus"];
12441
+ type NotificationPage = Schemas$7["NotificationPage"];
11816
12442
  //#endregion
11817
12443
  //#region src/datatypes/pagination.d.ts
11818
- type Schemas$5 = components["schemas"];
11819
- type CursorPagination = Schemas$5["CursorPagination"];
12444
+ type Schemas$6 = components["schemas"];
12445
+ type CursorPagination = Schemas$6["CursorPagination"];
11820
12446
  //#endregion
11821
12447
  //#region src/datatypes/pipeline.d.ts
11822
- type Schemas$4 = components["schemas"];
11823
- type Pipeline = Schemas$4["Pipeline"];
11824
- type CreatePipeline = Schemas$4["CreatePipeline"];
11825
- type UpdatePipeline = Schemas$4["UpdatePipeline"];
11826
- type PipelineDefinition = Schemas$4["PipelineDefinition"];
11827
- type PipelineFilter = Schemas$4["PipelineFilter"];
11828
- type PipelineStatus = Schemas$4["PipelineStatus"];
11829
- type PipelineTriggerType = Schemas$4["PipelineTriggerType"];
11830
- type PipelineSummary = Schemas$4["PipelineSummary"];
11831
- type PipelineSummaryPage = Schemas$4["PipelineSummaryPage"];
12448
+ type Schemas$5 = components["schemas"];
12449
+ type Pipeline = Schemas$5["Pipeline"];
12450
+ type CreatePipeline = Schemas$5["CreatePipeline"];
12451
+ type UpdatePipeline = Schemas$5["UpdatePipeline"];
12452
+ type PipelineDefinition = Schemas$5["PipelineDefinition"];
12453
+ type PipelineFilter = Schemas$5["PipelineFilter"];
12454
+ type PipelineStatus = Schemas$5["PipelineStatus"];
12455
+ type PipelineTriggerType = Schemas$5["PipelineTriggerType"];
12456
+ type PipelineSummary = Schemas$5["PipelineSummary"];
12457
+ type PipelineSummaryPage = Schemas$5["PipelineSummaryPage"];
11832
12458
  //#endregion
11833
12459
  //#region src/datatypes/policy.d.ts
12460
+ type Schemas$4 = components["schemas"];
12461
+ type Policy = Schemas$4["Policy"];
12462
+ type PolicySummary = Schemas$4["PolicySummary"];
12463
+ type PolicySummaryPage = Schemas$4["PolicySummaryPage"];
12464
+ type PolicyDefinition = Schemas$4["PolicyDefinition"];
12465
+ type CreatePolicy = Schemas$4["CreatePolicy"];
12466
+ type UpdatePolicy = Schemas$4["UpdatePolicy"];
12467
+ type PolicyRule = Schemas$4["PolicyRule"];
12468
+ type PolicyTemplate = Schemas$4["PolicyTemplate"];
12469
+ type HipaaDeidMethod = Schemas$4["HipaaDeidMethod"];
12470
+ type GdprArticle9Treatment = Schemas$4["GdprArticle9Treatment"];
12471
+ type PciDssPart = Schemas$4["PciDssPart"];
12472
+ type PciPanRender = Schemas$4["PciPanRender"];
12473
+ type PredicatedRule = Schemas$4["PredicatedRule"];
12474
+ type TableRule = Schemas$4["TableRule"];
12475
+ type Predicate = Schemas$4["Predicate"];
12476
+ type DocumentPredicate = Schemas$4["DocumentPredicate"];
12477
+ type ModalityRedactions = Schemas$4["ModalityRedactions"];
12478
+ type TextRedaction = Schemas$4["TextRedaction"];
12479
+ type ImageRedaction = Schemas$4["ImageRedaction"];
12480
+ type AudioRedaction = Schemas$4["AudioRedaction"];
12481
+ type TabularRedaction = Schemas$4["TabularRedaction"];
12482
+ type RetentionPolicy = Schemas$4["RetentionPolicy"];
12483
+ type Retention = Schemas$4["Retention"];
12484
+ type RetentionScope = Schemas$4["RetentionScope"];
12485
+ type Labels = Schemas$4["Labels"];
12486
+ type LabelGroup = Schemas$4["LabelGroup"];
12487
+ type LabelEntry = Schemas$4["LabelEntry"];
12488
+ type LabelLocale = Schemas$4["LabelLocale"];
12489
+ type Label = Schemas$4["Label"];
12490
+ type LocalizedText = Schemas$4["LocalizedText"];
12491
+ type Color = Schemas$4["Color"];
12492
+ type Waveform = Schemas$4["Waveform"];
12493
+ type ClampBucket = Schemas$4["ClampBucket"];
12494
+ type ConfidenceThreshold = Schemas$4["ConfidenceThreshold"];
12495
+ type DateStyle = Schemas$4["DateStyle"];
12496
+ type DateGranularity = Schemas$4["DateGranularity"];
12497
+ type LanguageTag = Schemas$4["LanguageTag"];
12498
+ type Sha2Algorithm = Schemas$4["Sha2Algorithm"];
12499
+ type TerminalFallback = Schemas$4["TerminalFallback"];
12500
+ //#endregion
12501
+ //#region src/datatypes/recognizer.d.ts
11834
12502
  type Schemas$3 = components["schemas"];
11835
- type Policy = Schemas$3["Policy"];
11836
- type PolicySummary = Schemas$3["PolicySummary"];
11837
- type PolicySummaryPage = Schemas$3["PolicySummaryPage"];
11838
- type PolicyDefinition = Schemas$3["PolicyDefinition"];
11839
- type CreatePolicy = Schemas$3["CreatePolicy"];
11840
- type UpdatePolicy = Schemas$3["UpdatePolicy"];
11841
- type PolicyRule = Schemas$3["PolicyRule"];
12503
+ type RecognizerParams = Schemas$3["RecognizerParams"];
12504
+ type PatternRecognizerParams = Schemas$3["PatternRecognizerParams"];
12505
+ type ProviderSelection = Schemas$3["ProviderSelection"];
12506
+ type CustomPatternRule = Schemas$3["CustomPatternRule"];
12507
+ type CustomPatternVariant = Schemas$3["CustomPatternVariant"];
12508
+ type CustomPatternContext = Schemas$3["CustomPatternContext"];
12509
+ type CustomDictionary = Schemas$3["CustomDictionary"];
12510
+ type CustomDictionaryTerm = Schemas$3["CustomDictionaryTerm"];
12511
+ type PipelineDeduplication = Schemas$3["PipelineDeduplication"];
12512
+ type MergingStrategyParams = Schemas$3["MergingStrategyParams"];
12513
+ type TiebreakerParams = Schemas$3["TiebreakerParams"];
12514
+ type ScopeParams = Schemas$3["ScopeParams"];
12515
+ type ScopeMetadata = Schemas$3["ScopeMetadata"];
12516
+ type CountryCode = Schemas$3["CountryCode"];
12517
+ type Language = Schemas$3["Language"];
12518
+ type Languages = Schemas$3["Languages"];
12519
+ type LanguageSpan = Schemas$3["LanguageSpan"];
12520
+ type LanguageProvenance = Schemas$3["LanguageProvenance"];
12521
+ type Confidence = Schemas$3["Confidence"];
11842
12522
  //#endregion
11843
12523
  //#region src/datatypes/run.d.ts
11844
12524
  type Schemas$2 = components["schemas"];
@@ -11846,7 +12526,7 @@ type PipelineRun = Schemas$2["PipelineRun"];
11846
12526
  type CreatePipelineRun = Schemas$2["CreatePipelineRun"];
11847
12527
  type PipelineRunStatus = Schemas$2["PipelineRunStatus"];
11848
12528
  type PipelineRunPage = Schemas$2["PipelineRunPage"];
11849
- type AnalyzedDocument = Schemas$2["AnalyzedDocument"];
12529
+ type Audit = Schemas$2["Audit"];
11850
12530
  type Artifact = Schemas$2["Artifact"];
11851
12531
  //#endregion
11852
12532
  //#region src/datatypes/webhook.d.ts
@@ -11869,5 +12549,5 @@ type UpdateWorkspace = Schemas["UpdateWorkspace"];
11869
12549
  type WorkspaceRole = Schemas["WorkspaceRole"];
11870
12550
  type WorkspacePage = Schemas["WorkspacePage"];
11871
12551
  //#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
12552
+ export { LabelGroup as $, Account as $n, InviteSent as $t, LanguageSpan as A, S3Credentials as An, PipelineSummary as At, AudioRedaction as B, AuthToken as Bn, UpdateNotificationSettings as Bt, CustomDictionary as C, ConnectionSyncPage as Cn, UpdatePolicy as Ct, CustomPatternVariant as D, GcsCredentials as Dn, PipelineDefinition as Dt, CustomPatternRule as E, CreateConnection as En, Pipeline as Et, ProviderSelection as F, SyncSchedule as Fn, Notification as Ft, DateGranularity as G, ApiTokenType as Gn, UpdateMember as Gt, Color as H, Signup as Hn, Member as Ht, RecognizerParams as I, SyncScheduleInput as In, NotificationEvent as It, GdprArticle9Treatment as J, TokenExpiration as Jn, Invite as Jt, DateStyle as K, ApiTokenWithJWT as Kn, CreateInvite as Kt, ScopeMetadata as L, SyncStatus as Ln, NotificationPage as Lt, MergingStrategyParams as M, SyncConnection as Mn, PipelineTriggerType as Mt, PatternRecognizerParams as N, SyncDeletionPolicy as Nn, UpdatePipeline as Nt, Language as O, LlmConfig as On, PipelineFilter as Ot, PipelineDeduplication as P, SyncMode as Pn, CursorPagination as Pt, LabelEntry as Q, ActivityType as Qn, InvitePreview as Qt, ScopeParams as R, SyncTriggerType as Rn, NotificationSettings as Rt, CountryCode as S, ConnectionSync as Sn, TextRedaction as St, CustomPatternContext as T, ConnectionsQuery as Tn, CreatePipeline as Tt, ConfidenceThreshold as U, ApiToken as Un, MemberPage as Ut, ClampBucket as V, Login as Vn, ListMembers as Vt, CreatePolicy as W, ApiTokenPage as Wn, MemberSortField as Wt, ImageRedaction as X, Activity as Xn, InviteExpiration as Xt, HipaaDeidMethod as Y, UpdateApiToken as Yn, InviteCode as Yt, Label as Z, ActivityPage as Zn, InvitePage as Zt, CreatePipelineRun as _, AnthropicCredentials as _n, RetentionScope as _t, WorkspaceRole as a, ComponentHealth as an, PciDssPart as at, PipelineRunStatus as b, ConnectionConfig as bn, TabularRedaction as bt, UpdateWebhook as c, File as cn, PolicyDefinition as ct, WebhookEvent as d, FormatToken as dn, PolicySummaryPage as dt, InviteSortField as en, AccountRef as er, LabelLocale as et, WebhookPage as f, ListFiles as fn, PolicyTemplate as ft, Audit as g, ValidationErrorDetail as gn, RetentionPolicy as gt, Artifact as h, ErrorResponse as hn, Retention as ht, WorkspacePage as i, SortOrder as in, ModalityRedactions as it, Languages as j, StorageConfig as jn, PipelineSummaryPage as jt, LanguageProvenance as k, OpenAiCredentials as kn, PipelineStatus as kt, Webhook as l, FilePage as ln, PolicyRule as lt, WebhookStatus as m, UpdateFile as mn, PredicatedRule as mt, UpdateWorkspace as n, ListInvites as nn, UpdateAccount as nr, LanguageTag as nt, CreateWebhook as o, Health as on, PciPanRender as ot, WebhookResult as p, ModalityToken as pn, Predicate as pt, DocumentPredicate as q, CreateApiToken as qn, GenerateInviteCode as qt, Workspace as r, ReplyInvite as rn, paths as rr, LocalizedText as rt, TestWebhook as s, HealthStatus as sn, Policy as st, CreateWorkspace as t, InviteStatus as tn, PublicAccount as tr, Labels as tt, WebhookCreated as u, FileSource as un, PolicySummary as ut, PipelineRun as v, AzureCredentials as vn, Sha2Algorithm as vt, CustomDictionaryTerm as w, ConnectionVerification as wn, Waveform as wt, Confidence as x, ConnectionPage as xn, TerminalFallback as xt, PipelineRunPage as y, Connection as yn, TableRule as yt, TiebreakerParams as z, UpdateConnection as zn, UnreadStatus as zt };
12553
+ //# sourceMappingURL=index-BCjrTe_H.d.ts.map