@ancplua/qyl-api-schema 6.0.0 → 7.0.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/api/workflow.tsp +85 -9
- package/generated/json-schema/qyl-api-schema.json +379 -28
- package/generated/openapi/qyl.openapi.json +641 -36
- package/generated/ts-runtime/api.d.ts +95 -23
- package/generated/ts-runtime/api.js +11 -1
- package/models/mcp-tools.tsp +15 -9
- package/models/workflow.tsp +99 -14
- package/package.json +1 -1
|
@@ -34,12 +34,21 @@ export type WorkbenchSuiteId = string & {
|
|
|
34
34
|
export type WorkbenchEvaluationExportId = string & {
|
|
35
35
|
readonly __brand: "WorkbenchEvaluationExportId";
|
|
36
36
|
};
|
|
37
|
+
export type WorkflowGeneration = string & {
|
|
38
|
+
readonly __brand: "WorkflowGeneration";
|
|
39
|
+
};
|
|
40
|
+
export type WorkflowJournalPosition = string & {
|
|
41
|
+
readonly __brand: "WorkflowJournalPosition";
|
|
42
|
+
};
|
|
37
43
|
export type WorkflowRunId = string & {
|
|
38
44
|
readonly __brand: "WorkflowRunId";
|
|
39
45
|
};
|
|
40
46
|
export type WorkflowAttemptId = string & {
|
|
41
47
|
readonly __brand: "WorkflowAttemptId";
|
|
42
48
|
};
|
|
49
|
+
export type WorkflowRunCursor = string & {
|
|
50
|
+
readonly __brand: "WorkflowRunCursor";
|
|
51
|
+
};
|
|
43
52
|
export type WorkflowContentRef = string & {
|
|
44
53
|
readonly __brand: "WorkflowContentRef";
|
|
45
54
|
};
|
|
@@ -55,6 +64,15 @@ export type WorkflowToolCallId = string & {
|
|
|
55
64
|
export type WorkflowNodeId = string & {
|
|
56
65
|
readonly __brand: "WorkflowNodeId";
|
|
57
66
|
};
|
|
67
|
+
export type WorkflowEdgeId = string & {
|
|
68
|
+
readonly __brand: "WorkflowEdgeId";
|
|
69
|
+
};
|
|
70
|
+
export type WorkflowNodeCursor = string & {
|
|
71
|
+
readonly __brand: "WorkflowNodeCursor";
|
|
72
|
+
};
|
|
73
|
+
export type WorkflowEdgeCursor = string & {
|
|
74
|
+
readonly __brand: "WorkflowEdgeCursor";
|
|
75
|
+
};
|
|
58
76
|
export type WorkflowCommandId = string & {
|
|
59
77
|
readonly __brand: "WorkflowCommandId";
|
|
60
78
|
};
|
|
@@ -455,6 +473,18 @@ export declare const WorkflowControlStatusValues: {
|
|
|
455
473
|
readonly failed: "failed";
|
|
456
474
|
};
|
|
457
475
|
export type WorkflowControlStatus = typeof WorkflowControlStatusValues[keyof typeof WorkflowControlStatusValues];
|
|
476
|
+
export declare const WorkflowCursorKindValues: {
|
|
477
|
+
readonly node: "node";
|
|
478
|
+
readonly edge: "edge";
|
|
479
|
+
};
|
|
480
|
+
export type WorkflowCursorKind = typeof WorkflowCursorKindValues[keyof typeof WorkflowCursorKindValues];
|
|
481
|
+
export declare const WorkflowCursorFailureReasonValues: {
|
|
482
|
+
readonly invalid: "invalid";
|
|
483
|
+
readonly wrongRun: "wrong_run";
|
|
484
|
+
readonly wrongGeneration: "wrong_generation";
|
|
485
|
+
readonly stale: "stale";
|
|
486
|
+
};
|
|
487
|
+
export type WorkflowCursorFailureReason = typeof WorkflowCursorFailureReasonValues[keyof typeof WorkflowCursorFailureReasonValues];
|
|
458
488
|
export declare const WorkflowAttemptStatusValues: {
|
|
459
489
|
readonly pending: "pending";
|
|
460
490
|
readonly running: "running";
|
|
@@ -510,6 +540,7 @@ export type WorkbenchEvaluationExportPayload = WorkbenchEvaluationJsonExportPayl
|
|
|
510
540
|
export type WorkbenchProtocolEvents = WorkbenchProtocolEvent;
|
|
511
541
|
export type WorkbenchExecutionUpdateEvents = WorkbenchExecutionRecord;
|
|
512
542
|
export type WorkflowEdgeProvenance = RecordedWorkflowEdgeProvenance | DerivedWorkflowEdgeProvenance;
|
|
543
|
+
export type WorkflowProjectionStatus = CommittedWorkflowProjectionStatus | RebuildingWorkflowProjectionStatus | UnavailableWorkflowProjectionStatus | CorruptWorkflowProjectionStatus;
|
|
513
544
|
export type WorkflowStreamEvents = WorkflowJournalEvent | WorkflowHeartbeatEvent | WorkflowCursorGapEvent;
|
|
514
545
|
export type LogEvents = LogStreamEvent | HeartbeatEvent;
|
|
515
546
|
export interface AttributeBytesValue {
|
|
@@ -1355,14 +1386,36 @@ export interface WorkbenchEvaluationExportArtifact {
|
|
|
1355
1386
|
export interface WorkbenchEvaluationExportAccepted {
|
|
1356
1387
|
"export": WorkbenchEvaluationExport;
|
|
1357
1388
|
}
|
|
1389
|
+
export interface CommittedWorkflowProjectionStatus {
|
|
1390
|
+
"state": "committed";
|
|
1391
|
+
"generation": WorkflowGeneration;
|
|
1392
|
+
"journal_position": WorkflowJournalPosition;
|
|
1393
|
+
}
|
|
1394
|
+
export interface RebuildingWorkflowProjectionStatus {
|
|
1395
|
+
"state": "rebuilding";
|
|
1396
|
+
"generation": WorkflowGeneration;
|
|
1397
|
+
"target_journal_position": WorkflowJournalPosition;
|
|
1398
|
+
"retry_after_ms": number;
|
|
1399
|
+
}
|
|
1400
|
+
export interface UnavailableWorkflowProjectionStatus {
|
|
1401
|
+
"state": "unavailable";
|
|
1402
|
+
"generation"?: WorkflowGeneration;
|
|
1403
|
+
"retry_after_ms": number;
|
|
1404
|
+
}
|
|
1405
|
+
export interface CorruptWorkflowProjectionStatus {
|
|
1406
|
+
"state": "corrupt";
|
|
1407
|
+
"generation"?: WorkflowGeneration;
|
|
1408
|
+
"reason": "corrupt_derived_state" | "incompatible_derived_state";
|
|
1409
|
+
}
|
|
1358
1410
|
export interface WorkflowRun {
|
|
1359
1411
|
"run_id": WorkflowRunId;
|
|
1412
|
+
"generation": WorkflowGeneration;
|
|
1360
1413
|
"thread_id"?: string;
|
|
1361
1414
|
"title"?: string;
|
|
1362
1415
|
"status": WorkflowRunStatus;
|
|
1363
1416
|
"started_at": string;
|
|
1364
1417
|
"ended_at"?: string;
|
|
1365
|
-
"latest_journal_sequence":
|
|
1418
|
+
"latest_journal_sequence": WorkflowJournalPosition;
|
|
1366
1419
|
"active_attempt_id"?: WorkflowAttemptId;
|
|
1367
1420
|
"metadata"?: Record<string, unknown>;
|
|
1368
1421
|
}
|
|
@@ -1375,7 +1428,7 @@ export interface WorkflowRunCreateRequest {
|
|
|
1375
1428
|
}
|
|
1376
1429
|
export interface WorkflowRunPage {
|
|
1377
1430
|
"items": WorkflowRun[];
|
|
1378
|
-
"next_cursor"?:
|
|
1431
|
+
"next_cursor"?: WorkflowRunCursor;
|
|
1379
1432
|
"has_more": boolean;
|
|
1380
1433
|
}
|
|
1381
1434
|
export interface WorkflowContentChunk {
|
|
@@ -1408,18 +1461,18 @@ export interface WorkflowEventBatchAppendResponse {
|
|
|
1408
1461
|
"accepted_count": number;
|
|
1409
1462
|
"duplicate_count": number;
|
|
1410
1463
|
"acknowledged_source_sequence": string;
|
|
1411
|
-
"first_journal_sequence"?:
|
|
1412
|
-
"last_journal_sequence"?:
|
|
1464
|
+
"first_journal_sequence"?: WorkflowJournalPosition;
|
|
1465
|
+
"last_journal_sequence"?: WorkflowJournalPosition;
|
|
1413
1466
|
}
|
|
1414
1467
|
export interface WorkflowJournalEvent extends WorkflowEventAppend {
|
|
1415
1468
|
"run_id": WorkflowRunId;
|
|
1416
1469
|
"client_id": string;
|
|
1417
|
-
"journal_sequence":
|
|
1470
|
+
"journal_sequence": WorkflowJournalPosition;
|
|
1418
1471
|
}
|
|
1419
1472
|
export interface WorkflowEventPage {
|
|
1420
1473
|
"events": WorkflowJournalEvent[];
|
|
1421
|
-
"next_sequence":
|
|
1422
|
-
"high_water_mark":
|
|
1474
|
+
"next_sequence": WorkflowJournalPosition;
|
|
1475
|
+
"high_water_mark": WorkflowJournalPosition;
|
|
1423
1476
|
"cursor_gap": boolean;
|
|
1424
1477
|
}
|
|
1425
1478
|
export interface RecordedWorkflowEdgeProvenance {
|
|
@@ -1446,7 +1499,7 @@ export interface WorkflowGraphNode {
|
|
|
1446
1499
|
"attributes"?: Record<string, unknown>;
|
|
1447
1500
|
}
|
|
1448
1501
|
export interface WorkflowGraphEdge {
|
|
1449
|
-
"edge_id":
|
|
1502
|
+
"edge_id": WorkflowEdgeId;
|
|
1450
1503
|
"source_node_id": WorkflowNodeId;
|
|
1451
1504
|
"target_node_id": WorkflowNodeId;
|
|
1452
1505
|
"kind": WorkflowEdgeKind;
|
|
@@ -1463,12 +1516,13 @@ export interface WorkflowGraphStatistics {
|
|
|
1463
1516
|
}
|
|
1464
1517
|
export interface WorkflowGraphSnapshot {
|
|
1465
1518
|
"run": WorkflowRun;
|
|
1519
|
+
"projection_status": WorkflowProjectionStatus;
|
|
1466
1520
|
"nodes": WorkflowGraphNode[];
|
|
1467
1521
|
"edges": WorkflowGraphEdge[];
|
|
1468
1522
|
"statistics": WorkflowGraphStatistics;
|
|
1469
|
-
"journal_sequence":
|
|
1470
|
-
"next_node_cursor"?:
|
|
1471
|
-
"next_edge_cursor"?:
|
|
1523
|
+
"journal_sequence": WorkflowJournalPosition;
|
|
1524
|
+
"next_node_cursor"?: WorkflowNodeCursor;
|
|
1525
|
+
"next_edge_cursor"?: WorkflowEdgeCursor;
|
|
1472
1526
|
"has_more_nodes": boolean;
|
|
1473
1527
|
"has_more_edges": boolean;
|
|
1474
1528
|
"total_node_count": number;
|
|
@@ -1509,15 +1563,33 @@ export interface WorkflowControlStatusUpdateRequest {
|
|
|
1509
1563
|
}
|
|
1510
1564
|
export interface WorkflowHeartbeatEvent {
|
|
1511
1565
|
"type": "heartbeat";
|
|
1512
|
-
"high_water_mark":
|
|
1566
|
+
"high_water_mark": WorkflowJournalPosition;
|
|
1513
1567
|
"timestamp": string;
|
|
1514
1568
|
}
|
|
1515
1569
|
export interface WorkflowCursorGapEvent {
|
|
1516
1570
|
"type": "cursor_gap";
|
|
1517
|
-
"oldest_available_sequence":
|
|
1518
|
-
"high_water_mark":
|
|
1571
|
+
"oldest_available_sequence": WorkflowJournalPosition;
|
|
1572
|
+
"high_water_mark": WorkflowJournalPosition;
|
|
1519
1573
|
"timestamp": string;
|
|
1520
1574
|
}
|
|
1575
|
+
export interface WorkflowCursorError extends ProblemDetails {
|
|
1576
|
+
"title": "Invalid Workflow Cursor";
|
|
1577
|
+
"cursor_kind": WorkflowCursorKind;
|
|
1578
|
+
"reason": WorkflowCursorFailureReason;
|
|
1579
|
+
"current_generation"?: WorkflowGeneration;
|
|
1580
|
+
}
|
|
1581
|
+
export interface WorkflowRunDeletedError extends ProblemDetails {
|
|
1582
|
+
"title": "Workflow Run Deleted";
|
|
1583
|
+
"run_id": WorkflowRunId;
|
|
1584
|
+
}
|
|
1585
|
+
export interface WorkflowProjectionUnavailableError extends ProblemDetails {
|
|
1586
|
+
"title": "Workflow Projection Unavailable";
|
|
1587
|
+
"projection_status": WorkflowProjectionStatus;
|
|
1588
|
+
}
|
|
1589
|
+
export interface WorkflowProjectionCorruptError extends ProblemDetails {
|
|
1590
|
+
"title": "Workflow Projection Corrupt";
|
|
1591
|
+
"projection_status": WorkflowProjectionStatus;
|
|
1592
|
+
}
|
|
1521
1593
|
export interface DisplayTracesInput {
|
|
1522
1594
|
"trace_id"?: TraceId;
|
|
1523
1595
|
"session_id"?: SessionId;
|
|
@@ -1649,20 +1721,20 @@ export interface FetchTelemetryOutput {
|
|
|
1649
1721
|
}
|
|
1650
1722
|
export interface ListWorkflowRunsInput {
|
|
1651
1723
|
"status"?: WorkflowRunStatus;
|
|
1652
|
-
"cursor"?:
|
|
1724
|
+
"cursor"?: WorkflowRunCursor;
|
|
1653
1725
|
"limit"?: number;
|
|
1654
1726
|
}
|
|
1655
1727
|
export interface ListWorkflowRunsOutput {
|
|
1656
1728
|
"runs": WorkflowRun[];
|
|
1657
|
-
"next_cursor"?:
|
|
1729
|
+
"next_cursor"?: WorkflowRunCursor;
|
|
1658
1730
|
"has_more": boolean;
|
|
1659
1731
|
"mode": McpDataMode;
|
|
1660
1732
|
}
|
|
1661
1733
|
export interface GetWorkflowGraphInput {
|
|
1662
1734
|
"run_id": WorkflowRunId;
|
|
1663
|
-
"node_cursor"?:
|
|
1735
|
+
"node_cursor"?: WorkflowNodeCursor;
|
|
1664
1736
|
"node_limit"?: number;
|
|
1665
|
-
"edge_cursor"?:
|
|
1737
|
+
"edge_cursor"?: WorkflowEdgeCursor;
|
|
1666
1738
|
"edge_limit"?: number;
|
|
1667
1739
|
}
|
|
1668
1740
|
export interface GetWorkflowGraphOutput {
|
|
@@ -1671,9 +1743,9 @@ export interface GetWorkflowGraphOutput {
|
|
|
1671
1743
|
}
|
|
1672
1744
|
export interface DisplayWorkflowGraphInput {
|
|
1673
1745
|
"run_id"?: WorkflowRunId;
|
|
1674
|
-
"node_cursor"?:
|
|
1746
|
+
"node_cursor"?: WorkflowNodeCursor;
|
|
1675
1747
|
"node_limit"?: number;
|
|
1676
|
-
"edge_cursor"?:
|
|
1748
|
+
"edge_cursor"?: WorkflowEdgeCursor;
|
|
1677
1749
|
"edge_limit"?: number;
|
|
1678
1750
|
}
|
|
1679
1751
|
export interface DisplayWorkflowGraphOutput {
|
|
@@ -1683,12 +1755,12 @@ export interface DisplayWorkflowGraphOutput {
|
|
|
1683
1755
|
}
|
|
1684
1756
|
export interface FetchWorkflowGraphUpdatesInput {
|
|
1685
1757
|
"run_id": WorkflowRunId;
|
|
1686
|
-
"after_sequence":
|
|
1758
|
+
"after_sequence": WorkflowJournalPosition;
|
|
1687
1759
|
"limit"?: number;
|
|
1688
1760
|
"wait_ms"?: number;
|
|
1689
|
-
"node_cursor"?:
|
|
1761
|
+
"node_cursor"?: WorkflowNodeCursor;
|
|
1690
1762
|
"node_limit"?: number;
|
|
1691
|
-
"edge_cursor"?:
|
|
1763
|
+
"edge_cursor"?: WorkflowEdgeCursor;
|
|
1692
1764
|
"edge_limit"?: number;
|
|
1693
1765
|
"content_ref"?: WorkflowContentRef;
|
|
1694
1766
|
}
|
|
@@ -353,6 +353,16 @@ export const WorkflowControlStatusValues = {
|
|
|
353
353
|
"rejected": "rejected",
|
|
354
354
|
"failed": "failed",
|
|
355
355
|
};
|
|
356
|
+
export const WorkflowCursorKindValues = {
|
|
357
|
+
"node": "node",
|
|
358
|
+
"edge": "edge",
|
|
359
|
+
};
|
|
360
|
+
export const WorkflowCursorFailureReasonValues = {
|
|
361
|
+
"invalid": "invalid",
|
|
362
|
+
"wrongRun": "wrong_run",
|
|
363
|
+
"wrongGeneration": "wrong_generation",
|
|
364
|
+
"stale": "stale",
|
|
365
|
+
};
|
|
356
366
|
export const WorkflowAttemptStatusValues = {
|
|
357
367
|
"pending": "pending",
|
|
358
368
|
"running": "running",
|
|
@@ -392,4 +402,4 @@ export const FetchTelemetryViewValues = {
|
|
|
392
402
|
};
|
|
393
403
|
// --- contract revision (scripts/emit-contract-revision.mjs) ---
|
|
394
404
|
/** Revision of the API contract these types were emitted from; compare against HealthReport.contract_revision. */
|
|
395
|
-
export const CONTRACT_REVISION = "sha256:
|
|
405
|
+
export const CONTRACT_REVISION = "sha256:53278018c62ed547";
|
package/models/mcp-tools.tsp
CHANGED
|
@@ -222,7 +222,7 @@ model FetchTelemetryOutput {
|
|
|
222
222
|
model ListWorkflowRunsInput {
|
|
223
223
|
status?: WorkflowRunStatus;
|
|
224
224
|
|
|
225
|
-
cursor?:
|
|
225
|
+
cursor?: WorkflowRunCursor;
|
|
226
226
|
|
|
227
227
|
@minValue(1)
|
|
228
228
|
@maxValue(100)
|
|
@@ -234,7 +234,7 @@ model ListWorkflowRunsOutput {
|
|
|
234
234
|
runs: WorkflowRun[];
|
|
235
235
|
|
|
236
236
|
@encodedName("application/json", "next_cursor")
|
|
237
|
-
nextCursor?:
|
|
237
|
+
nextCursor?: WorkflowRunCursor;
|
|
238
238
|
|
|
239
239
|
@encodedName("application/json", "has_more")
|
|
240
240
|
hasMore: boolean;
|
|
@@ -247,16 +247,18 @@ model GetWorkflowGraphInput {
|
|
|
247
247
|
@encodedName("application/json", "run_id")
|
|
248
248
|
runId: WorkflowRunId;
|
|
249
249
|
|
|
250
|
+
@doc("Opaque node continuation. Reuse it unchanged from the preceding snapshot's next_node_cursor; do not parse, construct, or modify it.")
|
|
250
251
|
@encodedName("application/json", "node_cursor")
|
|
251
|
-
nodeCursor?:
|
|
252
|
+
nodeCursor?: WorkflowNodeCursor;
|
|
252
253
|
|
|
253
254
|
@encodedName("application/json", "node_limit")
|
|
254
255
|
@minValue(1)
|
|
255
256
|
@maxValue(1000)
|
|
256
257
|
nodeLimit?: int32 = 250;
|
|
257
258
|
|
|
259
|
+
@doc("Opaque edge continuation. Reuse it unchanged from the preceding snapshot's next_edge_cursor; do not parse, construct, or modify it.")
|
|
258
260
|
@encodedName("application/json", "edge_cursor")
|
|
259
|
-
edgeCursor?:
|
|
261
|
+
edgeCursor?: WorkflowEdgeCursor;
|
|
260
262
|
|
|
261
263
|
@encodedName("application/json", "edge_limit")
|
|
262
264
|
@minValue(1)
|
|
@@ -275,16 +277,18 @@ model DisplayWorkflowGraphInput {
|
|
|
275
277
|
@encodedName("application/json", "run_id")
|
|
276
278
|
runId?: WorkflowRunId;
|
|
277
279
|
|
|
280
|
+
@doc("Opaque node continuation. Reuse it unchanged from the preceding snapshot's next_node_cursor; do not parse, construct, or modify it.")
|
|
278
281
|
@encodedName("application/json", "node_cursor")
|
|
279
|
-
nodeCursor?:
|
|
282
|
+
nodeCursor?: WorkflowNodeCursor;
|
|
280
283
|
|
|
281
284
|
@encodedName("application/json", "node_limit")
|
|
282
285
|
@minValue(1)
|
|
283
286
|
@maxValue(1000)
|
|
284
287
|
nodeLimit?: int32 = 250;
|
|
285
288
|
|
|
289
|
+
@doc("Opaque edge continuation. Reuse it unchanged from the preceding snapshot's next_edge_cursor; do not parse, construct, or modify it.")
|
|
286
290
|
@encodedName("application/json", "edge_cursor")
|
|
287
|
-
edgeCursor?:
|
|
291
|
+
edgeCursor?: WorkflowEdgeCursor;
|
|
288
292
|
|
|
289
293
|
@encodedName("application/json", "edge_limit")
|
|
290
294
|
@minValue(1)
|
|
@@ -308,7 +312,7 @@ model FetchWorkflowGraphUpdatesInput {
|
|
|
308
312
|
runId: WorkflowRunId;
|
|
309
313
|
|
|
310
314
|
@encodedName("application/json", "after_sequence")
|
|
311
|
-
afterSequence:
|
|
315
|
+
afterSequence: WorkflowJournalPosition;
|
|
312
316
|
|
|
313
317
|
@minValue(1)
|
|
314
318
|
@maxValue(1000)
|
|
@@ -319,16 +323,18 @@ model FetchWorkflowGraphUpdatesInput {
|
|
|
319
323
|
@maxValue(30000)
|
|
320
324
|
waitMs?: int32 = 20000;
|
|
321
325
|
|
|
326
|
+
@doc("Opaque node continuation. Reuse it unchanged from the preceding snapshot's next_node_cursor; do not parse, construct, or modify it.")
|
|
322
327
|
@encodedName("application/json", "node_cursor")
|
|
323
|
-
nodeCursor?:
|
|
328
|
+
nodeCursor?: WorkflowNodeCursor;
|
|
324
329
|
|
|
325
330
|
@encodedName("application/json", "node_limit")
|
|
326
331
|
@minValue(1)
|
|
327
332
|
@maxValue(1000)
|
|
328
333
|
nodeLimit?: int32 = 250;
|
|
329
334
|
|
|
335
|
+
@doc("Opaque edge continuation. Reuse it unchanged from the preceding snapshot's next_edge_cursor; do not parse, construct, or modify it.")
|
|
330
336
|
@encodedName("application/json", "edge_cursor")
|
|
331
|
-
edgeCursor?:
|
|
337
|
+
edgeCursor?: WorkflowEdgeCursor;
|
|
332
338
|
|
|
333
339
|
@encodedName("application/json", "edge_limit")
|
|
334
340
|
@minValue(1)
|
package/models/workflow.tsp
CHANGED
|
@@ -9,6 +9,17 @@ namespace Qyl.Api.Contracts.Workflow;
|
|
|
9
9
|
@maxLength(128)
|
|
10
10
|
scalar WorkflowRunId extends string;
|
|
11
11
|
|
|
12
|
+
@doc("Opaque incarnation identifier for one workflow run's projected state.")
|
|
13
|
+
@pattern("^[0-9a-f]{12}4[0-9a-f]{3}[89ab][0-9a-f]{15}$")
|
|
14
|
+
@minLength(32)
|
|
15
|
+
@maxLength(32)
|
|
16
|
+
scalar WorkflowGeneration extends string;
|
|
17
|
+
|
|
18
|
+
@doc("Opaque workflow-run list continuation scoped to the project and status filter. Reuse it unchanged; clients must not parse or construct it.")
|
|
19
|
+
@minLength(1)
|
|
20
|
+
@maxLength(512)
|
|
21
|
+
scalar WorkflowRunCursor extends string;
|
|
22
|
+
|
|
12
23
|
@doc("Stable identifier of one workflow attempt.")
|
|
13
24
|
@minLength(1)
|
|
14
25
|
@maxLength(128)
|
|
@@ -34,11 +45,26 @@ scalar WorkflowEventId extends string;
|
|
|
34
45
|
@maxLength(128)
|
|
35
46
|
scalar WorkflowCommandId extends string;
|
|
36
47
|
|
|
37
|
-
@doc("Stable identifier of one graph node.")
|
|
48
|
+
@doc("Stable identifier of one graph node. Canonical tuples structurally distinguish run scope from attempt scope, escape colon as \\c and backslash as \\\\, and never infer scope from a literal component value. A canonical identifier over 192 Unicode scalar values is replaced by its kind, a tilde, and the full lowercase 64-hex SHA-256 of the length-prefixed canonical tuple.")
|
|
38
49
|
@minLength(1)
|
|
39
50
|
@maxLength(192)
|
|
40
51
|
scalar WorkflowNodeId extends string;
|
|
41
52
|
|
|
53
|
+
@doc("Stable identifier of one graph edge. Endpoint tuples preserve the nodes' structural run-versus-attempt scope and ordinal component boundaries, escape colon as \\c and backslash as \\\\, and never infer scope from a literal component value. A canonical identifier over 192 Unicode scalar values is replaced by its edge kind, a tilde, and the full lowercase 64-hex SHA-256 of the length-prefixed canonical tuple.")
|
|
54
|
+
@minLength(1)
|
|
55
|
+
@maxLength(192)
|
|
56
|
+
scalar WorkflowEdgeId extends string;
|
|
57
|
+
|
|
58
|
+
@doc("Opaque node-page continuation scoped to one workflow run and generation. Reuse it unchanged; clients must not parse or construct it.")
|
|
59
|
+
@minLength(1)
|
|
60
|
+
@maxLength(1536)
|
|
61
|
+
scalar WorkflowNodeCursor extends string;
|
|
62
|
+
|
|
63
|
+
@doc("Opaque edge-page continuation scoped to one workflow run and generation. Reuse it unchanged; clients must not parse or construct it.")
|
|
64
|
+
@minLength(1)
|
|
65
|
+
@maxLength(1536)
|
|
66
|
+
scalar WorkflowEdgeCursor extends string;
|
|
67
|
+
|
|
42
68
|
@doc("Content-addressed reference to a captured workflow payload.")
|
|
43
69
|
@pattern("^sha256:[a-f0-9]{64}$")
|
|
44
70
|
@minLength(71)
|
|
@@ -50,6 +76,11 @@ scalar WorkflowContentRef extends string;
|
|
|
50
76
|
@encode(string)
|
|
51
77
|
scalar WorkflowSequence extends uint64;
|
|
52
78
|
|
|
79
|
+
@doc("Collector-assigned position in the authoritative workflow journal, encoded without JavaScript precision loss.")
|
|
80
|
+
@minValue(0)
|
|
81
|
+
@encode(string)
|
|
82
|
+
scalar WorkflowJournalPosition extends uint64;
|
|
83
|
+
|
|
53
84
|
@doc("Current lifecycle of a workflow run.")
|
|
54
85
|
enum WorkflowRunStatus {
|
|
55
86
|
active: "active",
|
|
@@ -165,11 +196,60 @@ enum WorkflowContentEncoding {
|
|
|
165
196
|
base64: "base64",
|
|
166
197
|
}
|
|
167
198
|
|
|
199
|
+
@doc("A valid committed projection that can be served to readers.")
|
|
200
|
+
model CommittedWorkflowProjectionStatus {
|
|
201
|
+
state: "committed";
|
|
202
|
+
generation: WorkflowGeneration;
|
|
203
|
+
|
|
204
|
+
@encodedName("application/json", "journal_position")
|
|
205
|
+
journalPosition: WorkflowJournalPosition;
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
@doc("The requested generation is being reconstructed from its authoritative journal.")
|
|
209
|
+
model RebuildingWorkflowProjectionStatus {
|
|
210
|
+
state: "rebuilding";
|
|
211
|
+
generation: WorkflowGeneration;
|
|
212
|
+
|
|
213
|
+
@encodedName("application/json", "target_journal_position")
|
|
214
|
+
targetJournalPosition: WorkflowJournalPosition;
|
|
215
|
+
|
|
216
|
+
@encodedName("application/json", "retry_after_ms")
|
|
217
|
+
@minValue(1)
|
|
218
|
+
retryAfterMs: int32;
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
@doc("Projection work is temporarily unavailable after a retryable storage failure.")
|
|
222
|
+
model UnavailableWorkflowProjectionStatus {
|
|
223
|
+
state: "unavailable";
|
|
224
|
+
generation?: WorkflowGeneration;
|
|
225
|
+
|
|
226
|
+
@encodedName("application/json", "retry_after_ms")
|
|
227
|
+
@minValue(1)
|
|
228
|
+
retryAfterMs: int32;
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
@doc("Derived projection state is corrupt or incompatible and cannot currently be served.")
|
|
232
|
+
model CorruptWorkflowProjectionStatus {
|
|
233
|
+
state: "corrupt";
|
|
234
|
+
generation?: WorkflowGeneration;
|
|
235
|
+
reason: "corrupt_derived_state" | "incompatible_derived_state";
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
@doc("Closed public availability state for one workflow projection. Storage paths, hashes, fingerprints, and database errors remain private.")
|
|
239
|
+
union WorkflowProjectionStatus {
|
|
240
|
+
committed: CommittedWorkflowProjectionStatus,
|
|
241
|
+
rebuilding: RebuildingWorkflowProjectionStatus,
|
|
242
|
+
unavailable: UnavailableWorkflowProjectionStatus,
|
|
243
|
+
corrupt: CorruptWorkflowProjectionStatus,
|
|
244
|
+
}
|
|
245
|
+
|
|
168
246
|
@doc("One immutable workflow run.")
|
|
169
247
|
model WorkflowRun {
|
|
170
248
|
@encodedName("application/json", "run_id")
|
|
171
249
|
runId: WorkflowRunId;
|
|
172
250
|
|
|
251
|
+
generation: WorkflowGeneration;
|
|
252
|
+
|
|
173
253
|
@encodedName("application/json", "thread_id")
|
|
174
254
|
threadId?: string;
|
|
175
255
|
|
|
@@ -183,7 +263,7 @@ model WorkflowRun {
|
|
|
183
263
|
endedAt?: utcDateTime;
|
|
184
264
|
|
|
185
265
|
@encodedName("application/json", "latest_journal_sequence")
|
|
186
|
-
latestJournalSequence:
|
|
266
|
+
latestJournalSequence: WorkflowJournalPosition;
|
|
187
267
|
|
|
188
268
|
@encodedName("application/json", "active_attempt_id")
|
|
189
269
|
activeAttemptId?: WorkflowAttemptId;
|
|
@@ -212,7 +292,7 @@ model WorkflowRunPage {
|
|
|
212
292
|
items: WorkflowRun[];
|
|
213
293
|
|
|
214
294
|
@encodedName("application/json", "next_cursor")
|
|
215
|
-
nextCursor?:
|
|
295
|
+
nextCursor?: WorkflowRunCursor;
|
|
216
296
|
|
|
217
297
|
@encodedName("application/json", "has_more")
|
|
218
298
|
hasMore: boolean;
|
|
@@ -301,10 +381,10 @@ model WorkflowEventBatchAppendResponse {
|
|
|
301
381
|
acknowledgedSourceSequence: WorkflowSequence;
|
|
302
382
|
|
|
303
383
|
@encodedName("application/json", "first_journal_sequence")
|
|
304
|
-
firstJournalSequence?:
|
|
384
|
+
firstJournalSequence?: WorkflowJournalPosition;
|
|
305
385
|
|
|
306
386
|
@encodedName("application/json", "last_journal_sequence")
|
|
307
|
-
lastJournalSequence?:
|
|
387
|
+
lastJournalSequence?: WorkflowJournalPosition;
|
|
308
388
|
}
|
|
309
389
|
|
|
310
390
|
@doc("One immutable event after collector journal sequence assignment.")
|
|
@@ -316,7 +396,7 @@ model WorkflowJournalEvent extends WorkflowEventAppend {
|
|
|
316
396
|
clientId: string;
|
|
317
397
|
|
|
318
398
|
@encodedName("application/json", "journal_sequence")
|
|
319
|
-
journalSequence:
|
|
399
|
+
journalSequence: WorkflowJournalPosition;
|
|
320
400
|
}
|
|
321
401
|
|
|
322
402
|
@doc("A bounded page of workflow journal events.")
|
|
@@ -324,10 +404,10 @@ model WorkflowEventPage {
|
|
|
324
404
|
events: WorkflowJournalEvent[];
|
|
325
405
|
|
|
326
406
|
@encodedName("application/json", "next_sequence")
|
|
327
|
-
nextSequence:
|
|
407
|
+
nextSequence: WorkflowJournalPosition;
|
|
328
408
|
|
|
329
409
|
@encodedName("application/json", "high_water_mark")
|
|
330
|
-
highWaterMark:
|
|
410
|
+
highWaterMark: WorkflowJournalPosition;
|
|
331
411
|
|
|
332
412
|
@encodedName("application/json", "cursor_gap")
|
|
333
413
|
cursorGap: boolean;
|
|
@@ -390,10 +470,10 @@ model WorkflowGraphNode {
|
|
|
390
470
|
attributes?: Record<unknown>;
|
|
391
471
|
}
|
|
392
472
|
|
|
393
|
-
@doc("One typed edge in the deterministic workflow graph projection.")
|
|
473
|
+
@doc("One typed edge in the deterministic workflow graph projection. Data, Control, and Gate edges are causal dependencies. Temporal edges describe observed order, Resource edges describe resource use, and Conflict edges describe contention; Temporal, Resource, and Conflict edges are excluded from critical-path causality.")
|
|
394
474
|
model WorkflowGraphEdge {
|
|
395
475
|
@encodedName("application/json", "edge_id")
|
|
396
|
-
edgeId:
|
|
476
|
+
edgeId: WorkflowEdgeId;
|
|
397
477
|
|
|
398
478
|
@encodedName("application/json", "source_node_id")
|
|
399
479
|
sourceNodeId: WorkflowNodeId;
|
|
@@ -405,7 +485,7 @@ model WorkflowGraphEdge {
|
|
|
405
485
|
provenance: WorkflowEdgeProvenance;
|
|
406
486
|
}
|
|
407
487
|
|
|
408
|
-
@doc("Work and critical-path statistics for a workflow graph.")
|
|
488
|
+
@doc("Work and critical-path statistics for a workflow graph. Every ToolCall, Wait, Gate, and duration-bearing Message or Item contributes an independently weighted interval even when it has no Agent owner. An Agent contributes its own-work fragments: its interval minus the union of precisely owned child intervals clipped to the Agent interval. Precisely owned children are Control-linked Agent and ToolCall nodes, Temporal-linked Wait nodes, Gate-linked Gate nodes, and Data-linked duration-bearing Message or Item nodes. Peak concurrency sweeps every positive independently weighted or Agent own-work fragment. Critical-path analysis uses only Data, Control, and Gate edges, condenses each causal strongly connected component, charges every component member exactly once, and expands selected component members in ordinal node-id order.")
|
|
409
489
|
model WorkflowGraphStatistics {
|
|
410
490
|
@encodedName("application/json", "t1_ms")
|
|
411
491
|
t1Ms: DurationMs;
|
|
@@ -434,18 +514,23 @@ model WorkflowGraphStatistics {
|
|
|
434
514
|
@doc("Deterministic graph projection at one journal cursor.")
|
|
435
515
|
model WorkflowGraphSnapshot {
|
|
436
516
|
run: WorkflowRun;
|
|
517
|
+
|
|
518
|
+
@encodedName("application/json", "projection_status")
|
|
519
|
+
projectionStatus: WorkflowProjectionStatus;
|
|
437
520
|
nodes: WorkflowGraphNode[];
|
|
438
521
|
edges: WorkflowGraphEdge[];
|
|
439
522
|
statistics: WorkflowGraphStatistics;
|
|
440
523
|
|
|
441
524
|
@encodedName("application/json", "journal_sequence")
|
|
442
|
-
journalSequence:
|
|
525
|
+
journalSequence: WorkflowJournalPosition;
|
|
443
526
|
|
|
444
527
|
@encodedName("application/json", "next_node_cursor")
|
|
445
|
-
|
|
528
|
+
@doc("Opaque node continuation for the next page. Reuse it unchanged as node_cursor on the next graph request; do not parse, construct, or modify it.")
|
|
529
|
+
nextNodeCursor?: WorkflowNodeCursor;
|
|
446
530
|
|
|
447
531
|
@encodedName("application/json", "next_edge_cursor")
|
|
448
|
-
|
|
532
|
+
@doc("Opaque edge continuation for the next page. Reuse it unchanged as edge_cursor on the next graph request; do not parse, construct, or modify it.")
|
|
533
|
+
nextEdgeCursor?: WorkflowEdgeCursor;
|
|
449
534
|
|
|
450
535
|
@encodedName("application/json", "has_more_nodes")
|
|
451
536
|
hasMoreNodes: boolean;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ancplua/qyl-api-schema",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "7.0.0",
|
|
4
4
|
"description": "TypeSpec source of truth for qyl API contracts. Emits OpenAPI, JSON Schema, Qyl.Api.Contracts DTOs, and TypeScript contract types; not an OpenTelemetry package, storage schema, or server implementation.",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"repository": {
|