@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,406 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
3
|
+
"title": "AgentConfig",
|
|
4
|
+
"description": "Top-level agent configuration.",
|
|
5
|
+
"type": "object",
|
|
6
|
+
"properties": {
|
|
7
|
+
"context": {
|
|
8
|
+
"description": "Glob patterns for context files (`.view.yml`, `.topic.yml`, `.sql`, `.md`). Resolved relative to the directory containing the YAML file.",
|
|
9
|
+
"default": [],
|
|
10
|
+
"type": "array",
|
|
11
|
+
"items": {
|
|
12
|
+
"type": "string"
|
|
13
|
+
}
|
|
14
|
+
},
|
|
15
|
+
"databases": {
|
|
16
|
+
"description": "Database names from config.yml to use as connectors.\n\nEach string is the `name:` of a database entry in the project's `config.yml`. The HTTP layer resolves these names to live connectors (via [`BuildContext`]) so that connection details are defined once and reused across agents. All database types supported by Oxy (DuckDB, Postgres, BigQuery, Snowflake, ClickHouse, …) can be listed here.\n\n```yaml databases: - local - analytics_db ```",
|
|
17
|
+
"default": [],
|
|
18
|
+
"type": "array",
|
|
19
|
+
"items": {
|
|
20
|
+
"type": "string"
|
|
21
|
+
}
|
|
22
|
+
},
|
|
23
|
+
"instructions": {
|
|
24
|
+
"description": "Global instructions injected into every LLM call.",
|
|
25
|
+
"default": null,
|
|
26
|
+
"type": [
|
|
27
|
+
"string",
|
|
28
|
+
"null"
|
|
29
|
+
]
|
|
30
|
+
},
|
|
31
|
+
"llm": {
|
|
32
|
+
"$ref": "#/definitions/LlmConfigYaml"
|
|
33
|
+
},
|
|
34
|
+
"semantic_engine": {
|
|
35
|
+
"description": "Optional vendor semantic engine configuration.\n\nWhen absent, the solver routes exclusively through the internal semantic model and LLM paths (identical to today's behaviour).",
|
|
36
|
+
"anyOf": [
|
|
37
|
+
{
|
|
38
|
+
"$ref": "#/definitions/SemanticEngineConfig"
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
"type": "null"
|
|
42
|
+
}
|
|
43
|
+
]
|
|
44
|
+
},
|
|
45
|
+
"states": {
|
|
46
|
+
"description": "Per-state overrides.",
|
|
47
|
+
"type": "object",
|
|
48
|
+
"additionalProperties": {
|
|
49
|
+
"$ref": "#/definitions/StateConfig"
|
|
50
|
+
}
|
|
51
|
+
},
|
|
52
|
+
"thinking": {
|
|
53
|
+
"description": "Global thinking/reasoning config applied to all pipeline states.\n\nCan be overridden per-state via the `states:` section.\n\n```yaml thinking: adaptive # shorthand # — or — thinking: effort: medium # low | medium | high | xhigh | max ```\n\n`{ budget_tokens: N }` is also accepted, but only Claude 4.6 and earlier take it — 4.7+ rejects that form, and `effort` is the graded control there. Prefer `effort` unless you need a hard ceiling on an older model.",
|
|
54
|
+
"anyOf": [
|
|
55
|
+
{
|
|
56
|
+
"$ref": "#/definitions/ThinkingConfigYaml"
|
|
57
|
+
},
|
|
58
|
+
{
|
|
59
|
+
"type": "null"
|
|
60
|
+
}
|
|
61
|
+
]
|
|
62
|
+
},
|
|
63
|
+
"timezone": {
|
|
64
|
+
"description": "IANA timezone (e.g. `America/Los_Angeles`) used to resolve the Today-is date hint and relative dates like `yesterday` or `last week`. Defaults to UTC when unset.",
|
|
65
|
+
"default": null,
|
|
66
|
+
"type": [
|
|
67
|
+
"string",
|
|
68
|
+
"null"
|
|
69
|
+
]
|
|
70
|
+
},
|
|
71
|
+
"validation": {
|
|
72
|
+
"description": "Validation rule configuration.\n\nWhen absent, all built-in rules run with their default parameters. Use this section to disable specific rules or tune parameters such as the outlier detection threshold:\n\n```yaml validation: rules: solved: - name: outlier_detection enabled: true threshold_sigma: 3.0 min_rows: 6 ```",
|
|
73
|
+
"default": null,
|
|
74
|
+
"anyOf": [
|
|
75
|
+
{
|
|
76
|
+
"$ref": "#/definitions/ValidationConfig"
|
|
77
|
+
},
|
|
78
|
+
{
|
|
79
|
+
"type": "null"
|
|
80
|
+
}
|
|
81
|
+
]
|
|
82
|
+
}
|
|
83
|
+
},
|
|
84
|
+
"definitions": {
|
|
85
|
+
"ExtendedThinkingConfigYaml": {
|
|
86
|
+
"description": "Extended thinking mode preset configuration.\n\nOverrides the default model and/or thinking config when the user activates \"extended thinking\" mode from the UI.",
|
|
87
|
+
"type": "object",
|
|
88
|
+
"properties": {
|
|
89
|
+
"model": {
|
|
90
|
+
"description": "Model ID override for extended thinking mode.",
|
|
91
|
+
"default": null,
|
|
92
|
+
"type": [
|
|
93
|
+
"string",
|
|
94
|
+
"null"
|
|
95
|
+
]
|
|
96
|
+
},
|
|
97
|
+
"thinking": {
|
|
98
|
+
"description": "Thinking config override for extended thinking mode.",
|
|
99
|
+
"anyOf": [
|
|
100
|
+
{
|
|
101
|
+
"$ref": "#/definitions/ThinkingConfigYaml"
|
|
102
|
+
},
|
|
103
|
+
{
|
|
104
|
+
"type": "null"
|
|
105
|
+
}
|
|
106
|
+
]
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
},
|
|
110
|
+
"LlmConfigYaml": {
|
|
111
|
+
"type": "object",
|
|
112
|
+
"properties": {
|
|
113
|
+
"api_key": {
|
|
114
|
+
"description": "API key. Falls back to `ANTHROPIC_API_KEY` (Anthropic) or `OPENAI_API_KEY` (OpenAi / OpenAiCompat) environment variables.",
|
|
115
|
+
"default": null,
|
|
116
|
+
"type": [
|
|
117
|
+
"string",
|
|
118
|
+
"null"
|
|
119
|
+
]
|
|
120
|
+
},
|
|
121
|
+
"base_url": {
|
|
122
|
+
"description": "Base URL override.\n\n- Anthropic: proxy URL (default: `https://api.anthropic.com/v1/messages`) - OpenAi: Responses API base (default: `https://api.openai.com/v1/responses`) - OpenAiCompat: local server root, e.g. `http://localhost:11434/v1`",
|
|
123
|
+
"default": null,
|
|
124
|
+
"type": [
|
|
125
|
+
"string",
|
|
126
|
+
"null"
|
|
127
|
+
]
|
|
128
|
+
},
|
|
129
|
+
"extended_thinking": {
|
|
130
|
+
"description": "\"Extended thinking\" mode preset: an alternative model + thinking configuration activated at runtime via the UI toggle.\n\n```yaml llm: thinking: effort:low extended_thinking: model: gpt-5.4 thinking: effort:medium ```",
|
|
131
|
+
"anyOf": [
|
|
132
|
+
{
|
|
133
|
+
"$ref": "#/definitions/ExtendedThinkingConfigYaml"
|
|
134
|
+
},
|
|
135
|
+
{
|
|
136
|
+
"type": "null"
|
|
137
|
+
}
|
|
138
|
+
]
|
|
139
|
+
},
|
|
140
|
+
"max_tokens": {
|
|
141
|
+
"description": "Maximum output tokens per call. Defaults to 4096.",
|
|
142
|
+
"default": null,
|
|
143
|
+
"type": [
|
|
144
|
+
"integer",
|
|
145
|
+
"null"
|
|
146
|
+
],
|
|
147
|
+
"format": "uint32",
|
|
148
|
+
"minimum": 0.0
|
|
149
|
+
},
|
|
150
|
+
"model": {
|
|
151
|
+
"description": "Model ID. Overrides the `model_ref` resolved from `ref`.",
|
|
152
|
+
"default": null,
|
|
153
|
+
"type": [
|
|
154
|
+
"string",
|
|
155
|
+
"null"
|
|
156
|
+
]
|
|
157
|
+
},
|
|
158
|
+
"ref": {
|
|
159
|
+
"description": "Named model reference from the project's `config.yml`.\n\nWhen set, the vendor, api_key, and base_url of that model entry are used as defaults and any other fields in this section override them.\n\n```yaml llm: ref: openai-4o-mini # model name from config.yml model: gpt-5.4 # override the model_ref only ```",
|
|
160
|
+
"default": null,
|
|
161
|
+
"type": [
|
|
162
|
+
"string",
|
|
163
|
+
"null"
|
|
164
|
+
]
|
|
165
|
+
},
|
|
166
|
+
"thinking": {
|
|
167
|
+
"description": "Default thinking/reasoning config for all pipeline states.\n\nTakes precedence over the top-level `thinking:` field on `AgentConfig`.\n\n```yaml llm: thinking: adaptive ```",
|
|
168
|
+
"anyOf": [
|
|
169
|
+
{
|
|
170
|
+
"$ref": "#/definitions/ThinkingConfigYaml"
|
|
171
|
+
},
|
|
172
|
+
{
|
|
173
|
+
"type": "null"
|
|
174
|
+
}
|
|
175
|
+
]
|
|
176
|
+
},
|
|
177
|
+
"vendor": {
|
|
178
|
+
"description": "Backend vendor. Defaults to [`LlmVendor::Anthropic`] when neither this field nor `ref` supplies one.\n\nOverrides the vendor resolved from `ref` when both are set — which is what lets a `config.yml` model supply the managed `key_var` secret and `api_url` while the agent redirects the call to a different wire protocol:\n\n```yaml llm: ref: o4-mini # inherits key_var secret + api_url vendor: open_ai_compat # …but talk /chat/completions, not /responses ```\n\n`Option` rather than a defaulted `LlmVendor` on purpose: the override above is only expressible if \"user wrote `anthropic`\" is distinguishable from \"field absent\". While this was a bare `LlmVendor` it silently defaulted, so the ref's vendor always won and this field did nothing whenever `ref` was set.",
|
|
179
|
+
"anyOf": [
|
|
180
|
+
{
|
|
181
|
+
"$ref": "#/definitions/LlmVendor"
|
|
182
|
+
},
|
|
183
|
+
{
|
|
184
|
+
"type": "null"
|
|
185
|
+
}
|
|
186
|
+
]
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
},
|
|
190
|
+
"LlmVendor": {
|
|
191
|
+
"description": "LLM vendor / backend selector.\n\n```yaml llm: vendor: open_ai_compat # Ollama, vLLM, LM Studio, LangDock, … model: llama3.2 base_url: http://localhost:11434/v1 ```\n\n`rename_all = \"snake_case\"` derives `open_ai` / `open_ai_compat` from the variant names. The elided spellings (`openai`, `openai_compat`) are the ones people actually reach for — and were what this doc comment advertised while serde rejected them — so both are accepted as aliases.",
|
|
192
|
+
"oneOf": [
|
|
193
|
+
{
|
|
194
|
+
"description": "Anthropic Messages API (default). Uses `ANTHROPIC_API_KEY`.",
|
|
195
|
+
"type": "string",
|
|
196
|
+
"enum": [
|
|
197
|
+
"anthropic"
|
|
198
|
+
]
|
|
199
|
+
},
|
|
200
|
+
{
|
|
201
|
+
"description": "OpenAI Responses API (`/v1/responses`). Uses `OPENAI_API_KEY`.\n\nNote this is the **Responses** API, not Chat Completions — third-party OpenAI-compatible gateways that only implement `/chat/completions` (LangDock, many EU/self-hosted proxies) will 404 here. Use [`LlmVendor::OpenAiCompat`] for those.",
|
|
202
|
+
"type": "string",
|
|
203
|
+
"enum": [
|
|
204
|
+
"open_ai"
|
|
205
|
+
]
|
|
206
|
+
},
|
|
207
|
+
{
|
|
208
|
+
"description": "OpenAI-compatible Chat Completions API (`/v1/chat/completions`). Suitable for Ollama, vLLM, LM Studio, LangDock, and similar self-hosted or third-party gateways. Uses `OPENAI_API_KEY` as fallback (or pass `api_key` directly).",
|
|
209
|
+
"type": "string",
|
|
210
|
+
"enum": [
|
|
211
|
+
"open_ai_compat"
|
|
212
|
+
]
|
|
213
|
+
}
|
|
214
|
+
]
|
|
215
|
+
},
|
|
216
|
+
"RuleEntry": {
|
|
217
|
+
"description": "One entry in a rule list.\n\nExtra TOML/YAML keys beyond `name` and `enabled` are collected into `params` via `#[serde(flatten)]`. Each rule's constructor deserialises `params` into its own typed struct using [`serde_json::from_value`].\n\n# Example YAML ```yaml - name: outlier_detection enabled: true threshold_sigma: 3.0 min_rows: 6 ```",
|
|
218
|
+
"type": "object",
|
|
219
|
+
"required": [
|
|
220
|
+
"name"
|
|
221
|
+
],
|
|
222
|
+
"properties": {
|
|
223
|
+
"enabled": {
|
|
224
|
+
"default": true,
|
|
225
|
+
"type": "boolean"
|
|
226
|
+
},
|
|
227
|
+
"name": {
|
|
228
|
+
"type": "string"
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
},
|
|
232
|
+
"RuleSetConfig": {
|
|
233
|
+
"description": "Rules grouped by pipeline stage.",
|
|
234
|
+
"type": "object",
|
|
235
|
+
"properties": {
|
|
236
|
+
"solvable": {
|
|
237
|
+
"description": "Rules applied after the **Solve** stage.",
|
|
238
|
+
"default": [],
|
|
239
|
+
"type": "array",
|
|
240
|
+
"items": {
|
|
241
|
+
"$ref": "#/definitions/RuleEntry"
|
|
242
|
+
}
|
|
243
|
+
},
|
|
244
|
+
"solved": {
|
|
245
|
+
"description": "Rules applied after the **Execute** stage.",
|
|
246
|
+
"default": [],
|
|
247
|
+
"type": "array",
|
|
248
|
+
"items": {
|
|
249
|
+
"$ref": "#/definitions/RuleEntry"
|
|
250
|
+
}
|
|
251
|
+
},
|
|
252
|
+
"specified": {
|
|
253
|
+
"description": "Rules applied after the **Specify** stage.",
|
|
254
|
+
"default": [],
|
|
255
|
+
"type": "array",
|
|
256
|
+
"items": {
|
|
257
|
+
"$ref": "#/definitions/RuleEntry"
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
},
|
|
262
|
+
"SemanticEngineConfig": {
|
|
263
|
+
"description": "Configuration for an external vendor semantic engine.\n\n```yaml semantic_engine: vendor: cube base_url: https://cube.example.com api_token: \"${CUBE_API_TOKEN}\"\n\n# — OR for Looker — semantic_engine: vendor: looker base_url: https://myco.looker.com client_id: \"${LOOKER_CLIENT_ID}\" client_secret: \"${LOOKER_CLIENT_SECRET}\" ```",
|
|
264
|
+
"type": "object",
|
|
265
|
+
"required": [
|
|
266
|
+
"base_url",
|
|
267
|
+
"vendor"
|
|
268
|
+
],
|
|
269
|
+
"properties": {
|
|
270
|
+
"api_token": {
|
|
271
|
+
"description": "API token (Cube). Supports `\"${ENV_VAR}\"` interpolation.",
|
|
272
|
+
"default": null,
|
|
273
|
+
"type": [
|
|
274
|
+
"string",
|
|
275
|
+
"null"
|
|
276
|
+
]
|
|
277
|
+
},
|
|
278
|
+
"base_url": {
|
|
279
|
+
"type": "string"
|
|
280
|
+
},
|
|
281
|
+
"client_id": {
|
|
282
|
+
"description": "OAuth client ID (Looker).",
|
|
283
|
+
"default": null,
|
|
284
|
+
"type": [
|
|
285
|
+
"string",
|
|
286
|
+
"null"
|
|
287
|
+
]
|
|
288
|
+
},
|
|
289
|
+
"client_secret": {
|
|
290
|
+
"description": "OAuth client secret (Looker).",
|
|
291
|
+
"default": null,
|
|
292
|
+
"type": [
|
|
293
|
+
"string",
|
|
294
|
+
"null"
|
|
295
|
+
]
|
|
296
|
+
},
|
|
297
|
+
"vendor": {
|
|
298
|
+
"$ref": "#/definitions/VendorKind"
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
},
|
|
302
|
+
"StateConfig": {
|
|
303
|
+
"type": "object",
|
|
304
|
+
"properties": {
|
|
305
|
+
"instructions": {
|
|
306
|
+
"description": "Additional instructions injected for this state only.",
|
|
307
|
+
"default": null,
|
|
308
|
+
"type": [
|
|
309
|
+
"string",
|
|
310
|
+
"null"
|
|
311
|
+
]
|
|
312
|
+
},
|
|
313
|
+
"max_retries": {
|
|
314
|
+
"description": "Maximum tool-use rounds before failing.",
|
|
315
|
+
"default": null,
|
|
316
|
+
"type": [
|
|
317
|
+
"integer",
|
|
318
|
+
"null"
|
|
319
|
+
],
|
|
320
|
+
"format": "uint32",
|
|
321
|
+
"minimum": 0.0
|
|
322
|
+
},
|
|
323
|
+
"model": {
|
|
324
|
+
"description": "Model ID override for this state.\n\nWhen set, this model is used instead of the global `llm.model`. The vendor, API key, and base URL from the global `llm:` section are inherited; only the model ID is replaced.\n\n```yaml states: clarifying: model: claude-haiku-4-5 # cheap model for fast triage solving: model: claude-opus-4-6 # powerful model for SQL generation ```",
|
|
325
|
+
"default": null,
|
|
326
|
+
"type": [
|
|
327
|
+
"string",
|
|
328
|
+
"null"
|
|
329
|
+
]
|
|
330
|
+
},
|
|
331
|
+
"thinking": {
|
|
332
|
+
"description": "Thinking/reasoning config for this state.",
|
|
333
|
+
"anyOf": [
|
|
334
|
+
{
|
|
335
|
+
"$ref": "#/definitions/ThinkingConfigYaml"
|
|
336
|
+
},
|
|
337
|
+
{
|
|
338
|
+
"type": "null"
|
|
339
|
+
}
|
|
340
|
+
]
|
|
341
|
+
}
|
|
342
|
+
}
|
|
343
|
+
},
|
|
344
|
+
"ThinkingConfigYaml": {
|
|
345
|
+
"description": "Thinking configuration as expressed in YAML.\n\nAccepts a shorthand string (`\"adaptive\"`, `\"disabled\"`, `\"effort:<level>\"`) or a map with either `budget_tokens` or `effort`.\n\nWhich forms a model accepts is not a preference. On Claude 4.7 and later, `budget_tokens` is rejected by the API and `effort` is the only graded control over thinking depth; on 4.6 and earlier, `budget_tokens` works and is the only way to set a hard ceiling. The provider translates a `budget_tokens` config on a model that refuses it rather than failing the request, and warns.\n\nBecause this enum is `#[serde(untagged)]`, schemars emits a JSON Schema `oneOf` with each variant represented by its structural shape (a plain string for [`ThinkingConfigYaml::Shorthand`] and an object for [`ThinkingConfigYaml::Manual`] / [`ThinkingConfigYaml::Effort`]). Serde discriminates at runtime by trying variants in declaration order, so there is no parse ambiguity. Some IDEs, however, validate each `oneOf` branch independently and may annotate a valid string with \"invalid against variant 2 / variant 3\" warnings — those are cosmetic and the file still deserializes correctly at runtime.",
|
|
346
|
+
"anyOf": [
|
|
347
|
+
{
|
|
348
|
+
"description": "Shorthand string: `\"adaptive\"`, `\"disabled\"`, or `\"effort:<level>\"` for any level below.",
|
|
349
|
+
"type": "string"
|
|
350
|
+
},
|
|
351
|
+
{
|
|
352
|
+
"description": "Explicit budget: `budget_tokens: N`.\n\nClaude 4.6 and earlier only. Claude 4.7+ removed this form; the Anthropic provider translates it to an effort level there rather than letting the request 400, and warns. Prefer `effort:` on those models.",
|
|
353
|
+
"type": "object",
|
|
354
|
+
"required": [
|
|
355
|
+
"budget_tokens"
|
|
356
|
+
],
|
|
357
|
+
"properties": {
|
|
358
|
+
"budget_tokens": {
|
|
359
|
+
"type": "integer",
|
|
360
|
+
"format": "uint32",
|
|
361
|
+
"minimum": 0.0
|
|
362
|
+
}
|
|
363
|
+
}
|
|
364
|
+
},
|
|
365
|
+
{
|
|
366
|
+
"description": "Reasoning effort: `effort: low|medium|high|xhigh|max`.\n\nOn Claude this is `output_config.effort` alongside adaptive thinking -- the only graded control over thinking depth on 4.7+. On OpenAI the top two levels clamp to `high`.",
|
|
367
|
+
"type": "object",
|
|
368
|
+
"required": [
|
|
369
|
+
"effort"
|
|
370
|
+
],
|
|
371
|
+
"properties": {
|
|
372
|
+
"effort": {
|
|
373
|
+
"type": "string"
|
|
374
|
+
}
|
|
375
|
+
}
|
|
376
|
+
}
|
|
377
|
+
]
|
|
378
|
+
},
|
|
379
|
+
"ValidationConfig": {
|
|
380
|
+
"description": "Validation section of the agent YAML config.",
|
|
381
|
+
"type": "object",
|
|
382
|
+
"properties": {
|
|
383
|
+
"rules": {
|
|
384
|
+
"default": {
|
|
385
|
+
"specified": [],
|
|
386
|
+
"solvable": [],
|
|
387
|
+
"solved": []
|
|
388
|
+
},
|
|
389
|
+
"allOf": [
|
|
390
|
+
{
|
|
391
|
+
"$ref": "#/definitions/RuleSetConfig"
|
|
392
|
+
}
|
|
393
|
+
]
|
|
394
|
+
}
|
|
395
|
+
}
|
|
396
|
+
},
|
|
397
|
+
"VendorKind": {
|
|
398
|
+
"description": "Vendor identifier for bundled semantic engine adapters.\n\nInternal to the config layer — never part of the `SemanticEngine` public API.",
|
|
399
|
+
"type": "string",
|
|
400
|
+
"enum": [
|
|
401
|
+
"cube",
|
|
402
|
+
"looker"
|
|
403
|
+
]
|
|
404
|
+
}
|
|
405
|
+
}
|
|
406
|
+
}
|