@ancplua/qyl-api-schema 0.4.0 → 0.5.1

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 (61) hide show
  1. package/README.md +52 -64
  2. package/api/routes.tsp +90 -943
  3. package/api/runner.tsp +99 -0
  4. package/api/streaming.tsp +13 -299
  5. package/common/errors.tsp +14 -1
  6. package/common/pagination.tsp +1 -1
  7. package/common/types.tsp +2 -41
  8. package/generated/json-schema/qyl-api-schema.json +3868 -0
  9. package/generated/openapi/qyl.openapi.json +6919 -0
  10. package/generated/ts-runtime/api.d.ts +886 -0
  11. package/generated/ts-runtime/api.js +237 -0
  12. package/index.tsp +8 -34
  13. package/models/health.tsp +22 -0
  14. package/models/mcp-tools.tsp +217 -0
  15. package/models/runner-mcp.tsp +76 -0
  16. package/models/runner.tsp +67 -0
  17. package/models/session.tsp +1 -1
  18. package/otel/enums.tsp +1 -1
  19. package/otel/logs.tsp +1 -1
  20. package/otel/otel-conventions.tsp +0 -1
  21. package/otel/profiles.tsp +1 -1
  22. package/otel/resource.tsp +1 -1
  23. package/otel/span.tsp +9 -6
  24. package/package.json +56 -36
  25. package/VERSIONING.md +0 -88
  26. package/generated/README.md +0 -35
  27. package/intelligence/causal-rules.tsp +0 -34
  28. package/intelligence/diagnostic-patterns.tsp +0 -54
  29. package/intelligence/investigation-strategies.tsp +0 -37
  30. package/intelligence/main.tsp +0 -17
  31. package/intelligence/seed/patterns.tsp +0 -171
  32. package/intelligence/seed/rules.tsp +0 -43
  33. package/intelligence/seed/strategies.tsp +0 -55
  34. package/intelligence/signals.tsp +0 -60
  35. package/models/agent/agent-run.tsp +0 -154
  36. package/models/agent/tool-call.tsp +0 -122
  37. package/models/agent/workflow-checkpoint.tsp +0 -50
  38. package/models/agent/workflow-execution.tsp +0 -136
  39. package/models/alerting.tsp +0 -436
  40. package/models/configurator.tsp +0 -433
  41. package/models/control-graph.tsp +0 -197
  42. package/models/db.tsp +0 -767
  43. package/models/deployment.tsp +0 -365
  44. package/models/error.tsp +0 -433
  45. package/models/genai.tsp +0 -1305
  46. package/models/http.tsp +0 -547
  47. package/models/identity.tsp +0 -213
  48. package/models/issues.tsp +0 -484
  49. package/models/log.tsp +0 -140
  50. package/models/messaging.tsp +0 -304
  51. package/models/otel-config.tsp +0 -455
  52. package/models/retention.tsp +0 -240
  53. package/models/rpc.tsp +0 -309
  54. package/models/search.tsp +0 -243
  55. package/models/system.tsp +0 -400
  56. package/models/test.tsp +0 -346
  57. package/models/triage.tsp +0 -113
  58. package/models/workflow.tsp +0 -396
  59. package/models/workspace.tsp +0 -435
  60. package/otel/metrics.tsp +0 -358
  61. package/tspconfig.yaml +0 -49
package/api/runner.tsp ADDED
@@ -0,0 +1,99 @@
1
+ import "@typespec/events";
2
+ import "@typespec/http";
3
+ import "@typespec/sse";
4
+
5
+ import "../common/errors.tsp";
6
+ import "../models/runner.tsp";
7
+ import "../models/runner-mcp.tsp";
8
+
9
+ using TypeSpec.Events;
10
+ using TypeSpec.Http;
11
+ using TypeSpec.SSE;
12
+
13
+ using Qyl.Api.Contracts.Common.Errors;
14
+ using Qyl.Api.Contracts.Runner.Mcp;
15
+
16
+ namespace Qyl.Api.Contracts.Runner {
17
+ @events
18
+ union RunnerResourceEvents {
19
+ RunnerResourceState,
20
+ }
21
+
22
+ @events
23
+ union RunnerLogEvents {
24
+ RunnerLogLine,
25
+ }
26
+
27
+ @route("/runner/resources")
28
+ @tag("Runner resources")
29
+ interface RunnerResourcesApi {
30
+ @get
31
+ snapshot(): RunnerResourceState[] | InternalServerError;
32
+
33
+ @get
34
+ @route("/stream")
35
+ stream(): SSEStream<RunnerResourceEvents> | InternalServerError;
36
+
37
+ @get
38
+ @route("/{resource}/logs")
39
+ logs(
40
+ @path resource: string,
41
+ ): RunnerLogLine[] | NotFoundError | InternalServerError;
42
+
43
+ @get
44
+ @route("/{resource}/logs/stream")
45
+ streamLogs(
46
+ @path resource: string,
47
+ ): SSEStream<RunnerLogEvents> | NotFoundError | InternalServerError;
48
+
49
+ @post
50
+ @route("/{resource}/restart")
51
+ restart(
52
+ @path resource: string,
53
+ ): RunnerActionAccepted | NotFoundError | ConflictError | InternalServerError;
54
+
55
+ @post
56
+ @route("/{resource}/stop")
57
+ stop(
58
+ @path resource: string,
59
+ ): RunnerActionAccepted | NotFoundError | ConflictError | InternalServerError;
60
+ }
61
+
62
+ @route("/runner/mcp/{resource}")
63
+ @tag("Runner MCP")
64
+ interface RunnerMcpApi {
65
+ @get
66
+ @route("/tools")
67
+ listTools(
68
+ @path resource: string,
69
+ ): RunnerMcpToolsResponse
70
+ | NotFoundError
71
+ | ConflictError
72
+ | BadGatewayError
73
+ | InternalServerError;
74
+
75
+ @post
76
+ @route("/tools/call")
77
+ callTool(
78
+ @path resource: string,
79
+ @body request: RunnerMcpToolCallRequest,
80
+ ): RunnerMcpToolCallResponse
81
+ | ValidationError
82
+ | NotFoundError
83
+ | ConflictError
84
+ | BadGatewayError
85
+ | InternalServerError;
86
+
87
+ @post
88
+ @route("/resources/read")
89
+ readResource(
90
+ @path resource: string,
91
+ @body request: RunnerMcpResourceReadRequest,
92
+ ): RunnerMcpResourceReadResponse
93
+ | ValidationError
94
+ | NotFoundError
95
+ | ConflictError
96
+ | BadGatewayError
97
+ | InternalServerError;
98
+ }
99
+ }
package/api/streaming.tsp CHANGED
@@ -1,335 +1,49 @@
1
- // =============================================================================
2
- // qyl streaming API routes
3
- // =============================================================================
4
- // Server-Sent Events (SSE) streaming endpoints for real-time telemetry.
5
- // =============================================================================
6
-
1
+ import "@typespec/events";
7
2
  import "@typespec/http";
8
3
  import "@typespec/sse";
9
- import "@typespec/events";
10
- import "@typespec/versioning";
11
4
 
12
- import "../common/types.tsp";
13
- import "../common/pagination.tsp";
14
- import "../otel/span.tsp";
5
+ import "./routes.tsp";
6
+ import "../common/errors.tsp";
15
7
  import "../otel/logs.tsp";
16
- import "../otel/metrics.tsp";
17
- import "../models/deployment.tsp";
18
8
 
9
+ using TypeSpec.Events;
19
10
  using TypeSpec.Http;
20
11
  using TypeSpec.SSE;
21
- using TypeSpec.Events;
22
- using TypeSpec.Versioning;
23
12
 
24
- using Qyl.Api.Contracts.Common;
25
- using Qyl.Api.Contracts.OTel.Traces;
13
+ using Qyl.Api.Contracts.Common.Errors;
26
14
  using Qyl.Api.Contracts.OTel.Logs;
27
- using Qyl.Api.Contracts.OTel.Metrics;
28
- using Qyl.Api.Contracts.OTel.Enums;
29
- using Qyl.Api.Contracts.Domains.Ops.Deployment;
30
15
 
31
16
  namespace Qyl.Api.Contracts.Streaming;
32
17
 
33
- // =============================================================================
34
- // Stream Event Types
35
- // =============================================================================
36
-
37
- @doc("Trace stream event")
38
- model TraceStreamEvent {
39
- @doc("Event type")
40
- type: "trace";
41
-
42
- @doc("Trace data")
43
- data: Trace;
44
-
45
- @doc("Event timestamp")
46
- timestamp: utcDateTime;
47
- }
48
-
49
- @doc("Span stream event")
50
- model SpanStreamEvent {
51
- @doc("Event type")
52
- type: "span";
53
-
54
- @doc("Span data")
55
- data: Span;
56
-
57
- @doc("Event timestamp")
58
- timestamp: utcDateTime;
59
- }
60
-
61
- @doc("Log stream event")
18
+ @doc("One log delivered by the collector's live stream.")
62
19
  model LogStreamEvent {
63
- @doc("Event type")
64
20
  type: "log";
65
-
66
- @doc("Log data")
67
21
  data: LogRecord;
68
-
69
- @doc("Event timestamp")
70
- timestamp: utcDateTime;
71
- }
72
-
73
- @doc("Metric stream event")
74
- model MetricStreamEvent {
75
- @doc("Event type")
76
- type: "metric";
77
-
78
- @doc("Metric data")
79
- data: Metric;
80
-
81
- @doc("Event timestamp")
82
- timestamp: utcDateTime;
83
- }
84
-
85
- @doc("Deployment stream event")
86
- model DeploymentStreamEvent {
87
- @doc("Event type")
88
- type: "deployment";
89
-
90
- @doc("Deployment event data")
91
- data: DeploymentEvent;
92
-
93
- @doc("Event timestamp")
94
22
  timestamp: utcDateTime;
95
23
  }
96
24
 
97
- @doc("Heartbeat event for connection keep-alive")
25
+ @doc("Keep-alive event emitted while no new log is available.")
98
26
  model HeartbeatEvent {
99
- @doc("Event type")
100
27
  type: "heartbeat";
101
-
102
- @doc("Server timestamp")
103
28
  timestamp: utcDateTime;
104
29
  }
105
30
 
106
- // =============================================================================
107
- // Combined Stream Event Union
108
- // =============================================================================
109
-
110
- @doc("All possible stream event types")
111
- @events
112
- union TelemetryStreamEvent {
113
- trace: TraceStreamEvent,
114
- span: SpanStreamEvent,
115
- log: LogStreamEvent,
116
- metric: MetricStreamEvent,
117
- deployment: DeploymentStreamEvent,
118
- heartbeat: HeartbeatEvent,
119
- }
120
-
121
- @doc("Trace stream events")
122
- @events
123
- union TraceEvents {
124
- trace: TraceStreamEvent,
125
- heartbeat: HeartbeatEvent,
126
- }
127
-
128
- @doc("Span stream events")
129
- @events
130
- union SpanEvents {
131
- span: SpanStreamEvent,
132
- heartbeat: HeartbeatEvent,
133
- }
134
-
135
- @doc("Log stream events")
136
31
  @events
137
32
  union LogEvents {
138
33
  log: LogStreamEvent,
139
34
  heartbeat: HeartbeatEvent,
140
35
  }
141
36
 
142
- @doc("Metric stream events")
143
- @events
144
- union MetricEvents {
145
- metric: MetricStreamEvent,
146
- heartbeat: HeartbeatEvent,
147
- }
148
-
149
- @doc("Deployment stream events")
150
- @events
151
- union DeploymentEvents {
152
- deployment: DeploymentStreamEvent,
153
- heartbeat: HeartbeatEvent,
154
- }
155
-
156
- // =============================================================================
157
- // Stream Subscription Models
158
- // =============================================================================
159
-
160
- @doc("Stream subscription request")
161
- model StreamSubscription {
162
- @doc("Event types to subscribe to")
163
- @encodedName("application/json", "event_types")
164
- eventTypes: StreamEventType[];
165
-
166
- @doc("Service name filter")
167
- @encodedName("application/json", "service_name")
168
- serviceName?: string;
169
-
170
- @doc("Trace ID filter (for specific trace)")
171
- @encodedName("application/json", "trace_id")
172
- traceId?: TraceId;
173
-
174
- @doc("Minimum severity for logs (1-24)")
175
- @encodedName("application/json", "min_severity")
176
- @minValue(1)
177
- @maxValue(24)
178
- minSeverity?: int32;
179
-
180
- @doc("Attribute filters")
181
- filters?: Record<string>;
182
-
183
- @doc("Sample rate (0.0-1.0)")
184
- @encodedName("application/json", "sample_rate")
185
- @minValue(0)
186
- @maxValue(1)
187
- sampleRate?: float64;
188
- }
189
-
190
- @doc("Stream event types")
191
- enum StreamEventType {
192
- @doc("Trace events")
193
- traces: "traces",
194
-
195
- @doc("Span events")
196
- spans: "spans",
197
-
198
- @doc("Log events")
199
- logs: "logs",
200
-
201
- @doc("Metric events")
202
- metrics: "metrics",
203
-
204
- @doc("Deployment events")
205
- deployments: "deployments",
206
-
207
- @doc("All events")
208
- all: "all",
209
- }
210
-
211
- // =============================================================================
212
- // Streaming API Interfaces
213
- // =============================================================================
214
-
215
37
  @route("/api/v1/stream")
216
38
  @tag("Streaming")
217
39
  interface StreamingApi {
218
- @doc("Stream all telemetry events (SSE)")
219
- @get
220
- @route("/events")
221
- streamEvents(
222
- @query @doc("Event types") types?: StreamEventType[],
223
- @query @doc("Service name filter") serviceName?: string,
224
- @query @doc("Sample rate") sampleRate?: float64,
225
- ): SSEStream<TelemetryStreamEvent>;
226
-
227
- @doc("Stream traces in real-time")
228
- @get
229
- @route("/traces")
230
- streamTraces(
231
- @query @doc("Service name filter") serviceName?: string,
232
- @query @doc("Minimum duration filter") minDurationMs?: int64,
233
- ): SSEStream<TraceEvents>;
234
-
235
- @doc("Stream spans for a specific trace")
236
- @get
237
- @route("/traces/{traceId}/spans")
238
- streamTraceSpans(@path traceId: TraceId): SSEStream<SpanEvents>;
239
-
240
- @doc("Stream logs in real-time")
241
40
  @get
242
41
  @route("/logs")
42
+ @useAuth(Qyl.Api.Contracts.QylApiKeyHeaderAuth)
243
43
  streamLogs(
244
- @query @doc("Service name filter") serviceName?: string,
245
- @query @doc("Minimum severity") minSeverity?: int32,
246
- @query @doc("Query filter") query?: string,
247
- ): SSEStream<LogEvents>;
248
-
249
- @doc("Stream metrics in real-time")
250
- @get
251
- @route("/metrics")
252
- streamMetrics(
253
- @query @doc("Metric name filter") metricName?: string,
254
- @query @doc("Service name filter") serviceName?: string,
255
- ): SSEStream<MetricEvents>;
256
-
257
- @doc("Stream deployment events")
258
- @get
259
- @route("/deployments")
260
- streamDeployments(
261
- @query @doc("Service name filter") serviceName?: string,
262
- @query @doc("Environment filter") environment?: string,
263
- ): SSEStream<DeploymentEvents>;
264
- }
265
-
266
- // =============================================================================
267
- // WebSocket Streaming (Alternative)
268
- // =============================================================================
269
-
270
- @doc("WebSocket message wrapper")
271
- model WebSocketMessage<T> {
272
- @doc("Message ID")
273
- id: string;
274
-
275
- @doc("Message type")
276
- type: WebSocketMessageType;
277
-
278
- @doc("Message payload")
279
- payload?: T;
280
-
281
- @doc("Timestamp")
282
- timestamp: utcDateTime;
283
- }
284
-
285
- @doc("WebSocket message types")
286
- enum WebSocketMessageType {
287
- @doc("Subscribe to events")
288
- subscribe: "subscribe",
289
-
290
- @doc("Unsubscribe from events")
291
- unsubscribe: "unsubscribe",
292
-
293
- @doc("Data event")
294
- data: "data",
295
-
296
- @doc("Error message")
297
- error: "error",
298
-
299
- @doc("Acknowledgment")
300
- ack: "ack",
301
-
302
- @doc("Ping")
303
- ping: "ping",
304
-
305
- @doc("Pong")
306
- pong: "pong",
307
- }
308
-
309
- // =============================================================================
310
- // Tail-based Sampling Configuration
311
- // =============================================================================
312
-
313
- @doc("Tail-based sampling configuration for streaming")
314
- model TailSamplingConfig {
315
- @doc("Enable tail-based sampling")
316
- enabled: boolean;
317
-
318
- @doc("Sample error traces")
319
- @encodedName("application/json", "sample_errors")
320
- sampleErrors: boolean;
321
-
322
- @doc("Sample slow traces (above threshold)")
323
- @encodedName("application/json", "sample_slow")
324
- sampleSlow: boolean;
325
-
326
- @doc("Slow trace threshold in milliseconds")
327
- @encodedName("application/json", "slow_threshold_ms")
328
- slowThresholdMs?: int64;
329
-
330
- @doc("Random sample rate for remaining traces")
331
- @encodedName("application/json", "random_rate")
332
- @minValue(0)
333
- @maxValue(1)
334
- randomRate: float64;
44
+ ...Qyl.Api.Contracts.ProjectScopeHeader,
45
+ @query serviceName?: string,
46
+ @query @minValue(1) @maxValue(24) minSeverity?: int32,
47
+ @query query?: string,
48
+ ): SSEStream<LogEvents> | UnauthorizedError | InternalServerError;
335
49
  }
package/common/errors.tsp CHANGED
@@ -1,5 +1,5 @@
1
1
  // =============================================================================
2
- // ANcpLua v2.0 - Error Models
2
+ // qyl product API error models
3
3
  // =============================================================================
4
4
  // Standardized error responses following RFC 7807 Problem Details.
5
5
  // =============================================================================
@@ -159,6 +159,16 @@ model InternalServerError extends ProblemDetails {
159
159
  errorCode?: string;
160
160
  }
161
161
 
162
+ @doc("Upstream dependency failed while fulfilling the request (502)")
163
+ @error
164
+ model BadGatewayError extends ProblemDetails {
165
+ @statusCode _: 502;
166
+ title: "Bad Gateway";
167
+
168
+ @doc("Stable dependency category; never contains raw exception text")
169
+ dependency?: string;
170
+ }
171
+
162
172
  @doc("Service unavailable (503)")
163
173
  @error
164
174
  model ServiceUnavailableError extends ProblemDetails {
@@ -201,6 +211,9 @@ union ApiError {
201
211
  @doc("Server error")
202
212
  serverError: InternalServerError,
203
213
 
214
+ @doc("Upstream dependency failed")
215
+ badGateway: BadGatewayError,
216
+
204
217
  @doc("Service unavailable")
205
218
  unavailable: ServiceUnavailableError,
206
219
  }
@@ -1,5 +1,5 @@
1
1
  // =============================================================================
2
- // ANcpLua v2.0 - Pagination Templates
2
+ // Qyl API pagination templates
3
3
  // =============================================================================
4
4
  // Reusable pagination patterns for list operations.
5
5
  // =============================================================================