@oxy-hq/cli 0.1.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/README.md +163 -0
- package/dist/main.mjs +6688 -0
- package/dist/main.mjs.map +1 -0
- package/dist/mcp-VdontkUr.mjs +316 -0
- package/dist/mcp-VdontkUr.mjs.map +1 -0
- package/json-schemas/agent-test.json +104 -0
- package/json-schemas/agentic.json +406 -0
- package/json-schemas/app.json +1884 -0
- package/json-schemas/config.json +2215 -0
- package/json-schemas/flow-test.json +124 -0
- package/json-schemas/global-semantics.json +782 -0
- package/json-schemas/workflow.json +1907 -0
- package/package.json +65 -0
- package/skills/oxy-airway-pipelines/SKILL.md +338 -0
- package/skills/oxy-automations/SKILL.md +67 -0
- package/skills/oxy-cli/SKILL.md +134 -0
- package/skills/oxy-custom-apps/SKILL.md +330 -0
- package/skills/oxy-data-architecture/SKILL.md +225 -0
- package/skills/oxy-semantic-modeling/SKILL.md +216 -0
- package/template/.gitattributes +2 -0
- package/template/.github/scripts/ci-publish.sh +77 -0
- package/template/.github/scripts/discover-apps.sh +175 -0
- package/template/.github/scripts/publish-env.sh +55 -0
- package/template/.github/workflows/publish.yaml +653 -0
- package/template/.github/workflows/validate.yaml +264 -0
- package/template/.nvmrc +1 -0
- package/template/.oxyc-managed +297 -0
- package/template/README.md +414 -0
- package/template/_gitignore +32 -0
- package/template/apps/.gitkeep +0 -0
- package/template/config.yml +53 -0
- package/template/memory/.gitkeep +0 -0
- package/template/package.json +17 -0
- package/template/pipelines/.gitkeep +0 -0
- package/template/pnpm-workspace.yaml +32 -0
- package/template/scripts/dev.sh +443 -0
- package/template/semantics/topics/.gitkeep +0 -0
- package/template/semantics/views/.gitkeep +0 -0
- package/template/workflows/.gitkeep +0 -0
|
@@ -0,0 +1,2215 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
3
|
+
"title": "Config",
|
|
4
|
+
"type": "object",
|
|
5
|
+
"required": [
|
|
6
|
+
"databases",
|
|
7
|
+
"models"
|
|
8
|
+
],
|
|
9
|
+
"properties": {
|
|
10
|
+
"base_branch": {
|
|
11
|
+
"description": "Branch that new worktrees fork from when saving on a protected branch. Defaults to the currently checked-out branch (usually the default branch) when not set. Use this when Oxy serves from a \"deployment\" branch but new work should fork from an \"integration\" branch (e.g. serve from `deploy`, fork new work from `main`).\n\nExample config.yml: base_branch: main",
|
|
12
|
+
"type": [
|
|
13
|
+
"string",
|
|
14
|
+
"null"
|
|
15
|
+
]
|
|
16
|
+
},
|
|
17
|
+
"builder_agent": {
|
|
18
|
+
"anyOf": [
|
|
19
|
+
{
|
|
20
|
+
"$ref": "#/definitions/BuilderAgentConfig"
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
"type": "null"
|
|
24
|
+
}
|
|
25
|
+
]
|
|
26
|
+
},
|
|
27
|
+
"databases": {
|
|
28
|
+
"type": "array",
|
|
29
|
+
"items": {
|
|
30
|
+
"$ref": "#/definitions/Database"
|
|
31
|
+
}
|
|
32
|
+
},
|
|
33
|
+
"defaults": {
|
|
34
|
+
"anyOf": [
|
|
35
|
+
{
|
|
36
|
+
"$ref": "#/definitions/Defaults"
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
"type": "null"
|
|
40
|
+
}
|
|
41
|
+
]
|
|
42
|
+
},
|
|
43
|
+
"health_check": {
|
|
44
|
+
"description": "Per-workspace health checks, and how often they run. Drives the workspace's `health_eval` schedule row.\n\n**Unset means off** — health checks are opt-in. Writing the block is the opt-in and the cadence defaults to 1h, so `health_check: {}` is enough to turn them on; `enabled: false` inside a block turns them back off. See `health_check::resolve_enabled`.",
|
|
45
|
+
"anyOf": [
|
|
46
|
+
{
|
|
47
|
+
"$ref": "#/definitions/HealthCheckConfig"
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
"type": "null"
|
|
51
|
+
}
|
|
52
|
+
]
|
|
53
|
+
},
|
|
54
|
+
"integrations": {
|
|
55
|
+
"default": [],
|
|
56
|
+
"type": "array",
|
|
57
|
+
"items": {
|
|
58
|
+
"$ref": "#/definitions/Integration"
|
|
59
|
+
}
|
|
60
|
+
},
|
|
61
|
+
"mcp": {
|
|
62
|
+
"description": "Optional MCP configuration for exposing resources as tools If not specified, all agents and automations are exposed by default",
|
|
63
|
+
"anyOf": [
|
|
64
|
+
{
|
|
65
|
+
"$ref": "#/definitions/McpConfig"
|
|
66
|
+
},
|
|
67
|
+
{
|
|
68
|
+
"type": "null"
|
|
69
|
+
}
|
|
70
|
+
]
|
|
71
|
+
},
|
|
72
|
+
"models": {
|
|
73
|
+
"type": "array",
|
|
74
|
+
"items": {
|
|
75
|
+
"$ref": "#/definitions/Model"
|
|
76
|
+
}
|
|
77
|
+
},
|
|
78
|
+
"pre_aggregations": {
|
|
79
|
+
"description": "Pre-aggregation configuration (schema, database, background worker).",
|
|
80
|
+
"anyOf": [
|
|
81
|
+
{
|
|
82
|
+
"$ref": "#/definitions/PreaggConfig"
|
|
83
|
+
},
|
|
84
|
+
{
|
|
85
|
+
"type": "null"
|
|
86
|
+
}
|
|
87
|
+
]
|
|
88
|
+
},
|
|
89
|
+
"protected_branches": {
|
|
90
|
+
"description": "Branches that are protected: saving a file while on one of these branches will auto-create a new feature branch instead of writing directly. Defaults to [default_branch] (usually \"main\") when not set.\n\nExample config.yml: protected_branches: - main - develop",
|
|
91
|
+
"type": [
|
|
92
|
+
"array",
|
|
93
|
+
"null"
|
|
94
|
+
],
|
|
95
|
+
"items": {
|
|
96
|
+
"type": "string"
|
|
97
|
+
}
|
|
98
|
+
},
|
|
99
|
+
"repositories": {
|
|
100
|
+
"description": "External repositories (dbt, LookML, data models, etc.) to surface in the IDE.\n\nExample config.yml: repositories: - name: dbt-models path: ../my-dbt-project - name: lookml git_url: https://github.com/acme/lookml-repo branch: main",
|
|
101
|
+
"type": "array",
|
|
102
|
+
"items": {
|
|
103
|
+
"$ref": "#/definitions/Repository"
|
|
104
|
+
}
|
|
105
|
+
},
|
|
106
|
+
"timezone": {
|
|
107
|
+
"description": "IANA timezone (e.g. `America/Los_Angeles`) for resolving relative dates (\"yesterday\", \"last week\") in agentic runs. When unset, dates resolve in UTC. A per-agent `.agentic.yml` `timezone:` overrides this for that agent.",
|
|
108
|
+
"type": [
|
|
109
|
+
"string",
|
|
110
|
+
"null"
|
|
111
|
+
]
|
|
112
|
+
}
|
|
113
|
+
},
|
|
114
|
+
"additionalProperties": false,
|
|
115
|
+
"definitions": {
|
|
116
|
+
"AppProbeTarget": {
|
|
117
|
+
"description": "One named app to run, and the control values to run it with.",
|
|
118
|
+
"type": "object",
|
|
119
|
+
"required": [
|
|
120
|
+
"app"
|
|
121
|
+
],
|
|
122
|
+
"properties": {
|
|
123
|
+
"app": {
|
|
124
|
+
"description": "Workspace-relative path (`apps/sales.app.yml`) or bare file name (`sales.app.yml`).",
|
|
125
|
+
"type": "string"
|
|
126
|
+
},
|
|
127
|
+
"variables": {
|
|
128
|
+
"description": "Control values for this app, exactly as its Controls would supply them. Absent → the app's own defaults, which is what the `apps: true` sweep uses.\n\nValues keep their YAML type (`limit: 5` stays a number), because that is what an app's own Controls hand its tasks.",
|
|
129
|
+
"type": "object",
|
|
130
|
+
"additionalProperties": true
|
|
131
|
+
}
|
|
132
|
+
},
|
|
133
|
+
"additionalProperties": false
|
|
134
|
+
},
|
|
135
|
+
"AppsProbeConfig": {
|
|
136
|
+
"description": "How the app probe picks its targets. Same `bool | [targets]` shape as [`SemanticProbeConfig`], with `variables` per app rather than shared across all of them — two apps rarely want the same control values.\n\n```yaml apps: true # run every task of every .app.yml apps: # run only these apps - app: apps/sales.app.yml variables: region: us-east - app: apps/inventory.app.yml ```",
|
|
137
|
+
"anyOf": [
|
|
138
|
+
{
|
|
139
|
+
"description": "`apps: true|false` — run every app, or none.",
|
|
140
|
+
"type": "boolean"
|
|
141
|
+
},
|
|
142
|
+
{
|
|
143
|
+
"description": "`apps: [ { app: … }, … ]` — run only the named apps.",
|
|
144
|
+
"type": "array",
|
|
145
|
+
"items": {
|
|
146
|
+
"$ref": "#/definitions/AppProbeTarget"
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
]
|
|
150
|
+
},
|
|
151
|
+
"BuilderAgentConfig": {
|
|
152
|
+
"description": "Configuration for the built-in builder copilot agent.\n\nExample: `builder_agent: { model: \"claude-sonnet-4-6\" }`",
|
|
153
|
+
"anyOf": [
|
|
154
|
+
{
|
|
155
|
+
"description": "Built-in copilot configured only with a model name.",
|
|
156
|
+
"type": "object",
|
|
157
|
+
"required": [
|
|
158
|
+
"model"
|
|
159
|
+
],
|
|
160
|
+
"properties": {
|
|
161
|
+
"model": {
|
|
162
|
+
"type": "string"
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
]
|
|
167
|
+
},
|
|
168
|
+
"Database": {
|
|
169
|
+
"type": "object",
|
|
170
|
+
"oneOf": [
|
|
171
|
+
{
|
|
172
|
+
"type": "object",
|
|
173
|
+
"required": [
|
|
174
|
+
"type"
|
|
175
|
+
],
|
|
176
|
+
"properties": {
|
|
177
|
+
"dataset": {
|
|
178
|
+
"type": [
|
|
179
|
+
"string",
|
|
180
|
+
"null"
|
|
181
|
+
]
|
|
182
|
+
},
|
|
183
|
+
"datasets": {
|
|
184
|
+
"default": {},
|
|
185
|
+
"type": "object",
|
|
186
|
+
"additionalProperties": {
|
|
187
|
+
"type": "array",
|
|
188
|
+
"items": {
|
|
189
|
+
"type": "string"
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
},
|
|
193
|
+
"dry_run_limit": {
|
|
194
|
+
"type": [
|
|
195
|
+
"integer",
|
|
196
|
+
"null"
|
|
197
|
+
],
|
|
198
|
+
"format": "uint64",
|
|
199
|
+
"minimum": 0.0
|
|
200
|
+
},
|
|
201
|
+
"key_path": {
|
|
202
|
+
"default": null,
|
|
203
|
+
"type": [
|
|
204
|
+
"string",
|
|
205
|
+
"null"
|
|
206
|
+
]
|
|
207
|
+
},
|
|
208
|
+
"key_path_var": {
|
|
209
|
+
"default": null,
|
|
210
|
+
"type": [
|
|
211
|
+
"string",
|
|
212
|
+
"null"
|
|
213
|
+
]
|
|
214
|
+
},
|
|
215
|
+
"type": {
|
|
216
|
+
"type": "string",
|
|
217
|
+
"enum": [
|
|
218
|
+
"bigquery"
|
|
219
|
+
]
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
},
|
|
223
|
+
{
|
|
224
|
+
"type": "object",
|
|
225
|
+
"anyOf": [
|
|
226
|
+
{
|
|
227
|
+
"type": "object",
|
|
228
|
+
"required": [
|
|
229
|
+
"dataset"
|
|
230
|
+
],
|
|
231
|
+
"properties": {
|
|
232
|
+
"dataset": {
|
|
233
|
+
"type": "string"
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
},
|
|
237
|
+
{
|
|
238
|
+
"type": "object",
|
|
239
|
+
"required": [
|
|
240
|
+
"path"
|
|
241
|
+
],
|
|
242
|
+
"properties": {
|
|
243
|
+
"path": {
|
|
244
|
+
"type": "string"
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
},
|
|
248
|
+
{
|
|
249
|
+
"$ref": "#/definitions/DuckLakeConfig"
|
|
250
|
+
}
|
|
251
|
+
],
|
|
252
|
+
"required": [
|
|
253
|
+
"type"
|
|
254
|
+
],
|
|
255
|
+
"properties": {
|
|
256
|
+
"s3_mirror": {
|
|
257
|
+
"description": "Compiler-produced (compiled config only). When set, the connector reads the warehouse data from S3 instead of the local path, so the stateless fleet can serve a workspace whose DuckDB data lives in the working tree. Always `None` in `config.yml` — see [`DuckDbS3Mirror`].",
|
|
258
|
+
"anyOf": [
|
|
259
|
+
{
|
|
260
|
+
"$ref": "#/definitions/DuckDbS3Mirror"
|
|
261
|
+
},
|
|
262
|
+
{
|
|
263
|
+
"type": "null"
|
|
264
|
+
}
|
|
265
|
+
]
|
|
266
|
+
},
|
|
267
|
+
"type": {
|
|
268
|
+
"type": "string",
|
|
269
|
+
"enum": [
|
|
270
|
+
"duckdb"
|
|
271
|
+
]
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
},
|
|
275
|
+
{
|
|
276
|
+
"type": "object",
|
|
277
|
+
"anyOf": [
|
|
278
|
+
{
|
|
279
|
+
"type": "object",
|
|
280
|
+
"required": [
|
|
281
|
+
"password"
|
|
282
|
+
],
|
|
283
|
+
"properties": {
|
|
284
|
+
"password": {
|
|
285
|
+
"type": "string"
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
},
|
|
289
|
+
{
|
|
290
|
+
"type": "object",
|
|
291
|
+
"required": [
|
|
292
|
+
"password_var"
|
|
293
|
+
],
|
|
294
|
+
"properties": {
|
|
295
|
+
"password_var": {
|
|
296
|
+
"type": "string"
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
},
|
|
300
|
+
{
|
|
301
|
+
"type": "object",
|
|
302
|
+
"required": [
|
|
303
|
+
"private_key_path"
|
|
304
|
+
],
|
|
305
|
+
"properties": {
|
|
306
|
+
"private_key_path": {
|
|
307
|
+
"type": "string"
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
},
|
|
311
|
+
{
|
|
312
|
+
"type": "object",
|
|
313
|
+
"properties": {
|
|
314
|
+
"browser_timeout_secs": {
|
|
315
|
+
"default": 120,
|
|
316
|
+
"type": "integer",
|
|
317
|
+
"format": "uint64",
|
|
318
|
+
"minimum": 0.0
|
|
319
|
+
},
|
|
320
|
+
"cache_dir": {
|
|
321
|
+
"type": [
|
|
322
|
+
"string",
|
|
323
|
+
"null"
|
|
324
|
+
]
|
|
325
|
+
}
|
|
326
|
+
}
|
|
327
|
+
}
|
|
328
|
+
],
|
|
329
|
+
"required": [
|
|
330
|
+
"account",
|
|
331
|
+
"database",
|
|
332
|
+
"type",
|
|
333
|
+
"username",
|
|
334
|
+
"warehouse"
|
|
335
|
+
],
|
|
336
|
+
"properties": {
|
|
337
|
+
"account": {
|
|
338
|
+
"type": "string"
|
|
339
|
+
},
|
|
340
|
+
"database": {
|
|
341
|
+
"type": "string"
|
|
342
|
+
},
|
|
343
|
+
"datasets": {
|
|
344
|
+
"default": {},
|
|
345
|
+
"type": "object",
|
|
346
|
+
"additionalProperties": {
|
|
347
|
+
"type": "array",
|
|
348
|
+
"items": {
|
|
349
|
+
"type": "string"
|
|
350
|
+
}
|
|
351
|
+
}
|
|
352
|
+
},
|
|
353
|
+
"filters": {
|
|
354
|
+
"default": {},
|
|
355
|
+
"type": "object",
|
|
356
|
+
"additionalProperties": {
|
|
357
|
+
"$ref": "#/definitions/SchemaObject"
|
|
358
|
+
}
|
|
359
|
+
},
|
|
360
|
+
"role": {
|
|
361
|
+
"type": [
|
|
362
|
+
"string",
|
|
363
|
+
"null"
|
|
364
|
+
]
|
|
365
|
+
},
|
|
366
|
+
"schema": {
|
|
367
|
+
"type": [
|
|
368
|
+
"string",
|
|
369
|
+
"null"
|
|
370
|
+
]
|
|
371
|
+
},
|
|
372
|
+
"type": {
|
|
373
|
+
"type": "string",
|
|
374
|
+
"enum": [
|
|
375
|
+
"snowflake"
|
|
376
|
+
]
|
|
377
|
+
},
|
|
378
|
+
"username": {
|
|
379
|
+
"type": "string"
|
|
380
|
+
},
|
|
381
|
+
"warehouse": {
|
|
382
|
+
"type": "string"
|
|
383
|
+
}
|
|
384
|
+
}
|
|
385
|
+
},
|
|
386
|
+
{
|
|
387
|
+
"type": "object",
|
|
388
|
+
"required": [
|
|
389
|
+
"type"
|
|
390
|
+
],
|
|
391
|
+
"properties": {
|
|
392
|
+
"database": {
|
|
393
|
+
"default": null,
|
|
394
|
+
"type": [
|
|
395
|
+
"string",
|
|
396
|
+
"null"
|
|
397
|
+
]
|
|
398
|
+
},
|
|
399
|
+
"database_var": {
|
|
400
|
+
"default": null,
|
|
401
|
+
"type": [
|
|
402
|
+
"string",
|
|
403
|
+
"null"
|
|
404
|
+
]
|
|
405
|
+
},
|
|
406
|
+
"host": {
|
|
407
|
+
"default": null,
|
|
408
|
+
"type": [
|
|
409
|
+
"string",
|
|
410
|
+
"null"
|
|
411
|
+
]
|
|
412
|
+
},
|
|
413
|
+
"host_var": {
|
|
414
|
+
"default": null,
|
|
415
|
+
"type": [
|
|
416
|
+
"string",
|
|
417
|
+
"null"
|
|
418
|
+
]
|
|
419
|
+
},
|
|
420
|
+
"password_var": {
|
|
421
|
+
"default": null,
|
|
422
|
+
"type": [
|
|
423
|
+
"string",
|
|
424
|
+
"null"
|
|
425
|
+
]
|
|
426
|
+
},
|
|
427
|
+
"port": {
|
|
428
|
+
"default": null,
|
|
429
|
+
"type": [
|
|
430
|
+
"string",
|
|
431
|
+
"null"
|
|
432
|
+
]
|
|
433
|
+
},
|
|
434
|
+
"port_var": {
|
|
435
|
+
"default": null,
|
|
436
|
+
"type": [
|
|
437
|
+
"string",
|
|
438
|
+
"null"
|
|
439
|
+
]
|
|
440
|
+
},
|
|
441
|
+
"type": {
|
|
442
|
+
"type": "string",
|
|
443
|
+
"enum": [
|
|
444
|
+
"postgres"
|
|
445
|
+
]
|
|
446
|
+
},
|
|
447
|
+
"user": {
|
|
448
|
+
"default": null,
|
|
449
|
+
"type": [
|
|
450
|
+
"string",
|
|
451
|
+
"null"
|
|
452
|
+
]
|
|
453
|
+
},
|
|
454
|
+
"user_var": {
|
|
455
|
+
"default": null,
|
|
456
|
+
"type": [
|
|
457
|
+
"string",
|
|
458
|
+
"null"
|
|
459
|
+
]
|
|
460
|
+
}
|
|
461
|
+
}
|
|
462
|
+
},
|
|
463
|
+
{
|
|
464
|
+
"description": "Airhouse: Postgres-wire-protocol warehouse that speaks the DuckDB SQL dialect.\n\nConnection uses the same pgwire transport as `Postgres`, but queries are written in DuckDB syntax — so `Database::dialect()` returns `\"duckdb\"` for Airhouse and the connector layer hardcodes the `postgres://` scheme for transport.",
|
|
465
|
+
"type": "object",
|
|
466
|
+
"required": [
|
|
467
|
+
"type"
|
|
468
|
+
],
|
|
469
|
+
"properties": {
|
|
470
|
+
"database": {
|
|
471
|
+
"default": null,
|
|
472
|
+
"type": [
|
|
473
|
+
"string",
|
|
474
|
+
"null"
|
|
475
|
+
]
|
|
476
|
+
},
|
|
477
|
+
"database_var": {
|
|
478
|
+
"default": null,
|
|
479
|
+
"type": [
|
|
480
|
+
"string",
|
|
481
|
+
"null"
|
|
482
|
+
]
|
|
483
|
+
},
|
|
484
|
+
"host": {
|
|
485
|
+
"default": null,
|
|
486
|
+
"type": [
|
|
487
|
+
"string",
|
|
488
|
+
"null"
|
|
489
|
+
]
|
|
490
|
+
},
|
|
491
|
+
"host_var": {
|
|
492
|
+
"default": null,
|
|
493
|
+
"type": [
|
|
494
|
+
"string",
|
|
495
|
+
"null"
|
|
496
|
+
]
|
|
497
|
+
},
|
|
498
|
+
"password_var": {
|
|
499
|
+
"default": null,
|
|
500
|
+
"type": [
|
|
501
|
+
"string",
|
|
502
|
+
"null"
|
|
503
|
+
]
|
|
504
|
+
},
|
|
505
|
+
"port": {
|
|
506
|
+
"default": null,
|
|
507
|
+
"type": [
|
|
508
|
+
"string",
|
|
509
|
+
"null"
|
|
510
|
+
]
|
|
511
|
+
},
|
|
512
|
+
"port_var": {
|
|
513
|
+
"default": null,
|
|
514
|
+
"type": [
|
|
515
|
+
"string",
|
|
516
|
+
"null"
|
|
517
|
+
]
|
|
518
|
+
},
|
|
519
|
+
"type": {
|
|
520
|
+
"type": "string",
|
|
521
|
+
"enum": [
|
|
522
|
+
"airhouse"
|
|
523
|
+
]
|
|
524
|
+
},
|
|
525
|
+
"user": {
|
|
526
|
+
"default": null,
|
|
527
|
+
"type": [
|
|
528
|
+
"string",
|
|
529
|
+
"null"
|
|
530
|
+
]
|
|
531
|
+
},
|
|
532
|
+
"user_var": {
|
|
533
|
+
"default": null,
|
|
534
|
+
"type": [
|
|
535
|
+
"string",
|
|
536
|
+
"null"
|
|
537
|
+
]
|
|
538
|
+
}
|
|
539
|
+
}
|
|
540
|
+
},
|
|
541
|
+
{
|
|
542
|
+
"description": "Airhouse with credentials managed by oxy. The connector layer resolves host, port, dbname, user, and password from the caller's `airhouse_users` row + `org_secrets` entry — populated by the per-user provisioning flow (Settings → Airhouse). No fields needed on this variant; everything is sourced from oxy's database.",
|
|
543
|
+
"type": "object",
|
|
544
|
+
"required": [
|
|
545
|
+
"type"
|
|
546
|
+
],
|
|
547
|
+
"properties": {
|
|
548
|
+
"type": {
|
|
549
|
+
"type": "string",
|
|
550
|
+
"enum": [
|
|
551
|
+
"airhouse_managed"
|
|
552
|
+
]
|
|
553
|
+
}
|
|
554
|
+
}
|
|
555
|
+
},
|
|
556
|
+
{
|
|
557
|
+
"description": "Per-org OLTP Postgres with credentials managed by oxy. The connector resolves host, port, dbname, user, and password from the caller's workspace → org → `oltp_tenants` row.\n\nAlways resolves the **read-only analyst** role, whatever the caller's `effective_role` — unlike `airhouse_managed`, which escalates. That database holds a customer's live business records; writes come only from published code (an app function or an Airway pipeline), never from a SQL prompt. No fields: everything is sourced from oxy's database.",
|
|
558
|
+
"type": "object",
|
|
559
|
+
"required": [
|
|
560
|
+
"type"
|
|
561
|
+
],
|
|
562
|
+
"properties": {
|
|
563
|
+
"type": {
|
|
564
|
+
"type": "string",
|
|
565
|
+
"enum": [
|
|
566
|
+
"postgres_managed"
|
|
567
|
+
]
|
|
568
|
+
}
|
|
569
|
+
}
|
|
570
|
+
},
|
|
571
|
+
{
|
|
572
|
+
"type": "object",
|
|
573
|
+
"required": [
|
|
574
|
+
"type"
|
|
575
|
+
],
|
|
576
|
+
"properties": {
|
|
577
|
+
"database": {
|
|
578
|
+
"default": null,
|
|
579
|
+
"type": [
|
|
580
|
+
"string",
|
|
581
|
+
"null"
|
|
582
|
+
]
|
|
583
|
+
},
|
|
584
|
+
"database_var": {
|
|
585
|
+
"default": null,
|
|
586
|
+
"type": [
|
|
587
|
+
"string",
|
|
588
|
+
"null"
|
|
589
|
+
]
|
|
590
|
+
},
|
|
591
|
+
"host": {
|
|
592
|
+
"default": null,
|
|
593
|
+
"type": [
|
|
594
|
+
"string",
|
|
595
|
+
"null"
|
|
596
|
+
]
|
|
597
|
+
},
|
|
598
|
+
"host_var": {
|
|
599
|
+
"default": null,
|
|
600
|
+
"type": [
|
|
601
|
+
"string",
|
|
602
|
+
"null"
|
|
603
|
+
]
|
|
604
|
+
},
|
|
605
|
+
"password_var": {
|
|
606
|
+
"default": null,
|
|
607
|
+
"type": [
|
|
608
|
+
"string",
|
|
609
|
+
"null"
|
|
610
|
+
]
|
|
611
|
+
},
|
|
612
|
+
"port": {
|
|
613
|
+
"default": null,
|
|
614
|
+
"type": [
|
|
615
|
+
"string",
|
|
616
|
+
"null"
|
|
617
|
+
]
|
|
618
|
+
},
|
|
619
|
+
"port_var": {
|
|
620
|
+
"default": null,
|
|
621
|
+
"type": [
|
|
622
|
+
"string",
|
|
623
|
+
"null"
|
|
624
|
+
]
|
|
625
|
+
},
|
|
626
|
+
"type": {
|
|
627
|
+
"type": "string",
|
|
628
|
+
"enum": [
|
|
629
|
+
"redshift"
|
|
630
|
+
]
|
|
631
|
+
},
|
|
632
|
+
"user": {
|
|
633
|
+
"default": null,
|
|
634
|
+
"type": [
|
|
635
|
+
"string",
|
|
636
|
+
"null"
|
|
637
|
+
]
|
|
638
|
+
},
|
|
639
|
+
"user_var": {
|
|
640
|
+
"default": null,
|
|
641
|
+
"type": [
|
|
642
|
+
"string",
|
|
643
|
+
"null"
|
|
644
|
+
]
|
|
645
|
+
}
|
|
646
|
+
}
|
|
647
|
+
},
|
|
648
|
+
{
|
|
649
|
+
"type": "object",
|
|
650
|
+
"required": [
|
|
651
|
+
"type"
|
|
652
|
+
],
|
|
653
|
+
"properties": {
|
|
654
|
+
"database": {
|
|
655
|
+
"default": null,
|
|
656
|
+
"type": [
|
|
657
|
+
"string",
|
|
658
|
+
"null"
|
|
659
|
+
]
|
|
660
|
+
},
|
|
661
|
+
"database_var": {
|
|
662
|
+
"default": null,
|
|
663
|
+
"type": [
|
|
664
|
+
"string",
|
|
665
|
+
"null"
|
|
666
|
+
]
|
|
667
|
+
},
|
|
668
|
+
"host": {
|
|
669
|
+
"default": null,
|
|
670
|
+
"type": [
|
|
671
|
+
"string",
|
|
672
|
+
"null"
|
|
673
|
+
]
|
|
674
|
+
},
|
|
675
|
+
"host_var": {
|
|
676
|
+
"default": null,
|
|
677
|
+
"type": [
|
|
678
|
+
"string",
|
|
679
|
+
"null"
|
|
680
|
+
]
|
|
681
|
+
},
|
|
682
|
+
"password_var": {
|
|
683
|
+
"default": null,
|
|
684
|
+
"type": [
|
|
685
|
+
"string",
|
|
686
|
+
"null"
|
|
687
|
+
]
|
|
688
|
+
},
|
|
689
|
+
"port": {
|
|
690
|
+
"default": null,
|
|
691
|
+
"type": [
|
|
692
|
+
"string",
|
|
693
|
+
"null"
|
|
694
|
+
]
|
|
695
|
+
},
|
|
696
|
+
"port_var": {
|
|
697
|
+
"default": null,
|
|
698
|
+
"type": [
|
|
699
|
+
"string",
|
|
700
|
+
"null"
|
|
701
|
+
]
|
|
702
|
+
},
|
|
703
|
+
"type": {
|
|
704
|
+
"type": "string",
|
|
705
|
+
"enum": [
|
|
706
|
+
"mysql"
|
|
707
|
+
]
|
|
708
|
+
},
|
|
709
|
+
"user": {
|
|
710
|
+
"default": null,
|
|
711
|
+
"type": [
|
|
712
|
+
"string",
|
|
713
|
+
"null"
|
|
714
|
+
]
|
|
715
|
+
},
|
|
716
|
+
"user_var": {
|
|
717
|
+
"default": null,
|
|
718
|
+
"type": [
|
|
719
|
+
"string",
|
|
720
|
+
"null"
|
|
721
|
+
]
|
|
722
|
+
}
|
|
723
|
+
}
|
|
724
|
+
},
|
|
725
|
+
{
|
|
726
|
+
"type": "object",
|
|
727
|
+
"required": [
|
|
728
|
+
"type"
|
|
729
|
+
],
|
|
730
|
+
"properties": {
|
|
731
|
+
"database": {
|
|
732
|
+
"default": null,
|
|
733
|
+
"type": [
|
|
734
|
+
"string",
|
|
735
|
+
"null"
|
|
736
|
+
]
|
|
737
|
+
},
|
|
738
|
+
"database_var": {
|
|
739
|
+
"default": null,
|
|
740
|
+
"type": [
|
|
741
|
+
"string",
|
|
742
|
+
"null"
|
|
743
|
+
]
|
|
744
|
+
},
|
|
745
|
+
"filters": {
|
|
746
|
+
"default": {},
|
|
747
|
+
"type": "object",
|
|
748
|
+
"additionalProperties": {
|
|
749
|
+
"$ref": "#/definitions/SchemaObject"
|
|
750
|
+
}
|
|
751
|
+
},
|
|
752
|
+
"host": {
|
|
753
|
+
"default": null,
|
|
754
|
+
"type": [
|
|
755
|
+
"string",
|
|
756
|
+
"null"
|
|
757
|
+
]
|
|
758
|
+
},
|
|
759
|
+
"host_var": {
|
|
760
|
+
"default": null,
|
|
761
|
+
"type": [
|
|
762
|
+
"string",
|
|
763
|
+
"null"
|
|
764
|
+
]
|
|
765
|
+
},
|
|
766
|
+
"password_var": {
|
|
767
|
+
"default": null,
|
|
768
|
+
"type": [
|
|
769
|
+
"string",
|
|
770
|
+
"null"
|
|
771
|
+
]
|
|
772
|
+
},
|
|
773
|
+
"role": {
|
|
774
|
+
"default": null,
|
|
775
|
+
"type": [
|
|
776
|
+
"string",
|
|
777
|
+
"null"
|
|
778
|
+
]
|
|
779
|
+
},
|
|
780
|
+
"schemas": {
|
|
781
|
+
"default": {},
|
|
782
|
+
"type": "object",
|
|
783
|
+
"additionalProperties": {
|
|
784
|
+
"type": "array",
|
|
785
|
+
"items": {
|
|
786
|
+
"type": "string"
|
|
787
|
+
}
|
|
788
|
+
}
|
|
789
|
+
},
|
|
790
|
+
"settings_prefix": {
|
|
791
|
+
"default": null,
|
|
792
|
+
"type": [
|
|
793
|
+
"string",
|
|
794
|
+
"null"
|
|
795
|
+
]
|
|
796
|
+
},
|
|
797
|
+
"type": {
|
|
798
|
+
"type": "string",
|
|
799
|
+
"enum": [
|
|
800
|
+
"clickhouse"
|
|
801
|
+
]
|
|
802
|
+
},
|
|
803
|
+
"user": {
|
|
804
|
+
"default": null,
|
|
805
|
+
"type": [
|
|
806
|
+
"string",
|
|
807
|
+
"null"
|
|
808
|
+
]
|
|
809
|
+
},
|
|
810
|
+
"user_var": {
|
|
811
|
+
"default": null,
|
|
812
|
+
"type": [
|
|
813
|
+
"string",
|
|
814
|
+
"null"
|
|
815
|
+
]
|
|
816
|
+
}
|
|
817
|
+
}
|
|
818
|
+
},
|
|
819
|
+
{
|
|
820
|
+
"type": "object",
|
|
821
|
+
"required": [
|
|
822
|
+
"dataset_id",
|
|
823
|
+
"developer_token_var",
|
|
824
|
+
"instance",
|
|
825
|
+
"type"
|
|
826
|
+
],
|
|
827
|
+
"properties": {
|
|
828
|
+
"dataset_id": {
|
|
829
|
+
"type": "string"
|
|
830
|
+
},
|
|
831
|
+
"developer_token_var": {
|
|
832
|
+
"type": "string"
|
|
833
|
+
},
|
|
834
|
+
"instance": {
|
|
835
|
+
"type": "string"
|
|
836
|
+
},
|
|
837
|
+
"type": {
|
|
838
|
+
"type": "string",
|
|
839
|
+
"enum": [
|
|
840
|
+
"domo"
|
|
841
|
+
]
|
|
842
|
+
}
|
|
843
|
+
}
|
|
844
|
+
},
|
|
845
|
+
{
|
|
846
|
+
"type": "object",
|
|
847
|
+
"required": [
|
|
848
|
+
"token_var",
|
|
849
|
+
"type"
|
|
850
|
+
],
|
|
851
|
+
"properties": {
|
|
852
|
+
"database": {
|
|
853
|
+
"default": null,
|
|
854
|
+
"type": [
|
|
855
|
+
"string",
|
|
856
|
+
"null"
|
|
857
|
+
]
|
|
858
|
+
},
|
|
859
|
+
"schemas": {
|
|
860
|
+
"default": {},
|
|
861
|
+
"type": "object",
|
|
862
|
+
"additionalProperties": {
|
|
863
|
+
"type": "array",
|
|
864
|
+
"items": {
|
|
865
|
+
"type": "string"
|
|
866
|
+
}
|
|
867
|
+
}
|
|
868
|
+
},
|
|
869
|
+
"token_var": {
|
|
870
|
+
"type": "string"
|
|
871
|
+
},
|
|
872
|
+
"type": {
|
|
873
|
+
"type": "string",
|
|
874
|
+
"enum": [
|
|
875
|
+
"motherduck"
|
|
876
|
+
]
|
|
877
|
+
}
|
|
878
|
+
}
|
|
879
|
+
}
|
|
880
|
+
],
|
|
881
|
+
"required": [
|
|
882
|
+
"name"
|
|
883
|
+
],
|
|
884
|
+
"properties": {
|
|
885
|
+
"name": {
|
|
886
|
+
"type": "string"
|
|
887
|
+
}
|
|
888
|
+
}
|
|
889
|
+
},
|
|
890
|
+
"Defaults": {
|
|
891
|
+
"type": "object",
|
|
892
|
+
"properties": {
|
|
893
|
+
"database": {
|
|
894
|
+
"type": [
|
|
895
|
+
"string",
|
|
896
|
+
"null"
|
|
897
|
+
]
|
|
898
|
+
}
|
|
899
|
+
}
|
|
900
|
+
},
|
|
901
|
+
"DuckDbS3Mirror": {
|
|
902
|
+
"description": "Compiler-produced S3 mirror of a **local-file** DuckDB warehouse (`Local` / `File` modes). Present **only in the compiled config**, never in `config.yml`: when the compile worker uploads a workspace's on-disk DuckDB data to S3, it records the location here so a stateless serve replica — which has no working copy — can read the data over `httpfs` instead of the absent local path. Its mere presence means \"this is a fleet read\"; local / IDE reads come from the filesystem and never carry it.\n\nCredentials are the pod's instance role (S3 `credential_chain`), so nothing sensitive is stored here.",
|
|
903
|
+
"type": "object",
|
|
904
|
+
"required": [
|
|
905
|
+
"bucket"
|
|
906
|
+
],
|
|
907
|
+
"properties": {
|
|
908
|
+
"attach_key": {
|
|
909
|
+
"description": "`File` mode: the mirrored `.duckdb` object key (attached read-only).",
|
|
910
|
+
"type": [
|
|
911
|
+
"string",
|
|
912
|
+
"null"
|
|
913
|
+
]
|
|
914
|
+
},
|
|
915
|
+
"bucket": {
|
|
916
|
+
"description": "Bucket the data was mirrored into (`OXY_COMPILE_BLOB_S3_BUCKET`).",
|
|
917
|
+
"type": "string"
|
|
918
|
+
},
|
|
919
|
+
"endpoint_url": {
|
|
920
|
+
"description": "Custom endpoint (MinIO / LocalStack); when set, path-style addressing is used.",
|
|
921
|
+
"type": [
|
|
922
|
+
"string",
|
|
923
|
+
"null"
|
|
924
|
+
]
|
|
925
|
+
},
|
|
926
|
+
"region": {
|
|
927
|
+
"description": "AWS region for the S3 secret.",
|
|
928
|
+
"type": [
|
|
929
|
+
"string",
|
|
930
|
+
"null"
|
|
931
|
+
]
|
|
932
|
+
},
|
|
933
|
+
"tables": {
|
|
934
|
+
"description": "`Local` mode: one mirrored data file per table (table name = slugified file stem, matching local registration).",
|
|
935
|
+
"type": "array",
|
|
936
|
+
"items": {
|
|
937
|
+
"$ref": "#/definitions/DuckDbS3Table"
|
|
938
|
+
}
|
|
939
|
+
}
|
|
940
|
+
}
|
|
941
|
+
},
|
|
942
|
+
"DuckDbS3Table": {
|
|
943
|
+
"type": "object",
|
|
944
|
+
"required": [
|
|
945
|
+
"format",
|
|
946
|
+
"key",
|
|
947
|
+
"table"
|
|
948
|
+
],
|
|
949
|
+
"properties": {
|
|
950
|
+
"format": {
|
|
951
|
+
"description": "`parquet` | `csv`.",
|
|
952
|
+
"type": "string"
|
|
953
|
+
},
|
|
954
|
+
"key": {
|
|
955
|
+
"type": "string"
|
|
956
|
+
},
|
|
957
|
+
"table": {
|
|
958
|
+
"type": "string"
|
|
959
|
+
}
|
|
960
|
+
}
|
|
961
|
+
},
|
|
962
|
+
"DuckLakeConfig": {
|
|
963
|
+
"type": "object",
|
|
964
|
+
"oneOf": [
|
|
965
|
+
{
|
|
966
|
+
"type": "object",
|
|
967
|
+
"required": [
|
|
968
|
+
"key_id",
|
|
969
|
+
"s3_secret_type"
|
|
970
|
+
],
|
|
971
|
+
"properties": {
|
|
972
|
+
"endpoint_url": {
|
|
973
|
+
"type": [
|
|
974
|
+
"string",
|
|
975
|
+
"null"
|
|
976
|
+
]
|
|
977
|
+
},
|
|
978
|
+
"key_id": {
|
|
979
|
+
"type": "string"
|
|
980
|
+
},
|
|
981
|
+
"region": {
|
|
982
|
+
"default": "us-east-1",
|
|
983
|
+
"type": "string"
|
|
984
|
+
},
|
|
985
|
+
"s3_secret_type": {
|
|
986
|
+
"type": "string",
|
|
987
|
+
"enum": [
|
|
988
|
+
"config"
|
|
989
|
+
]
|
|
990
|
+
},
|
|
991
|
+
"secret": {
|
|
992
|
+
"description": "The secret key, referenced by a key variable name stored in SecretManager. In YAML, specify the secret key name: `secret: AWS_S3_SECRET`",
|
|
993
|
+
"default": "DUCKLAKE_S3_SECRET",
|
|
994
|
+
"allOf": [
|
|
995
|
+
{
|
|
996
|
+
"$ref": "#/definitions/ManagedSecret"
|
|
997
|
+
}
|
|
998
|
+
]
|
|
999
|
+
},
|
|
1000
|
+
"url_style": {
|
|
1001
|
+
"default": "path",
|
|
1002
|
+
"type": "string"
|
|
1003
|
+
},
|
|
1004
|
+
"use_ssl": {
|
|
1005
|
+
"default": false,
|
|
1006
|
+
"type": "boolean"
|
|
1007
|
+
}
|
|
1008
|
+
}
|
|
1009
|
+
},
|
|
1010
|
+
{
|
|
1011
|
+
"type": "object",
|
|
1012
|
+
"required": [
|
|
1013
|
+
"s3_secret_type"
|
|
1014
|
+
],
|
|
1015
|
+
"properties": {
|
|
1016
|
+
"chain": {
|
|
1017
|
+
"default": "sso;config",
|
|
1018
|
+
"type": [
|
|
1019
|
+
"string",
|
|
1020
|
+
"null"
|
|
1021
|
+
]
|
|
1022
|
+
},
|
|
1023
|
+
"region": {
|
|
1024
|
+
"default": "us-east-1",
|
|
1025
|
+
"type": "string"
|
|
1026
|
+
},
|
|
1027
|
+
"s3_secret_type": {
|
|
1028
|
+
"type": "string",
|
|
1029
|
+
"enum": [
|
|
1030
|
+
"credential_chain"
|
|
1031
|
+
]
|
|
1032
|
+
}
|
|
1033
|
+
}
|
|
1034
|
+
}
|
|
1035
|
+
],
|
|
1036
|
+
"required": [
|
|
1037
|
+
"data_path",
|
|
1038
|
+
"schema_name"
|
|
1039
|
+
],
|
|
1040
|
+
"properties": {
|
|
1041
|
+
"catalog_path": {
|
|
1042
|
+
"description": "The catalog path, referenced by a key variable name stored in SecretManager. The secret value should be a postgres connection string URL like: `postgres://user:pass@localhost:5432/catalog_db`",
|
|
1043
|
+
"default": "DUCKLAKE_CATALOG_PATH",
|
|
1044
|
+
"allOf": [
|
|
1045
|
+
{
|
|
1046
|
+
"$ref": "#/definitions/ManagedSecret"
|
|
1047
|
+
}
|
|
1048
|
+
]
|
|
1049
|
+
},
|
|
1050
|
+
"data_path": {
|
|
1051
|
+
"type": "string"
|
|
1052
|
+
},
|
|
1053
|
+
"schema_name": {
|
|
1054
|
+
"type": "string"
|
|
1055
|
+
}
|
|
1056
|
+
}
|
|
1057
|
+
},
|
|
1058
|
+
"HeaderValue": {
|
|
1059
|
+
"description": "Header value that can be either a direct string or an environment variable reference. Used in model configurations to specify custom HTTP headers.",
|
|
1060
|
+
"anyOf": [
|
|
1061
|
+
{
|
|
1062
|
+
"description": "Direct header value",
|
|
1063
|
+
"type": "string"
|
|
1064
|
+
},
|
|
1065
|
+
{
|
|
1066
|
+
"description": "Header value from environment variable",
|
|
1067
|
+
"type": "object",
|
|
1068
|
+
"required": [
|
|
1069
|
+
"env_var"
|
|
1070
|
+
],
|
|
1071
|
+
"properties": {
|
|
1072
|
+
"env_var": {
|
|
1073
|
+
"description": "Environment variable name containing the header value",
|
|
1074
|
+
"type": "string"
|
|
1075
|
+
}
|
|
1076
|
+
}
|
|
1077
|
+
}
|
|
1078
|
+
]
|
|
1079
|
+
},
|
|
1080
|
+
"HealthCheckConfig": {
|
|
1081
|
+
"type": "object",
|
|
1082
|
+
"properties": {
|
|
1083
|
+
"enabled": {
|
|
1084
|
+
"description": "When false, the workspace's health schedule row is disabled and no eval is enqueued. Defaults to true *within a written block* — having gone to the trouble of writing `health_check:`, you meant to turn it on.\n\nThis default says nothing about a workspace with **no** `health_check:` block: that one is off. Ask [`resolve_enabled`] rather than reaching for `unwrap_or(..)` on an `Option<HealthCheckConfig>` at a call site.",
|
|
1085
|
+
"default": true,
|
|
1086
|
+
"type": "boolean"
|
|
1087
|
+
},
|
|
1088
|
+
"interval": {
|
|
1089
|
+
"description": "Evaluation cadence as a humantime duration (e.g. `\"30m\"`, `\"2h\"`). Absent → 1h. Out-of-range or unparseable values clamp/fall back to the safe default rather than erroring — a malformed cadence must never wedge the scheduler.",
|
|
1090
|
+
"type": [
|
|
1091
|
+
"string",
|
|
1092
|
+
"null"
|
|
1093
|
+
]
|
|
1094
|
+
},
|
|
1095
|
+
"smoke_test": {
|
|
1096
|
+
"description": "Active end-to-end probes of the workspace's own artifacts, run on their own slower cadence inside the eval pass.\n\nAbsent → [`SmokeTestConfig::default`]: the smoke test still runs, but only the zero-scan `connections` probe, so opting into health checks at all buys free credential-expiry detection. To turn it off entirely, write `smoke_test: { enabled: false }`.",
|
|
1097
|
+
"anyOf": [
|
|
1098
|
+
{
|
|
1099
|
+
"$ref": "#/definitions/SmokeTestConfig"
|
|
1100
|
+
},
|
|
1101
|
+
{
|
|
1102
|
+
"type": "null"
|
|
1103
|
+
}
|
|
1104
|
+
]
|
|
1105
|
+
}
|
|
1106
|
+
},
|
|
1107
|
+
"additionalProperties": false
|
|
1108
|
+
},
|
|
1109
|
+
"InstanceType": {
|
|
1110
|
+
"description": "The possible types of values in JSON Schema documents.\n\nSee [JSON Schema 4.2.1. Instance Data Model](https://tools.ietf.org/html/draft-handrews-json-schema-02#section-4.2.1).",
|
|
1111
|
+
"type": "string",
|
|
1112
|
+
"enum": [
|
|
1113
|
+
"null",
|
|
1114
|
+
"boolean",
|
|
1115
|
+
"object",
|
|
1116
|
+
"array",
|
|
1117
|
+
"number",
|
|
1118
|
+
"string",
|
|
1119
|
+
"integer"
|
|
1120
|
+
]
|
|
1121
|
+
},
|
|
1122
|
+
"Integration": {
|
|
1123
|
+
"type": "object",
|
|
1124
|
+
"oneOf": [
|
|
1125
|
+
{
|
|
1126
|
+
"type": "object",
|
|
1127
|
+
"required": [
|
|
1128
|
+
"api_key_var",
|
|
1129
|
+
"base_url",
|
|
1130
|
+
"topics",
|
|
1131
|
+
"type"
|
|
1132
|
+
],
|
|
1133
|
+
"properties": {
|
|
1134
|
+
"api_key_var": {
|
|
1135
|
+
"type": "string"
|
|
1136
|
+
},
|
|
1137
|
+
"arrow_threshold_rows": {
|
|
1138
|
+
"description": "Row count threshold for switching to Arrow format (file path response) If query result exceeds this threshold, return file_path instead of row arrays Default: 1000 rows",
|
|
1139
|
+
"default": 1000,
|
|
1140
|
+
"type": "integer",
|
|
1141
|
+
"format": "uint",
|
|
1142
|
+
"minimum": 0.0
|
|
1143
|
+
},
|
|
1144
|
+
"base_url": {
|
|
1145
|
+
"type": "string"
|
|
1146
|
+
},
|
|
1147
|
+
"topics": {
|
|
1148
|
+
"type": "array",
|
|
1149
|
+
"items": {
|
|
1150
|
+
"$ref": "#/definitions/OmniTopic"
|
|
1151
|
+
}
|
|
1152
|
+
},
|
|
1153
|
+
"type": {
|
|
1154
|
+
"type": "string",
|
|
1155
|
+
"enum": [
|
|
1156
|
+
"omni"
|
|
1157
|
+
]
|
|
1158
|
+
}
|
|
1159
|
+
}
|
|
1160
|
+
},
|
|
1161
|
+
{
|
|
1162
|
+
"description": "Looker integration configuration.\n\nProvides connection settings for a Looker instance, including OAuth credentials and the list of explores to expose.",
|
|
1163
|
+
"type": "object",
|
|
1164
|
+
"required": [
|
|
1165
|
+
"base_url",
|
|
1166
|
+
"client_id_var",
|
|
1167
|
+
"client_secret_var",
|
|
1168
|
+
"explores",
|
|
1169
|
+
"type"
|
|
1170
|
+
],
|
|
1171
|
+
"properties": {
|
|
1172
|
+
"base_url": {
|
|
1173
|
+
"description": "Base URL for the Looker instance (e.g., https://your.looker.com:19999)",
|
|
1174
|
+
"type": "string"
|
|
1175
|
+
},
|
|
1176
|
+
"client_id_var": {
|
|
1177
|
+
"description": "Environment variable containing the Looker client ID",
|
|
1178
|
+
"type": "string"
|
|
1179
|
+
},
|
|
1180
|
+
"client_secret_var": {
|
|
1181
|
+
"description": "Environment variable containing the Looker client secret",
|
|
1182
|
+
"type": "string"
|
|
1183
|
+
},
|
|
1184
|
+
"explores": {
|
|
1185
|
+
"description": "List of explores to expose from this Looker instance",
|
|
1186
|
+
"type": "array",
|
|
1187
|
+
"items": {
|
|
1188
|
+
"$ref": "#/definitions/LookerExplore"
|
|
1189
|
+
}
|
|
1190
|
+
},
|
|
1191
|
+
"type": {
|
|
1192
|
+
"type": "string",
|
|
1193
|
+
"enum": [
|
|
1194
|
+
"looker"
|
|
1195
|
+
]
|
|
1196
|
+
}
|
|
1197
|
+
}
|
|
1198
|
+
},
|
|
1199
|
+
{
|
|
1200
|
+
"description": "Toast POS webhook integration.\n\nThe webhook receiver at `POST /api/webhooks/toast/orders?project_id=...` validates incoming payloads with the secret referenced by `webhook_secret_var` (HMAC-SHA256 over body + timestamp).",
|
|
1201
|
+
"type": "object",
|
|
1202
|
+
"required": [
|
|
1203
|
+
"type",
|
|
1204
|
+
"webhook_secret_var"
|
|
1205
|
+
],
|
|
1206
|
+
"properties": {
|
|
1207
|
+
"restaurant_guids": {
|
|
1208
|
+
"description": "Restaurant GUIDs this workspace is authorized to receive events for. Empty list = accept all (dev convenience).",
|
|
1209
|
+
"type": "array",
|
|
1210
|
+
"items": {
|
|
1211
|
+
"type": "string"
|
|
1212
|
+
}
|
|
1213
|
+
},
|
|
1214
|
+
"type": {
|
|
1215
|
+
"type": "string",
|
|
1216
|
+
"enum": [
|
|
1217
|
+
"toast"
|
|
1218
|
+
]
|
|
1219
|
+
},
|
|
1220
|
+
"webhook_secret_var": {
|
|
1221
|
+
"description": "Environment variable / workspace secret name containing the Toast webhook signing secret.",
|
|
1222
|
+
"type": "string"
|
|
1223
|
+
}
|
|
1224
|
+
}
|
|
1225
|
+
},
|
|
1226
|
+
{
|
|
1227
|
+
"description": "Toast Analytics API integration — the **reconciliation** source.\n\nDistinct from `ToastIntegration` (webhooks): this carries the credentials and gateway the workspace-health **Reconciliation** dimension uses to call Toast's async Analytics Metrics API. A `reconcile.yml` check binds to it by name via `integration:`. Keeping it separate leaves the webhook integration (managed through the world-model Apps UI) untouched.",
|
|
1228
|
+
"type": "object",
|
|
1229
|
+
"required": [
|
|
1230
|
+
"type"
|
|
1231
|
+
],
|
|
1232
|
+
"properties": {
|
|
1233
|
+
"api_token_var": {
|
|
1234
|
+
"description": "Workspace-secret name holding a static Toast API bearer token, used when the OAuth client pair is not configured.",
|
|
1235
|
+
"type": [
|
|
1236
|
+
"string",
|
|
1237
|
+
"null"
|
|
1238
|
+
]
|
|
1239
|
+
},
|
|
1240
|
+
"base_url": {
|
|
1241
|
+
"description": "Toast API gateway base URL (e.g. `https://ws-api.toasttab.com` prod, `https://ws-sandbox-api.toasttab.com` sandbox). Absent ⇒ fall back to the `OXY_TOAST_BASE_URL` env var, then the prod gateway default.",
|
|
1242
|
+
"type": [
|
|
1243
|
+
"string",
|
|
1244
|
+
"null"
|
|
1245
|
+
]
|
|
1246
|
+
},
|
|
1247
|
+
"client_id_var": {
|
|
1248
|
+
"description": "Workspace-secret name holding the Toast OAuth client id. Paired with `client_secret_var` for client-credentials auth; absent ⇒ fall back to `api_token_var`. (Validation is skipped: in cloud mode the value lives in the workspace secret store, not the process env.)",
|
|
1249
|
+
"type": [
|
|
1250
|
+
"string",
|
|
1251
|
+
"null"
|
|
1252
|
+
]
|
|
1253
|
+
},
|
|
1254
|
+
"client_secret_var": {
|
|
1255
|
+
"description": "Workspace-secret name holding the Toast OAuth client secret. See `client_id_var`.",
|
|
1256
|
+
"type": [
|
|
1257
|
+
"string",
|
|
1258
|
+
"null"
|
|
1259
|
+
]
|
|
1260
|
+
},
|
|
1261
|
+
"type": {
|
|
1262
|
+
"type": "string",
|
|
1263
|
+
"enum": [
|
|
1264
|
+
"toast_analytics"
|
|
1265
|
+
]
|
|
1266
|
+
}
|
|
1267
|
+
}
|
|
1268
|
+
},
|
|
1269
|
+
{
|
|
1270
|
+
"description": "OpenWeatherMap weather data integration.\n\nPowers the world-model weather tile proxy and current-weather batch endpoint. Reads `api_key_var` from workspace secrets.",
|
|
1271
|
+
"type": "object",
|
|
1272
|
+
"required": [
|
|
1273
|
+
"api_key_var",
|
|
1274
|
+
"type"
|
|
1275
|
+
],
|
|
1276
|
+
"properties": {
|
|
1277
|
+
"api_key_var": {
|
|
1278
|
+
"type": "string"
|
|
1279
|
+
},
|
|
1280
|
+
"type": {
|
|
1281
|
+
"type": "string",
|
|
1282
|
+
"enum": [
|
|
1283
|
+
"openweathermap"
|
|
1284
|
+
]
|
|
1285
|
+
}
|
|
1286
|
+
}
|
|
1287
|
+
},
|
|
1288
|
+
{
|
|
1289
|
+
"description": "BestTime foot-traffic integration.\n\nPowers the world-model foot-traffic and radar endpoints. Reads `api_key_var` from workspace secrets.",
|
|
1290
|
+
"type": "object",
|
|
1291
|
+
"required": [
|
|
1292
|
+
"api_key_var",
|
|
1293
|
+
"type"
|
|
1294
|
+
],
|
|
1295
|
+
"properties": {
|
|
1296
|
+
"api_key_var": {
|
|
1297
|
+
"type": "string"
|
|
1298
|
+
},
|
|
1299
|
+
"type": {
|
|
1300
|
+
"type": "string",
|
|
1301
|
+
"enum": [
|
|
1302
|
+
"besttime"
|
|
1303
|
+
]
|
|
1304
|
+
}
|
|
1305
|
+
}
|
|
1306
|
+
},
|
|
1307
|
+
{
|
|
1308
|
+
"description": "UniFi camera integration.\n\nPowers the world-model camera proxy (UniFi Site Manager devices). Reads `api_key_var` from workspace secrets, mirroring the weather/foot-traffic integrations instead of reading a raw process env var.",
|
|
1309
|
+
"type": "object",
|
|
1310
|
+
"required": [
|
|
1311
|
+
"api_key_var",
|
|
1312
|
+
"type"
|
|
1313
|
+
],
|
|
1314
|
+
"properties": {
|
|
1315
|
+
"api_key_var": {
|
|
1316
|
+
"type": "string"
|
|
1317
|
+
},
|
|
1318
|
+
"type": {
|
|
1319
|
+
"type": "string",
|
|
1320
|
+
"enum": [
|
|
1321
|
+
"unifi"
|
|
1322
|
+
]
|
|
1323
|
+
}
|
|
1324
|
+
}
|
|
1325
|
+
}
|
|
1326
|
+
],
|
|
1327
|
+
"required": [
|
|
1328
|
+
"name"
|
|
1329
|
+
],
|
|
1330
|
+
"properties": {
|
|
1331
|
+
"name": {
|
|
1332
|
+
"type": "string"
|
|
1333
|
+
}
|
|
1334
|
+
}
|
|
1335
|
+
},
|
|
1336
|
+
"LookerExplore": {
|
|
1337
|
+
"description": "Configuration for a Looker explore to expose.",
|
|
1338
|
+
"type": "object",
|
|
1339
|
+
"required": [
|
|
1340
|
+
"model",
|
|
1341
|
+
"name"
|
|
1342
|
+
],
|
|
1343
|
+
"properties": {
|
|
1344
|
+
"description": {
|
|
1345
|
+
"description": "Optional description for the explore",
|
|
1346
|
+
"type": [
|
|
1347
|
+
"string",
|
|
1348
|
+
"null"
|
|
1349
|
+
]
|
|
1350
|
+
},
|
|
1351
|
+
"model": {
|
|
1352
|
+
"description": "The LookML model name containing this explore",
|
|
1353
|
+
"type": "string"
|
|
1354
|
+
},
|
|
1355
|
+
"name": {
|
|
1356
|
+
"description": "The explore name within the model",
|
|
1357
|
+
"type": "string"
|
|
1358
|
+
}
|
|
1359
|
+
}
|
|
1360
|
+
},
|
|
1361
|
+
"ManagedSecret": {
|
|
1362
|
+
"type": "string"
|
|
1363
|
+
},
|
|
1364
|
+
"McpConfig": {
|
|
1365
|
+
"type": "object",
|
|
1366
|
+
"properties": {
|
|
1367
|
+
"tools": {
|
|
1368
|
+
"description": "List of file patterns to expose as MCP tools Supports glob patterns like \"agents/*.agent.yml\" Examples: - \"agents/sql-generator.agent.yml\" (specific file) - \"agents/*.agent.yml\" (all agents in directory) - \"workflows/**/*.automation.yml\" (all automations recursively) - \"semantics/topics/*.topic.yml\" (semantic topics) - \"sqls/queries/*.sql\" (SQL files)",
|
|
1369
|
+
"default": [],
|
|
1370
|
+
"type": "array",
|
|
1371
|
+
"items": {
|
|
1372
|
+
"type": "string"
|
|
1373
|
+
}
|
|
1374
|
+
}
|
|
1375
|
+
}
|
|
1376
|
+
},
|
|
1377
|
+
"Model": {
|
|
1378
|
+
"description": "LLM model configuration supporting multiple vendors",
|
|
1379
|
+
"oneOf": [
|
|
1380
|
+
{
|
|
1381
|
+
"description": "Azure OpenAI deployment configuration",
|
|
1382
|
+
"type": "object",
|
|
1383
|
+
"required": [
|
|
1384
|
+
"key_var",
|
|
1385
|
+
"model_ref",
|
|
1386
|
+
"name",
|
|
1387
|
+
"vendor"
|
|
1388
|
+
],
|
|
1389
|
+
"properties": {
|
|
1390
|
+
"api_url": {
|
|
1391
|
+
"default": "https://api.openai.com/v1",
|
|
1392
|
+
"type": [
|
|
1393
|
+
"string",
|
|
1394
|
+
"null"
|
|
1395
|
+
]
|
|
1396
|
+
},
|
|
1397
|
+
"azure_api_version": {
|
|
1398
|
+
"type": "string"
|
|
1399
|
+
},
|
|
1400
|
+
"azure_deployment_id": {
|
|
1401
|
+
"type": "string"
|
|
1402
|
+
},
|
|
1403
|
+
"headers": {
|
|
1404
|
+
"type": [
|
|
1405
|
+
"object",
|
|
1406
|
+
"null"
|
|
1407
|
+
],
|
|
1408
|
+
"additionalProperties": {
|
|
1409
|
+
"$ref": "#/definitions/HeaderValue"
|
|
1410
|
+
}
|
|
1411
|
+
},
|
|
1412
|
+
"key_var": {
|
|
1413
|
+
"type": "string"
|
|
1414
|
+
},
|
|
1415
|
+
"model_ref": {
|
|
1416
|
+
"type": "string"
|
|
1417
|
+
},
|
|
1418
|
+
"name": {
|
|
1419
|
+
"type": "string"
|
|
1420
|
+
},
|
|
1421
|
+
"vendor": {
|
|
1422
|
+
"type": "string",
|
|
1423
|
+
"enum": [
|
|
1424
|
+
"openai"
|
|
1425
|
+
]
|
|
1426
|
+
}
|
|
1427
|
+
}
|
|
1428
|
+
},
|
|
1429
|
+
{
|
|
1430
|
+
"type": "object",
|
|
1431
|
+
"required": [
|
|
1432
|
+
"key_var",
|
|
1433
|
+
"model_ref",
|
|
1434
|
+
"name",
|
|
1435
|
+
"vendor"
|
|
1436
|
+
],
|
|
1437
|
+
"properties": {
|
|
1438
|
+
"key_var": {
|
|
1439
|
+
"type": "string"
|
|
1440
|
+
},
|
|
1441
|
+
"model_ref": {
|
|
1442
|
+
"type": "string"
|
|
1443
|
+
},
|
|
1444
|
+
"name": {
|
|
1445
|
+
"type": "string"
|
|
1446
|
+
},
|
|
1447
|
+
"vendor": {
|
|
1448
|
+
"type": "string",
|
|
1449
|
+
"enum": [
|
|
1450
|
+
"google"
|
|
1451
|
+
]
|
|
1452
|
+
}
|
|
1453
|
+
}
|
|
1454
|
+
},
|
|
1455
|
+
{
|
|
1456
|
+
"type": "object",
|
|
1457
|
+
"required": [
|
|
1458
|
+
"api_key",
|
|
1459
|
+
"api_url",
|
|
1460
|
+
"model_ref",
|
|
1461
|
+
"name",
|
|
1462
|
+
"vendor"
|
|
1463
|
+
],
|
|
1464
|
+
"properties": {
|
|
1465
|
+
"api_key": {
|
|
1466
|
+
"type": "string"
|
|
1467
|
+
},
|
|
1468
|
+
"api_url": {
|
|
1469
|
+
"type": "string"
|
|
1470
|
+
},
|
|
1471
|
+
"model_ref": {
|
|
1472
|
+
"type": "string"
|
|
1473
|
+
},
|
|
1474
|
+
"name": {
|
|
1475
|
+
"type": "string"
|
|
1476
|
+
},
|
|
1477
|
+
"vendor": {
|
|
1478
|
+
"type": "string",
|
|
1479
|
+
"enum": [
|
|
1480
|
+
"ollama"
|
|
1481
|
+
]
|
|
1482
|
+
}
|
|
1483
|
+
}
|
|
1484
|
+
},
|
|
1485
|
+
{
|
|
1486
|
+
"type": "object",
|
|
1487
|
+
"required": [
|
|
1488
|
+
"key_var",
|
|
1489
|
+
"model_ref",
|
|
1490
|
+
"name",
|
|
1491
|
+
"vendor"
|
|
1492
|
+
],
|
|
1493
|
+
"properties": {
|
|
1494
|
+
"api_url": {
|
|
1495
|
+
"default": "https://api.anthropic.com/v1",
|
|
1496
|
+
"type": [
|
|
1497
|
+
"string",
|
|
1498
|
+
"null"
|
|
1499
|
+
]
|
|
1500
|
+
},
|
|
1501
|
+
"headers": {
|
|
1502
|
+
"type": [
|
|
1503
|
+
"object",
|
|
1504
|
+
"null"
|
|
1505
|
+
],
|
|
1506
|
+
"additionalProperties": {
|
|
1507
|
+
"$ref": "#/definitions/HeaderValue"
|
|
1508
|
+
}
|
|
1509
|
+
},
|
|
1510
|
+
"key_var": {
|
|
1511
|
+
"type": "string"
|
|
1512
|
+
},
|
|
1513
|
+
"model_ref": {
|
|
1514
|
+
"type": "string"
|
|
1515
|
+
},
|
|
1516
|
+
"name": {
|
|
1517
|
+
"type": "string"
|
|
1518
|
+
},
|
|
1519
|
+
"vendor": {
|
|
1520
|
+
"type": "string",
|
|
1521
|
+
"enum": [
|
|
1522
|
+
"anthropic"
|
|
1523
|
+
]
|
|
1524
|
+
}
|
|
1525
|
+
}
|
|
1526
|
+
},
|
|
1527
|
+
{
|
|
1528
|
+
"description": "An OpenAI-compatible gateway that speaks **Chat Completions** (`/chat/completions`) rather than the Responses API (`/responses`).\n\nDistinct from [`Model::OpenAI`] only in which wire protocol the agentic pipeline targets — third-party and EU-hosted gateways (LangDock, vLLM, LM Studio, most self-hosted proxies) implement Chat Completions only and return 404 on `/responses`.\n\nReuses [`OpenAIModelConfig`] so it inherits `key_var`, meaning the API key resolves through the managed workspace secret store like any other keyed vendor. [`Model::Ollama`] also targets Chat Completions but carries its key inline with no `key_var`, so it cannot bind a managed secret.",
|
|
1529
|
+
"type": "object",
|
|
1530
|
+
"required": [
|
|
1531
|
+
"key_var",
|
|
1532
|
+
"model_ref",
|
|
1533
|
+
"name",
|
|
1534
|
+
"vendor"
|
|
1535
|
+
],
|
|
1536
|
+
"properties": {
|
|
1537
|
+
"api_url": {
|
|
1538
|
+
"default": "https://api.openai.com/v1",
|
|
1539
|
+
"type": [
|
|
1540
|
+
"string",
|
|
1541
|
+
"null"
|
|
1542
|
+
]
|
|
1543
|
+
},
|
|
1544
|
+
"azure_api_version": {
|
|
1545
|
+
"type": "string"
|
|
1546
|
+
},
|
|
1547
|
+
"azure_deployment_id": {
|
|
1548
|
+
"type": "string"
|
|
1549
|
+
},
|
|
1550
|
+
"headers": {
|
|
1551
|
+
"type": [
|
|
1552
|
+
"object",
|
|
1553
|
+
"null"
|
|
1554
|
+
],
|
|
1555
|
+
"additionalProperties": {
|
|
1556
|
+
"$ref": "#/definitions/HeaderValue"
|
|
1557
|
+
}
|
|
1558
|
+
},
|
|
1559
|
+
"key_var": {
|
|
1560
|
+
"type": "string"
|
|
1561
|
+
},
|
|
1562
|
+
"model_ref": {
|
|
1563
|
+
"type": "string"
|
|
1564
|
+
},
|
|
1565
|
+
"name": {
|
|
1566
|
+
"type": "string"
|
|
1567
|
+
},
|
|
1568
|
+
"vendor": {
|
|
1569
|
+
"type": "string",
|
|
1570
|
+
"enum": [
|
|
1571
|
+
"openai_compat"
|
|
1572
|
+
]
|
|
1573
|
+
}
|
|
1574
|
+
}
|
|
1575
|
+
}
|
|
1576
|
+
]
|
|
1577
|
+
},
|
|
1578
|
+
"OmniTopic": {
|
|
1579
|
+
"type": "object",
|
|
1580
|
+
"required": [
|
|
1581
|
+
"model_id",
|
|
1582
|
+
"name"
|
|
1583
|
+
],
|
|
1584
|
+
"properties": {
|
|
1585
|
+
"model_id": {
|
|
1586
|
+
"type": "string"
|
|
1587
|
+
},
|
|
1588
|
+
"name": {
|
|
1589
|
+
"type": "string"
|
|
1590
|
+
}
|
|
1591
|
+
}
|
|
1592
|
+
},
|
|
1593
|
+
"PreaggConfig": {
|
|
1594
|
+
"description": "Top-level `pre_aggregations:` block in `config.yml`.",
|
|
1595
|
+
"type": "object",
|
|
1596
|
+
"properties": {
|
|
1597
|
+
"database": {
|
|
1598
|
+
"description": "Database connector used for pre-agg builds. Defaults to each view's own `datasource`.",
|
|
1599
|
+
"type": [
|
|
1600
|
+
"string",
|
|
1601
|
+
"null"
|
|
1602
|
+
]
|
|
1603
|
+
},
|
|
1604
|
+
"refresh_worker": {
|
|
1605
|
+
"anyOf": [
|
|
1606
|
+
{
|
|
1607
|
+
"$ref": "#/definitions/RefreshWorkerConfig"
|
|
1608
|
+
},
|
|
1609
|
+
{
|
|
1610
|
+
"type": "null"
|
|
1611
|
+
}
|
|
1612
|
+
]
|
|
1613
|
+
},
|
|
1614
|
+
"schema": {
|
|
1615
|
+
"description": "Warehouse schema where pre-agg tables are created. Defaults to `\"AIRLAYER\"`.",
|
|
1616
|
+
"type": [
|
|
1617
|
+
"string",
|
|
1618
|
+
"null"
|
|
1619
|
+
]
|
|
1620
|
+
}
|
|
1621
|
+
},
|
|
1622
|
+
"additionalProperties": false
|
|
1623
|
+
},
|
|
1624
|
+
"RefreshWorkerConfig": {
|
|
1625
|
+
"description": "Configuration for the background pre-aggregation refresh worker.",
|
|
1626
|
+
"type": "object",
|
|
1627
|
+
"properties": {
|
|
1628
|
+
"enabled": {
|
|
1629
|
+
"description": "Set to `false` to disable the background worker entirely.",
|
|
1630
|
+
"default": true,
|
|
1631
|
+
"type": [
|
|
1632
|
+
"boolean",
|
|
1633
|
+
"null"
|
|
1634
|
+
]
|
|
1635
|
+
},
|
|
1636
|
+
"heartbeat": {
|
|
1637
|
+
"description": "How often the worker wakes up to check staleness (e.g. \"30s\", \"5m\").",
|
|
1638
|
+
"type": [
|
|
1639
|
+
"string",
|
|
1640
|
+
"null"
|
|
1641
|
+
]
|
|
1642
|
+
},
|
|
1643
|
+
"renewal_threshold": {
|
|
1644
|
+
"description": "How long a cached refresh_key result is valid before re-evaluating (e.g. \"120s\").",
|
|
1645
|
+
"type": [
|
|
1646
|
+
"string",
|
|
1647
|
+
"null"
|
|
1648
|
+
]
|
|
1649
|
+
}
|
|
1650
|
+
},
|
|
1651
|
+
"additionalProperties": false
|
|
1652
|
+
},
|
|
1653
|
+
"Repository": {
|
|
1654
|
+
"description": "An external repository (dbt, LookML, data models, etc.) linked to an Oxy project. Either `path` or `git_url` must be set.",
|
|
1655
|
+
"type": "object",
|
|
1656
|
+
"required": [
|
|
1657
|
+
"name"
|
|
1658
|
+
],
|
|
1659
|
+
"properties": {
|
|
1660
|
+
"branch": {
|
|
1661
|
+
"description": "Branch to check out when cloning from `git_url`. Defaults to HEAD.",
|
|
1662
|
+
"type": [
|
|
1663
|
+
"string",
|
|
1664
|
+
"null"
|
|
1665
|
+
]
|
|
1666
|
+
},
|
|
1667
|
+
"git_namespace_id": {
|
|
1668
|
+
"description": "GitHub namespace UUID used to get a fresh installation token for push. Set when the repo was linked via the GitHub App.",
|
|
1669
|
+
"type": [
|
|
1670
|
+
"string",
|
|
1671
|
+
"null"
|
|
1672
|
+
]
|
|
1673
|
+
},
|
|
1674
|
+
"git_url": {
|
|
1675
|
+
"description": "Remote git URL to clone. Repo is cloned to `.repositories/{name}/`.",
|
|
1676
|
+
"type": [
|
|
1677
|
+
"string",
|
|
1678
|
+
"null"
|
|
1679
|
+
]
|
|
1680
|
+
},
|
|
1681
|
+
"name": {
|
|
1682
|
+
"description": "Display name used as the path prefix `@{name}/` in the IDE.",
|
|
1683
|
+
"type": "string"
|
|
1684
|
+
},
|
|
1685
|
+
"path": {
|
|
1686
|
+
"description": "Local filesystem path, relative to the project root or absolute.",
|
|
1687
|
+
"type": [
|
|
1688
|
+
"string",
|
|
1689
|
+
"null"
|
|
1690
|
+
]
|
|
1691
|
+
}
|
|
1692
|
+
}
|
|
1693
|
+
},
|
|
1694
|
+
"Schema": {
|
|
1695
|
+
"description": "A JSON Schema.",
|
|
1696
|
+
"anyOf": [
|
|
1697
|
+
{
|
|
1698
|
+
"description": "A trivial boolean JSON Schema.\n\nThe schema `true` matches everything (always passes validation), whereas the schema `false` matches nothing (always fails validation).",
|
|
1699
|
+
"type": "boolean"
|
|
1700
|
+
},
|
|
1701
|
+
{
|
|
1702
|
+
"description": "A JSON Schema object.",
|
|
1703
|
+
"allOf": [
|
|
1704
|
+
{
|
|
1705
|
+
"$ref": "#/definitions/SchemaObject"
|
|
1706
|
+
}
|
|
1707
|
+
]
|
|
1708
|
+
}
|
|
1709
|
+
]
|
|
1710
|
+
},
|
|
1711
|
+
"SchemaObject": {
|
|
1712
|
+
"description": "A JSON Schema object.",
|
|
1713
|
+
"type": "object",
|
|
1714
|
+
"properties": {
|
|
1715
|
+
"$id": {
|
|
1716
|
+
"description": "The `$id` keyword.\n\nSee [JSON Schema 8.2.2. The \"$id\" Keyword](https://tools.ietf.org/html/draft-handrews-json-schema-02#section-8.2.2).",
|
|
1717
|
+
"type": [
|
|
1718
|
+
"string",
|
|
1719
|
+
"null"
|
|
1720
|
+
]
|
|
1721
|
+
},
|
|
1722
|
+
"$ref": {
|
|
1723
|
+
"description": "The `$ref` keyword.\n\nSee [JSON Schema 8.2.4.1. Direct References with \"$ref\"](https://tools.ietf.org/html/draft-handrews-json-schema-02#section-8.2.4.1).",
|
|
1724
|
+
"type": [
|
|
1725
|
+
"string",
|
|
1726
|
+
"null"
|
|
1727
|
+
]
|
|
1728
|
+
},
|
|
1729
|
+
"additionalItems": {
|
|
1730
|
+
"description": "The `additionalItems` keyword.\n\nSee [JSON Schema 9.3.1.2. \"additionalItems\"](https://tools.ietf.org/html/draft-handrews-json-schema-02#section-9.3.1.2).",
|
|
1731
|
+
"anyOf": [
|
|
1732
|
+
{
|
|
1733
|
+
"$ref": "#/definitions/Schema"
|
|
1734
|
+
},
|
|
1735
|
+
{
|
|
1736
|
+
"type": "null"
|
|
1737
|
+
}
|
|
1738
|
+
]
|
|
1739
|
+
},
|
|
1740
|
+
"additionalProperties": {
|
|
1741
|
+
"description": "The `additionalProperties` keyword.\n\nSee [JSON Schema 9.3.2.3. \"additionalProperties\"](https://tools.ietf.org/html/draft-handrews-json-schema-02#section-9.3.2.3).",
|
|
1742
|
+
"anyOf": [
|
|
1743
|
+
{
|
|
1744
|
+
"$ref": "#/definitions/Schema"
|
|
1745
|
+
},
|
|
1746
|
+
{
|
|
1747
|
+
"type": "null"
|
|
1748
|
+
}
|
|
1749
|
+
]
|
|
1750
|
+
},
|
|
1751
|
+
"allOf": {
|
|
1752
|
+
"description": "The `allOf` keyword.\n\nSee [JSON Schema 9.2.1.1. \"allOf\"](https://tools.ietf.org/html/draft-handrews-json-schema-02#section-9.2.1.1).",
|
|
1753
|
+
"type": [
|
|
1754
|
+
"array",
|
|
1755
|
+
"null"
|
|
1756
|
+
],
|
|
1757
|
+
"items": {
|
|
1758
|
+
"$ref": "#/definitions/Schema"
|
|
1759
|
+
}
|
|
1760
|
+
},
|
|
1761
|
+
"anyOf": {
|
|
1762
|
+
"description": "The `anyOf` keyword.\n\nSee [JSON Schema 9.2.1.2. \"anyOf\"](https://tools.ietf.org/html/draft-handrews-json-schema-02#section-9.2.1.2).",
|
|
1763
|
+
"type": [
|
|
1764
|
+
"array",
|
|
1765
|
+
"null"
|
|
1766
|
+
],
|
|
1767
|
+
"items": {
|
|
1768
|
+
"$ref": "#/definitions/Schema"
|
|
1769
|
+
}
|
|
1770
|
+
},
|
|
1771
|
+
"const": {
|
|
1772
|
+
"description": "The `const` keyword.\n\nSee [JSON Schema Validation 6.1.3. \"const\"](https://tools.ietf.org/html/draft-handrews-json-schema-validation-02#section-6.1.3)"
|
|
1773
|
+
},
|
|
1774
|
+
"contains": {
|
|
1775
|
+
"description": "The `contains` keyword.\n\nSee [JSON Schema 9.3.1.4. \"contains\"](https://tools.ietf.org/html/draft-handrews-json-schema-02#section-9.3.1.4).",
|
|
1776
|
+
"anyOf": [
|
|
1777
|
+
{
|
|
1778
|
+
"$ref": "#/definitions/Schema"
|
|
1779
|
+
},
|
|
1780
|
+
{
|
|
1781
|
+
"type": "null"
|
|
1782
|
+
}
|
|
1783
|
+
]
|
|
1784
|
+
},
|
|
1785
|
+
"default": {
|
|
1786
|
+
"description": "The `default` keyword.\n\nSee [JSON Schema Validation 9.2. \"default\"](https://tools.ietf.org/html/draft-handrews-json-schema-validation-02#section-9.2)."
|
|
1787
|
+
},
|
|
1788
|
+
"deprecated": {
|
|
1789
|
+
"description": "The `deprecated` keyword.\n\nSee [JSON Schema Validation 9.3. \"deprecated\"](https://tools.ietf.org/html/draft-handrews-json-schema-validation-02#section-9.3).",
|
|
1790
|
+
"type": "boolean"
|
|
1791
|
+
},
|
|
1792
|
+
"description": {
|
|
1793
|
+
"description": "The `description` keyword.\n\nSee [JSON Schema Validation 9.1. \"title\" and \"description\"](https://tools.ietf.org/html/draft-handrews-json-schema-validation-02#section-9.1).",
|
|
1794
|
+
"type": [
|
|
1795
|
+
"string",
|
|
1796
|
+
"null"
|
|
1797
|
+
]
|
|
1798
|
+
},
|
|
1799
|
+
"else": {
|
|
1800
|
+
"description": "The `else` keyword.\n\nSee [JSON Schema 9.2.2.3. \"else\"](https://tools.ietf.org/html/draft-handrews-json-schema-02#section-9.2.2.3).",
|
|
1801
|
+
"anyOf": [
|
|
1802
|
+
{
|
|
1803
|
+
"$ref": "#/definitions/Schema"
|
|
1804
|
+
},
|
|
1805
|
+
{
|
|
1806
|
+
"type": "null"
|
|
1807
|
+
}
|
|
1808
|
+
]
|
|
1809
|
+
},
|
|
1810
|
+
"enum": {
|
|
1811
|
+
"description": "The `enum` keyword.\n\nSee [JSON Schema Validation 6.1.2. \"enum\"](https://tools.ietf.org/html/draft-handrews-json-schema-validation-02#section-6.1.2)",
|
|
1812
|
+
"type": [
|
|
1813
|
+
"array",
|
|
1814
|
+
"null"
|
|
1815
|
+
],
|
|
1816
|
+
"items": true
|
|
1817
|
+
},
|
|
1818
|
+
"examples": {
|
|
1819
|
+
"description": "The `examples` keyword.\n\nSee [JSON Schema Validation 9.5. \"examples\"](https://tools.ietf.org/html/draft-handrews-json-schema-validation-02#section-9.5).",
|
|
1820
|
+
"type": "array",
|
|
1821
|
+
"items": true
|
|
1822
|
+
},
|
|
1823
|
+
"exclusiveMaximum": {
|
|
1824
|
+
"description": "The `exclusiveMaximum` keyword.\n\nSee [JSON Schema Validation 6.2.3. \"exclusiveMaximum\"](https://tools.ietf.org/html/draft-handrews-json-schema-validation-02#section-6.2.3).",
|
|
1825
|
+
"type": [
|
|
1826
|
+
"number",
|
|
1827
|
+
"null"
|
|
1828
|
+
],
|
|
1829
|
+
"format": "double"
|
|
1830
|
+
},
|
|
1831
|
+
"exclusiveMinimum": {
|
|
1832
|
+
"description": "The `exclusiveMinimum` keyword.\n\nSee [JSON Schema Validation 6.2.5. \"exclusiveMinimum\"](https://tools.ietf.org/html/draft-handrews-json-schema-validation-02#section-6.2.5).",
|
|
1833
|
+
"type": [
|
|
1834
|
+
"number",
|
|
1835
|
+
"null"
|
|
1836
|
+
],
|
|
1837
|
+
"format": "double"
|
|
1838
|
+
},
|
|
1839
|
+
"format": {
|
|
1840
|
+
"description": "The `format` keyword.\n\nSee [JSON Schema Validation 7. A Vocabulary for Semantic Content With \"format\"](https://tools.ietf.org/html/draft-handrews-json-schema-validation-02#section-7).",
|
|
1841
|
+
"type": [
|
|
1842
|
+
"string",
|
|
1843
|
+
"null"
|
|
1844
|
+
]
|
|
1845
|
+
},
|
|
1846
|
+
"if": {
|
|
1847
|
+
"description": "The `if` keyword.\n\nSee [JSON Schema 9.2.2.1. \"if\"](https://tools.ietf.org/html/draft-handrews-json-schema-02#section-9.2.2.1).",
|
|
1848
|
+
"anyOf": [
|
|
1849
|
+
{
|
|
1850
|
+
"$ref": "#/definitions/Schema"
|
|
1851
|
+
},
|
|
1852
|
+
{
|
|
1853
|
+
"type": "null"
|
|
1854
|
+
}
|
|
1855
|
+
]
|
|
1856
|
+
},
|
|
1857
|
+
"items": {
|
|
1858
|
+
"description": "The `items` keyword.\n\nSee [JSON Schema 9.3.1.1. \"items\"](https://tools.ietf.org/html/draft-handrews-json-schema-02#section-9.3.1.1).",
|
|
1859
|
+
"anyOf": [
|
|
1860
|
+
{
|
|
1861
|
+
"$ref": "#/definitions/SingleOrVec_for_Schema"
|
|
1862
|
+
},
|
|
1863
|
+
{
|
|
1864
|
+
"type": "null"
|
|
1865
|
+
}
|
|
1866
|
+
]
|
|
1867
|
+
},
|
|
1868
|
+
"maxItems": {
|
|
1869
|
+
"description": "The `maxItems` keyword.\n\nSee [JSON Schema Validation 6.4.1. \"maxItems\"](https://tools.ietf.org/html/draft-handrews-json-schema-validation-02#section-6.4.1).",
|
|
1870
|
+
"type": [
|
|
1871
|
+
"integer",
|
|
1872
|
+
"null"
|
|
1873
|
+
],
|
|
1874
|
+
"format": "uint32",
|
|
1875
|
+
"minimum": 0.0
|
|
1876
|
+
},
|
|
1877
|
+
"maxLength": {
|
|
1878
|
+
"description": "The `maxLength` keyword.\n\nSee [JSON Schema Validation 6.3.1. \"maxLength\"](https://tools.ietf.org/html/draft-handrews-json-schema-validation-02#section-6.3.1).",
|
|
1879
|
+
"type": [
|
|
1880
|
+
"integer",
|
|
1881
|
+
"null"
|
|
1882
|
+
],
|
|
1883
|
+
"format": "uint32",
|
|
1884
|
+
"minimum": 0.0
|
|
1885
|
+
},
|
|
1886
|
+
"maxProperties": {
|
|
1887
|
+
"description": "The `maxProperties` keyword.\n\nSee [JSON Schema Validation 6.5.1. \"maxProperties\"](https://tools.ietf.org/html/draft-handrews-json-schema-validation-02#section-6.5.1).",
|
|
1888
|
+
"type": [
|
|
1889
|
+
"integer",
|
|
1890
|
+
"null"
|
|
1891
|
+
],
|
|
1892
|
+
"format": "uint32",
|
|
1893
|
+
"minimum": 0.0
|
|
1894
|
+
},
|
|
1895
|
+
"maximum": {
|
|
1896
|
+
"description": "The `maximum` keyword.\n\nSee [JSON Schema Validation 6.2.2. \"maximum\"](https://tools.ietf.org/html/draft-handrews-json-schema-validation-02#section-6.2.2).",
|
|
1897
|
+
"type": [
|
|
1898
|
+
"number",
|
|
1899
|
+
"null"
|
|
1900
|
+
],
|
|
1901
|
+
"format": "double"
|
|
1902
|
+
},
|
|
1903
|
+
"minItems": {
|
|
1904
|
+
"description": "The `minItems` keyword.\n\nSee [JSON Schema Validation 6.4.2. \"minItems\"](https://tools.ietf.org/html/draft-handrews-json-schema-validation-02#section-6.4.2).",
|
|
1905
|
+
"type": [
|
|
1906
|
+
"integer",
|
|
1907
|
+
"null"
|
|
1908
|
+
],
|
|
1909
|
+
"format": "uint32",
|
|
1910
|
+
"minimum": 0.0
|
|
1911
|
+
},
|
|
1912
|
+
"minLength": {
|
|
1913
|
+
"description": "The `minLength` keyword.\n\nSee [JSON Schema Validation 6.3.2. \"minLength\"](https://tools.ietf.org/html/draft-handrews-json-schema-validation-02#section-6.3.2).",
|
|
1914
|
+
"type": [
|
|
1915
|
+
"integer",
|
|
1916
|
+
"null"
|
|
1917
|
+
],
|
|
1918
|
+
"format": "uint32",
|
|
1919
|
+
"minimum": 0.0
|
|
1920
|
+
},
|
|
1921
|
+
"minProperties": {
|
|
1922
|
+
"description": "The `minProperties` keyword.\n\nSee [JSON Schema Validation 6.5.2. \"minProperties\"](https://tools.ietf.org/html/draft-handrews-json-schema-validation-02#section-6.5.2).",
|
|
1923
|
+
"type": [
|
|
1924
|
+
"integer",
|
|
1925
|
+
"null"
|
|
1926
|
+
],
|
|
1927
|
+
"format": "uint32",
|
|
1928
|
+
"minimum": 0.0
|
|
1929
|
+
},
|
|
1930
|
+
"minimum": {
|
|
1931
|
+
"description": "The `minimum` keyword.\n\nSee [JSON Schema Validation 6.2.4. \"minimum\"](https://tools.ietf.org/html/draft-handrews-json-schema-validation-02#section-6.2.4).",
|
|
1932
|
+
"type": [
|
|
1933
|
+
"number",
|
|
1934
|
+
"null"
|
|
1935
|
+
],
|
|
1936
|
+
"format": "double"
|
|
1937
|
+
},
|
|
1938
|
+
"multipleOf": {
|
|
1939
|
+
"description": "The `multipleOf` keyword.\n\nSee [JSON Schema Validation 6.2.1. \"multipleOf\"](https://tools.ietf.org/html/draft-handrews-json-schema-validation-02#section-6.2.1).",
|
|
1940
|
+
"type": [
|
|
1941
|
+
"number",
|
|
1942
|
+
"null"
|
|
1943
|
+
],
|
|
1944
|
+
"format": "double"
|
|
1945
|
+
},
|
|
1946
|
+
"not": {
|
|
1947
|
+
"description": "The `not` keyword.\n\nSee [JSON Schema 9.2.1.4. \"not\"](https://tools.ietf.org/html/draft-handrews-json-schema-02#section-9.2.1.4).",
|
|
1948
|
+
"anyOf": [
|
|
1949
|
+
{
|
|
1950
|
+
"$ref": "#/definitions/Schema"
|
|
1951
|
+
},
|
|
1952
|
+
{
|
|
1953
|
+
"type": "null"
|
|
1954
|
+
}
|
|
1955
|
+
]
|
|
1956
|
+
},
|
|
1957
|
+
"oneOf": {
|
|
1958
|
+
"description": "The `oneOf` keyword.\n\nSee [JSON Schema 9.2.1.3. \"oneOf\"](https://tools.ietf.org/html/draft-handrews-json-schema-02#section-9.2.1.3).",
|
|
1959
|
+
"type": [
|
|
1960
|
+
"array",
|
|
1961
|
+
"null"
|
|
1962
|
+
],
|
|
1963
|
+
"items": {
|
|
1964
|
+
"$ref": "#/definitions/Schema"
|
|
1965
|
+
}
|
|
1966
|
+
},
|
|
1967
|
+
"pattern": {
|
|
1968
|
+
"description": "The `pattern` keyword.\n\nSee [JSON Schema Validation 6.3.3. \"pattern\"](https://tools.ietf.org/html/draft-handrews-json-schema-validation-02#section-6.3.3).",
|
|
1969
|
+
"type": [
|
|
1970
|
+
"string",
|
|
1971
|
+
"null"
|
|
1972
|
+
]
|
|
1973
|
+
},
|
|
1974
|
+
"patternProperties": {
|
|
1975
|
+
"description": "The `patternProperties` keyword.\n\nSee [JSON Schema 9.3.2.2. \"patternProperties\"](https://tools.ietf.org/html/draft-handrews-json-schema-02#section-9.3.2.2).",
|
|
1976
|
+
"type": "object",
|
|
1977
|
+
"additionalProperties": {
|
|
1978
|
+
"$ref": "#/definitions/Schema"
|
|
1979
|
+
}
|
|
1980
|
+
},
|
|
1981
|
+
"properties": {
|
|
1982
|
+
"description": "The `properties` keyword.\n\nSee [JSON Schema 9.3.2.1. \"properties\"](https://tools.ietf.org/html/draft-handrews-json-schema-02#section-9.3.2.1).",
|
|
1983
|
+
"type": "object",
|
|
1984
|
+
"additionalProperties": {
|
|
1985
|
+
"$ref": "#/definitions/Schema"
|
|
1986
|
+
}
|
|
1987
|
+
},
|
|
1988
|
+
"propertyNames": {
|
|
1989
|
+
"description": "The `propertyNames` keyword.\n\nSee [JSON Schema 9.3.2.5. \"propertyNames\"](https://tools.ietf.org/html/draft-handrews-json-schema-02#section-9.3.2.5).",
|
|
1990
|
+
"anyOf": [
|
|
1991
|
+
{
|
|
1992
|
+
"$ref": "#/definitions/Schema"
|
|
1993
|
+
},
|
|
1994
|
+
{
|
|
1995
|
+
"type": "null"
|
|
1996
|
+
}
|
|
1997
|
+
]
|
|
1998
|
+
},
|
|
1999
|
+
"readOnly": {
|
|
2000
|
+
"description": "The `readOnly` keyword.\n\nSee [JSON Schema Validation 9.4. \"readOnly\" and \"writeOnly\"](https://tools.ietf.org/html/draft-handrews-json-schema-validation-02#section-9.4).",
|
|
2001
|
+
"type": "boolean"
|
|
2002
|
+
},
|
|
2003
|
+
"required": {
|
|
2004
|
+
"description": "The `required` keyword.\n\nSee [JSON Schema Validation 6.5.3. \"required\"](https://tools.ietf.org/html/draft-handrews-json-schema-validation-02#section-6.5.3).",
|
|
2005
|
+
"type": "array",
|
|
2006
|
+
"items": {
|
|
2007
|
+
"type": "string"
|
|
2008
|
+
},
|
|
2009
|
+
"uniqueItems": true
|
|
2010
|
+
},
|
|
2011
|
+
"then": {
|
|
2012
|
+
"description": "The `then` keyword.\n\nSee [JSON Schema 9.2.2.2. \"then\"](https://tools.ietf.org/html/draft-handrews-json-schema-02#section-9.2.2.2).",
|
|
2013
|
+
"anyOf": [
|
|
2014
|
+
{
|
|
2015
|
+
"$ref": "#/definitions/Schema"
|
|
2016
|
+
},
|
|
2017
|
+
{
|
|
2018
|
+
"type": "null"
|
|
2019
|
+
}
|
|
2020
|
+
]
|
|
2021
|
+
},
|
|
2022
|
+
"title": {
|
|
2023
|
+
"description": "The `title` keyword.\n\nSee [JSON Schema Validation 9.1. \"title\" and \"description\"](https://tools.ietf.org/html/draft-handrews-json-schema-validation-02#section-9.1).",
|
|
2024
|
+
"type": [
|
|
2025
|
+
"string",
|
|
2026
|
+
"null"
|
|
2027
|
+
]
|
|
2028
|
+
},
|
|
2029
|
+
"type": {
|
|
2030
|
+
"description": "The `type` keyword.\n\nSee [JSON Schema Validation 6.1.1. \"type\"](https://tools.ietf.org/html/draft-handrews-json-schema-validation-02#section-6.1.1) and [JSON Schema 4.2.1. Instance Data Model](https://tools.ietf.org/html/draft-handrews-json-schema-02#section-4.2.1).",
|
|
2031
|
+
"anyOf": [
|
|
2032
|
+
{
|
|
2033
|
+
"$ref": "#/definitions/SingleOrVec_for_InstanceType"
|
|
2034
|
+
},
|
|
2035
|
+
{
|
|
2036
|
+
"type": "null"
|
|
2037
|
+
}
|
|
2038
|
+
]
|
|
2039
|
+
},
|
|
2040
|
+
"uniqueItems": {
|
|
2041
|
+
"description": "The `uniqueItems` keyword.\n\nSee [JSON Schema Validation 6.4.3. \"uniqueItems\"](https://tools.ietf.org/html/draft-handrews-json-schema-validation-02#section-6.4.3).",
|
|
2042
|
+
"type": [
|
|
2043
|
+
"boolean",
|
|
2044
|
+
"null"
|
|
2045
|
+
]
|
|
2046
|
+
},
|
|
2047
|
+
"writeOnly": {
|
|
2048
|
+
"description": "The `writeOnly` keyword.\n\nSee [JSON Schema Validation 9.4. \"readOnly\" and \"writeOnly\"](https://tools.ietf.org/html/draft-handrews-json-schema-validation-02#section-9.4).",
|
|
2049
|
+
"type": "boolean"
|
|
2050
|
+
}
|
|
2051
|
+
},
|
|
2052
|
+
"additionalProperties": true
|
|
2053
|
+
},
|
|
2054
|
+
"SemanticProbeConfig": {
|
|
2055
|
+
"description": "How the semantic probe picks its targets: sweep everything, or probe a list of named topics.\n\n```yaml semantic: true # every topic, measure auto-picked from its base view semantic: # only these topics - topic: fruit_business measures: # omit to auto-pick one, as the sweep does - fruits.total_count - fruits.avg_price - topic: orders ```\n\nNaming topics is the cheaper mode and the one to reach for on a real warehouse: the sweep's cost scales with *every* topic's data volume, while a named list is a bill you chose. Explicit `measures` also pin the probe to columns you know are small, instead of whatever the base view lists first.\n\n`apps` takes the same `bool | [targets]` shape — see [`AppsProbeConfig`].",
|
|
2056
|
+
"anyOf": [
|
|
2057
|
+
{
|
|
2058
|
+
"description": "`semantic: true|false` — sweep every topic, or run nothing.",
|
|
2059
|
+
"type": "boolean"
|
|
2060
|
+
},
|
|
2061
|
+
{
|
|
2062
|
+
"description": "`semantic: [ { topic: … }, … ]` — probe only the named topics.",
|
|
2063
|
+
"type": "array",
|
|
2064
|
+
"items": {
|
|
2065
|
+
"$ref": "#/definitions/SemanticProbeTarget"
|
|
2066
|
+
}
|
|
2067
|
+
}
|
|
2068
|
+
]
|
|
2069
|
+
},
|
|
2070
|
+
"SemanticProbeTarget": {
|
|
2071
|
+
"description": "One named topic to probe, and which of its measures to probe it with.",
|
|
2072
|
+
"type": "object",
|
|
2073
|
+
"required": [
|
|
2074
|
+
"topic"
|
|
2075
|
+
],
|
|
2076
|
+
"properties": {
|
|
2077
|
+
"measures": {
|
|
2078
|
+
"description": "Fully-qualified `view.measure` references to query. Empty → the same auto-pick the sweep uses (first measure on the base view).\n\nAll of a topic's measures go into **one** query rather than one query each: it is a single warehouse round-trip instead of N, and it exercises the topic's join graph and fan-out protection, which per-measure queries never would. The trade is attribution — the verdict names the topic, and the failing measure shows up in the error text.",
|
|
2079
|
+
"type": "array",
|
|
2080
|
+
"items": {
|
|
2081
|
+
"type": "string"
|
|
2082
|
+
}
|
|
2083
|
+
},
|
|
2084
|
+
"topic": {
|
|
2085
|
+
"description": "The topic's `name`, as declared in its `.topic.yml`.",
|
|
2086
|
+
"type": "string"
|
|
2087
|
+
}
|
|
2088
|
+
},
|
|
2089
|
+
"additionalProperties": false
|
|
2090
|
+
},
|
|
2091
|
+
"SingleOrVec_for_InstanceType": {
|
|
2092
|
+
"description": "A type which can be serialized as a single item, or multiple items.\n\nIn some contexts, a `Single` may be semantically distinct from a `Vec` containing only item.",
|
|
2093
|
+
"anyOf": [
|
|
2094
|
+
{
|
|
2095
|
+
"$ref": "#/definitions/InstanceType"
|
|
2096
|
+
},
|
|
2097
|
+
{
|
|
2098
|
+
"type": "array",
|
|
2099
|
+
"items": {
|
|
2100
|
+
"$ref": "#/definitions/InstanceType"
|
|
2101
|
+
}
|
|
2102
|
+
}
|
|
2103
|
+
]
|
|
2104
|
+
},
|
|
2105
|
+
"SingleOrVec_for_Schema": {
|
|
2106
|
+
"description": "A type which can be serialized as a single item, or multiple items.\n\nIn some contexts, a `Single` may be semantically distinct from a `Vec` containing only item.",
|
|
2107
|
+
"anyOf": [
|
|
2108
|
+
{
|
|
2109
|
+
"$ref": "#/definitions/Schema"
|
|
2110
|
+
},
|
|
2111
|
+
{
|
|
2112
|
+
"type": "array",
|
|
2113
|
+
"items": {
|
|
2114
|
+
"$ref": "#/definitions/Schema"
|
|
2115
|
+
}
|
|
2116
|
+
}
|
|
2117
|
+
]
|
|
2118
|
+
},
|
|
2119
|
+
"SmokeAgentProbe": {
|
|
2120
|
+
"description": "The agent round-trip probe: which agent to ask, and what to ask it.",
|
|
2121
|
+
"type": "object",
|
|
2122
|
+
"required": [
|
|
2123
|
+
"agent_ref",
|
|
2124
|
+
"prompt"
|
|
2125
|
+
],
|
|
2126
|
+
"properties": {
|
|
2127
|
+
"agent_ref": {
|
|
2128
|
+
"description": "Workspace-relative path to the agent config, e.g. `agents/analytics.agentic.yml`.",
|
|
2129
|
+
"type": "string"
|
|
2130
|
+
},
|
|
2131
|
+
"name": {
|
|
2132
|
+
"description": "Label for this probe's verdict. Absent → the `agent_ref`.\n\nWorth setting once you ask one agent several questions: the verdict's check id is `agent:<label>`, so same-`agent_ref` probes would otherwise be told apart only by the `#2` suffix `resolved_agents` appends.",
|
|
2133
|
+
"type": [
|
|
2134
|
+
"string",
|
|
2135
|
+
"null"
|
|
2136
|
+
]
|
|
2137
|
+
},
|
|
2138
|
+
"prompt": {
|
|
2139
|
+
"description": "The question to ask. Any non-error answer passes — the probe checks that the pipeline, the LLM key, and SQL generation all work, not that the answer is correct.",
|
|
2140
|
+
"type": "string"
|
|
2141
|
+
}
|
|
2142
|
+
},
|
|
2143
|
+
"additionalProperties": false
|
|
2144
|
+
},
|
|
2145
|
+
"SmokeTestConfig": {
|
|
2146
|
+
"description": "Which probes the workspace smoke test runs, and how often.\n\n**Only `connections` defaults on**, and the whole block defaults on when absent — so a workspace that opted into `health_check:` gets a cheap credential check for free (nothing here runs for one that didn't: the smoke run is gated inside an eval pass). The other three are opt-in even then, because they are not cheap, and the reason is not obvious from their descriptions:\n\n* `connections` — `SELECT 1`. Scans zero bytes, so it is free on a bytes-billed warehouse (BigQuery on-demand, Athena). Caveat: on Snowflake it *resumes* a suspended warehouse, which bills a 60-second minimum. At the 6h default that is four wake-ups a day. * `semantic` — one measure query per topic. `SUM(x)` over an unpartitioned fact table reads the whole column; a `LIMIT` cannot shrink an aggregate's scan. Cost scales with your *data volume*, not your topic count, and on a bytes-billed warehouse it is by far the most expensive probe here. * `apps` — every task of every `.app.yml`; a superset of `semantic`. * `agent` — a real LLM round-trip, plus whatever SQL the agent decides to run.",
|
|
2147
|
+
"type": "object",
|
|
2148
|
+
"properties": {
|
|
2149
|
+
"agent": {
|
|
2150
|
+
"description": "Ask an agentic agent a fixed question and assert it answers. Absent → the probe is skipped. Costs tokens on every smoke run.\n\nSingular back-compat spelling for a single probe; prefer `agents:`. Both may be set, and [`SmokeTestConfig::resolved_agents`] runs the union.",
|
|
2151
|
+
"anyOf": [
|
|
2152
|
+
{
|
|
2153
|
+
"$ref": "#/definitions/SmokeAgentProbe"
|
|
2154
|
+
},
|
|
2155
|
+
{
|
|
2156
|
+
"type": "null"
|
|
2157
|
+
}
|
|
2158
|
+
]
|
|
2159
|
+
},
|
|
2160
|
+
"agents": {
|
|
2161
|
+
"description": "Ask several agents, or the same agent several questions. Each entry is a separate probe with its own verdict; every one costs tokens on every smoke run.",
|
|
2162
|
+
"type": "array",
|
|
2163
|
+
"items": {
|
|
2164
|
+
"$ref": "#/definitions/SmokeAgentProbe"
|
|
2165
|
+
}
|
|
2166
|
+
},
|
|
2167
|
+
"apps": {
|
|
2168
|
+
"description": "Run every task of every `.app.yml`. Defaults false — an app can fan out into many warehouse queries.\n\n`apps: true` runs every app; an `{ include: [...] }` block runs only the apps it names. See [`AppsProbeConfig`].",
|
|
2169
|
+
"default": false,
|
|
2170
|
+
"allOf": [
|
|
2171
|
+
{
|
|
2172
|
+
"$ref": "#/definitions/AppsProbeConfig"
|
|
2173
|
+
}
|
|
2174
|
+
]
|
|
2175
|
+
},
|
|
2176
|
+
"connections": {
|
|
2177
|
+
"description": "`SELECT 1` against every database in `databases:`. Defaults **true** — the one probe cheap enough to run unasked.",
|
|
2178
|
+
"default": true,
|
|
2179
|
+
"type": "boolean"
|
|
2180
|
+
},
|
|
2181
|
+
"enabled": {
|
|
2182
|
+
"description": "When false, no probes run and the dimension reads Healthy.",
|
|
2183
|
+
"default": true,
|
|
2184
|
+
"type": "boolean"
|
|
2185
|
+
},
|
|
2186
|
+
"interval": {
|
|
2187
|
+
"description": "Smoke cadence as a humantime duration (e.g. `\"6h\"`, `\"1d\"`). Absent → 6h. Clamped to `[10m, 7d]`; unparseable falls back to the default. Because the smoke run is gated inside an eval pass, a cadence below the `health_check` interval simply means \"every pass\".",
|
|
2188
|
+
"type": [
|
|
2189
|
+
"string",
|
|
2190
|
+
"null"
|
|
2191
|
+
]
|
|
2192
|
+
},
|
|
2193
|
+
"max_targets": {
|
|
2194
|
+
"description": "Per-probe-kind cap on how many targets to exercise. Absent → 25.",
|
|
2195
|
+
"type": [
|
|
2196
|
+
"integer",
|
|
2197
|
+
"null"
|
|
2198
|
+
],
|
|
2199
|
+
"format": "uint",
|
|
2200
|
+
"minimum": 0.0
|
|
2201
|
+
},
|
|
2202
|
+
"semantic": {
|
|
2203
|
+
"description": "One trivial measure query per `.topic.yml`, end to end through the semantic model to the warehouse. Defaults **false**: it reads the full measure column on every run, so enabling it against a large unpartitioned fact table is a real recurring warehouse bill.\n\n`semantic: true` sweeps every topic with an auto-picked measure; a `{ topics: [...] }` block probes only what it names. See [`SemanticProbeConfig`].",
|
|
2204
|
+
"default": false,
|
|
2205
|
+
"allOf": [
|
|
2206
|
+
{
|
|
2207
|
+
"$ref": "#/definitions/SemanticProbeConfig"
|
|
2208
|
+
}
|
|
2209
|
+
]
|
|
2210
|
+
}
|
|
2211
|
+
},
|
|
2212
|
+
"additionalProperties": false
|
|
2213
|
+
}
|
|
2214
|
+
}
|
|
2215
|
+
}
|