@knowledge-stack/ksapi 2.5.0 → 2.7.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.
Files changed (73) hide show
  1. package/.openapi-generator/FILES +4 -0
  2. package/README.md +4 -2
  3. package/dist/apis/DocumentsApi.d.ts +9 -0
  4. package/dist/apis/DocumentsApi.js +9 -0
  5. package/dist/apis/SystemJobsApi.d.ts +4 -4
  6. package/dist/apis/SystemJobsApi.js +2 -2
  7. package/dist/esm/apis/DocumentsApi.d.ts +9 -0
  8. package/dist/esm/apis/DocumentsApi.js +9 -0
  9. package/dist/esm/apis/SystemJobsApi.d.ts +4 -4
  10. package/dist/esm/apis/SystemJobsApi.js +2 -2
  11. package/dist/esm/models/ChunkMetadata.d.ts +12 -0
  12. package/dist/esm/models/ChunkMetadata.js +4 -0
  13. package/dist/esm/models/CreateUploadRequest.d.ts +18 -0
  14. package/dist/esm/models/CreateUploadRequest.js +6 -0
  15. package/dist/esm/models/DocumentVersionMetadata.d.ts +7 -0
  16. package/dist/esm/models/DocumentVersionMetadata.js +3 -0
  17. package/dist/esm/models/DocumentVersionMetadataUpdate.d.ts +7 -0
  18. package/dist/esm/models/DocumentVersionMetadataUpdate.js +3 -0
  19. package/dist/esm/models/EmailMetadata.d.ts +119 -0
  20. package/dist/esm/models/EmailMetadata.js +65 -0
  21. package/dist/esm/models/EmailParty.d.ts +53 -0
  22. package/dist/esm/models/EmailParty.js +46 -0
  23. package/dist/esm/models/ImageTaxonomy.d.ts +1 -0
  24. package/dist/esm/models/ImageTaxonomy.js +1 -0
  25. package/dist/esm/models/IngestDocumentResponse.d.ts +18 -0
  26. package/dist/esm/models/IngestDocumentResponse.js +6 -0
  27. package/dist/esm/models/SegmentSpan.d.ts +9 -2
  28. package/dist/esm/models/SegmentSpan.js +2 -0
  29. package/dist/esm/models/index.d.ts +2 -0
  30. package/dist/esm/models/index.js +2 -0
  31. package/dist/models/ChunkMetadata.d.ts +12 -0
  32. package/dist/models/ChunkMetadata.js +4 -0
  33. package/dist/models/CreateUploadRequest.d.ts +18 -0
  34. package/dist/models/CreateUploadRequest.js +6 -0
  35. package/dist/models/DocumentVersionMetadata.d.ts +7 -0
  36. package/dist/models/DocumentVersionMetadata.js +3 -0
  37. package/dist/models/DocumentVersionMetadataUpdate.d.ts +7 -0
  38. package/dist/models/DocumentVersionMetadataUpdate.js +3 -0
  39. package/dist/models/EmailMetadata.d.ts +119 -0
  40. package/dist/models/EmailMetadata.js +73 -0
  41. package/dist/models/EmailParty.d.ts +53 -0
  42. package/dist/models/EmailParty.js +54 -0
  43. package/dist/models/ImageTaxonomy.d.ts +1 -0
  44. package/dist/models/ImageTaxonomy.js +1 -0
  45. package/dist/models/IngestDocumentResponse.d.ts +18 -0
  46. package/dist/models/IngestDocumentResponse.js +6 -0
  47. package/dist/models/SegmentSpan.d.ts +9 -2
  48. package/dist/models/SegmentSpan.js +2 -0
  49. package/dist/models/index.d.ts +2 -0
  50. package/dist/models/index.js +2 -0
  51. package/docs/ChunkMetadata.md +4 -0
  52. package/docs/CreateUploadRequest.md +6 -0
  53. package/docs/DocumentVersionMetadata.md +2 -0
  54. package/docs/DocumentVersionMetadataUpdate.md +2 -0
  55. package/docs/DocumentsApi.md +13 -4
  56. package/docs/EmailMetadata.md +57 -0
  57. package/docs/EmailParty.md +37 -0
  58. package/docs/IngestDocumentResponse.md +6 -0
  59. package/docs/SegmentSpan.md +3 -1
  60. package/docs/SystemJobsApi.md +1 -1
  61. package/package.json +1 -1
  62. package/src/apis/DocumentsApi.ts +21 -0
  63. package/src/apis/SystemJobsApi.ts +4 -4
  64. package/src/models/ChunkMetadata.ts +16 -0
  65. package/src/models/CreateUploadRequest.ts +24 -0
  66. package/src/models/DocumentVersionMetadata.ts +15 -0
  67. package/src/models/DocumentVersionMetadataUpdate.ts +15 -0
  68. package/src/models/EmailMetadata.ts +183 -0
  69. package/src/models/EmailParty.ts +91 -0
  70. package/src/models/ImageTaxonomy.ts +1 -0
  71. package/src/models/IngestDocumentResponse.ts +24 -0
  72. package/src/models/SegmentSpan.ts +11 -2
  73. package/src/models/index.ts +2 -0
@@ -122,6 +122,7 @@ export interface IngestDocumentRequest {
122
122
  name?: string | null;
123
123
  tagIds?: Array<string>;
124
124
  idempotencyKey?: string | null;
125
+ emailNestingDepth?: number;
125
126
  ingestionMode?: IngestionMode;
126
127
  chunkType?: ChunkType;
127
128
  secondaryTaxonomy?: ImageTaxonomy;
@@ -154,6 +155,8 @@ export interface ListDocumentsRequest {
154
155
  sortDir?: SortDirection;
155
156
  ownerId?: string | null;
156
157
  documentType?: DocumentType;
158
+ durationMinMs?: number | null;
159
+ durationMaxMs?: number | null;
157
160
  withTags?: boolean;
158
161
  limit?: number;
159
162
  offset?: number;
@@ -383,6 +386,7 @@ export interface DocumentsApiInterface {
383
386
  * @param {string} [name] Document name (defaults to filename)
384
387
  * @param {Array<string>} [tagIds] Tag IDs applied to the created document.
385
388
  * @param {string} [idempotencyKey] Opt-in key: a repeat with the same key at the same (parent, name) replays the existing document instead of a 409.
389
+ * @param {number} [emailNestingDepth] Internal: set by the email member fan-out when a nested email re-enters this endpoint. Leave at 0 for direct uploads.
386
390
  * @param {IngestionMode} [ingestionMode]
387
391
  * @param {ChunkType} [chunkType]
388
392
  * @param {ImageTaxonomy} [secondaryTaxonomy]
@@ -402,6 +406,7 @@ export interface DocumentsApiInterface {
402
406
  * @param {string} [name] Document name (defaults to filename)
403
407
  * @param {Array<string>} [tagIds] Tag IDs applied to the created document.
404
408
  * @param {string} [idempotencyKey] Opt-in key: a repeat with the same key at the same (parent, name) replays the existing document instead of a 409.
409
+ * @param {number} [emailNestingDepth] Internal: set by the email member fan-out when a nested email re-enters this endpoint. Leave at 0 for direct uploads.
405
410
  * @param {IngestionMode} [ingestionMode]
406
411
  * @param {ChunkType} [chunkType]
407
412
  * @param {ImageTaxonomy} [secondaryTaxonomy]
@@ -495,6 +500,8 @@ export interface DocumentsApiInterface {
495
500
  * @param {SortDirection} [sortDir] Sort direction; overrides the column\&#39;s natural default
496
501
  * @param {string} [ownerId] Filter to documents owned by this user
497
502
  * @param {DocumentType} [documentType] Filter to documents of this type
503
+ * @param {number} [durationMinMs] Only media whose active version is at least this long (milliseconds). Non-media documents have no duration and are excluded.
504
+ * @param {number} [durationMaxMs] Only media whose active version is at most this long.
498
505
  * @param {boolean} [withTags] Include tags in the response (default: false)
499
506
  * @param {number} [limit] Number of items per page
500
507
  * @param {number} [offset] Number of items to skip
@@ -515,6 +522,8 @@ export interface DocumentsApiInterface {
515
522
  * @param {SortDirection} [sortDir] Sort direction; overrides the column\&#39;s natural default
516
523
  * @param {string} [ownerId] Filter to documents owned by this user
517
524
  * @param {DocumentType} [documentType] Filter to documents of this type
525
+ * @param {number} [durationMinMs] Only media whose active version is at least this long (milliseconds). Non-media documents have no duration and are excluded.
526
+ * @param {number} [durationMaxMs] Only media whose active version is at most this long.
518
527
  * @param {boolean} [withTags] Include tags in the response (default: false)
519
528
  * @param {number} [limit] Number of items per page
520
529
  * @param {number} [offset] Number of items to skip
@@ -1117,6 +1126,10 @@ export class DocumentsApi extends runtime.BaseAPI implements DocumentsApiInterfa
1117
1126
  formParams.append('idempotency_key', requestParameters['idempotencyKey'] as any);
1118
1127
  }
1119
1128
 
1129
+ if (requestParameters['emailNestingDepth'] != null) {
1130
+ formParams.append('email_nesting_depth', requestParameters['emailNestingDepth'] as any);
1131
+ }
1132
+
1120
1133
  if (requestParameters['ingestionMode'] != null) {
1121
1134
  formParams.append('ingestion_mode', requestParameters['ingestionMode'] as any);
1122
1135
  }
@@ -1400,6 +1413,14 @@ export class DocumentsApi extends runtime.BaseAPI implements DocumentsApiInterfa
1400
1413
  queryParameters['document_type'] = requestParameters['documentType'];
1401
1414
  }
1402
1415
 
1416
+ if (requestParameters['durationMinMs'] != null) {
1417
+ queryParameters['duration_min_ms'] = requestParameters['durationMinMs'];
1418
+ }
1419
+
1420
+ if (requestParameters['durationMaxMs'] != null) {
1421
+ queryParameters['duration_max_ms'] = requestParameters['durationMaxMs'];
1422
+ }
1423
+
1403
1424
  if (requestParameters['withTags'] != null) {
1404
1425
  queryParameters['with_tags'] = requestParameters['withTags'];
1405
1426
  }
@@ -180,7 +180,7 @@ export interface SystemJobsApiInterface {
180
180
  getZipIngestionStatusRequestOpts(requestParameters: GetZipIngestionStatusRequest): Promise<runtime.RequestOpts>;
181
181
 
182
182
  /**
183
- * Get a ZIP fan-out\'s live status + per-member outcomes. Tenant-scoped via the TenantId search attribute (no per-path can_read check — intentionally consistent with the sibling generic Temporal endpoints below; the opaque workflow_id is only handed to the uploader, who had can_write on the target). The per-member results come from the workflow\'s ``results`` query (served from retained history), so once Temporal retention expires this 404s.
183
+ * Get a fan-out\'s live status + per-member outcomes. Serves both container fan-outs: a ZIP archive\'s members and an email\'s attachments. Both expose the same ``results`` query, so one endpoint covers them rather than duplicating the tenant check and hydration. Tenant-scoped via the TenantId search attribute (no per-path can_read check — intentionally consistent with the sibling generic Temporal endpoints below; the opaque workflow_id is only handed to the uploader, who had can_write on the target). The per-member results come from the workflow\'s ``results`` query (served from retained history), so once Temporal retention expires this 404s.
184
184
  * @summary Get Zip Ingestion Status Handler
185
185
  * @param {string} workflowId
186
186
  * @param {*} [options] Override http request option.
@@ -190,7 +190,7 @@ export interface SystemJobsApiInterface {
190
190
  getZipIngestionStatusRaw(requestParameters: GetZipIngestionStatusRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<runtime.ApiResponse<ZipIngestionStatusResponse>>;
191
191
 
192
192
  /**
193
- * Get a ZIP fan-out\'s live status + per-member outcomes. Tenant-scoped via the TenantId search attribute (no per-path can_read check — intentionally consistent with the sibling generic Temporal endpoints below; the opaque workflow_id is only handed to the uploader, who had can_write on the target). The per-member results come from the workflow\'s ``results`` query (served from retained history), so once Temporal retention expires this 404s.
193
+ * Get a fan-out\'s live status + per-member outcomes. Serves both container fan-outs: a ZIP archive\'s members and an email\'s attachments. Both expose the same ``results`` query, so one endpoint covers them rather than duplicating the tenant check and hydration. Tenant-scoped via the TenantId search attribute (no per-path can_read check — intentionally consistent with the sibling generic Temporal endpoints below; the opaque workflow_id is only handed to the uploader, who had can_write on the target). The per-member results come from the workflow\'s ``results`` query (served from retained history), so once Temporal retention expires this 404s.
194
194
  * Get Zip Ingestion Status Handler
195
195
  */
196
196
  getZipIngestionStatus(requestParameters: GetZipIngestionStatusRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<ZipIngestionStatusResponse>;
@@ -484,7 +484,7 @@ export class SystemJobsApi extends runtime.BaseAPI implements SystemJobsApiInter
484
484
  }
485
485
 
486
486
  /**
487
- * Get a ZIP fan-out\'s live status + per-member outcomes. Tenant-scoped via the TenantId search attribute (no per-path can_read check — intentionally consistent with the sibling generic Temporal endpoints below; the opaque workflow_id is only handed to the uploader, who had can_write on the target). The per-member results come from the workflow\'s ``results`` query (served from retained history), so once Temporal retention expires this 404s.
487
+ * Get a fan-out\'s live status + per-member outcomes. Serves both container fan-outs: a ZIP archive\'s members and an email\'s attachments. Both expose the same ``results`` query, so one endpoint covers them rather than duplicating the tenant check and hydration. Tenant-scoped via the TenantId search attribute (no per-path can_read check — intentionally consistent with the sibling generic Temporal endpoints below; the opaque workflow_id is only handed to the uploader, who had can_write on the target). The per-member results come from the workflow\'s ``results`` query (served from retained history), so once Temporal retention expires this 404s.
488
488
  * Get Zip Ingestion Status Handler
489
489
  */
490
490
  async getZipIngestionStatusRaw(requestParameters: GetZipIngestionStatusRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<runtime.ApiResponse<ZipIngestionStatusResponse>> {
@@ -495,7 +495,7 @@ export class SystemJobsApi extends runtime.BaseAPI implements SystemJobsApiInter
495
495
  }
496
496
 
497
497
  /**
498
- * Get a ZIP fan-out\'s live status + per-member outcomes. Tenant-scoped via the TenantId search attribute (no per-path can_read check — intentionally consistent with the sibling generic Temporal endpoints below; the opaque workflow_id is only handed to the uploader, who had can_write on the target). The per-member results come from the workflow\'s ``results`` query (served from retained history), so once Temporal retention expires this 404s.
498
+ * Get a fan-out\'s live status + per-member outcomes. Serves both container fan-outs: a ZIP archive\'s members and an email\'s attachments. Both expose the same ``results`` query, so one endpoint covers them rather than duplicating the tenant check and hydration. Tenant-scoped via the TenantId search attribute (no per-path can_read check — intentionally consistent with the sibling generic Temporal endpoints below; the opaque workflow_id is only handed to the uploader, who had can_write on the target). The per-member results come from the workflow\'s ``results`` query (served from retained history), so once Temporal retention expires this 404s.
499
499
  * Get Zip Ingestion Status Handler
500
500
  */
501
501
  async getZipIngestionStatus(requestParameters: GetZipIngestionStatusRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<ZipIngestionStatusResponse> {
@@ -89,6 +89,18 @@ export interface ChunkMetadata {
89
89
  * @memberof ChunkMetadata
90
90
  */
91
91
  endMs?: number | null;
92
+ /**
93
+ * Every speaker label appearing in this chunk's segments, sorted. Lets a citation say which turn it came from. None when the provider does not diarize.
94
+ * @type {Array<number>}
95
+ * @memberof ChunkMetadata
96
+ */
97
+ speakers?: Array<number> | null;
98
+ /**
99
+ * Every language the ASR recognised across this chunk's segments, sorted. A meeting routinely code-switches, so a chunk can hold more than one; the document-level language is only the majority label and misreports a bilingual recording. None for non-media chunks and for media ingested before this field existed.
100
+ * @type {Array<string>}
101
+ * @memberof ChunkMetadata
102
+ */
103
+ languages?: Array<string> | null;
92
104
  /**
93
105
  * Per-ASR-segment spans inside this media chunk, in order, each carrying its char offset in the chunk content. Lets citation resolution narrow a chunk-level timeframe to the enclosing segment. None for non-media chunks and media ingested before this field existed.
94
106
  * @type {Array<SegmentSpan>}
@@ -195,6 +207,8 @@ export function ChunkMetadataFromJSONTyped(json: any, ignoreDiscriminator: boole
195
207
  'secondaryTaxonomy': json['secondary_taxonomy'] == null ? undefined : ImageTaxonomyFromJSON(json['secondary_taxonomy']),
196
208
  'startMs': json['start_ms'] == null ? undefined : json['start_ms'],
197
209
  'endMs': json['end_ms'] == null ? undefined : json['end_ms'],
210
+ 'speakers': json['speakers'] == null ? undefined : json['speakers'],
211
+ 'languages': json['languages'] == null ? undefined : json['languages'],
198
212
  'segments': json['segments'] == null ? undefined : ((json['segments'] as Array<any>).map(SegmentSpanFromJSON)),
199
213
  'sheetName': json['sheet_name'] == null ? undefined : json['sheet_name'],
200
214
  'blockType': json['block_type'] == null ? undefined : json['block_type'],
@@ -227,6 +241,8 @@ export function ChunkMetadataToJSONTyped(value?: ChunkMetadata | null, ignoreDis
227
241
  'secondary_taxonomy': ImageTaxonomyToJSON(value['secondaryTaxonomy']),
228
242
  'start_ms': value['startMs'],
229
243
  'end_ms': value['endMs'],
244
+ 'speakers': value['speakers'],
245
+ 'languages': value['languages'],
230
246
  'segments': value['segments'] == null ? undefined : ((value['segments'] as Array<any>).map(SegmentSpanToJSON)),
231
247
  'sheet_name': value['sheetName'],
232
248
  'block_type': value['blockType'],
@@ -49,6 +49,24 @@ export interface CreateUploadRequest {
49
49
  * @memberof CreateUploadRequest
50
50
  */
51
51
  tagIds?: Array<string>;
52
+ /**
53
+ * Workflow run this upload belongs to; attributes the resulting document to the run in the audit log. Must be sent together with workflow_definition_id, and only by an assumed identity.
54
+ * @type {string}
55
+ * @memberof CreateUploadRequest
56
+ */
57
+ workflowRunId?: string | null;
58
+ /**
59
+ * Workflow definition for workflow_run_id.
60
+ * @type {string}
61
+ * @memberof CreateUploadRequest
62
+ */
63
+ workflowDefinitionId?: string | null;
64
+ /**
65
+ * Replay key for callers that retry (e.g. the ZIP fan-out); completing twice with the same key replays the existing document instead of creating a duplicate.
66
+ * @type {string}
67
+ * @memberof CreateUploadRequest
68
+ */
69
+ idempotencyKey?: string | null;
52
70
  }
53
71
  export const CreateUploadRequestPropertyValidationAttributesMap: {
54
72
  [property: string]: {
@@ -94,6 +112,9 @@ export function CreateUploadRequestFromJSONTyped(json: any, ignoreDiscriminator:
94
112
  'filename': json['filename'],
95
113
  'sizeBytes': json['size_bytes'],
96
114
  'tagIds': json['tag_ids'] == null ? undefined : json['tag_ids'],
115
+ 'workflowRunId': json['workflow_run_id'] == null ? undefined : json['workflow_run_id'],
116
+ 'workflowDefinitionId': json['workflow_definition_id'] == null ? undefined : json['workflow_definition_id'],
117
+ 'idempotencyKey': json['idempotency_key'] == null ? undefined : json['idempotency_key'],
97
118
  };
98
119
  }
99
120
 
@@ -113,6 +134,9 @@ export function CreateUploadRequestToJSONTyped(value?: CreateUploadRequest | nul
113
134
  'filename': value['filename'],
114
135
  'size_bytes': value['sizeBytes'],
115
136
  'tag_ids': value['tagIds'],
137
+ 'workflow_run_id': value['workflowRunId'],
138
+ 'workflow_definition_id': value['workflowDefinitionId'],
139
+ 'idempotency_key': value['idempotencyKey'],
116
140
  };
117
141
  }
118
142
 
@@ -34,6 +34,13 @@ import {
34
34
  InformationStatisticsToJSON,
35
35
  InformationStatisticsToJSONTyped,
36
36
  } from './InformationStatistics';
37
+ import type { EmailMetadata } from './EmailMetadata';
38
+ import {
39
+ EmailMetadataFromJSON,
40
+ EmailMetadataFromJSONTyped,
41
+ EmailMetadataToJSON,
42
+ EmailMetadataToJSONTyped,
43
+ } from './EmailMetadata';
37
44
 
38
45
  /**
39
46
  * Schema for document_version.system_metadata JSONB field.
@@ -134,6 +141,12 @@ export interface DocumentVersionMetadata {
134
141
  * @memberof DocumentVersionMetadata
135
142
  */
136
143
  segmentCount?: number | null;
144
+ /**
145
+ * Structured email headers; null for non-email documents
146
+ * @type {EmailMetadata}
147
+ * @memberof DocumentVersionMetadata
148
+ */
149
+ email?: EmailMetadata | null;
137
150
  /**
138
151
  * Total formula cells in the workbook (XLSX only)
139
152
  * @type {number}
@@ -256,6 +269,7 @@ export function DocumentVersionMetadataFromJSONTyped(json: any, ignoreDiscrimina
256
269
  'durationMs': json['duration_ms'] == null ? undefined : json['duration_ms'],
257
270
  'language': json['language'] == null ? undefined : json['language'],
258
271
  'segmentCount': json['segment_count'] == null ? undefined : json['segment_count'],
272
+ 'email': json['email'] == null ? undefined : EmailMetadataFromJSON(json['email']),
259
273
  'totalFormulas': json['total_formulas'] == null ? undefined : json['total_formulas'],
260
274
  'xlsxParseResultS3': json['xlsx_parse_result_s3'] == null ? undefined : json['xlsx_parse_result_s3'],
261
275
  'xlsxNamedRanges': json['xlsx_named_ranges'] == null ? undefined : json['xlsx_named_ranges'],
@@ -296,6 +310,7 @@ export function DocumentVersionMetadataToJSONTyped(value?: DocumentVersionMetada
296
310
  'duration_ms': value['durationMs'],
297
311
  'language': value['language'],
298
312
  'segment_count': value['segmentCount'],
313
+ 'email': EmailMetadataToJSON(value['email']),
299
314
  'total_formulas': value['totalFormulas'],
300
315
  'xlsx_parse_result_s3': value['xlsxParseResultS3'],
301
316
  'xlsx_named_ranges': value['xlsxNamedRanges'],
@@ -34,6 +34,13 @@ import {
34
34
  InformationStatisticsToJSON,
35
35
  InformationStatisticsToJSONTyped,
36
36
  } from './InformationStatistics';
37
+ import type { EmailMetadata } from './EmailMetadata';
38
+ import {
39
+ EmailMetadataFromJSON,
40
+ EmailMetadataFromJSONTyped,
41
+ EmailMetadataToJSON,
42
+ EmailMetadataToJSONTyped,
43
+ } from './EmailMetadata';
37
44
 
38
45
  /**
39
46
  * Partial update schema for document version metadata.
@@ -146,6 +153,12 @@ export interface DocumentVersionMetadataUpdate {
146
153
  * @memberof DocumentVersionMetadataUpdate
147
154
  */
148
155
  segmentCount?: number | null;
156
+ /**
157
+ *
158
+ * @type {EmailMetadata}
159
+ * @memberof DocumentVersionMetadataUpdate
160
+ */
161
+ email?: EmailMetadata | null;
149
162
  /**
150
163
  *
151
164
  * @type {number}
@@ -265,6 +278,7 @@ export function DocumentVersionMetadataUpdateFromJSONTyped(json: any, ignoreDisc
265
278
  'durationMs': json['duration_ms'] == null ? undefined : json['duration_ms'],
266
279
  'language': json['language'] == null ? undefined : json['language'],
267
280
  'segmentCount': json['segment_count'] == null ? undefined : json['segment_count'],
281
+ 'email': json['email'] == null ? undefined : EmailMetadataFromJSON(json['email']),
268
282
  'totalFormulas': json['total_formulas'] == null ? undefined : json['total_formulas'],
269
283
  'xlsxParseResultS3': json['xlsx_parse_result_s3'] == null ? undefined : json['xlsx_parse_result_s3'],
270
284
  'xlsxNamedRanges': json['xlsx_named_ranges'] == null ? undefined : json['xlsx_named_ranges'],
@@ -307,6 +321,7 @@ export function DocumentVersionMetadataUpdateToJSONTyped(value?: DocumentVersion
307
321
  'duration_ms': value['durationMs'],
308
322
  'language': value['language'],
309
323
  'segment_count': value['segmentCount'],
324
+ 'email': EmailMetadataToJSON(value['email']),
310
325
  'total_formulas': value['totalFormulas'],
311
326
  'xlsx_parse_result_s3': value['xlsxParseResultS3'],
312
327
  'xlsx_named_ranges': value['xlsxNamedRanges'],
@@ -0,0 +1,183 @@
1
+ /* tslint:disable */
2
+ /* eslint-disable */
3
+ /**
4
+ * Knowledge Stack API
5
+ * Knowledge Stack backend API for authentication and knowledge management. ## Integrating (RPA / machine clients) **Base URL.** Knowledge Stack is self-hosted — point at your own deployment host (see `servers`). The `localhost` entry is for local development only. **Authentication.** Send `Authorization: Bearer <api-key>` on every request. Mint an API key once via `POST /v1/api-keys` from a signed-in browser session; the raw `sk-user-...` secret is returned **only** at creation, so store it then. A key inherits its owning user\'s live tenant role and path permissions — create RPA keys from a least-privilege user, and set `expires_at` for rotation. The `ks_uat` cookie scheme is browser-only and cannot be used by headless clients. **Async work is polled, not pushed.** There are no outbound webhooks. - `POST /v1/documents/ingest` returns `201` immediately with a `workflow_id`; poll `GET /v1/system-jobs/document_versions/{workflow_id}` until `status` is terminal (anything other than `pending`/`processing`). The `Location` response header points at this poll resource. - `POST /v1/workflow-runs/{run_id}/start` returns `202`; poll `GET /v1/workflow-runs/{run_id}` until `execution_state` is `COMPLETED` or `FAILED`. The `Location` header points at the run resource. - `POST /v1/agent/ask` is **synchronous** — it blocks until the agent finishes and returns the answer inline. Use a generous HTTP timeout. **Pagination.** List endpoints accept `limit`/`offset` and return `{items, total, limit, offset}`. **Errors.** Every non-2xx body is `{detail, code, request_id}`. `code` is a stable value from a closed set (see the `ErrorResponse` schema\'s `code` enum) — branch on it rather than parsing `detail`. Quota rejections return `429` with a `Retry-After` header; transient lock contention returns a retryable `503`. Quote `request_id` (also the `x-request-id` response header) to support. **Idempotency.** `POST /v1/workflow-runs` accepts an `idempotency_key` to dedupe retried run creation. `agent/ask` charges one message *before* running and does not refund a client-cancelled call.
6
+ *
7
+ * The version of the OpenAPI document: 0.1.0
8
+ *
9
+ *
10
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
11
+ * https://openapi-generator.tech
12
+ * Do not edit the class manually.
13
+ */
14
+
15
+ import { mapValues } from '../runtime';
16
+ import type { EmailParty } from './EmailParty';
17
+ import {
18
+ EmailPartyFromJSON,
19
+ EmailPartyFromJSONTyped,
20
+ EmailPartyToJSON,
21
+ EmailPartyToJSONTyped,
22
+ } from './EmailParty';
23
+
24
+ /**
25
+ * Structured headers of an ingested email (EMAIL document type only).
26
+ *
27
+ * Populated by ``document_preparation_activity`` from the same parse that
28
+ * renders the message body, so the stored metadata and the rendered document
29
+ * cannot disagree. Null on a multi-message archive: its messages are ingested
30
+ * as their own documents, and each carries its own block.
31
+ * @export
32
+ * @interface EmailMetadata
33
+ */
34
+ export interface EmailMetadata {
35
+ /**
36
+ * Message subject
37
+ * @type {string}
38
+ * @memberof EmailMetadata
39
+ */
40
+ subject?: string;
41
+ /**
42
+ * Sender; null if unparseable
43
+ * @type {EmailParty}
44
+ * @memberof EmailMetadata
45
+ */
46
+ sender?: EmailParty | null;
47
+ /**
48
+ * To recipients
49
+ * @type {Array<EmailParty>}
50
+ * @memberof EmailMetadata
51
+ */
52
+ to?: Array<EmailParty>;
53
+ /**
54
+ * Cc recipients
55
+ * @type {Array<EmailParty>}
56
+ * @memberof EmailMetadata
57
+ */
58
+ cc?: Array<EmailParty>;
59
+ /**
60
+ * Bcc recipients. Present only when the source file carries them — a sending MTA strips Bcc, so it survives in the sender's own copy (a .msg exported from Sent Items) but never in a received .eml.
61
+ * @type {Array<EmailParty>}
62
+ * @memberof EmailMetadata
63
+ */
64
+ bcc?: Array<EmailParty>;
65
+ /**
66
+ * Date header, as written
67
+ * @type {string}
68
+ * @memberof EmailMetadata
69
+ */
70
+ sentAt?: string;
71
+ /**
72
+ * RFC 5322 Message-ID
73
+ * @type {string}
74
+ * @memberof EmailMetadata
75
+ */
76
+ messageId?: string;
77
+ /**
78
+ * Message-ID being replied to
79
+ * @type {string}
80
+ * @memberof EmailMetadata
81
+ */
82
+ inReplyTo?: string;
83
+ /**
84
+ * Reply chain, oldest first
85
+ * @type {Array<string>}
86
+ * @memberof EmailMetadata
87
+ */
88
+ references?: Array<string>;
89
+ /**
90
+ * Outlook PidTagConversationTopic (.msg only)
91
+ * @type {string}
92
+ * @memberof EmailMetadata
93
+ */
94
+ conversationTopic?: string;
95
+ /**
96
+ * Message-ID that started the thread — the first References entry, or this message's own id. Group by this to reconstruct a thread.
97
+ * @type {string}
98
+ * @memberof EmailMetadata
99
+ */
100
+ threadRootId?: string;
101
+ /**
102
+ * The verbatim header block, so a header this schema does not model stays recoverable without re-reading the source file.
103
+ * @type {string}
104
+ * @memberof EmailMetadata
105
+ */
106
+ rawHeaders?: string;
107
+ }
108
+ export const EmailMetadataPropertyValidationAttributesMap: {
109
+ [property: string]: {
110
+ maxLength?: number,
111
+ minLength?: number,
112
+ pattern?: string,
113
+ maximum?: number,
114
+ exclusiveMaximum?: boolean,
115
+ minimum?: number,
116
+ exclusiveMinimum?: boolean,
117
+ multipleOf?: number,
118
+ maxItems?: number,
119
+ minItems?: number,
120
+ uniqueItems?: boolean
121
+ }
122
+ } = {
123
+ }
124
+
125
+
126
+ /**
127
+ * Check if a given object implements the EmailMetadata interface.
128
+ */
129
+ export function instanceOfEmailMetadata(value: object): value is EmailMetadata {
130
+ return true;
131
+ }
132
+
133
+ export function EmailMetadataFromJSON(json: any): EmailMetadata {
134
+ return EmailMetadataFromJSONTyped(json, false);
135
+ }
136
+
137
+ export function EmailMetadataFromJSONTyped(json: any, ignoreDiscriminator: boolean): EmailMetadata {
138
+ if (json == null) {
139
+ return json;
140
+ }
141
+ return {
142
+
143
+ 'subject': json['subject'] == null ? undefined : json['subject'],
144
+ 'sender': json['sender'] == null ? undefined : EmailPartyFromJSON(json['sender']),
145
+ 'to': json['to'] == null ? undefined : ((json['to'] as Array<any>).map(EmailPartyFromJSON)),
146
+ 'cc': json['cc'] == null ? undefined : ((json['cc'] as Array<any>).map(EmailPartyFromJSON)),
147
+ 'bcc': json['bcc'] == null ? undefined : ((json['bcc'] as Array<any>).map(EmailPartyFromJSON)),
148
+ 'sentAt': json['sent_at'] == null ? undefined : json['sent_at'],
149
+ 'messageId': json['message_id'] == null ? undefined : json['message_id'],
150
+ 'inReplyTo': json['in_reply_to'] == null ? undefined : json['in_reply_to'],
151
+ 'references': json['references'] == null ? undefined : json['references'],
152
+ 'conversationTopic': json['conversation_topic'] == null ? undefined : json['conversation_topic'],
153
+ 'threadRootId': json['thread_root_id'] == null ? undefined : json['thread_root_id'],
154
+ 'rawHeaders': json['raw_headers'] == null ? undefined : json['raw_headers'],
155
+ };
156
+ }
157
+
158
+ export function EmailMetadataToJSON(json: any): EmailMetadata {
159
+ return EmailMetadataToJSONTyped(json, false);
160
+ }
161
+
162
+ export function EmailMetadataToJSONTyped(value?: EmailMetadata | null, ignoreDiscriminator: boolean = false): any {
163
+ if (value == null) {
164
+ return value;
165
+ }
166
+
167
+ return {
168
+
169
+ 'subject': value['subject'],
170
+ 'sender': EmailPartyToJSON(value['sender']),
171
+ 'to': value['to'] == null ? undefined : ((value['to'] as Array<any>).map(EmailPartyToJSON)),
172
+ 'cc': value['cc'] == null ? undefined : ((value['cc'] as Array<any>).map(EmailPartyToJSON)),
173
+ 'bcc': value['bcc'] == null ? undefined : ((value['bcc'] as Array<any>).map(EmailPartyToJSON)),
174
+ 'sent_at': value['sentAt'],
175
+ 'message_id': value['messageId'],
176
+ 'in_reply_to': value['inReplyTo'],
177
+ 'references': value['references'],
178
+ 'conversation_topic': value['conversationTopic'],
179
+ 'thread_root_id': value['threadRootId'],
180
+ 'raw_headers': value['rawHeaders'],
181
+ };
182
+ }
183
+
@@ -0,0 +1,91 @@
1
+ /* tslint:disable */
2
+ /* eslint-disable */
3
+ /**
4
+ * Knowledge Stack API
5
+ * Knowledge Stack backend API for authentication and knowledge management. ## Integrating (RPA / machine clients) **Base URL.** Knowledge Stack is self-hosted — point at your own deployment host (see `servers`). The `localhost` entry is for local development only. **Authentication.** Send `Authorization: Bearer <api-key>` on every request. Mint an API key once via `POST /v1/api-keys` from a signed-in browser session; the raw `sk-user-...` secret is returned **only** at creation, so store it then. A key inherits its owning user\'s live tenant role and path permissions — create RPA keys from a least-privilege user, and set `expires_at` for rotation. The `ks_uat` cookie scheme is browser-only and cannot be used by headless clients. **Async work is polled, not pushed.** There are no outbound webhooks. - `POST /v1/documents/ingest` returns `201` immediately with a `workflow_id`; poll `GET /v1/system-jobs/document_versions/{workflow_id}` until `status` is terminal (anything other than `pending`/`processing`). The `Location` response header points at this poll resource. - `POST /v1/workflow-runs/{run_id}/start` returns `202`; poll `GET /v1/workflow-runs/{run_id}` until `execution_state` is `COMPLETED` or `FAILED`. The `Location` header points at the run resource. - `POST /v1/agent/ask` is **synchronous** — it blocks until the agent finishes and returns the answer inline. Use a generous HTTP timeout. **Pagination.** List endpoints accept `limit`/`offset` and return `{items, total, limit, offset}`. **Errors.** Every non-2xx body is `{detail, code, request_id}`. `code` is a stable value from a closed set (see the `ErrorResponse` schema\'s `code` enum) — branch on it rather than parsing `detail`. Quota rejections return `429` with a `Retry-After` header; transient lock contention returns a retryable `503`. Quote `request_id` (also the `x-request-id` response header) to support. **Idempotency.** `POST /v1/workflow-runs` accepts an `idempotency_key` to dedupe retried run creation. `agent/ask` charges one message *before* running and does not refund a client-cancelled call.
6
+ *
7
+ * The version of the OpenAPI document: 0.1.0
8
+ *
9
+ *
10
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
11
+ * https://openapi-generator.tech
12
+ * Do not edit the class manually.
13
+ */
14
+
15
+ import { mapValues } from '../runtime';
16
+ /**
17
+ * One email participant.
18
+ * @export
19
+ * @interface EmailParty
20
+ */
21
+ export interface EmailParty {
22
+ /**
23
+ * Display name; empty if unnamed
24
+ * @type {string}
25
+ * @memberof EmailParty
26
+ */
27
+ name?: string;
28
+ /**
29
+ * Email address
30
+ * @type {string}
31
+ * @memberof EmailParty
32
+ */
33
+ address: string;
34
+ }
35
+ export const EmailPartyPropertyValidationAttributesMap: {
36
+ [property: string]: {
37
+ maxLength?: number,
38
+ minLength?: number,
39
+ pattern?: string,
40
+ maximum?: number,
41
+ exclusiveMaximum?: boolean,
42
+ minimum?: number,
43
+ exclusiveMinimum?: boolean,
44
+ multipleOf?: number,
45
+ maxItems?: number,
46
+ minItems?: number,
47
+ uniqueItems?: boolean
48
+ }
49
+ } = {
50
+ }
51
+
52
+
53
+ /**
54
+ * Check if a given object implements the EmailParty interface.
55
+ */
56
+ export function instanceOfEmailParty(value: object): value is EmailParty {
57
+ if (!('address' in value) || value['address'] === undefined) return false;
58
+ return true;
59
+ }
60
+
61
+ export function EmailPartyFromJSON(json: any): EmailParty {
62
+ return EmailPartyFromJSONTyped(json, false);
63
+ }
64
+
65
+ export function EmailPartyFromJSONTyped(json: any, ignoreDiscriminator: boolean): EmailParty {
66
+ if (json == null) {
67
+ return json;
68
+ }
69
+ return {
70
+
71
+ 'name': json['name'] == null ? undefined : json['name'],
72
+ 'address': json['address'],
73
+ };
74
+ }
75
+
76
+ export function EmailPartyToJSON(json: any): EmailParty {
77
+ return EmailPartyToJSONTyped(json, false);
78
+ }
79
+
80
+ export function EmailPartyToJSONTyped(value?: EmailParty | null, ignoreDiscriminator: boolean = false): any {
81
+ if (value == null) {
82
+ return value;
83
+ }
84
+
85
+ return {
86
+
87
+ 'name': value['name'],
88
+ 'address': value['address'],
89
+ };
90
+ }
91
+
@@ -19,6 +19,7 @@
19
19
  */
20
20
  export const ImageTaxonomy = {
21
21
  Picture: 'picture',
22
+ Slide: 'slide',
22
23
  Flowchart: 'flowchart'
23
24
  } as const;
24
25
  export type ImageTaxonomy = typeof ImageTaxonomy[keyof typeof ImageTaxonomy];
@@ -37,6 +37,24 @@ export interface IngestDocumentResponse {
37
37
  * @memberof IngestDocumentResponse
38
38
  */
39
39
  documentVersionId: string;
40
+ /**
41
+ * Folder created to hold this upload and its members. Set for email uploads, which always nest inside their own folder; null for every other type, which ingest directly into path_part_id.
42
+ * @type {string}
43
+ * @memberof IngestDocumentResponse
44
+ */
45
+ folderId?: string | null;
46
+ /**
47
+ * Members found on an email upload, each becoming its own document beside the email: the attachments of a single message, or the messages of an .mbox archive (whose own attachments are then expanded one level deeper). Always 0 for non-email uploads. Null for a .pst, whose members are enumerated only by the worker fan-out — poll attachment_workflow_id for per-member outcomes.
48
+ * @type {number}
49
+ * @memberof IngestDocumentResponse
50
+ */
51
+ attachmentCount?: number | null;
52
+ /**
53
+ * Fan-out workflow ingesting the members. Poll GET /v1/system-jobs/zip-ingestions/{id} for per-member outcomes. Null when the upload had no ingestible members.
54
+ * @type {string}
55
+ * @memberof IngestDocumentResponse
56
+ */
57
+ attachmentWorkflowId?: string | null;
40
58
  }
41
59
  export const IngestDocumentResponsePropertyValidationAttributesMap: {
42
60
  [property: string]: {
@@ -79,6 +97,9 @@ export function IngestDocumentResponseFromJSONTyped(json: any, ignoreDiscriminat
79
97
  'workflowId': json['workflow_id'],
80
98
  'documentId': json['document_id'],
81
99
  'documentVersionId': json['document_version_id'],
100
+ 'folderId': json['folder_id'] == null ? undefined : json['folder_id'],
101
+ 'attachmentCount': json['attachment_count'] == null ? undefined : json['attachment_count'],
102
+ 'attachmentWorkflowId': json['attachment_workflow_id'] == null ? undefined : json['attachment_workflow_id'],
82
103
  };
83
104
  }
84
105
 
@@ -96,6 +117,9 @@ export function IngestDocumentResponseToJSONTyped(value?: IngestDocumentResponse
96
117
  'workflow_id': value['workflowId'],
97
118
  'document_id': value['documentId'],
98
119
  'document_version_id': value['documentVersionId'],
120
+ 'folder_id': value['folderId'],
121
+ 'attachment_count': value['attachmentCount'],
122
+ 'attachment_workflow_id': value['attachmentWorkflowId'],
99
123
  };
100
124
  }
101
125
 
@@ -16,8 +16,9 @@ import { mapValues } from '../runtime';
16
16
  /**
17
17
  * One ASR segment's span inside a media chunk (media chunks only).
18
18
  *
19
- * Field names are deliberately compact — a media document stores hundreds
20
- * of chunks x up to ~15 spans each in ``chunk_metadata`` JSONB.
19
+ * Field names are deliberately compact — a media document stores hundreds of
20
+ * chunks x tens of spans each in ``chunk_metadata`` JSONB. Measured worst
21
+ * case is a 4-hour Mandarin recording: 175 chunks x ~33 spans, ~190 KB total.
21
22
  * @export
22
23
  * @interface SegmentSpan
23
24
  */
@@ -40,6 +41,12 @@ export interface SegmentSpan {
40
41
  * @memberof SegmentSpan
41
42
  */
42
43
  c: number;
44
+ /**
45
+ * Speaker label for this segment, 0-indexed within the recording. It identifies turns, not people — there is no voiceprint enrollment, so label 0 in one meeting is unrelated to label 0 in another. None when the ASR provider does not diarize.
46
+ * @type {number}
47
+ * @memberof SegmentSpan
48
+ */
49
+ k?: number | null;
43
50
  }
44
51
  export const SegmentSpanPropertyValidationAttributesMap: {
45
52
  [property: string]: {
@@ -82,6 +89,7 @@ export function SegmentSpanFromJSONTyped(json: any, ignoreDiscriminator: boolean
82
89
  's': json['s'],
83
90
  'e': json['e'],
84
91
  'c': json['c'],
92
+ 'k': json['k'] == null ? undefined : json['k'],
85
93
  };
86
94
  }
87
95
 
@@ -99,6 +107,7 @@ export function SegmentSpanToJSONTyped(value?: SegmentSpan | null, ignoreDiscrim
99
107
  's': value['s'],
100
108
  'e': value['e'],
101
109
  'c': value['c'],
110
+ 'k': value['k'],
102
111
  };
103
112
  }
104
113