@kortexya/reasoninglayer 1.16.0 → 1.17.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.
package/dist/index.d.ts CHANGED
@@ -109,7 +109,7 @@ type JsonValue$1 = string | number | boolean | null | JsonValue$1[] | object;
109
109
  * This is the single source of truth for the version constant.
110
110
  * The `scripts/release.sh` script updates this value alongside `package.json`.
111
111
  */
112
- declare const SDK_VERSION = "1.16.0";
112
+ declare const SDK_VERSION = "1.17.0";
113
113
  /**
114
114
  * Authentication mode for the SDK.
115
115
  *
@@ -1964,6 +1964,22 @@ interface AuditRecord$1 {
1964
1964
  }
1965
1965
  /** @format uuid */
1966
1966
  type AuditRecordId = string;
1967
+ /**
1968
+ * Sortable [`AuditRecord`] field for the paged list read API
1969
+ * ([`crate::ports::audit::AuditPort::list_page`]).
1970
+ *
1971
+ * Wire serialisation is `snake_case` (`timestamp`, `request_path`,
1972
+ * `actor`) via `serde(rename_all)`. Defaults to [`AuditSortField::Timestamp`].
1973
+ */
1974
+ type AuditSortField$1 = "timestamp" | "request_path" | "actor";
1975
+ /**
1976
+ * Sort direction for the paged list read API
1977
+ * ([`crate::ports::audit::AuditPort::list_page`]).
1978
+ *
1979
+ * Wire serialisation is `lowercase` (`asc`, `desc`). Defaults to
1980
+ * [`AuditSortOrder::Desc`] so the most recent entries surface first.
1981
+ */
1982
+ type AuditSortOrder$1 = "desc" | "asc";
1967
1983
  /** One audited assumption */
1968
1984
  interface AuditedAssumptionDto$1 {
1969
1985
  /** The assumption kind audited */
@@ -3244,6 +3260,23 @@ interface CancelDocumentResponse {
3244
3260
  /** Human-readable message describing what happened */
3245
3261
  message: string;
3246
3262
  }
3263
+ /**
3264
+ * A candidate entity — a Ψ-term-to-be, its sort named rather than resolved because the
3265
+ * sort may not exist yet (which residuates).
3266
+ */
3267
+ interface CandidateEntityDto {
3268
+ /**
3269
+ * Extractor confidence in [0, 1]. Advisory — it does not affect the verdict.
3270
+ * @format double
3271
+ */
3272
+ confidence?: number;
3273
+ /** Extracted features, by name. */
3274
+ features?: Record<string, CandidateValueDto>;
3275
+ /** Batch-local id, used to attach relations to this entity. */
3276
+ local_id: string;
3277
+ /** Sort name this entity claims. */
3278
+ sort: string;
3279
+ }
3247
3280
  /** A candidate match for entity deduplication */
3248
3281
  interface CandidateMatchDto$1 {
3249
3282
  /**
@@ -3257,6 +3290,40 @@ interface CandidateMatchDto$1 {
3257
3290
  */
3258
3291
  term_id: string;
3259
3292
  }
3293
+ /**
3294
+ * A candidate relation — a feature edge whose endpoint sorts the caller supplies so the
3295
+ * fact is self-contained for certification.
3296
+ */
3297
+ interface CandidateRelationDto {
3298
+ /**
3299
+ * Extractor confidence in [0, 1]. Advisory.
3300
+ * @format double
3301
+ */
3302
+ confidence?: number;
3303
+ /** Predicate (feature) name. */
3304
+ predicate: string;
3305
+ /** `local_id` of the source entity. */
3306
+ source: string;
3307
+ /** Sort name of the source endpoint. */
3308
+ source_sort: string;
3309
+ /** `local_id` of the target entity. */
3310
+ target: string;
3311
+ /** Sort name of the target endpoint. */
3312
+ target_sort: string;
3313
+ }
3314
+ /**
3315
+ * A candidate feature value. `value` absent ⇒ the extractor does not know it, which
3316
+ * residuates rather than refutes.
3317
+ */
3318
+ interface CandidateValueDto {
3319
+ /** Surface form of the value, as extracted. Omit for an unknown value. */
3320
+ value?: string | null;
3321
+ /**
3322
+ * Primitive type the extractor believes this value has: `String`, `Integer`,
3323
+ * `Real`, `Boolean`, or `DateTime`. Defaults to `String`.
3324
+ */
3325
+ value_type?: string | null;
3326
+ }
3260
3327
  interface CaptureSnapshotRequest$1 {
3261
3328
  /** @format date-time */
3262
3329
  captured_after?: string | null;
@@ -4096,8 +4163,27 @@ interface ClearFactsResponse$1 {
4096
4163
  * the operation succeeded without affecting other tenants.
4097
4164
  */
4098
4165
  interface ClearTenantResponse$1 {
4166
+ /**
4167
+ * Number of SQL ontology bindings deleted for this tenant.
4168
+ *
4169
+ * A binding names the source, table and columns a tenant's data lives in,
4170
+ * so it is tenant data in its own right. It used to survive the wipe,
4171
+ * which is how #124 became visible: the connectors page kept listing
4172
+ * bindings whose sources had just been erased.
4173
+ * @min 0
4174
+ */
4175
+ bindings_deleted?: number;
4099
4176
  /** Whether the cache was invalidated */
4100
4177
  cache_invalidated: boolean;
4178
+ /**
4179
+ * Number of materialized derived facts deleted for this tenant.
4180
+ *
4181
+ * The derived-facts repository has always been able to truncate a tenant;
4182
+ * only the separate admin endpoint ever asked it to, so derived Ψ-terms
4183
+ * outlived the facts they were derived from (#124).
4184
+ * @min 0
4185
+ */
4186
+ derived_facts_deleted?: number;
4101
4187
  /**
4102
4188
  * Number of document fingerprints deleted
4103
4189
  * @min 0
@@ -4122,6 +4208,14 @@ interface ClearTenantResponse$1 {
4122
4208
  * @min 0
4123
4209
  */
4124
4210
  reviews_deleted: number;
4211
+ /**
4212
+ * Total rows deleted across every table in `tables_wiped`.
4213
+ *
4214
+ * Counts the tables that have no named counter above, which is most of
4215
+ * them — the named counters predate #124 and were never the full set.
4216
+ * @min 0
4217
+ */
4218
+ rows_deleted_total?: number;
4125
4219
  /**
4126
4220
  * Number of ingestion sessions deleted
4127
4221
  * @min 0
@@ -4129,6 +4223,20 @@ interface ClearTenantResponse$1 {
4129
4223
  sessions_deleted: number;
4130
4224
  /** Whether the sort hierarchy snapshot was deleted */
4131
4225
  sorts_deleted: boolean;
4226
+ /**
4227
+ * Tenant-scoped tables deliberately left intact, each with its reason.
4228
+ *
4229
+ * Non-empty means this erasure was deliberately partial. Reported so a
4230
+ * retention policy can never again be mistaken for complete erasure.
4231
+ */
4232
+ tables_retained?: RetainedTableDto[];
4233
+ /**
4234
+ * Every table the wipe deleted from, children before parents.
4235
+ *
4236
+ * Derived from the live schema, not from a list in the source, so a table
4237
+ * added by a later migration appears here without a code change.
4238
+ */
4239
+ tables_wiped?: string[];
4132
4240
  /** The tenant whose data was cleared */
4133
4241
  tenant_id: string;
4134
4242
  /**
@@ -4136,6 +4244,16 @@ interface ClearTenantResponse$1 {
4136
4244
  * @min 0
4137
4245
  */
4138
4246
  terms_deleted: number;
4247
+ /**
4248
+ * Number of vector-store points deleted for this tenant.
4249
+ *
4250
+ * Reported to the caller because it is the one count an erasure request
4251
+ * cannot verify any other way: vector payloads carry the embedded text, so
4252
+ * a wipe that left them behind would report every table emptied while the
4253
+ * tenant's data stayed readable and retrievable by similarity.
4254
+ * @min 0
4255
+ */
4256
+ vectors_deleted: number;
4139
4257
  }
4140
4258
  /** Response for clearing all terms for a tenant */
4141
4259
  interface ClearTermsResponse$1 {
@@ -4638,7 +4756,15 @@ interface CompareDocumentsRequestDto {
4638
4756
  document_a_id: string;
4639
4757
  /** @format uuid */
4640
4758
  document_b_id: string;
4759
+ /**
4760
+ * Include the clause section — terms sorted under the tenant's
4761
+ * `document.clause` vocabulary (default true)
4762
+ */
4641
4763
  include_clause_diff?: boolean;
4764
+ /**
4765
+ * Include the entity section — everything outside the tenant's
4766
+ * `document.clause` vocabulary (default true)
4767
+ */
4642
4768
  include_entity_diff?: boolean;
4643
4769
  /** @format double */
4644
4770
  threshold?: number | null;
@@ -5706,6 +5832,18 @@ interface CreateCurriedFunctionRequest$1 {
5706
5832
  /** @format uuid */
5707
5833
  tenant_id: string;
5708
5834
  }
5835
+ /** Request body for filing a data subject request. */
5836
+ interface CreateDsrRequest {
5837
+ /** Identifier of the data subject filing the request. */
5838
+ data_subject: string;
5839
+ /**
5840
+ * Which right is being exercised (Art. 15-22), as the domain's tagged enum.
5841
+ *
5842
+ * Described to OpenAPI as an opaque object: deriving a schema would force a
5843
+ * utoipa dependency into the domain, which must stay free of them.
5844
+ */
5845
+ request_type: object;
5846
+ }
5709
5847
  /** Request to create a new execution session with trail-based backtracking */
5710
5848
  interface CreateExecutionSessionRequest$1 {
5711
5849
  /** Optional name for the session */
@@ -7074,6 +7212,11 @@ interface DisentailmentRequest$1 {
7074
7212
  }
7075
7213
  /** Response from disentailment check. */
7076
7214
  interface DisentailmentResponse$1 {
7215
+ /**
7216
+ * How strongly the supplied facts establish the antecedent, μ ∈ [0,1].
7217
+ * @format double
7218
+ */
7219
+ antecedent_degree: number;
7077
7220
  /**
7078
7221
  * Computation time in milliseconds
7079
7222
  * @format int64
@@ -7081,10 +7224,31 @@ interface DisentailmentResponse$1 {
7081
7224
  */
7082
7225
  computation_time_ms: number;
7083
7226
  /**
7084
- * Confidence degree
7227
+ * Confidence degree.
7228
+ *
7229
+ * Certainty in the result, which is governed by how strongly the facts
7230
+ * establish the antecedent: with no support the verdict is vacuous. Equal
7231
+ * to `antecedent_degree`, and graded where it was previously a `1.0`/`0.0`
7232
+ * cast of "the antecedent was found".
7085
7233
  * @format double
7086
7234
  */
7087
7235
  confidence: number;
7236
+ /**
7237
+ * How strongly the consequent is established, μ ∈ [0,1] — by the facts, or
7238
+ * by the antecedent it would follow from.
7239
+ * @format double
7240
+ */
7241
+ consequent_degree: number;
7242
+ /**
7243
+ * Graded degree to which the disentailment still holds, μ ∈ [0,1].
7244
+ *
7245
+ * `1 - violation_degree`, where the violation degree is
7246
+ * `min(antecedent_degree, consequent_degree)` — the degree to which the
7247
+ * antecedent forces the consequent it was supposed to exclude. `holds` is
7248
+ * this degree read crisply.
7249
+ * @format double
7250
+ */
7251
+ degree: number;
7088
7252
  /** Whether the disentailment holds (antecedent is false, or consequent is false) */
7089
7253
  holds: boolean;
7090
7254
  /** Whether the disentailment is violated (both antecedent AND consequent hold = conflict) */
@@ -7366,6 +7530,26 @@ interface DocumentDto {
7366
7530
  */
7367
7531
  version: number;
7368
7532
  }
7533
+ /**
7534
+ * What a document erasure actually removed.
7535
+ *
7536
+ * Counts are reported rather than a bare 204 because erasure is auditable: a
7537
+ * caller has to be able to show *what* went, and a silent success is
7538
+ * indistinguishable from a cascade that walked nothing.
7539
+ */
7540
+ interface DocumentErasureReport {
7541
+ /** Whether the document registry row was removed. */
7542
+ document_deleted: boolean;
7543
+ /** The document that was erased. */
7544
+ document_id: string;
7545
+ /** Whether the fingerprint row (which held the term provenance) was removed. */
7546
+ fingerprint_deleted: boolean;
7547
+ /**
7548
+ * Terms removed via the full per-term cascade.
7549
+ * @min 0
7550
+ */
7551
+ terms_deleted: number;
7552
+ }
7369
7553
  /** Per-document knowledge graph response. */
7370
7554
  interface DocumentGraphResponse {
7371
7555
  /** Community id → size (legend data) */
@@ -7892,6 +8076,28 @@ interface DriveDto$1 {
7892
8076
  /** Drive type (curiosity, competence, social, autonomy) */
7893
8077
  drive_type: string;
7894
8078
  }
8079
+ /** A request record as returned to callers. */
8080
+ interface DsrRecordResponse {
8081
+ /** The data subject this request belongs to. */
8082
+ data_subject: string;
8083
+ /** Statutory deadline (UTC). */
8084
+ deadline: string;
8085
+ /** Request id, stable from submission through closure. */
8086
+ id: string;
8087
+ /**
8088
+ * Whether the stored record still matches its own integrity hash.
8089
+ *
8090
+ * Surfaced rather than merely checked so a caller can tell an intact
8091
+ * record from a tampered one instead of trusting the response.
8092
+ */
8093
+ integrity_verified: boolean;
8094
+ /** Whether the deadline has already passed without closure. */
8095
+ overdue: boolean;
8096
+ /** When the request was received (UTC). */
8097
+ received_at: string;
8098
+ /** Current lifecycle status, serialized from the domain enum. */
8099
+ status: any;
8100
+ }
7895
8101
  /** Loss weighting (paper eq. 4) — `data_weight + knowledge_weight = 1.0`. */
7896
8102
  interface DualWeightedLossDto {
7897
8103
  /**
@@ -8433,10 +8639,20 @@ interface EnrollSpeakerRequest$1 {
8433
8639
  /** MIME hint (e.g. `"audio/wav"`) for decoding the sample. */
8434
8640
  audio_mime?: string | null;
8435
8641
  /**
8436
- * Display name for this speaker. Re-enrolling the same name (case-insensitive)
8437
- * overwrites the existing profile.
8642
+ * Display name for this speaker. Re-enrolling the same (name, variant)
8643
+ * pair — case-insensitive — overwrites the existing profile.
8438
8644
  */
8439
8645
  name: string;
8646
+ /**
8647
+ * Optional sample label, so one person can hold SEVERAL embeddings
8648
+ * ("15-s read-aloud", "meeting 07-30", "sung sample"). This is the
8649
+ * singing fix: a voice is not one point in embedding space, and TitaNet
8650
+ * is speech-trained, so a sung sample is what makes that artist's other
8651
+ * songs match. Matching needs no changes for this — supplying several
8652
+ * prints that share a name already resolves each cluster to the best
8653
+ * cosine overall.
8654
+ */
8655
+ variant?: string | null;
8440
8656
  }
8441
8657
  /** Response from enrolling a speaker voiceprint. */
8442
8658
  interface EnrollSpeakerResponse$1 {
@@ -8457,6 +8673,8 @@ interface EnrollSpeakerResponse$1 {
8457
8673
  * @format double
8458
8674
  */
8459
8675
  sample_secs: number;
8676
+ /** Sample label, when one was supplied. */
8677
+ variant?: string | null;
8460
8678
  }
8461
8679
  /** Request to enroll (or re-enroll) a cloned voice. */
8462
8680
  interface EnrollVoiceRequest$1 {
@@ -8494,6 +8712,14 @@ interface EntailmentRequest$1 {
8494
8712
  }
8495
8713
  /** Response from entailment check. */
8496
8714
  interface EntailmentResponse$1 {
8715
+ /**
8716
+ * How strongly the supplied facts establish the antecedent, μ ∈ [0,1].
8717
+ *
8718
+ * `max { μ⊒(antecedent, f) : f ∈ facts }` — a fact witnesses the antecedent
8719
+ * when the antecedent subsumes it, so a `sparrow` fact supports `animal`.
8720
+ * @format double
8721
+ */
8722
+ antecedent_degree: number;
8497
8723
  /**
8498
8724
  * Computation time in milliseconds
8499
8725
  * @format int64
@@ -8501,10 +8727,31 @@ interface EntailmentResponse$1 {
8501
8727
  */
8502
8728
  computation_time_ms: number;
8503
8729
  /**
8504
- * Confidence degree
8730
+ * Confidence degree.
8731
+ *
8732
+ * Equal to `degree`. Retained for callers written against the previous
8733
+ * shape, where it was a `1.0`/`0.0` cast of `entails`.
8505
8734
  * @format double
8506
8735
  */
8507
8736
  confidence: number;
8737
+ /**
8738
+ * How strongly the consequent is established, μ ∈ [0,1].
8739
+ *
8740
+ * The better of the two routes: witnessed by the facts, or subsuming the
8741
+ * antecedent it would follow from.
8742
+ * @format double
8743
+ */
8744
+ consequent_degree: number;
8745
+ /**
8746
+ * Graded entailment degree μ ∈ [0,1] — `min(antecedent_degree, consequent_degree)`.
8747
+ *
8748
+ * `entails` is this degree read crisply. A value strictly between 0 and 1
8749
+ * means the two are related only through a fuzzy sort relation (an explicit
8750
+ * `⊑·` degree or an approved sort similarity), not through the crisp
8751
+ * hierarchy.
8752
+ * @format double
8753
+ */
8754
+ degree: number;
8508
8755
  /** Whether antecedent entails consequent */
8509
8756
  entails: boolean;
8510
8757
  }
@@ -8995,6 +9242,39 @@ type EvidenceSourceDto$1 = {
8995
9242
  /** @format double */
8996
9243
  unified_degree: number;
8997
9244
  };
9245
+ /**
9246
+ * Request to transpile an OSFQL query and run it on the bound source (#133).
9247
+ *
9248
+ * No dialect field: the binding names the source and the source's type
9249
+ * decides the dialect. Asking a caller to supply it would let them ask for
9250
+ * Cypher against Postgres, which is not a question with an answer.
9251
+ */
9252
+ interface ExecuteTranspiledRequest {
9253
+ /** OSFQL query to transpile and execute. */
9254
+ osfql: string;
9255
+ }
9256
+ /** Rows from a live source, with the query that fetched them. */
9257
+ interface ExecuteTranspiledResponse {
9258
+ /** Dialect of `query` — `postgres`, `mysql`, `sqlite`, `cypher` or `cql`. */
9259
+ dialect: string;
9260
+ /**
9261
+ * The query that was executed, in the source's own language.
9262
+ *
9263
+ * Returned with the rows rather than behind a separate call: transpile
9264
+ * mode's claim is that OSFQL becomes a native query against the
9265
+ * operator's database, and this is what makes that claim checkable.
9266
+ */
9267
+ query: string;
9268
+ /**
9269
+ * Number of rows returned.
9270
+ * @min 0
9271
+ */
9272
+ row_count: number;
9273
+ /** Rows as returned by the source, one object per record. */
9274
+ rows: any[];
9275
+ /** The source the query ran against. */
9276
+ source_id: string;
9277
+ }
8998
9278
  /**
8999
9279
  * ExecutionGoalDto
9000
9280
  * Execution engine goal, discriminated by the 'type' field. Variants: unify, prove, eval, type_disj, cut, if_then_else.
@@ -9333,6 +9613,44 @@ interface ExtractedEntityDto$1 {
9333
9613
  /** The text span that was recognized in the input */
9334
9614
  text: string;
9335
9615
  }
9616
+ /** Request body for `POST /api/v1/extraction/certify`. */
9617
+ interface ExtractionCertifyRequest {
9618
+ /**
9619
+ * Conformal coverage floor. Defaults to 0.95; only affects conformal (non-sound)
9620
+ * emissions.
9621
+ * @format double
9622
+ */
9623
+ conformal_floor?: number | null;
9624
+ /** Candidate entities, certified in submission order. */
9625
+ entities?: CandidateEntityDto[];
9626
+ /** Candidate relations, certified after the entities. */
9627
+ relations?: CandidateRelationDto[];
9628
+ }
9629
+ /** Response for `POST /api/v1/extraction/certify`. */
9630
+ interface ExtractionCertifyResponse {
9631
+ /**
9632
+ * Candidates the gate withheld.
9633
+ * @min 0
9634
+ */
9635
+ abstained: number;
9636
+ /**
9637
+ * Candidates the gate admitted.
9638
+ * @min 0
9639
+ */
9640
+ emitted: number;
9641
+ /** Per-candidate dispositions, in submission order (entities then relations). */
9642
+ facts: FactOutcomeDto[];
9643
+ /**
9644
+ * Candidates whose certification suspended pending more information.
9645
+ * @min 0
9646
+ */
9647
+ suspended: number;
9648
+ /**
9649
+ * Number of candidates submitted.
9650
+ * @min 0
9651
+ */
9652
+ total: number;
9653
+ }
9336
9654
  /** A single extraction prediction. */
9337
9655
  interface ExtractionPredictionDto$1 {
9338
9656
  /**
@@ -9462,6 +9780,39 @@ interface FactConfidenceEntry$1 {
9462
9780
  */
9463
9781
  term_id: string;
9464
9782
  }
9783
+ /** The gate's disposition for one candidate fact. */
9784
+ interface FactOutcomeDto {
9785
+ /**
9786
+ * Content-addressed id of the persisted certificate, for every disposition —
9787
+ * refusals included, so a withheld verdict stays addressable in the audit trail.
9788
+ */
9789
+ certificate?: string | null;
9790
+ /**
9791
+ * Verdict confidence (`1.0` for a sound proof). Only meaningful for `emitted`.
9792
+ * @format double
9793
+ */
9794
+ confidence?: number | null;
9795
+ /** `emitted`, `suspended`, or `abstained`. */
9796
+ disposition: string;
9797
+ /**
9798
+ * Stable diagnostic label: `entity:<Sort>:<local_id>` or
9799
+ * `relation:<predicate>:<source>→<target>`.
9800
+ */
9801
+ label: string;
9802
+ /**
9803
+ * `true` when the verdict was a sound proof rather than a conformal emission.
9804
+ * Only meaningful for `emitted`.
9805
+ */
9806
+ proven?: boolean | null;
9807
+ /** For `abstained`: why the candidate was withheld. */
9808
+ reason?: string | null;
9809
+ /** Lattice-derived repair suggestions, aligned with `violations`. */
9810
+ repair_hints?: RepairHintDto[];
9811
+ /** Declared obligations this candidate broke. Non-empty only for a refutation. */
9812
+ violations?: ViolationDto$1[];
9813
+ /** For `suspended`: the facts whose arrival should resume certification. */
9814
+ wake_triggers?: string[];
9815
+ }
9465
9816
  /**
9466
9817
  * Response for the factory-reset operation.
9467
9818
  *
@@ -9469,10 +9820,23 @@ interface FactConfidenceEntry$1 {
9469
9820
  * so operators can verify the operation succeeded.
9470
9821
  */
9471
9822
  interface FactoryResetResponse$1 {
9823
+ /**
9824
+ * Number of SQL ontology bindings dropped across all tenants
9825
+ * @min 0
9826
+ */
9827
+ bindings_deleted?: number;
9472
9828
  /** Whether the cache (Valkey / in-memory) was flushed */
9473
9829
  cache_cleared: boolean;
9474
9830
  /** Human-readable summary message */
9475
9831
  message: string;
9832
+ /**
9833
+ * The tables that were truncated.
9834
+ *
9835
+ * Discovered from the live schema rather than hard-coded, so this is the
9836
+ * only way for a caller to tell a complete reset from one whose discovery
9837
+ * came back short (#124).
9838
+ */
9839
+ postgres_tables?: string[];
9476
9840
  /**
9477
9841
  * Number of PostgreSQL tables that were truncated
9478
9842
  * @min 0
@@ -11285,6 +11649,41 @@ interface GetFactsResponse$1 {
11285
11649
  /** List of facts */
11286
11650
  facts: PsiTermDto$1[];
11287
11651
  }
11652
+ /** Request to read the fuzzy subsumption degree `sub ⊑· sup` */
11653
+ interface GetFuzzySubsumptionRequest {
11654
+ /**
11655
+ * The subsumed (more specific) sort
11656
+ * @format uuid
11657
+ */
11658
+ sub_sort_id: string;
11659
+ /**
11660
+ * The subsuming (more general) sort
11661
+ * @format uuid
11662
+ */
11663
+ sup_sort_id: string;
11664
+ }
11665
+ /** Response for a fuzzy subsumption query */
11666
+ interface GetFuzzySubsumptionResponse {
11667
+ /**
11668
+ * Subsumption degree ⊑·(sub, sup) ∈ [0,1]
11669
+ *
11670
+ * Falls back through the explicit relation, then approved similarity,
11671
+ * then the crisp hierarchy — so `1.0` may mean a crisp subtype edge
11672
+ * rather than an explicitly asserted degree.
11673
+ * @format double
11674
+ */
11675
+ degree: number;
11676
+ /**
11677
+ * The subsumed sort
11678
+ * @format uuid
11679
+ */
11680
+ sub_sort_id: string;
11681
+ /**
11682
+ * The subsuming sort
11683
+ * @format uuid
11684
+ */
11685
+ sup_sort_id: string;
11686
+ }
11288
11687
  /** Request to get HTN methods. */
11289
11688
  interface GetHtnMethodsRequest {
11290
11689
  /**
@@ -12409,6 +12808,46 @@ interface IdentifyEffectResponse$1 {
12409
12808
  /** Treatment variable */
12410
12809
  treatment: string;
12411
12810
  }
12811
+ /**
12812
+ * Optional overrides for identification. Every field defaults to the MEDIA
12813
+ * setting, which is stricter than the meeting path's.
12814
+ */
12815
+ interface IdentifyOptionsDto {
12816
+ /**
12817
+ * Minimum cosine to accept a match (default 0.6, vs 0.5 for meetings).
12818
+ * @format float
12819
+ */
12820
+ match_threshold?: number | null;
12821
+ /**
12822
+ * Minimum seconds of speech for a cluster to be reported (default 5).
12823
+ * @format double
12824
+ */
12825
+ min_speech_secs?: number | null;
12826
+ /**
12827
+ * Run vocal separation first (default `true`) — what lets a voice under
12828
+ * music be matched at all.
12829
+ */
12830
+ separate?: boolean | null;
12831
+ }
12832
+ /** Request to identify which enrolled voices speak in a piece of audio. */
12833
+ interface IdentifySpeakersRequest {
12834
+ /** Base64-encoded audio to analyze (any container the transcriber decodes). */
12835
+ audio: string;
12836
+ /** MIME hint (e.g. `"audio/webm"`). */
12837
+ audio_mime?: string | null;
12838
+ /** Tuning knobs; omitted means the media defaults. */
12839
+ options?: null | IdentifyOptionsDto;
12840
+ }
12841
+ /** Response from identifying voices in audio. */
12842
+ interface IdentifySpeakersResponse {
12843
+ detections: SpeakerDetectionDto[];
12844
+ /** @format double */
12845
+ duration_secs: number;
12846
+ /** Whether vocal separation actually ran. */
12847
+ separated: boolean;
12848
+ unknown_clusters: UnknownClusterDto[];
12849
+ warnings: string[];
12850
+ }
12412
12851
  /** An entity extracted from a visual element in the image. */
12413
12852
  interface ImageExtractedEntityDto$1 {
12414
12853
  /**
@@ -14782,6 +15221,12 @@ interface ListSourcesResponse$1 {
14782
15221
  }
14783
15222
  /** Response listing a tenant's speaker profiles. */
14784
15223
  interface ListSpeakersResponse$1 {
15224
+ /**
15225
+ * The same profiles grouped by person, since one name may now hold
15226
+ * several samples and the UI lists people, not embeddings.
15227
+ */
15228
+ people?: SpeakerPersonDto[];
15229
+ /** Every stored profile, one entry per sample. */
14785
15230
  speakers: SpeakerProfileDto[];
14786
15231
  }
14787
15232
  /** Request to list module symbols */
@@ -17455,7 +17900,15 @@ interface OsfDiffRequestDto {
17455
17900
  a: object;
17456
17901
  /** Selector for side B */
17457
17902
  b: object;
17903
+ /**
17904
+ * Include the clause section — terms sorted under the tenant's
17905
+ * `document.clause` vocabulary (default true)
17906
+ */
17458
17907
  include_clause_diff?: boolean;
17908
+ /**
17909
+ * Include the entity section — everything outside the tenant's
17910
+ * `document.clause` vocabulary (default true)
17911
+ */
17459
17912
  include_entity_diff?: boolean;
17460
17913
  /**
17461
17914
  * Minimum match degree (default 0.7)
@@ -17660,6 +18113,16 @@ interface OsfqlRequest$1 {
17660
18113
  * clients are byte-identical.
17661
18114
  */
17662
18115
  reactive?: boolean;
18116
+ /**
18117
+ * Which data model the program is answered under.
18118
+ *
18119
+ * **Set this to `rdf` when running a statement returned by
18120
+ * `POST /api/v1/sparql/translate`** — that is the whole point of the switch. It is a
18121
+ * single flag rather than several because the settings it carries are not
18122
+ * independently useful here: getting one right and another wrong yields answers that
18123
+ * are silently wrong rather than obviously broken.
18124
+ */
18125
+ semantics?: OsfqlSemantics;
17663
18126
  }
17664
18127
  /** Response from executing an OSFQL program. */
17665
18128
  interface OsfqlResponse$1 {
@@ -17690,6 +18153,8 @@ interface OsfqlResponse$1 {
17690
18153
  */
17691
18154
  updated_term_ids?: string[];
17692
18155
  }
18156
+ /** The data model an OSFQL program is answered under — see [`OsfqlRequest::semantics`]. */
18157
+ type OsfqlSemantics = "osf" | "rdf";
17693
18158
  /** A bound value in an OSFQL result. */
17694
18159
  type OsfqlValueDto = {
17695
18160
  type: "null";
@@ -17715,6 +18180,13 @@ type OsfqlValueDto = {
17715
18180
  type: "boolean";
17716
18181
  /** Boolean value. */
17717
18182
  value: boolean;
18183
+ } | {
18184
+ type: "datetime";
18185
+ /**
18186
+ * UTC datetime instant, rendered in its RFC 3339 `Z`-suffixed form — the value
18187
+ * of a `date`/`timestamp` feature binding (or a MIN/MAX aggregate over one).
18188
+ */
18189
+ value: string;
17718
18190
  } | {
17719
18191
  type: "list";
17720
18192
  /** Ordered list value. */
@@ -19687,6 +20159,15 @@ interface ReleaseResiduationsResponse$1 {
19687
20159
  /** @min 0 */
19688
20160
  remaining_suspended: number;
19689
20161
  }
20162
+ /** A lattice-derived suggestion for discharging one violated obligation. */
20163
+ interface RepairHintDto {
20164
+ /** Why that replacement discharges it. */
20165
+ rationale: string;
20166
+ /** The concrete replacement that would discharge the obligation. */
20167
+ suggestion: string;
20168
+ /** The feature or predicate the hint applies to. */
20169
+ target: string;
20170
+ }
19690
20171
  /** Request to reprocess failed documents */
19691
20172
  interface ReprocessFailedRequest {
19692
20173
  /**
@@ -20036,6 +20517,13 @@ interface ResumptionOptionDto$1 {
20036
20517
  /** Unique identifier for this option */
20037
20518
  id: string;
20038
20519
  }
20520
+ /** One table a tenant erasure deliberately left standing, and why. */
20521
+ interface RetainedTableDto {
20522
+ /** Why this table survives a tenant erasure */
20523
+ reason: string;
20524
+ /** Table name in the `public` schema */
20525
+ table: string;
20526
+ }
20039
20527
  /** Request to retract a rule */
20040
20528
  interface RetractRuleRequest$1 {
20041
20529
  /** If provided, retract rules matching this pattern */
@@ -21602,6 +22090,37 @@ interface SetFeatureResponse$1 {
21602
22090
  success: boolean;
21603
22091
  term_id: string;
21604
22092
  }
22093
+ /**
22094
+ * Request to set the fuzzy subsumption degree `sub ⊑· sup`
22095
+ *
22096
+ * The field names are `sub`/`sup` rather than `sort1`/`sort2` because the
22097
+ * relation is **directional**: swapping them asserts something else. The
22098
+ * symmetric relation is `/api/v1/sorts/similarity`.
22099
+ */
22100
+ interface SetFuzzySubsumptionRequest {
22101
+ /**
22102
+ * Subsumption degree ∈ [0,1]
22103
+ * @format double
22104
+ */
22105
+ degree: number;
22106
+ /**
22107
+ * The subsumed (more specific) sort
22108
+ * @format uuid
22109
+ */
22110
+ sub_sort_id: string;
22111
+ /**
22112
+ * The subsuming (more general) sort
22113
+ * @format uuid
22114
+ */
22115
+ sup_sort_id: string;
22116
+ }
22117
+ /** Response for setting a fuzzy subsumption degree */
22118
+ interface SetFuzzySubsumptionResponse {
22119
+ /** Message */
22120
+ message: string;
22121
+ /** Whether the operation succeeded */
22122
+ success: boolean;
22123
+ }
21605
22124
  /**
21606
22125
  * Request to transition a goal to a terminal status.
21607
22126
  *
@@ -21945,17 +22464,43 @@ interface SoftUnifyRequest$1 {
21945
22464
  }
21946
22465
  /** Response for soft unification. */
21947
22466
  interface SoftUnifyResponse$1 {
21948
- /** @format double */
22467
+ /**
22468
+ * Combined confidence μ ∈ [0,1] — the product of `sort_score` and
22469
+ * `feature_score`, per the domain's soft-unification quantale.
22470
+ * @format double
22471
+ */
21949
22472
  confidence: number;
21950
22473
  /**
22474
+ * Wall-clock time for the computation.
21951
22475
  * @format int64
21952
22476
  * @min 0
21953
22477
  */
21954
22478
  elapsed_ms: number;
21955
- /** @format double */
22479
+ /**
22480
+ * Whether a box-embedding adapter contributed to `sort_score`.
22481
+ *
22482
+ * `false` means the sort axis was scored from the hierarchy alone
22483
+ * (subsumption and fuzzy subsumption). The scores are measured either way —
22484
+ * this reports which evidence was available, so a caller can tell a
22485
+ * hierarchy-only answer from an embedding-backed one.
22486
+ */
22487
+ embeddings_used: boolean;
22488
+ /**
22489
+ * Feature compatibility μ ∈ [0,1], averaged over the union of both terms'
22490
+ * features. A feature only one side carries scores 0.5 (open world), not 0.
22491
+ * @format double
22492
+ */
21956
22493
  feature_score: number;
22494
+ /**
22495
+ * What hard OSF unification says about the same pair. Independent of the
22496
+ * scores above: terms can be highly similar and still fail to unify.
22497
+ */
21957
22498
  hard_compatible: boolean;
21958
- /** @format double */
22499
+ /**
22500
+ * Sort compatibility μ ∈ [0,1]: exact match or subsumption → 1.0, then box
22501
+ * containment, then fuzzy subsumption.
22502
+ * @format double
22503
+ */
21959
22504
  sort_score: number;
21960
22505
  }
21961
22506
  /** A solution from backward chaining or open-world inference. */
@@ -23006,6 +23551,23 @@ type SpaceStatusDto$1 = {
23006
23551
  count: number;
23007
23552
  type: "alternatives";
23008
23553
  };
23554
+ /** A recognized voice. */
23555
+ interface SpeakerDetectionDto {
23556
+ name: string;
23557
+ /**
23558
+ * Cosine similarity of the accepted match.
23559
+ * @format float
23560
+ */
23561
+ score: number;
23562
+ spans: SpeechSpanDto[];
23563
+ /** @format double */
23564
+ speech_secs: number;
23565
+ }
23566
+ /** One person and all the samples enrolled for them. */
23567
+ interface SpeakerPersonDto {
23568
+ name: string;
23569
+ profiles: SpeakerProfileDto[];
23570
+ }
23009
23571
  /** A stored speaker profile (embedding withheld). */
23010
23572
  interface SpeakerProfileDto {
23011
23573
  /** ISO-8601 timestamp of enrollment. */
@@ -23022,6 +23584,8 @@ interface SpeakerProfileDto {
23022
23584
  * @format double
23023
23585
  */
23024
23586
  sample_secs: number;
23587
+ /** Sample label, when one was supplied at enrollment. */
23588
+ variant?: string | null;
23025
23589
  }
23026
23590
  /** Volume-specificity verification sub-DTO. */
23027
23591
  interface SpecificityDto$1 {
@@ -23062,6 +23626,13 @@ interface SpeechEngineDto {
23062
23626
  /** Whether it can clone from a reference clip. */
23063
23627
  supports_cloning: boolean;
23064
23628
  }
23629
+ /** One speaking interval, in seconds from the start of the audio. */
23630
+ interface SpeechSpanDto {
23631
+ /** @format double */
23632
+ end: number;
23633
+ /** @format double */
23634
+ start: number;
23635
+ }
23065
23636
  /**
23066
23637
  * Request to start a new attribute exploration session.
23067
23638
  *
@@ -23359,6 +23930,35 @@ interface StructuredIngestionStatsDto$1 {
23359
23930
  */
23360
23931
  terms_projected: number;
23361
23932
  }
23933
+ /** What a subject erasure matched, and what it removed. */
23934
+ interface SubjectErasureReport {
23935
+ /** Whether this call executed, or only planned. */
23936
+ confirmed: boolean;
23937
+ /** The data subject named by the request being fulfilled. */
23938
+ data_subject: string;
23939
+ /** Feature that was matched on. */
23940
+ feature: string;
23941
+ /** Ids of every term matching the subject, whether or not they were erased. */
23942
+ matched_terms: string[];
23943
+ /**
23944
+ * Terms actually removed (zero on a dry run).
23945
+ * @min 0
23946
+ */
23947
+ terms_deleted: number;
23948
+ }
23949
+ /** Body for fulfilling an erasure request against the knowledge base. */
23950
+ interface SubjectErasureRequest {
23951
+ /** Execute the erasure. Defaults to false — a dry run returning the plan. */
23952
+ confirm?: boolean;
23953
+ /**
23954
+ * Which feature holds the subject's identifier (e.g. `"name"`, `"email"`).
23955
+ *
23956
+ * Named by the caller rather than guessed: only the operator knows which
23957
+ * feature identifies a person in their schema, and guessing wrong would
23958
+ * either miss the subject's data or match somebody else's.
23959
+ */
23960
+ feature: string;
23961
+ }
23362
23962
  /** Request to subscribe agent to KB changes. */
23363
23963
  interface SubscribeToKbRequest$1 {
23364
23964
  /**
@@ -24049,7 +24649,14 @@ interface TermBindingDto$1 {
24049
24649
  }
24050
24650
  /** API representation of a term */
24051
24651
  interface TermDto$1 {
24052
- /** Human-readable display name extracted from features (name/label/title/...) */
24652
+ /**
24653
+ * Human-readable display name extracted from features under a total,
24654
+ * deterministic precedence: a feature the sort annotates `displayLabel`,
24655
+ * then one annotated `isIdentifier`, then the conventional keys
24656
+ * (name/label/title/...), then the sort's declared feature order, then
24657
+ * undeclared features in lexicographic key order. The same term always
24658
+ * yields the same value.
24659
+ */
24053
24660
  display_name?: string | null;
24054
24661
  /** Features map */
24055
24662
  features: Record<string, ValueDto$1>;
@@ -24221,6 +24828,44 @@ interface TestInputDto {
24221
24828
  /** Caller-assigned identifier echoed in the response. */
24222
24829
  input_id: string;
24223
24830
  }
24831
+ /** Run the caller's own system prompt over a piece of text. */
24832
+ interface TextGenerateRequest {
24833
+ /**
24834
+ * Output-token cap for one model call. Clamped down to the deployment's
24835
+ * own maximum — the engine's per-sequence budget covers prompt AND
24836
+ * generation, and the caller does not know it.
24837
+ * @format int32
24838
+ * @min 0
24839
+ */
24840
+ max_tokens?: number | null;
24841
+ /**
24842
+ * The system prompt, applied verbatim.
24843
+ *
24844
+ * This is the whole point of the endpoint. A client that versions its own
24845
+ * prompts (and stands behind the pairing of prompt version + output) must
24846
+ * be able to send the prompt it versioned; a service-side rewording would
24847
+ * silently answer a different question.
24848
+ */
24849
+ system: string;
24850
+ /**
24851
+ * Decode temperature. Absent = greedy, the only setting under which a
24852
+ * versioned prompt yields a reproducible answer.
24853
+ * @format float
24854
+ */
24855
+ temperature?: number | null;
24856
+ /**
24857
+ * The text to transform. Sent to the model as the user turn, verbatim —
24858
+ * never wrapped — so the answer stays diff-able against the input.
24859
+ */
24860
+ text: string;
24861
+ }
24862
+ /** The generated text. */
24863
+ interface TextGenerateResponse {
24864
+ /** Label of the backend that answered, when known. */
24865
+ model?: string | null;
24866
+ /** The model's answer, trimmed of surrounding whitespace. */
24867
+ text: string;
24868
+ }
24224
24869
  /** Threshold-based weak anchor for an antecedent gate. */
24225
24870
  interface ThresholdAnchorDto {
24226
24871
  /**
@@ -25241,6 +25886,17 @@ interface UnifyTermsResponse$1 {
25241
25886
  /** The resulting unified term ID (if successful) */
25242
25887
  unified_term_id?: string | null;
25243
25888
  }
25889
+ /**
25890
+ * A cluster that carried enough speech to report but matched no profile —
25891
+ * the raw material for "this is …" enrollment from media.
25892
+ */
25893
+ interface UnknownClusterDto {
25894
+ /** @format int32 */
25895
+ cluster: number;
25896
+ spans: SpeechSpanDto[];
25897
+ /** @format double */
25898
+ speech_secs: number;
25899
+ }
25244
25900
  /** Request to update a collection */
25245
25901
  interface UpdateCollectionRequest$1 {
25246
25902
  /** Optional description */
@@ -25425,6 +26081,37 @@ interface UpgradeRequest {
25425
26081
  /** The content-addressed bundle id of the target version (UUID string). */
25426
26082
  to_bundle_id: string;
25427
26083
  }
26084
+ /**
26085
+ * Metadata for a tenant-uploaded file-based source artifact (#107).
26086
+ *
26087
+ * Returned by `POST /api/v1/sources/files` (the upload) and listed by
26088
+ * `GET /api/v1/sources/files`. The `path` is the engine-internal location
26089
+ * written into a registered source's `config.file_path` (csv/parquet) or
26090
+ * `config.database_path` (sqlite); the api-layer path-traversal guard
26091
+ * accepts exactly these uploaded paths (plus configured allow-tree entries).
26092
+ * `uploaded_at` follows the `chrono::DateTime<chrono::Utc>` convention used
26093
+ * by `SourceSummaryDto::last_sync_at` so the field round-trips through the
26094
+ * same utoipa `chrono` schema generator as the rest of the ingestion DTOs.
26095
+ */
26096
+ interface UploadedSourceFileDto {
26097
+ /** The `SourceFileId` (UUID v4) of the upload, also the `{id}` path param. */
26098
+ id: string;
26099
+ /** Sanitized basename of the uploaded file (no path separators). */
26100
+ name: string;
26101
+ /** Engine-internal absolute path the registered source's config points at. */
26102
+ path: string;
26103
+ /**
26104
+ * Size of the stored file in bytes.
26105
+ * @format int64
26106
+ * @min 0
26107
+ */
26108
+ size: number;
26109
+ /**
26110
+ * Upload timestamp (RFC 3339 UTC).
26111
+ * @format date-time
26112
+ */
26113
+ uploaded_at: string;
26114
+ }
25428
26115
  /** @format uuid */
25429
26116
  type UserId = string;
25430
26117
  /**
@@ -26314,6 +27001,15 @@ declare class Sorts<SecurityDataType = unknown> {
26314
27001
  * @request GET:/api/v1/sorts/equivalence-classes
26315
27002
  */
26316
27003
  getEquivalenceClasses: (params?: RequestParams) => Promise<HttpResponse<GetEquivalenceClassesResponse$1, any>>;
27004
+ /**
27005
+ * No description
27006
+ *
27007
+ * @tags sorts
27008
+ * @name GetFuzzySubsumption
27009
+ * @summary Get the fuzzy subsumption degree `sub ⊑· sup` between two sorts
27010
+ * @request POST:/api/v1/sorts/subsumption/get
27011
+ */
27012
+ getFuzzySubsumption: (data: GetFuzzySubsumptionRequest, params?: RequestParams) => Promise<HttpResponse<GetFuzzySubsumptionResponse, any>>;
26317
27013
  /**
26318
27014
  * @description Per Definition IV.5 (Milanese & Pasi 2024): ≾̇ = ((≾̃ .− ∼) ⊍ ≤)⁺
26319
27015
  *
@@ -26324,14 +27020,21 @@ declare class Sorts<SecurityDataType = unknown> {
26324
27020
  */
26325
27021
  getPreorderDegree: (data: GetPreorderDegreeRequest$1, params?: RequestParams) => Promise<HttpResponse<GetPreorderDegreeResponse$1, any>>;
26326
27022
  /**
26327
- * No description
27023
+ * @description With `?format=osfql` the sort is returned as its commented OSFQL `DEFINE` block (`text/plain`, `ETag` = SHA-256 of the body) instead of the JSON DTO — the single-sort companion of `GET /api/v1/sorts/schema`.
26328
27024
  *
26329
27025
  * @tags sorts
26330
27026
  * @name GetSort
26331
27027
  * @summary Get a sort by ID
26332
27028
  * @request GET:/api/v1/sorts/{id}
26333
27029
  */
26334
- getSort: (id: string, params?: RequestParams) => Promise<HttpResponse<SortResponse$1, void>>;
27030
+ getSort: (id: string, query?: {
27031
+ /**
27032
+ * Optional response format. `osfql` renders the sort as its commented
27033
+ * `DEFINE` DDL (`text/plain`); `json` (or absent) keeps the JSON DTO.
27034
+ * The bulk schema route (`/api/v1/sorts/schema`) accepts only `osfql`.
27035
+ */
27036
+ format?: string | null;
27037
+ }, params?: RequestParams) => Promise<HttpResponse<SortResponse$1, void>>;
26335
27038
  /**
26336
27039
  * No description
26337
27040
  *
@@ -26341,6 +27044,55 @@ declare class Sorts<SecurityDataType = unknown> {
26341
27044
  * @request POST:/api/v1/sorts/similarity/get
26342
27045
  */
26343
27046
  getSortSimilarity: (data: GetSortSimilarityRequest$1, params?: RequestParams) => Promise<HttpResponse<GetSortSimilarityResponse$1, any>>;
27047
+ /**
27048
+ * @description The bulk companion of `?format=osfql` on the by-id route: a single deterministic, re-parseable `text/plain` block of commented `DEFINE` statements (one per sort, ordered by name) for LLM prompt conditioning and replayable export. Supports the tenant listing's filters (`name_prefix`, `include_system`, `needs_review`, `llm_extracted`, and `offset`/`limit`, applied after the deterministic ordering so pages are stable). The `ETag` is the SHA-256 of the body, so prompt-conditioning consumers get a stable cache key for "schema unchanged".
27049
+ *
27050
+ * @tags sorts
27051
+ * @name GetSortsSchema
27052
+ * @summary Export the authenticated tenant's schema as one OSFQL DDL block
27053
+ * @request GET:/api/v1/sorts/schema
27054
+ * @secure
27055
+ */
27056
+ getSortsSchema: (query?: {
27057
+ /**
27058
+ * Optional response format. `osfql` renders the sort as its commented
27059
+ * `DEFINE` DDL (`text/plain`); `json` (or absent) keeps the JSON DTO.
27060
+ * The bulk schema route (`/api/v1/sorts/schema`) accepts only `osfql`.
27061
+ */
27062
+ format?: string | null;
27063
+ /**
27064
+ * Include system-defined sorts in the response.
27065
+ * System sorts are built-in types like Thing, Person, etc.
27066
+ * Defaults to false (system sorts are excluded by default).
27067
+ */
27068
+ include_system?: boolean;
27069
+ /**
27070
+ * Maximum number of sorts to return. When omitted, no cap is
27071
+ * applied (legacy behaviour). Recommended page size for
27072
+ * production tenants: 50_000.
27073
+ * @min 0
27074
+ */
27075
+ limit?: number | null;
27076
+ /** Filter to only show LLM-extracted sorts */
27077
+ llm_extracted?: boolean | null;
27078
+ /**
27079
+ * Filter to sorts whose name starts with this prefix.
27080
+ * Supports comma-separated multiple prefixes (e.g. "drug_,target_,pathway_,disease_").
27081
+ * Server-side filtering avoids transferring millions of irrelevant sorts.
27082
+ */
27083
+ name_prefix?: string | null;
27084
+ /** Filter to only show sorts needing review */
27085
+ needs_review?: boolean | null;
27086
+ /**
27087
+ * Zero-indexed pagination offset. Combined with ``limit`` this
27088
+ * lets clients stream a production tenant (1 M+ sorts, ~500 MB
27089
+ * uncompressed) as a sequence of small responses, avoiding the
27090
+ * ``IncompleteRead`` a single-response transfer reliably hits
27091
+ * above ~30 MB.
27092
+ * @min 0
27093
+ */
27094
+ offset?: number | null;
27095
+ }, params?: RequestParams) => Promise<HttpResponse<string, void>>;
26344
27096
  /**
26345
27097
  * No description
26346
27098
  *
@@ -26445,6 +27197,15 @@ declare class Sorts<SecurityDataType = unknown> {
26445
27197
  /** Search query (sort name substring) */
26446
27198
  q: string;
26447
27199
  }, params?: RequestParams) => Promise<HttpResponse<SearchSortsResponse, any>>;
27200
+ /**
27201
+ * @description Subsumption is **directional**: ⊑·(s₁, s₂) and ⊑·(s₂, s₁) are different assertions. For the symmetric relation use `/api/v1/sorts/similarity`. The degree must be in [0, 1] and the assignment must keep the relation a fuzzy partial order (max–min transitivity, antisymmetry); one that does not is rejected rather than stored.
27202
+ *
27203
+ * @tags sorts
27204
+ * @name SetFuzzySubsumption
27205
+ * @summary Set the fuzzy subsumption degree `sub ⊑· sup` between two sorts
27206
+ * @request POST:/api/v1/sorts/subsumption
27207
+ */
27208
+ setFuzzySubsumption: (data: SetFuzzySubsumptionRequest, params?: RequestParams) => Promise<HttpResponse<SetFuzzySubsumptionResponse, any>>;
26448
27209
  /**
26449
27210
  * @description Similarity is symmetric: ∼(s₁, s₂) = ∼(s₂, s₁) Degree must be in [0, 1] range.
26450
27211
  *
@@ -29120,11 +29881,11 @@ declare class Inference<SecurityDataType = unknown> {
29120
29881
  */
29121
29882
  bulkRetractTerms: (data: BulkRetractTermsRequest, params?: RequestParams) => Promise<HttpResponse<BulkRetractTermsResponse, any>>;
29122
29883
  /**
29123
- * @description # DEPRECATED This endpoint is deprecated. Use `DELETE /api/v1/terms/{term_id}` for individual terms. # TRUE HOMOICONIC API # Authorization Requires X-Tenant-Id header.
29884
+ * @description This drops the hydrated base facts, the forward-chain `persist_derived` facts and the residuation store, then forgets the hydration flag so the next request reloads the base facts from PostgreSQL. **It does not delete durable data.** The terms are the authority; this is their cache. That makes it the retraction primitive forward chaining otherwise lacks. Chaining is monotonic — delete a `blocks` edge and the derived "A blocks B" survives every later pass, so the KB keeps asserting a relationship the user removed. Clearing and re-chaining rebuilds the closure from the terms that actually exist. # History Until 2026-07-28 this handler enumerated every term in the tenant and deleted it from PostgreSQL, while calling itself "clear facts" and reporting `"Cleared N facts/rules"`. It is reachable with an ordinary tenant credential — unlike `/api/v1/admin/clear-tenant/{tenant_id}`, which gateways block — so a caller reading the name, the path or the response body had no way to know it was a tenant wipe. It destroyed a live tenant that way. Use `DELETE /api/v1/terms/{term_id}` to delete a term, and the admin route to wipe a tenant; deleting durable data must not be something an endpoint does as a side effect of its name. # Authorization Requires X-Tenant-Id header, and the path tenant must match it.
29124
29885
  *
29125
29886
  * @tags inference
29126
29887
  * @name ClearFacts
29127
- * @summary Clear all facts and rules for a tenant
29888
+ * @summary Clear a tenant's in-memory inference working set.
29128
29889
  * @request DELETE:/api/v1/inference/facts/{tenant_id}
29129
29890
  * @secure
29130
29891
  */
@@ -42351,7 +43112,7 @@ declare class Reasoning<SecurityDataType = unknown> {
42351
43112
  http: HttpClient<SecurityDataType>;
42352
43113
  constructor(http: HttpClient<SecurityDataType>);
42353
43114
  /**
42354
- * @description POST /api/v1/reasoning/disentailment Disentailment A =/=> B means: "if A holds, then B must NOT hold" Returns whether the disentailment is violated (conflict: both A and B hold)
43115
+ * @description POST /api/v1/reasoning/disentailment Disentailment A =/=> B means: "if A holds, then B must NOT hold". Returns whether the disentailment is violated — the conflict where the facts establish A and B follows anyway. This is hierarchy-aware and graded on the same footing as the entailment route, so a conflict reachable only through the sort lattice (a `contaminated` clause held by a `lead_paint` fact that subsumes it) is detected without that clause being supplied as a fact. `A ⇏ B` is violated exactly to the degree `A ⇒ B` is established, so `degree` here reports the complement: how strongly the disentailment still holds.
42355
43116
  *
42356
43117
  * @tags reasoning
42357
43118
  * @name Disentailment
@@ -42360,7 +43121,7 @@ declare class Reasoning<SecurityDataType = unknown> {
42360
43121
  */
42361
43122
  disentailment: (data: DisentailmentRequest$1, params?: RequestParams) => Promise<HttpResponse<DisentailmentResponse$1, any>>;
42362
43123
  /**
42363
- * @description POST /api/v1/reasoning/entailment Returns whether antecedent entails consequent
43124
+ * @description POST /api/v1/reasoning/entailment Answers `facts antecedent ⇒ consequent`, hierarchy-aware and graded. A clause holds in the fact base to the degree that some fact *witnesses* it — that is, to the degree the clause subsumes a fact — so a `sparrow` fact establishes the clause `animal` without an `animal` fact being supplied. The consequent is additionally established when it subsumes the antecedent it would follow from. See [`osfkb_domain::operations::homoiconic_entailment`] for the full semantics. `entails` is the crisp reading of `degree`; `degree`, `antecedent_degree` and `consequent_degree` are computed from the sort lattice (crisply, and through explicit fuzzy `⊑·` relations and approved sort similarity), never cast from the boolean.
42364
43125
  *
42365
43126
  * @tags reasoning
42366
43127
  * @name Entailment
@@ -45217,6 +45978,16 @@ declare class StructuredIngestion<SecurityDataType = unknown> {
45217
45978
  * @secure
45218
45979
  */
45219
45980
  deleteSource: (sourceId: string, params?: RequestParams) => Promise<HttpResponse<void, void>>;
45981
+ /**
45982
+ * @description Refused with 409 while a registered source still references the file's path (the source's adapter would otherwise hold a dangling `file_path`). After that source is unregistered, the delete succeeds (204). A missing sidecar (no such upload id) is 404.
45983
+ *
45984
+ * @tags structured_ingestion
45985
+ * @name DeleteSourceFile
45986
+ * @summary Delete a tenant-uploaded source file (#107).
45987
+ * @request DELETE:/api/v1/sources/files/{id}
45988
+ * @secure
45989
+ */
45990
+ deleteSourceFile: (id: string, params?: RequestParams) => Promise<HttpResponse<void, void>>;
45220
45991
  /**
45221
45992
  * @description Performs schema introspection on the source to discover types (sorts), features (fields), and relations. This is a preview operation - no data is ingested. `type_filter` narrows the discovery to a named subset **without re-registering the source** — the escape hatch a client uses after `/tables` when the source is over the discovery cap (#66, Gap 2). It conjoins with the source config's own `include_tables`: a request narrows *within* the registration, it cannot widen past it.
45222
45993
  *
@@ -45247,6 +46018,16 @@ declare class StructuredIngestion<SecurityDataType = unknown> {
45247
46018
  * @secure
45248
46019
  */
45249
46020
  ingestFromSource: (sourceId: string, data: IngestFromSourceRequest$1, params?: RequestParams) => Promise<HttpResponse<IngestFromSourceResponse$1, void>>;
46021
+ /**
46022
+ * @description Walks `{base}/{tenant_id}/*\/​.meta.json`. A missing tenant dir yields an empty list (200), not 404 — a tenant that never uploaded is not an error.
46023
+ *
46024
+ * @tags structured_ingestion
46025
+ * @name ListSourceFiles
46026
+ * @summary List the calling tenant's uploaded source files (#107).
46027
+ * @request GET:/api/v1/sources/files
46028
+ * @secure
46029
+ */
46030
+ listSourceFiles: (params?: RequestParams) => Promise<HttpResponse<UploadedSourceFileDto[], any>>;
45250
46031
  /**
45251
46032
  * No description
45252
46033
  *
@@ -45287,6 +46068,16 @@ declare class StructuredIngestion<SecurityDataType = unknown> {
45287
46068
  * @secure
45288
46069
  */
45289
46070
  registerSource: (data: RegisterSourceRequest$1, params?: RequestParams) => Promise<HttpResponse<RegisterSourceResponse$1, void>>;
46071
+ /**
46072
+ * @description Multipart, one field named `file`. Streamed to disk under `{base}/{tenant_id}/{id}/{safe_name}` with a `.meta.json` sidecar. The response `path` is the engine-internal location handed to `POST /api/v1/sources` as `config.file_path` (csv/parquet) or `config.database_path` (sqlite).
46073
+ *
46074
+ * @tags structured_ingestion
46075
+ * @name UploadSourceFile
46076
+ * @summary Upload a file-based source artifact for the calling tenant (#107).
46077
+ * @request POST:/api/v1/sources/files
46078
+ * @secure
46079
+ */
46080
+ uploadSourceFile: (data: string, params?: RequestParams) => Promise<HttpResponse<UploadedSourceFileDto, void>>;
45290
46081
  }
45291
46082
 
45292
46083
  /**
@@ -47998,6 +48789,15 @@ declare class DiscoveryClient {
47998
48789
  declare class Extraction<SecurityDataType = unknown> {
47999
48790
  http: HttpClient<SecurityDataType>;
48000
48791
  constructor(http: HttpClient<SecurityDataType>);
48792
+ /**
48793
+ * @description Read-only with respect to the knowledge base: certification inspects the tenant's sort lattice and never writes a term. Certificates *are* written to the verification certificate store, so the batch is auditable afterwards.
48794
+ *
48795
+ * @tags extraction
48796
+ * @name CertifyExtraction
48797
+ * @summary `POST /api/v1/extraction/certify` — gate a batch of extraction candidates through the OSF well-sortedness certifier before they may become durable KB content.
48798
+ * @request POST:/api/v1/extraction/certify
48799
+ */
48800
+ certifyExtraction: (data: ExtractionCertifyRequest, params?: RequestParams) => Promise<HttpResponse<ExtractionCertifyResponse, void>>;
48001
48801
  /**
48002
48802
  * @description Uses GLiNER2 (zero-shot NER) with sort names from the tenant's knowledge base, guaranteeing that all returned entity labels are valid sort names. Label selection (when no explicit labels provided): Embed the input text and ANN-search the pre-computed sort embedding index (Qdrant) for the most semantically similar HPO sorts. This is O(log n) and typically returns 20-100 highly relevant labels from 19K+ HPO sorts. Requires: - GLiNER2 NER service (`GLINER_NER_URL`) - Qdrant vector store for semantic label selection If either is not configured, returns a 500 error.
48003
48803
  *
@@ -48096,6 +48896,16 @@ declare class DocumentAnalysis<SecurityDataType = unknown> {
48096
48896
  declare class Documents<SecurityDataType = unknown> {
48097
48897
  http: HttpClient<SecurityDataType>;
48098
48898
  constructor(http: HttpClient<SecurityDataType>);
48899
+ /**
48900
+ * No description
48901
+ *
48902
+ * @tags documents
48903
+ * @name EraseDocument
48904
+ * @summary Erase a document and everything extracted from it
48905
+ * @request DELETE:/api/v1/documents/{id}
48906
+ * @secure
48907
+ */
48908
+ eraseDocument: (id: string, params?: RequestParams) => Promise<HttpResponse<DocumentErasureReport, void>>;
48099
48909
  /**
48100
48910
  * No description
48101
48911
  *
@@ -52708,6 +53518,15 @@ declare class Health<SecurityDataType = unknown> {
52708
53518
  * @request GET:/health
52709
53519
  */
52710
53520
  healthCheck: (params?: RequestParams) => Promise<HttpResponse<EnrichedHealthResponse$1, EnrichedHealthResponse$1>>;
53521
+ /**
53522
+ * No description
53523
+ *
53524
+ * @tags health
53525
+ * @name HealthCheckApi
53526
+ * @summary `GET /api/v1/health` — the same enriched health check under the `/api/v1` prefix. The playground front proxy forwards only `/api/*` to the engine (and answers the bare `/health` itself with a static OK), so THIS is the path that makes the deployed `build_info.version` publicly readable — a stale rollout must never be indistinguishable from a fresh one.
53527
+ * @request GET:/api/v1/health
53528
+ */
53529
+ healthCheckApi: (params?: RequestParams) => Promise<HttpResponse<EnrichedHealthResponse$1, EnrichedHealthResponse$1>>;
52711
53530
  }
52712
53531
 
52713
53532
  /** Build information from the backend server. */
@@ -53434,6 +54253,16 @@ declare class Generation<SecurityDataType = unknown> {
53434
54253
  * @secure
53435
54254
  */
53436
54255
  generateDocument: (data: GenerateDocumentRequest$1, params?: RequestParams) => Promise<HttpResponse<GenerateDocumentResponse$1, void>>;
54256
+ /**
54257
+ * @description POST /api/v1/text/generate
54258
+ *
54259
+ * @tags generation
54260
+ * @name GenerateText
54261
+ * @summary Run the caller's system prompt over their text.
54262
+ * @request POST:/api/v1/text/generate
54263
+ * @secure
54264
+ */
54265
+ generateText: (data: TextGenerateRequest, params?: RequestParams) => Promise<HttpResponse<TextGenerateResponse, void>>;
53437
54266
  /**
53438
54267
  * @description Returns `503` when no in-process Gemma is loaded (server started without `OSFKB_OSFQL_GEMMA_DIR`), `400` on an empty prompt, and `422` when the tenant has no persisted lattice to constrain to (ingest a theory with `persist:true` first).
53439
54268
  *
@@ -56229,6 +57058,33 @@ interface PaperMetadataDto {
56229
57058
  source: PaperSource;
56230
57059
  /** URL to full text. */
56231
57060
  fullTextUrl?: string | null;
57061
+ /**
57062
+ * Stable paper identity (`doi:…`, `pmid:…`, `arxiv:…` or `title:…`).
57063
+ *
57064
+ * The join key between a paper listed on a session and the `paperKey`
57065
+ * carried by findings, evidence items and contradiction sides — `doi`,
57066
+ * `pmid` and `arxivId` are each individually optional, so this is the only
57067
+ * identifier guaranteed for every paper. `null` only when talking to a
57068
+ * backend that predates paper attribution.
57069
+ */
57070
+ paperKey?: string | null;
57071
+ }
57072
+ /**
57073
+ * A citable reference to the paper a statement came from.
57074
+ *
57075
+ * Claims, evidence items and contradiction sides are keyed internally by
57076
+ * OSFKB term UUIDs, which no consumer can resolve back to a document. This is
57077
+ * the resolvable counterpart: `paperKey` is the stable identity, and
57078
+ * `doi`/`title` are carried alongside so rendering a citation needs no second
57079
+ * lookup.
57080
+ */
57081
+ interface PaperRefDto {
57082
+ /** Stable paper identity (`doi:…`, `pmid:…`, `arxiv:…` or `title:…`). */
57083
+ paperKey: string;
57084
+ /** DOI of the paper, when it has one. */
57085
+ doi?: string | null;
57086
+ /** Paper title, for display. */
57087
+ title: string;
56232
57088
  }
56233
57089
  /** A search result with relevance score. */
56234
57090
  interface PaperSearchResultDto {
@@ -56280,6 +57136,13 @@ interface ResearchSessionResponse {
56280
57136
  error?: string | null;
56281
57137
  /** Results from each completed cycle. */
56282
57138
  cycles: ResearchCycleResultDto[];
57139
+ /**
57140
+ * Papers ingested so far, with full metadata (title, authors, DOI, URL).
57141
+ *
57142
+ * This is the session's actual corpus — `totalPapersIngested` is only its
57143
+ * length. Empty against a backend that does not send it.
57144
+ */
57145
+ papers: PaperMetadataDto[];
56283
57146
  /** Total papers ingested. */
56284
57147
  totalPapersIngested: number;
56285
57148
  /** Total findings. */
@@ -56335,6 +57198,10 @@ interface ResearchCycleResultDto {
56335
57198
  claimsVerified: number;
56336
57199
  /** Contradictions detected. */
56337
57200
  contradictionsDetected: number;
57201
+ /** Contradictions resolved via evidence comparison. `0` if the backend omits it. */
57202
+ contradictionsResolved: number;
57203
+ /** Claims merged via entailment detection. `0` if the backend omits it. */
57204
+ claimsMerged: number;
56338
57205
  /** Processing time for this cycle in milliseconds. */
56339
57206
  processingTimeMs: number;
56340
57207
  /** Search queries used. */
@@ -56372,6 +57239,14 @@ interface EvidenceItemSummaryDto {
56372
57239
  contribution: number;
56373
57240
  /** DOI of the paper providing this evidence. */
56374
57241
  paperDoi?: string | null;
57242
+ /**
57243
+ * Stable key of the paper providing this evidence.
57244
+ *
57245
+ * Present even when the paper has no DOI, which `paperDoi` cannot cover.
57246
+ */
57247
+ paperKey?: string | null;
57248
+ /** Title of the paper providing this evidence, for display. */
57249
+ paperTitle?: string | null;
56375
57250
  }
56376
57251
  /** A step in the provenance chain. */
56377
57252
  interface ProvenanceStepDto {
@@ -56384,6 +57259,21 @@ interface ProvenanceStepDto {
56384
57259
  /** Timestamp (ISO 8601). */
56385
57260
  timestamp?: string | null;
56386
57261
  }
57262
+ /**
57263
+ * A feature that is residuated — suspended because data is missing.
57264
+ *
57265
+ * Per-feature rather than binary at the claim level: each entry names a
57266
+ * specific piece of missing information that, once supplied, would strengthen
57267
+ * or change the assessment.
57268
+ */
57269
+ interface ResiduatedFeatureDto {
57270
+ /** Feature name that is missing or incomplete. */
57271
+ featureName: string;
57272
+ /** What sort would satisfy this feature. */
57273
+ neededSort?: string | null;
57274
+ /** Information gain from resolving this feature (0.0-1.0). */
57275
+ infoGain: number;
57276
+ }
56387
57277
  /** A verified research finding. */
56388
57278
  interface ResearchFindingDto {
56389
57279
  /** OSFKB term ID of the claim. */
@@ -56404,6 +57294,16 @@ interface ResearchFindingDto {
56404
57294
  residuated: boolean;
56405
57295
  /** Reason for residuation. */
56406
57296
  residuationReason?: string | null;
57297
+ /** Specific features that are residuated, enabling targeted gap filling. */
57298
+ residuatedFeatures: ResiduatedFeatureDto[];
57299
+ /**
57300
+ * Papers the claim was extracted from.
57301
+ *
57302
+ * `claimId` is an OSFKB term UUID and is not resolvable by a consumer; this
57303
+ * is what makes the finding citable. A claim drawn from several papers
57304
+ * carries several refs. Empty when the backend has no attribution for it.
57305
+ */
57306
+ sources: PaperRefDto[];
56407
57307
  }
56408
57308
  /** Response containing research findings. */
56409
57309
  interface ResearchFindingsResponse {
@@ -56436,6 +57336,31 @@ interface ResearchGapsResponse {
56436
57336
  /** Total gaps count. */
56437
57337
  total: number;
56438
57338
  }
57339
+ /** Strategy used to resolve a contradiction between two claims. */
57340
+ type ResolutionStrategyDto = 'EvidenceStrength' | 'EvidenceCount' | 'Unresolvable';
57341
+ /**
57342
+ * Resolution of a detected contradiction, by evidence-strength comparison.
57343
+ *
57344
+ * When two claims contradict, their evidence assessment scores are compared:
57345
+ * the better-supported claim is preferred and the weaker one dismissed. A
57346
+ * `strategy` of `'Unresolvable'` means the two sides were too close to call.
57347
+ */
57348
+ interface ContradictionResolutionDto {
57349
+ /** ID of the preferred claim (stronger evidence). */
57350
+ preferredClaimId: string;
57351
+ /** ID of the dismissed claim (weaker evidence). */
57352
+ dismissedClaimId: string;
57353
+ /** Truthfulness score of the preferred claim. */
57354
+ preferredTruthfulness: number;
57355
+ /** Truthfulness score of the dismissed claim. */
57356
+ dismissedTruthfulness: number;
57357
+ /** Strategy used to resolve the contradiction. */
57358
+ strategy: ResolutionStrategyDto;
57359
+ /** Confidence in the resolution (0.0-1.0). */
57360
+ confidence: number;
57361
+ /** Human-readable explanation of the resolution. */
57362
+ explanation: string;
57363
+ }
56439
57364
  /** A detected contradiction between two claims. */
56440
57365
  interface ContradictionDto {
56441
57366
  /** OSFKB term ID of the first claim. */
@@ -56450,6 +57375,17 @@ interface ContradictionDto {
56450
57375
  confidence: number;
56451
57376
  /** Explanation of the contradiction. */
56452
57377
  explanation: string;
57378
+ /** Resolution of the contradiction, if it was resolved by evidence comparison. */
57379
+ resolution?: ContradictionResolutionDto | null;
57380
+ /**
57381
+ * Papers the first claim was extracted from.
57382
+ *
57383
+ * Without it "these two claims disagree" is unactionable — a reader cannot
57384
+ * tell which literature each side comes from.
57385
+ */
57386
+ claimASources: PaperRefDto[];
57387
+ /** Papers the second claim was extracted from. */
57388
+ claimBSources: PaperRefDto[];
56453
57389
  }
56454
57390
  /** Response containing contradictions. */
56455
57391
  interface ResearchContradictionsResponse {
@@ -56480,6 +57416,10 @@ interface ResearchStatisticsDto {
56480
57416
  gapsResolved: number;
56481
57417
  /** Knowledge gaps remaining. */
56482
57418
  gapsRemaining: number;
57419
+ /** Claims merged via entailment detection. `0` if the backend omits it. */
57420
+ claimsMerged: number;
57421
+ /** Contradictions resolved via evidence comparison. `0` if the backend omits it. */
57422
+ contradictionsResolved: number;
56483
57423
  }
56484
57424
  /** Report verification result. */
56485
57425
  interface ReportVerificationDto {
@@ -56557,6 +57497,7 @@ interface VerifyClaimResponse {
56557
57497
  }
56558
57498
 
56559
57499
  type research_ContradictionDto = ContradictionDto;
57500
+ type research_ContradictionResolutionDto = ContradictionResolutionDto;
56560
57501
  type research_CreateResearchSessionRequest = CreateResearchSessionRequest;
56561
57502
  type research_CreateResearchSessionResponse = CreateResearchSessionResponse;
56562
57503
  type research_EvidenceItemSummaryDto = EvidenceItemSummaryDto;
@@ -56565,6 +57506,7 @@ type research_IngestPaperResponse = IngestPaperResponse;
56565
57506
  type research_KnowledgeGapDto = KnowledgeGapDto;
56566
57507
  type research_ListResearchSessionsResponse = ListResearchSessionsResponse;
56567
57508
  type research_PaperMetadataDto = PaperMetadataDto;
57509
+ type research_PaperRefDto = PaperRefDto;
56568
57510
  type research_PaperSearchResultDto = PaperSearchResultDto;
56569
57511
  type research_PaperSource = PaperSource;
56570
57512
  type research_ProvenanceStepDto = ProvenanceStepDto;
@@ -56580,13 +57522,15 @@ type research_ResearchSessionResponse = ResearchSessionResponse;
56580
57522
  type research_ResearchSessionStatusDto = ResearchSessionStatusDto;
56581
57523
  type research_ResearchSessionSummaryDto = ResearchSessionSummaryDto;
56582
57524
  type research_ResearchStatisticsDto = ResearchStatisticsDto;
57525
+ type research_ResiduatedFeatureDto = ResiduatedFeatureDto;
57526
+ type research_ResolutionStrategyDto = ResolutionStrategyDto;
56583
57527
  type research_RunResearchCycleRequest = RunResearchCycleRequest;
56584
57528
  type research_SearchPapersRequest = SearchPapersRequest;
56585
57529
  type research_SearchPapersResponse = SearchPapersResponse;
56586
57530
  type research_VerifyClaimRequest = VerifyClaimRequest;
56587
57531
  type research_VerifyClaimResponse = VerifyClaimResponse;
56588
57532
  declare namespace research {
56589
- export type { research_ContradictionDto as ContradictionDto, research_CreateResearchSessionRequest as CreateResearchSessionRequest, research_CreateResearchSessionResponse as CreateResearchSessionResponse, research_EvidenceItemSummaryDto as EvidenceItemSummaryDto, research_IngestPaperRequest as IngestPaperRequest, research_IngestPaperResponse as IngestPaperResponse, research_KnowledgeGapDto as KnowledgeGapDto, research_ListResearchSessionsResponse as ListResearchSessionsResponse, research_PaperMetadataDto as PaperMetadataDto, research_PaperSearchResultDto as PaperSearchResultDto, research_PaperSource as PaperSource, research_ProvenanceStepDto as ProvenanceStepDto, research_ReportVerificationDto as ReportVerificationDto, research_ResearchContradictionsResponse as ResearchContradictionsResponse, research_ResearchCycleResponse as ResearchCycleResponse, research_ResearchCycleResultDto as ResearchCycleResultDto, research_ResearchFindingDto as ResearchFindingDto, research_ResearchFindingsResponse as ResearchFindingsResponse, research_ResearchGapsResponse as ResearchGapsResponse, research_ResearchReportResponse as ResearchReportResponse, research_ResearchSessionResponse as ResearchSessionResponse, research_ResearchSessionStatusDto as ResearchSessionStatusDto, research_ResearchSessionSummaryDto as ResearchSessionSummaryDto, research_ResearchStatisticsDto as ResearchStatisticsDto, research_RunResearchCycleRequest as RunResearchCycleRequest, research_SearchPapersRequest as SearchPapersRequest, research_SearchPapersResponse as SearchPapersResponse, research_VerifyClaimRequest as VerifyClaimRequest, research_VerifyClaimResponse as VerifyClaimResponse };
57533
+ export type { research_ContradictionDto as ContradictionDto, research_ContradictionResolutionDto as ContradictionResolutionDto, research_CreateResearchSessionRequest as CreateResearchSessionRequest, research_CreateResearchSessionResponse as CreateResearchSessionResponse, research_EvidenceItemSummaryDto as EvidenceItemSummaryDto, research_IngestPaperRequest as IngestPaperRequest, research_IngestPaperResponse as IngestPaperResponse, research_KnowledgeGapDto as KnowledgeGapDto, research_ListResearchSessionsResponse as ListResearchSessionsResponse, research_PaperMetadataDto as PaperMetadataDto, research_PaperRefDto as PaperRefDto, research_PaperSearchResultDto as PaperSearchResultDto, research_PaperSource as PaperSource, research_ProvenanceStepDto as ProvenanceStepDto, research_ReportVerificationDto as ReportVerificationDto, research_ResearchContradictionsResponse as ResearchContradictionsResponse, research_ResearchCycleResponse as ResearchCycleResponse, research_ResearchCycleResultDto as ResearchCycleResultDto, research_ResearchFindingDto as ResearchFindingDto, research_ResearchFindingsResponse as ResearchFindingsResponse, research_ResearchGapsResponse as ResearchGapsResponse, research_ResearchReportResponse as ResearchReportResponse, research_ResearchSessionResponse as ResearchSessionResponse, research_ResearchSessionStatusDto as ResearchSessionStatusDto, research_ResearchSessionSummaryDto as ResearchSessionSummaryDto, research_ResearchStatisticsDto as ResearchStatisticsDto, research_ResiduatedFeatureDto as ResiduatedFeatureDto, research_ResolutionStrategyDto as ResolutionStrategyDto, research_RunResearchCycleRequest as RunResearchCycleRequest, research_SearchPapersRequest as SearchPapersRequest, research_SearchPapersResponse as SearchPapersResponse, research_VerifyClaimRequest as VerifyClaimRequest, research_VerifyClaimResponse as VerifyClaimResponse };
56590
57534
  }
56591
57535
 
56592
57536
  /**
@@ -57868,6 +58812,36 @@ declare class Compliance<SecurityDataType = unknown> {
57868
58812
  * @secure
57869
58813
  */
57870
58814
  captureSnapshot: (data: CaptureSnapshotRequest$1, params?: RequestParams) => Promise<HttpResponse<PredictionSnapshot$1, any>>;
58815
+ /**
58816
+ * No description
58817
+ *
58818
+ * @tags compliance
58819
+ * @name CreateDsr
58820
+ * @summary File a GDPR data subject request
58821
+ * @request POST:/api/v1/dsr
58822
+ * @secure
58823
+ */
58824
+ createDsr: (data: CreateDsrRequest, params?: RequestParams) => Promise<HttpResponse<DsrRecordResponse, void>>;
58825
+ /**
58826
+ * @description **Dry run by default.** An exact match on an identifying feature is the only deterministic way to resolve a person to terms, but exactness is not uniqueness — two people share a name. Erasing on a bare match would silently destroy a homonym's data, and erasure is irreversible, so the plan has to be inspectable before it runs. Pass `confirm: true` once the match has been reviewed.
58827
+ *
58828
+ * @tags compliance
58829
+ * @name EraseSubject
58830
+ * @summary Plan or execute erasure of a data subject's terms
58831
+ * @request POST:/api/v1/dsr/{id}/erase
58832
+ * @secure
58833
+ */
58834
+ eraseSubject: (id: string, data: SubjectErasureRequest, params?: RequestParams) => Promise<HttpResponse<SubjectErasureReport, void>>;
58835
+ /**
58836
+ * No description
58837
+ *
58838
+ * @tags compliance
58839
+ * @name GetDsr
58840
+ * @summary Read a data subject request
58841
+ * @request GET:/api/v1/dsr/{id}
58842
+ * @secure
58843
+ */
58844
+ getDsr: (id: string, params?: RequestParams) => Promise<HttpResponse<DsrRecordResponse, void>>;
57871
58845
  /**
57872
58846
  * No description
57873
58847
  *
@@ -57918,12 +58892,22 @@ declare class Compliance<SecurityDataType = unknown> {
57918
58892
  */
57919
58893
  since?: string | null;
57920
58894
  /** Sort field. Defaults to `timestamp`. */
57921
- sort_by?: any;
58895
+ sort_by?: AuditSortField$1;
57922
58896
  /** Sort direction. Defaults to `desc` (most-recent-first). */
57923
- sort_order?: any;
58897
+ sort_order?: AuditSortOrder$1;
57924
58898
  /** Inclusive upper bound on `timestamp` (RFC 3339). */
57925
58899
  until?: string | null;
57926
58900
  }, params?: RequestParams) => Promise<HttpResponse<AuditPage$1, void>>;
58901
+ /**
58902
+ * No description
58903
+ *
58904
+ * @tags compliance
58905
+ * @name ListDsr
58906
+ * @summary List a data subject's requests
58907
+ * @request GET:/api/v1/dsr
58908
+ * @secure
58909
+ */
58910
+ listDsr: (params?: RequestParams) => Promise<HttpResponse<DsrRecordResponse[], any>>;
57927
58911
  /**
57928
58912
  * No description
57929
58913
  *
@@ -60187,6 +61171,16 @@ declare class OntologyBridge<SecurityDataType = unknown> {
60187
61171
  * @secure
60188
61172
  */
60189
61173
  bulkBindSorts: (data: BulkBindSortsRequest$1, params?: RequestParams) => Promise<HttpResponse<BulkBindSortsResponse$1, any>>;
61174
+ /**
61175
+ * @description The gap this closes (#133): the engine could lower OSFQL to a source's native language and could execute native queries, and the two were never reachable together over HTTP. `POST /api/v1/osfql` runs against the knowledge base and never consults a binding; `POST /api/v1/ontology/transpile` emits the query text and stops. A `transpile`-mode source — which deliberately ingests nothing — therefore had no way to be queried at all, and asking about its data returned an empty result indistinguishable from a broken connector. The dialect is derived from the source's type, never taken from the caller: the binding says which source answers for the sort, and that source's type is the only dialect that could run. Letting a caller name one would let them ask for Cypher against Postgres. The emitted query is returned with the rows. Transpile mode's claim is that OSFQL becomes a native query against the operator's own database; returning only rows leaves that unverifiable.
61176
+ *
61177
+ * @tags ontology_bridge
61178
+ * @name ExecuteTranspiled
61179
+ * @summary Transpile an OSFQL MATCH and execute it on the source it is bound to.
61180
+ * @request POST:/api/v1/ontology/query
61181
+ * @secure
61182
+ */
61183
+ executeTranspiled: (data: ExecuteTranspiledRequest, params?: RequestParams) => Promise<HttpResponse<ExecuteTranspiledResponse, void>>;
60190
61184
  /**
60191
61185
  * @description Produces query tools, write tools, and inference tools from the current sort hierarchy and SQL bindings, along with a system prompt suitable for grounding an LLM.
60192
61186
  *
@@ -60228,7 +61222,7 @@ declare class OntologyBridge<SecurityDataType = unknown> {
60228
61222
  */
60229
61223
  listBindings: (params?: RequestParams) => Promise<HttpResponse<ListBindingsResponse$1, any>>;
60230
61224
  /**
60231
- * @description Parses the OSFQL query, compiles it, and transpiles the first `ScanBySort` operation to SQL using the current sort-table bindings.
61225
+ * @description Parses the OSFQL query, compiles it, and transpiles EVERY `ScanBySort` operation into one statement using the current sort-table bindings — a JOIN for the SQL dialects, a multi-pattern MATCH for Cypher. A plan operation that is not a scan is refused by name rather than dropped: `fully_transpilable` is what a caller checks to decide whether the emitted text is the whole question, and it reported `true` for a query half of which was never emitted (#134).
60232
61226
  *
60233
61227
  * @tags ontology_bridge
60234
61228
  * @name Transpile
@@ -69433,6 +70427,16 @@ declare class Speakers<SecurityDataType = unknown> {
69433
70427
  * @secure
69434
70428
  */
69435
70429
  enrollSpeaker: (data: EnrollSpeakerRequest$1, params?: RequestParams) => Promise<HttpResponse<EnrollSpeakerResponse$1, void>>;
70430
+ /**
70431
+ * @description POST /api/v1/speakers/identify
70432
+ *
70433
+ * @tags speakers
70434
+ * @name IdentifySpeakers
70435
+ * @summary Identify which enrolled voices speak in a piece of audio — no transcript.
70436
+ * @request POST:/api/v1/speakers/identify
70437
+ * @secure
70438
+ */
70439
+ identifySpeakers: (data: IdentifySpeakersRequest, params?: RequestParams) => Promise<HttpResponse<IdentifySpeakersResponse, void>>;
69436
70440
  /**
69437
70441
  * @description GET /api/v1/speakers
69438
70442
  *