@ancplua/qyl-api-schema 0.2.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 (54) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +89 -0
  3. package/VERSIONING.md +74 -0
  4. package/api/routes.tsp +1052 -0
  5. package/api/streaming.tsp +335 -0
  6. package/common/errors.tsp +206 -0
  7. package/common/pagination.tsp +254 -0
  8. package/common/types.tsp +345 -0
  9. package/generated/README.md +26 -0
  10. package/generated/otel-keys.gen.tsp +1648 -0
  11. package/index.tsp +55 -0
  12. package/intelligence/causal-rules.tsp +34 -0
  13. package/intelligence/diagnostic-patterns.tsp +54 -0
  14. package/intelligence/investigation-strategies.tsp +37 -0
  15. package/intelligence/main.tsp +19 -0
  16. package/intelligence/seed/patterns.tsp +172 -0
  17. package/intelligence/seed/rules.tsp +44 -0
  18. package/intelligence/seed/strategies.tsp +56 -0
  19. package/intelligence/signals.tsp +60 -0
  20. package/models/agent/agent-run.tsp +154 -0
  21. package/models/agent/tool-call.tsp +122 -0
  22. package/models/agent/workflow-checkpoint.tsp +50 -0
  23. package/models/agent/workflow-execution.tsp +136 -0
  24. package/models/alerting.tsp +436 -0
  25. package/models/configurator.tsp +433 -0
  26. package/models/control-graph.tsp +197 -0
  27. package/models/db.tsp +810 -0
  28. package/models/deployment.tsp +365 -0
  29. package/models/error.tsp +433 -0
  30. package/models/genai.tsp +1368 -0
  31. package/models/http.tsp +600 -0
  32. package/models/identity.tsp +213 -0
  33. package/models/issues.tsp +484 -0
  34. package/models/log.tsp +140 -0
  35. package/models/messaging.tsp +304 -0
  36. package/models/otel-config.tsp +455 -0
  37. package/models/retention.tsp +240 -0
  38. package/models/rpc.tsp +309 -0
  39. package/models/search.tsp +243 -0
  40. package/models/session.tsp +274 -0
  41. package/models/system.tsp +400 -0
  42. package/models/test.tsp +346 -0
  43. package/models/triage.tsp +113 -0
  44. package/models/workflow.tsp +396 -0
  45. package/models/workspace.tsp +435 -0
  46. package/otel/enums.tsp +392 -0
  47. package/otel/logs.tsp +135 -0
  48. package/otel/metrics.tsp +358 -0
  49. package/otel/otel-conventions.tsp +14 -0
  50. package/otel/profiles.tsp +335 -0
  51. package/otel/resource.tsp +257 -0
  52. package/otel/span.tsp +307 -0
  53. package/package.json +88 -0
  54. package/tspconfig.yaml +49 -0
@@ -0,0 +1,455 @@
1
+ // =============================================================================
2
+ // ANcpLua v2.0 - OpenTelemetry SDK Semantic Conventions (OTel v1.40)
3
+ // =============================================================================
4
+ // OTel SDK configuration and telemetry scope attributes.
5
+ // =============================================================================
6
+
7
+ import "../common/types.tsp";
8
+
9
+ using Qyl.Api.Contracts.Common;
10
+
11
+ namespace Qyl.Api.Contracts.Domains.Observe.Otel;
12
+
13
+ // =============================================================================
14
+ // Telemetry SDK Attributes
15
+ // =============================================================================
16
+
17
+ @doc("Telemetry SDK resource attributes")
18
+ model TelemetrySdkAttributes {
19
+ @doc("SDK name")
20
+ @encodedName("application/json", ANcpLua.OpenTelemetry.SemanticConventions.Keys.Telemetry.SdkName)
21
+ name: string;
22
+
23
+ @doc("SDK language")
24
+ @encodedName("application/json", ANcpLua.OpenTelemetry.SemanticConventions.Keys.Telemetry.SdkLanguage)
25
+ language: TelemetrySdkLanguage;
26
+
27
+ @doc("SDK version")
28
+ @encodedName("application/json", ANcpLua.OpenTelemetry.SemanticConventions.Keys.Telemetry.SdkVersion)
29
+ version: SemVer;
30
+ }
31
+
32
+ @doc("Telemetry distro attributes")
33
+ model TelemetryDistroAttributes {
34
+ @doc("Distro name")
35
+ @encodedName("application/json", ANcpLua.OpenTelemetry.SemanticConventions.Keys.Telemetry.DistroName)
36
+ name?: string;
37
+
38
+ @doc("Distro version")
39
+ @encodedName("application/json", ANcpLua.OpenTelemetry.SemanticConventions.Keys.Telemetry.DistroVersion)
40
+ version?: SemVer;
41
+ }
42
+
43
+ // =============================================================================
44
+ // SDK Language Enumeration
45
+ // =============================================================================
46
+
47
+ @doc("Telemetry SDK languages")
48
+ enum TelemetrySdkLanguage {
49
+ @doc("C++")
50
+ cpp: "cpp",
51
+
52
+ @doc(".NET")
53
+ dotnet: "dotnet",
54
+
55
+ @doc("Erlang")
56
+ erlang: "erlang",
57
+
58
+ @doc("Go")
59
+ go: "go",
60
+
61
+ @doc("Java")
62
+ java: "java",
63
+
64
+ @doc("Node.js")
65
+ nodejs: "nodejs",
66
+
67
+ @doc("PHP")
68
+ php: "php",
69
+
70
+ @doc("Python")
71
+ python: "python",
72
+
73
+ @doc("Ruby")
74
+ ruby: "ruby",
75
+
76
+ @doc("Rust")
77
+ rust: "rust",
78
+
79
+ @doc("Swift")
80
+ swift: "swift",
81
+
82
+ @doc("Kotlin")
83
+ kotlin: "kotlin",
84
+
85
+ @doc("Scala")
86
+ scala: "scala",
87
+ }
88
+
89
+ // =============================================================================
90
+ // Instrumentation Scope Attributes
91
+ // =============================================================================
92
+
93
+ @doc("Extended instrumentation scope with telemetry details")
94
+ model InstrumentationScopeDetails {
95
+ @doc("Scope name (library/module name)")
96
+ name: string;
97
+
98
+ @doc("Scope version")
99
+ version?: SemVer;
100
+
101
+ @doc("Schema URL")
102
+ @encodedName("application/json", "schema_url")
103
+ schemaUrl?: UrlString;
104
+
105
+ @doc("Scope attributes")
106
+ attributes?: Attribute[];
107
+
108
+ @doc("Dropped attributes count")
109
+ @encodedName("application/json", "dropped_attributes_count")
110
+ droppedAttributesCount?: int32;
111
+ }
112
+
113
+ // =============================================================================
114
+ // OTel Collector Configuration
115
+ // =============================================================================
116
+
117
+ @doc("OTel collector endpoint configuration")
118
+ model OtelEndpointConfig {
119
+ @doc("OTLP endpoint URL")
120
+ endpoint: UrlString;
121
+
122
+ @doc("Protocol")
123
+ protocol: OtlpProtocol;
124
+
125
+ @doc("Headers")
126
+ headers?: Record<string>;
127
+
128
+ @doc("Compression")
129
+ compression?: OtlpCompression;
130
+
131
+ @doc("Timeout in milliseconds")
132
+ @encodedName("application/json", "timeout_ms")
133
+ timeoutMs?: int32;
134
+
135
+ @doc("Retry configuration")
136
+ retry?: RetryConfig;
137
+ }
138
+
139
+ @doc("OTLP protocols")
140
+ enum OtlpProtocol {
141
+ @doc("gRPC protocol")
142
+ grpc: "grpc",
143
+
144
+ @doc("HTTP/protobuf")
145
+ httpProtobuf: "http/protobuf",
146
+
147
+ @doc("HTTP/JSON")
148
+ httpJson: "http/json",
149
+ }
150
+
151
+ @doc("OTLP compression types")
152
+ enum OtlpCompression {
153
+ @doc("No compression")
154
+ none: "none",
155
+
156
+ @doc("Gzip compression")
157
+ gzip: "gzip",
158
+
159
+ @doc("Zstd compression")
160
+ zstd: "zstd",
161
+ }
162
+
163
+ @doc("Retry configuration")
164
+ model RetryConfig {
165
+ @doc("Enable retry")
166
+ enabled: boolean;
167
+
168
+ @doc("Initial interval in milliseconds")
169
+ @encodedName("application/json", "initial_interval_ms")
170
+ initialIntervalMs?: int32;
171
+
172
+ @doc("Max interval in milliseconds")
173
+ @encodedName("application/json", "max_interval_ms")
174
+ maxIntervalMs?: int32;
175
+
176
+ @doc("Max elapsed time in milliseconds")
177
+ @encodedName("application/json", "max_elapsed_time_ms")
178
+ maxElapsedTimeMs?: int32;
179
+
180
+ @doc("Multiplier for exponential backoff")
181
+ multiplier?: float64;
182
+ }
183
+
184
+ // =============================================================================
185
+ // Batch Processor Configuration
186
+ // =============================================================================
187
+
188
+ @doc("Batch processor configuration")
189
+ model BatchProcessorConfig {
190
+ @doc("Max queue size")
191
+ @encodedName("application/json", "max_queue_size")
192
+ maxQueueSize?: int32;
193
+
194
+ @doc("Scheduled delay in milliseconds")
195
+ @encodedName("application/json", "scheduled_delay_ms")
196
+ scheduledDelayMs?: int32;
197
+
198
+ @doc("Export timeout in milliseconds")
199
+ @encodedName("application/json", "export_timeout_ms")
200
+ exportTimeoutMs?: int32;
201
+
202
+ @doc("Max export batch size")
203
+ @encodedName("application/json", "max_export_batch_size")
204
+ maxExportBatchSize?: int32;
205
+ }
206
+
207
+ // =============================================================================
208
+ // Sampling Configuration
209
+ // =============================================================================
210
+
211
+ @doc("Sampler configuration")
212
+ model SamplerConfig {
213
+ @doc("Sampler type")
214
+ type: SamplerType;
215
+
216
+ @doc("Sample ratio (for ratio-based samplers)")
217
+ ratio?: Ratio;
218
+
219
+ @doc("Parent-based root sampler")
220
+ @encodedName("application/json", "root_sampler")
221
+ rootSampler?: SamplerType;
222
+ }
223
+
224
+ @doc("Sampler types")
225
+ enum SamplerType {
226
+ @doc("Always on")
227
+ alwaysOn: "always_on",
228
+
229
+ @doc("Always off")
230
+ alwaysOff: "always_off",
231
+
232
+ @doc("Trace ID ratio based")
233
+ traceIdRatio: "trace_id_ratio",
234
+
235
+ @doc("Parent based")
236
+ parentBased: "parent_based",
237
+
238
+ @doc("Jaeger remote")
239
+ jaegerRemote: "jaeger_remote",
240
+ }
241
+
242
+ // =============================================================================
243
+ // Resource Detection
244
+ // =============================================================================
245
+
246
+ @doc("Resource detector configuration")
247
+ model ResourceDetectorConfig {
248
+ @doc("Enabled detectors")
249
+ detectors: ResourceDetector[];
250
+
251
+ @doc("Timeout in milliseconds")
252
+ @encodedName("application/json", "timeout_ms")
253
+ timeoutMs?: int32;
254
+ }
255
+
256
+ @doc("Resource detectors")
257
+ enum ResourceDetector {
258
+ @doc("Environment variables")
259
+ env: "env",
260
+
261
+ @doc("Host")
262
+ host: "host",
263
+
264
+ @doc("OS")
265
+ os: "os",
266
+
267
+ @doc("Process")
268
+ process: "process",
269
+
270
+ @doc("Container")
271
+ container: "container",
272
+
273
+ @doc("Kubernetes")
274
+ k8s: "k8s",
275
+
276
+ @doc("AWS EC2")
277
+ awsEc2: "aws_ec2",
278
+
279
+ @doc("AWS ECS")
280
+ awsEcs: "aws_ecs",
281
+
282
+ @doc("AWS EKS")
283
+ awsEks: "aws_eks",
284
+
285
+ @doc("AWS Lambda")
286
+ awsLambda: "aws_lambda",
287
+
288
+ @doc("Azure VM")
289
+ azureVm: "azure_vm",
290
+
291
+ @doc("Azure App Service")
292
+ azureAppService: "azure_app_service",
293
+
294
+ @doc("Azure Functions")
295
+ azureFunctions: "azure_functions",
296
+
297
+ @doc("GCP Compute Engine")
298
+ gcpGce: "gcp_gce",
299
+
300
+ @doc("GCP Cloud Run")
301
+ gcpCloudRun: "gcp_cloud_run",
302
+
303
+ @doc("GCP Cloud Functions")
304
+ gcpCloudFunctions: "gcp_cloud_functions",
305
+ }
306
+
307
+ // =============================================================================
308
+ // Propagation Configuration
309
+ // =============================================================================
310
+
311
+ @doc("Context propagation configuration")
312
+ model PropagationConfig {
313
+ @doc("Propagators to use")
314
+ propagators: Propagator[];
315
+ }
316
+
317
+ @doc("Context propagators")
318
+ enum Propagator {
319
+ @doc("W3C Trace Context")
320
+ tracecontext: "tracecontext",
321
+
322
+ @doc("W3C Baggage")
323
+ baggage: "baggage",
324
+
325
+ @doc("B3 (single header)")
326
+ b3: "b3",
327
+
328
+ @doc("B3 (multi header)")
329
+ b3multi: "b3multi",
330
+
331
+ @doc("Jaeger")
332
+ jaeger: "jaeger",
333
+
334
+ @doc("X-Ray")
335
+ xray: "xray",
336
+
337
+ @doc("OpenTracing")
338
+ ot: "ot",
339
+ }
340
+
341
+ // =============================================================================
342
+ // Complete SDK Configuration
343
+ // =============================================================================
344
+
345
+ @doc("Complete OTel SDK configuration")
346
+ model OtelSdkConfig {
347
+ @doc("Service name")
348
+ @encodedName("application/json", "service_name")
349
+ serviceName: string;
350
+
351
+ @doc("Service version")
352
+ @encodedName("application/json", "service_version")
353
+ serviceVersion?: SemVer;
354
+
355
+ @doc("Deployment environment")
356
+ @encodedName("application/json", "deployment_environment")
357
+ deploymentEnvironment?: string;
358
+
359
+ @doc("Traces configuration")
360
+ traces?: TracesConfig;
361
+
362
+ @doc("Metrics configuration")
363
+ metrics?: MetricsConfig;
364
+
365
+ @doc("Logs configuration")
366
+ logs?: LogsConfig;
367
+
368
+ @doc("Resource detectors")
369
+ @encodedName("application/json", "resource_detectors")
370
+ resourceDetectors?: ResourceDetectorConfig;
371
+
372
+ @doc("Propagation configuration")
373
+ propagation?: PropagationConfig;
374
+ }
375
+
376
+ @doc("Traces pipeline configuration")
377
+ model TracesConfig {
378
+ @doc("Enabled")
379
+ enabled: boolean;
380
+
381
+ @doc("Exporter endpoint")
382
+ exporter?: OtelEndpointConfig;
383
+
384
+ @doc("Batch processor")
385
+ @encodedName("application/json", "batch_processor")
386
+ batchProcessor?: BatchProcessorConfig;
387
+
388
+ @doc("Sampler")
389
+ sampler?: SamplerConfig;
390
+ }
391
+
392
+ @doc("Metrics pipeline configuration")
393
+ model MetricsConfig {
394
+ @doc("Enabled")
395
+ enabled: boolean;
396
+
397
+ @doc("Exporter endpoint")
398
+ exporter?: OtelEndpointConfig;
399
+
400
+ @doc("Export interval in milliseconds")
401
+ @encodedName("application/json", "export_interval_ms")
402
+ exportIntervalMs?: int32;
403
+ }
404
+
405
+ @doc("Logs pipeline configuration")
406
+ model LogsConfig {
407
+ @doc("Enabled")
408
+ enabled: boolean;
409
+
410
+ @doc("Exporter endpoint")
411
+ exporter?: OtelEndpointConfig;
412
+
413
+ @doc("Batch processor")
414
+ @encodedName("application/json", "batch_processor")
415
+ batchProcessor?: BatchProcessorConfig;
416
+ }
417
+
418
+ // =============================================================================
419
+ // Telemetry Statistics
420
+ // =============================================================================
421
+
422
+ @doc("Telemetry pipeline statistics")
423
+ model TelemetryStats {
424
+ @doc("Spans exported")
425
+ @encodedName("application/json", "spans_exported")
426
+ spansExported: Count;
427
+
428
+ @doc("Spans dropped")
429
+ @encodedName("application/json", "spans_dropped")
430
+ spansDropped: Count;
431
+
432
+ @doc("Metrics exported")
433
+ @encodedName("application/json", "metrics_exported")
434
+ metricsExported: Count;
435
+
436
+ @doc("Metrics dropped")
437
+ @encodedName("application/json", "metrics_dropped")
438
+ metricsDropped: Count;
439
+
440
+ @doc("Logs exported")
441
+ @encodedName("application/json", "logs_exported")
442
+ logsExported: Count;
443
+
444
+ @doc("Logs dropped")
445
+ @encodedName("application/json", "logs_dropped")
446
+ logsDropped: Count;
447
+
448
+ @doc("Export errors")
449
+ @encodedName("application/json", "export_errors")
450
+ exportErrors: Count;
451
+
452
+ @doc("Queue utilization ratio")
453
+ @encodedName("application/json", "queue_utilization")
454
+ queueUtilization: Ratio;
455
+ }
@@ -0,0 +1,240 @@
1
+ // =============================================================================
2
+ // ANcpLua v2.0 - Ops & Retention Entities
3
+ // =============================================================================
4
+ // Retention policies, compaction state, backfill jobs.
5
+ // =============================================================================
6
+
7
+ import "@typespec/openapi";
8
+ import "../common/types.tsp";
9
+
10
+ using TypeSpec.OpenAPI;
11
+ using Qyl.Api.Contracts.Common;
12
+
13
+ namespace Qyl.Api.Contracts.Domains.Ops.Retention;
14
+
15
+ // =============================================================================
16
+ // Retention Policy
17
+ // =============================================================================
18
+
19
+ @doc("Per-table data retention rule")
20
+ @extension("x-csharp-type", "RetentionPolicyEntity")
21
+ model RetentionPolicyEntity {
22
+ @doc("Policy ID")
23
+ @key
24
+ id: string;
25
+
26
+ @doc("Target storage table")
27
+ @encodedName("application/json", "target_table")
28
+ targetTable: string;
29
+
30
+ @doc("Retention period in days")
31
+ @encodedName("application/json", "retention_days")
32
+ retentionDays: int32;
33
+
34
+ @doc("Maximum row count (null = unlimited)")
35
+ @encodedName("application/json", "max_row_count")
36
+ maxRowCount?: int64;
37
+
38
+ @doc("Cleanup strategy")
39
+ @encodedName("application/json", "cleanup_strategy")
40
+ cleanupStrategy: CleanupStrategy;
41
+
42
+ @doc("Last cleanup timestamp")
43
+ @encodedName("application/json", "last_cleanup_at")
44
+ lastCleanupAt?: utcDateTime;
45
+
46
+ @doc("Total rows cleaned")
47
+ @encodedName("application/json", "rows_cleaned")
48
+ rowsCleaned: int64;
49
+
50
+ @doc("Whether policy is enabled")
51
+ enabled: boolean;
52
+
53
+ @doc("Creation timestamp")
54
+ @encodedName("application/json", "created_at")
55
+ createdAt: utcDateTime;
56
+
57
+ @doc("Last update timestamp")
58
+ @encodedName("application/json", "updated_at")
59
+ updatedAt: utcDateTime;
60
+ }
61
+
62
+ @doc("Data cleanup strategies")
63
+ enum CleanupStrategy {
64
+ @doc("Delete old rows")
65
+ delete: "delete",
66
+
67
+ @doc("Archive to cold storage")
68
+ archive: "archive",
69
+
70
+ @doc("Compact/aggregate old data")
71
+ compact: "compact",
72
+ }
73
+
74
+ // =============================================================================
75
+ // Compaction State
76
+ // =============================================================================
77
+
78
+ @doc("Storage compaction progress tracker")
79
+ @extension("x-csharp-type", "CompactionStateEntity")
80
+ model CompactionStateEntity {
81
+ @doc("State ID")
82
+ @key
83
+ id: string;
84
+
85
+ @doc("Target storage table")
86
+ @encodedName("application/json", "target_table")
87
+ targetTable: string;
88
+
89
+ @doc("High watermark (newest compacted row)")
90
+ @encodedName("application/json", "high_watermark")
91
+ highWatermark?: utcDateTime;
92
+
93
+ @doc("Low watermark (oldest retained row)")
94
+ @encodedName("application/json", "low_watermark")
95
+ lowWatermark?: utcDateTime;
96
+
97
+ @doc("Total rows compacted")
98
+ @encodedName("application/json", "rows_compacted")
99
+ rowsCompacted: int64;
100
+
101
+ @doc("Rows remaining")
102
+ @encodedName("application/json", "rows_remaining")
103
+ rowsRemaining: int64;
104
+
105
+ @doc("Last compaction timestamp")
106
+ @encodedName("application/json", "last_compaction_at")
107
+ lastCompactionAt?: utcDateTime;
108
+
109
+ @doc("Last compaction duration in ms")
110
+ @encodedName("application/json", "last_duration_ms")
111
+ lastDurationMs?: int32;
112
+
113
+ @doc("Next scheduled compaction")
114
+ @encodedName("application/json", "next_scheduled_at")
115
+ nextScheduledAt?: utcDateTime;
116
+
117
+ @doc("Compaction status")
118
+ status: CompactionStatus;
119
+
120
+ @doc("Creation timestamp")
121
+ @encodedName("application/json", "created_at")
122
+ createdAt: utcDateTime;
123
+
124
+ @doc("Last update timestamp")
125
+ @encodedName("application/json", "updated_at")
126
+ updatedAt: utcDateTime;
127
+ }
128
+
129
+ @doc("Compaction status")
130
+ enum CompactionStatus {
131
+ @doc("Idle/waiting")
132
+ idle: "idle",
133
+
134
+ @doc("Currently compacting")
135
+ running: "running",
136
+
137
+ @doc("Scheduled for next run")
138
+ scheduled: "scheduled",
139
+
140
+ @doc("Failed")
141
+ failed: "failed",
142
+ }
143
+
144
+ // =============================================================================
145
+ // Backfill Job
146
+ // =============================================================================
147
+
148
+ @doc("Bulk data maintenance job (backfill, reindex, repair)")
149
+ @extension("x-csharp-type", "BackfillJobEntity")
150
+ model BackfillJobEntity {
151
+ @doc("Job ID")
152
+ @key
153
+ id: string;
154
+
155
+ @doc("Job type")
156
+ @encodedName("application/json", "job_type")
157
+ jobType: BackfillJobType;
158
+
159
+ @doc("Target table")
160
+ @encodedName("application/json", "target_table")
161
+ targetTable: string;
162
+
163
+ @doc("Job description")
164
+ description?: string;
165
+
166
+ @doc("Row filter")
167
+ @encodedName("application/json", "filter_json")
168
+ filterJson?: string;
169
+
170
+ @doc("Job status")
171
+ status: BackfillJobStatus;
172
+
173
+ @doc("Error message if failed")
174
+ @encodedName("application/json", "error_message")
175
+ errorMessage?: string;
176
+
177
+ @doc("Total rows to process")
178
+ @encodedName("application/json", "total_rows")
179
+ totalRows?: int64;
180
+
181
+ @doc("Rows processed so far")
182
+ @encodedName("application/json", "processed_rows")
183
+ processedRows: int64;
184
+
185
+ @doc("Progress percentage")
186
+ @encodedName("application/json", "progress_pct")
187
+ progressPct: float64;
188
+
189
+ @doc("Queue timestamp")
190
+ @encodedName("application/json", "queued_at")
191
+ queuedAt: utcDateTime;
192
+
193
+ @doc("Start timestamp")
194
+ @encodedName("application/json", "started_at")
195
+ startedAt?: utcDateTime;
196
+
197
+ @doc("Completion timestamp")
198
+ @encodedName("application/json", "completed_at")
199
+ completedAt?: utcDateTime;
200
+
201
+ @doc("Duration in milliseconds")
202
+ @encodedName("application/json", "duration_ms")
203
+ durationMs?: int32;
204
+ }
205
+
206
+ @doc("Backfill job types")
207
+ enum BackfillJobType {
208
+ @doc("Backfill missing data")
209
+ backfill: "backfill",
210
+
211
+ @doc("Rebuild search index")
212
+ reindex: "reindex",
213
+
214
+ @doc("Repair data integrity")
215
+ repair: "repair",
216
+
217
+ @doc("Migrate data format")
218
+ migrate: "migrate",
219
+ }
220
+
221
+ @doc("Backfill job status")
222
+ enum BackfillJobStatus {
223
+ @doc("Pending execution")
224
+ pending: "pending",
225
+
226
+ @doc("Currently running")
227
+ running: "running",
228
+
229
+ @doc("Paused")
230
+ paused: "paused",
231
+
232
+ @doc("Successfully completed")
233
+ completed: "completed",
234
+
235
+ @doc("Failed")
236
+ failed: "failed",
237
+
238
+ @doc("Cancelled")
239
+ cancelled: "cancelled",
240
+ }