@a2uicatalog/mcp 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 +93 -0
- package/data/a2ui-state-v1.json +731 -0
- package/data/artemis-roadmap.json +341 -0
- package/data/atoms-index.json +4612 -0
- package/data/expenses-demo.json +140 -0
- package/data/spec.json +14644 -0
- package/demo.mjs +63 -0
- package/package.json +25 -0
- package/scripts/sync-data.mjs +47 -0
- package/server.mjs +235 -0
- package/test.mjs +70 -0
|
@@ -0,0 +1,731 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://a2uicatalog.ai/catalogue/a2ui-state-v1.json",
|
|
4
|
+
"catalogId": "https://a2uicatalog.ai/catalogue/a2ui-state-v1.json",
|
|
5
|
+
"title": "A2UI State & Expression Vocabulary",
|
|
6
|
+
"description": "Behavioral primitives an agent wires into a payload's state_primitives array, plus the expression ops and column render hints. A payload has three sections — state_primitives, actions, layout — and layout atoms subscribe to primitive/action outputs via wires.",
|
|
7
|
+
"instructions": "A2UI **behavioral** catalog — the companion to the visual atom catalog `a2ui-atoms-v1`. A wired surface declares `supportedCatalogIds: [a2ui-atoms-v1, a2ui-state-v1]`: atoms are the visual vocabulary, these `components` (state primitives + column render-hints) and `functions` (derived-store ops) are the behavioral one.\n\nWire syntax: `#nodeId.field` — the `#` prefix is required. Atoms in `layout` use `wire` to subscribe to a primitive/action output field.\n\nFull prose descriptions, examples, and wiring patterns: see https://a2uicatalog.ai/spec.json and the a2ui-state spec.",
|
|
8
|
+
"components": {
|
|
9
|
+
"ValueStore": {
|
|
10
|
+
"type": "object",
|
|
11
|
+
"description": "mutable named value; holds user input or transient state",
|
|
12
|
+
"allOf": [
|
|
13
|
+
{
|
|
14
|
+
"$ref": "https://a2ui.org/specification/v1_0/common_types.json#/$defs/ComponentCommon"
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
"type": "object",
|
|
18
|
+
"properties": {
|
|
19
|
+
"component": {
|
|
20
|
+
"const": "ValueStore"
|
|
21
|
+
},
|
|
22
|
+
"initialValue": {
|
|
23
|
+
"description": "any (optional, default null)"
|
|
24
|
+
}
|
|
25
|
+
},
|
|
26
|
+
"required": [
|
|
27
|
+
"component"
|
|
28
|
+
]
|
|
29
|
+
}
|
|
30
|
+
],
|
|
31
|
+
"unevaluatedProperties": false,
|
|
32
|
+
"x-readableFields": [
|
|
33
|
+
"value"
|
|
34
|
+
],
|
|
35
|
+
"x-actionTargets": [
|
|
36
|
+
"setValue"
|
|
37
|
+
]
|
|
38
|
+
},
|
|
39
|
+
"Timer": {
|
|
40
|
+
"type": "object",
|
|
41
|
+
"description": "fires a tick on a fixed interval; triggers queries or actions",
|
|
42
|
+
"allOf": [
|
|
43
|
+
{
|
|
44
|
+
"$ref": "https://a2ui.org/specification/v1_0/common_types.json#/$defs/ComponentCommon"
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
"type": "object",
|
|
48
|
+
"properties": {
|
|
49
|
+
"component": {
|
|
50
|
+
"const": "Timer"
|
|
51
|
+
},
|
|
52
|
+
"interval": {
|
|
53
|
+
"description": "integer ms, default 10000"
|
|
54
|
+
}
|
|
55
|
+
},
|
|
56
|
+
"required": [
|
|
57
|
+
"component"
|
|
58
|
+
]
|
|
59
|
+
}
|
|
60
|
+
],
|
|
61
|
+
"unevaluatedProperties": false,
|
|
62
|
+
"x-readableFields": [
|
|
63
|
+
"tick"
|
|
64
|
+
]
|
|
65
|
+
},
|
|
66
|
+
"DerivedStore": {
|
|
67
|
+
"type": "object",
|
|
68
|
+
"description": "computes augmented data from a source array client-side; no server call",
|
|
69
|
+
"allOf": [
|
|
70
|
+
{
|
|
71
|
+
"$ref": "https://a2ui.org/specification/v1_0/common_types.json#/$defs/ComponentCommon"
|
|
72
|
+
},
|
|
73
|
+
{
|
|
74
|
+
"type": "object",
|
|
75
|
+
"properties": {
|
|
76
|
+
"component": {
|
|
77
|
+
"const": "DerivedStore"
|
|
78
|
+
},
|
|
79
|
+
"from": {
|
|
80
|
+
"description": "string — source ref e.g. #incidents_query.result"
|
|
81
|
+
},
|
|
82
|
+
"expr": {
|
|
83
|
+
"description": "augment_rows — maps over source array, adds computed columns"
|
|
84
|
+
},
|
|
85
|
+
"interval": {
|
|
86
|
+
"description": "integer ms (optional) — re-run on tick; only for time-dependent ops"
|
|
87
|
+
},
|
|
88
|
+
"add": {
|
|
89
|
+
"description": "array of op definitions (see derived_store_ops)"
|
|
90
|
+
}
|
|
91
|
+
},
|
|
92
|
+
"required": [
|
|
93
|
+
"component"
|
|
94
|
+
]
|
|
95
|
+
}
|
|
96
|
+
],
|
|
97
|
+
"unevaluatedProperties": false,
|
|
98
|
+
"x-readableFields": [
|
|
99
|
+
"result"
|
|
100
|
+
]
|
|
101
|
+
},
|
|
102
|
+
"Computed": {
|
|
103
|
+
"type": "object",
|
|
104
|
+
"description": "evaluates a math expression over named numeric inputs",
|
|
105
|
+
"allOf": [
|
|
106
|
+
{
|
|
107
|
+
"$ref": "https://a2ui.org/specification/v1_0/common_types.json#/$defs/ComponentCommon"
|
|
108
|
+
},
|
|
109
|
+
{
|
|
110
|
+
"type": "object",
|
|
111
|
+
"properties": {
|
|
112
|
+
"component": {
|
|
113
|
+
"const": "Computed"
|
|
114
|
+
},
|
|
115
|
+
"expr": {
|
|
116
|
+
"description": "string — JS-safe math using named vars e.g. 'a + b'"
|
|
117
|
+
},
|
|
118
|
+
"inputs": {
|
|
119
|
+
"description": "object — { varName: '#nodeId.field' }"
|
|
120
|
+
},
|
|
121
|
+
"format": {
|
|
122
|
+
"description": "string (optional) — '0,0' / '0.0%' / 'HH:mm:ss'"
|
|
123
|
+
}
|
|
124
|
+
},
|
|
125
|
+
"required": [
|
|
126
|
+
"component"
|
|
127
|
+
]
|
|
128
|
+
}
|
|
129
|
+
],
|
|
130
|
+
"unevaluatedProperties": false,
|
|
131
|
+
"x-readableFields": [
|
|
132
|
+
"value",
|
|
133
|
+
"display"
|
|
134
|
+
]
|
|
135
|
+
},
|
|
136
|
+
"ArrayFilter": {
|
|
137
|
+
"type": "object",
|
|
138
|
+
"description": "filters a source array by case-insensitive substring match on one field",
|
|
139
|
+
"allOf": [
|
|
140
|
+
{
|
|
141
|
+
"$ref": "https://a2ui.org/specification/v1_0/common_types.json#/$defs/ComponentCommon"
|
|
142
|
+
},
|
|
143
|
+
{
|
|
144
|
+
"type": "object",
|
|
145
|
+
"properties": {
|
|
146
|
+
"component": {
|
|
147
|
+
"const": "ArrayFilter"
|
|
148
|
+
},
|
|
149
|
+
"source": {
|
|
150
|
+
"description": "array (optional) — static rows; or pushed in via wire (see wire_inputs)"
|
|
151
|
+
},
|
|
152
|
+
"filterKey": {
|
|
153
|
+
"description": "string — object field to match against (default 'label')"
|
|
154
|
+
}
|
|
155
|
+
},
|
|
156
|
+
"required": [
|
|
157
|
+
"component"
|
|
158
|
+
]
|
|
159
|
+
}
|
|
160
|
+
],
|
|
161
|
+
"unevaluatedProperties": false,
|
|
162
|
+
"x-readableFields": [
|
|
163
|
+
"output"
|
|
164
|
+
]
|
|
165
|
+
},
|
|
166
|
+
"StringValidator": {
|
|
167
|
+
"type": "object",
|
|
168
|
+
"description": "validates a string against a regex pattern",
|
|
169
|
+
"allOf": [
|
|
170
|
+
{
|
|
171
|
+
"$ref": "https://a2ui.org/specification/v1_0/common_types.json#/$defs/ComponentCommon"
|
|
172
|
+
},
|
|
173
|
+
{
|
|
174
|
+
"type": "object",
|
|
175
|
+
"properties": {
|
|
176
|
+
"component": {
|
|
177
|
+
"const": "StringValidator"
|
|
178
|
+
},
|
|
179
|
+
"source": {
|
|
180
|
+
"description": "#nodeId.value"
|
|
181
|
+
},
|
|
182
|
+
"pattern": {
|
|
183
|
+
"description": "string — regex, max 200 chars (bad/overlong pattern degrades to passthrough)"
|
|
184
|
+
},
|
|
185
|
+
"errorMessage": {
|
|
186
|
+
"description": "string — emitted on errorMessage while invalid"
|
|
187
|
+
}
|
|
188
|
+
},
|
|
189
|
+
"required": [
|
|
190
|
+
"component"
|
|
191
|
+
]
|
|
192
|
+
}
|
|
193
|
+
],
|
|
194
|
+
"unevaluatedProperties": false,
|
|
195
|
+
"x-readableFields": [
|
|
196
|
+
"isValid",
|
|
197
|
+
"isNotValid",
|
|
198
|
+
"isInvalid",
|
|
199
|
+
"errorMessage"
|
|
200
|
+
]
|
|
201
|
+
},
|
|
202
|
+
"NumericThreshold": {
|
|
203
|
+
"type": "object",
|
|
204
|
+
"description": "compares a numeric source against a threshold",
|
|
205
|
+
"allOf": [
|
|
206
|
+
{
|
|
207
|
+
"$ref": "https://a2ui.org/specification/v1_0/common_types.json#/$defs/ComponentCommon"
|
|
208
|
+
},
|
|
209
|
+
{
|
|
210
|
+
"type": "object",
|
|
211
|
+
"properties": {
|
|
212
|
+
"component": {
|
|
213
|
+
"const": "NumericThreshold"
|
|
214
|
+
},
|
|
215
|
+
"source": {
|
|
216
|
+
"description": "#nodeId.value"
|
|
217
|
+
},
|
|
218
|
+
"operator": {
|
|
219
|
+
"description": "gt | gte | lt | lte | eq (default gte)"
|
|
220
|
+
},
|
|
221
|
+
"threshold": {
|
|
222
|
+
"description": "number (default 0)"
|
|
223
|
+
}
|
|
224
|
+
},
|
|
225
|
+
"required": [
|
|
226
|
+
"component"
|
|
227
|
+
]
|
|
228
|
+
}
|
|
229
|
+
],
|
|
230
|
+
"unevaluatedProperties": false,
|
|
231
|
+
"x-readableFields": [
|
|
232
|
+
"isTriggered",
|
|
233
|
+
"isNotTriggered"
|
|
234
|
+
]
|
|
235
|
+
},
|
|
236
|
+
"StringTemplate": {
|
|
237
|
+
"type": "object",
|
|
238
|
+
"description": "string interpolation over named wire inputs — the text sibling of Computed; formatting, NOT derivation (boundary untouched)",
|
|
239
|
+
"allOf": [
|
|
240
|
+
{
|
|
241
|
+
"$ref": "https://a2ui.org/specification/v1_0/common_types.json#/$defs/ComponentCommon"
|
|
242
|
+
},
|
|
243
|
+
{
|
|
244
|
+
"type": "object",
|
|
245
|
+
"properties": {
|
|
246
|
+
"component": {
|
|
247
|
+
"const": "StringTemplate"
|
|
248
|
+
},
|
|
249
|
+
"template": {
|
|
250
|
+
"description": "string with {var} slots, e.g. '{a} & {b} vs {c} & {d}'"
|
|
251
|
+
},
|
|
252
|
+
"inputs": {
|
|
253
|
+
"description": "object — { varName: '#nodeId.field' }"
|
|
254
|
+
},
|
|
255
|
+
"fallbacks": {
|
|
256
|
+
"description": "object (optional) — { varName: literal } used when the input is empty"
|
|
257
|
+
}
|
|
258
|
+
},
|
|
259
|
+
"required": [
|
|
260
|
+
"component"
|
|
261
|
+
]
|
|
262
|
+
}
|
|
263
|
+
],
|
|
264
|
+
"unevaluatedProperties": false,
|
|
265
|
+
"x-readableFields": [
|
|
266
|
+
"value"
|
|
267
|
+
]
|
|
268
|
+
},
|
|
269
|
+
"RowBinder": {
|
|
270
|
+
"type": "object",
|
|
271
|
+
"description": "unpack delivered query rows back into ValueStores — form rehydration after reload; pure projection of ONE delivered array, no compute",
|
|
272
|
+
"allOf": [
|
|
273
|
+
{
|
|
274
|
+
"$ref": "https://a2ui.org/specification/v1_0/common_types.json#/$defs/ComponentCommon"
|
|
275
|
+
},
|
|
276
|
+
{
|
|
277
|
+
"type": "object",
|
|
278
|
+
"properties": {
|
|
279
|
+
"component": {
|
|
280
|
+
"const": "RowBinder"
|
|
281
|
+
},
|
|
282
|
+
"bind": {
|
|
283
|
+
"description": "array of { match: {field: value}, take: field, into: storeId } — last matching row wins (append-only stores)"
|
|
284
|
+
}
|
|
285
|
+
},
|
|
286
|
+
"required": [
|
|
287
|
+
"component"
|
|
288
|
+
]
|
|
289
|
+
}
|
|
290
|
+
],
|
|
291
|
+
"unevaluatedProperties": false,
|
|
292
|
+
"x-readableFields": [
|
|
293
|
+
"count"
|
|
294
|
+
]
|
|
295
|
+
},
|
|
296
|
+
"StepNavigator": {
|
|
297
|
+
"type": "object",
|
|
298
|
+
"description": "tracks current step in a multi-step flow",
|
|
299
|
+
"allOf": [
|
|
300
|
+
{
|
|
301
|
+
"$ref": "https://a2ui.org/specification/v1_0/common_types.json#/$defs/ComponentCommon"
|
|
302
|
+
},
|
|
303
|
+
{
|
|
304
|
+
"type": "object",
|
|
305
|
+
"properties": {
|
|
306
|
+
"component": {
|
|
307
|
+
"const": "StepNavigator"
|
|
308
|
+
},
|
|
309
|
+
"totalSteps": {
|
|
310
|
+
"description": "integer (default 2)"
|
|
311
|
+
}
|
|
312
|
+
},
|
|
313
|
+
"required": [
|
|
314
|
+
"component"
|
|
315
|
+
]
|
|
316
|
+
}
|
|
317
|
+
],
|
|
318
|
+
"unevaluatedProperties": false,
|
|
319
|
+
"x-readableFields": [
|
|
320
|
+
"activeIndex"
|
|
321
|
+
],
|
|
322
|
+
"x-actionTargets": [
|
|
323
|
+
"next",
|
|
324
|
+
"prev",
|
|
325
|
+
"jumpTo"
|
|
326
|
+
]
|
|
327
|
+
},
|
|
328
|
+
"badge": {
|
|
329
|
+
"type": "object",
|
|
330
|
+
"description": "coloured pill from a value->colour map",
|
|
331
|
+
"allOf": [
|
|
332
|
+
{
|
|
333
|
+
"$ref": "https://a2ui.org/specification/v1_0/common_types.json#/$defs/ComponentCommon"
|
|
334
|
+
},
|
|
335
|
+
{
|
|
336
|
+
"type": "object",
|
|
337
|
+
"properties": {
|
|
338
|
+
"component": {
|
|
339
|
+
"const": "badge"
|
|
340
|
+
},
|
|
341
|
+
"colors": {
|
|
342
|
+
"description": "{ VALUE: '#hex' }"
|
|
343
|
+
}
|
|
344
|
+
},
|
|
345
|
+
"required": [
|
|
346
|
+
"component"
|
|
347
|
+
]
|
|
348
|
+
}
|
|
349
|
+
],
|
|
350
|
+
"unevaluatedProperties": false
|
|
351
|
+
},
|
|
352
|
+
"sla_badge": {
|
|
353
|
+
"type": "object",
|
|
354
|
+
"description": "ok/warn/breach pill + elapsed time",
|
|
355
|
+
"allOf": [
|
|
356
|
+
{
|
|
357
|
+
"$ref": "https://a2ui.org/specification/v1_0/common_types.json#/$defs/ComponentCommon"
|
|
358
|
+
},
|
|
359
|
+
{
|
|
360
|
+
"type": "object",
|
|
361
|
+
"properties": {
|
|
362
|
+
"component": {
|
|
363
|
+
"const": "sla_badge"
|
|
364
|
+
},
|
|
365
|
+
"time_key": {
|
|
366
|
+
"description": "column holding formatted duration"
|
|
367
|
+
}
|
|
368
|
+
},
|
|
369
|
+
"required": [
|
|
370
|
+
"component"
|
|
371
|
+
]
|
|
372
|
+
}
|
|
373
|
+
],
|
|
374
|
+
"unevaluatedProperties": false
|
|
375
|
+
},
|
|
376
|
+
"claim": {
|
|
377
|
+
"type": "object",
|
|
378
|
+
"description": "owner avatar+name when owned; Claim button when unclaimed",
|
|
379
|
+
"allOf": [
|
|
380
|
+
{
|
|
381
|
+
"$ref": "https://a2ui.org/specification/v1_0/common_types.json#/$defs/ComponentCommon"
|
|
382
|
+
},
|
|
383
|
+
{
|
|
384
|
+
"type": "object",
|
|
385
|
+
"properties": {
|
|
386
|
+
"component": {
|
|
387
|
+
"const": "claim"
|
|
388
|
+
}
|
|
389
|
+
},
|
|
390
|
+
"required": [
|
|
391
|
+
"component"
|
|
392
|
+
]
|
|
393
|
+
}
|
|
394
|
+
],
|
|
395
|
+
"unevaluatedProperties": false,
|
|
396
|
+
"x-extraProps": [
|
|
397
|
+
"claim_key",
|
|
398
|
+
"email_key",
|
|
399
|
+
"name_key",
|
|
400
|
+
"action_node",
|
|
401
|
+
"key_mem_node"
|
|
402
|
+
],
|
|
403
|
+
"x-columnKey": "_claim"
|
|
404
|
+
},
|
|
405
|
+
"resolve": {
|
|
406
|
+
"type": "object",
|
|
407
|
+
"description": "resolve button; hidden when already Resolved",
|
|
408
|
+
"allOf": [
|
|
409
|
+
{
|
|
410
|
+
"$ref": "https://a2ui.org/specification/v1_0/common_types.json#/$defs/ComponentCommon"
|
|
411
|
+
},
|
|
412
|
+
{
|
|
413
|
+
"type": "object",
|
|
414
|
+
"properties": {
|
|
415
|
+
"component": {
|
|
416
|
+
"const": "resolve"
|
|
417
|
+
}
|
|
418
|
+
},
|
|
419
|
+
"required": [
|
|
420
|
+
"component"
|
|
421
|
+
]
|
|
422
|
+
}
|
|
423
|
+
],
|
|
424
|
+
"unevaluatedProperties": false,
|
|
425
|
+
"x-extraProps": [
|
|
426
|
+
"resolve_key",
|
|
427
|
+
"status_key",
|
|
428
|
+
"action_node",
|
|
429
|
+
"key_mem_node"
|
|
430
|
+
],
|
|
431
|
+
"x-columnKey": "_resolve"
|
|
432
|
+
},
|
|
433
|
+
"delete": {
|
|
434
|
+
"type": "object",
|
|
435
|
+
"description": "delete-row button",
|
|
436
|
+
"allOf": [
|
|
437
|
+
{
|
|
438
|
+
"$ref": "https://a2ui.org/specification/v1_0/common_types.json#/$defs/ComponentCommon"
|
|
439
|
+
},
|
|
440
|
+
{
|
|
441
|
+
"type": "object",
|
|
442
|
+
"properties": {
|
|
443
|
+
"component": {
|
|
444
|
+
"const": "delete"
|
|
445
|
+
}
|
|
446
|
+
},
|
|
447
|
+
"required": [
|
|
448
|
+
"component"
|
|
449
|
+
]
|
|
450
|
+
}
|
|
451
|
+
],
|
|
452
|
+
"unevaluatedProperties": false,
|
|
453
|
+
"x-extraProps": [
|
|
454
|
+
"delete_key",
|
|
455
|
+
"action_node",
|
|
456
|
+
"key_mem_node"
|
|
457
|
+
],
|
|
458
|
+
"x-columnKey": "_delete"
|
|
459
|
+
}
|
|
460
|
+
},
|
|
461
|
+
"functions": {
|
|
462
|
+
"elapsed_seconds": {
|
|
463
|
+
"type": "object",
|
|
464
|
+
"description": "integer seconds; requires interval to update with time",
|
|
465
|
+
"returnType": "any",
|
|
466
|
+
"properties": {
|
|
467
|
+
"call": {
|
|
468
|
+
"const": "elapsed_seconds"
|
|
469
|
+
},
|
|
470
|
+
"args": {
|
|
471
|
+
"type": "object",
|
|
472
|
+
"properties": {
|
|
473
|
+
"field": {
|
|
474
|
+
"description": "row field with ISO timestamp"
|
|
475
|
+
}
|
|
476
|
+
}
|
|
477
|
+
}
|
|
478
|
+
},
|
|
479
|
+
"required": [
|
|
480
|
+
"call"
|
|
481
|
+
],
|
|
482
|
+
"unevaluatedProperties": false
|
|
483
|
+
},
|
|
484
|
+
"format_duration": {
|
|
485
|
+
"type": "object",
|
|
486
|
+
"description": "string e.g. '1h 23m'",
|
|
487
|
+
"returnType": "any",
|
|
488
|
+
"properties": {
|
|
489
|
+
"call": {
|
|
490
|
+
"const": "format_duration"
|
|
491
|
+
},
|
|
492
|
+
"args": {
|
|
493
|
+
"type": "object",
|
|
494
|
+
"properties": {
|
|
495
|
+
"src": {
|
|
496
|
+
"description": "column holding seconds"
|
|
497
|
+
}
|
|
498
|
+
}
|
|
499
|
+
}
|
|
500
|
+
},
|
|
501
|
+
"required": [
|
|
502
|
+
"call"
|
|
503
|
+
],
|
|
504
|
+
"unevaluatedProperties": false
|
|
505
|
+
},
|
|
506
|
+
"threshold_by_field": {
|
|
507
|
+
"type": "object",
|
|
508
|
+
"description": "ok | warn | breach",
|
|
509
|
+
"returnType": "any",
|
|
510
|
+
"properties": {
|
|
511
|
+
"call": {
|
|
512
|
+
"const": "threshold_by_field"
|
|
513
|
+
},
|
|
514
|
+
"args": {
|
|
515
|
+
"type": "object",
|
|
516
|
+
"properties": {
|
|
517
|
+
"src": {
|
|
518
|
+
"description": "column holding numeric value"
|
|
519
|
+
},
|
|
520
|
+
"key": {
|
|
521
|
+
"description": "row field selecting the threshold set"
|
|
522
|
+
},
|
|
523
|
+
"thresholds": {
|
|
524
|
+
"description": "{ KEY: { warn, breach } }"
|
|
525
|
+
}
|
|
526
|
+
}
|
|
527
|
+
}
|
|
528
|
+
},
|
|
529
|
+
"required": [
|
|
530
|
+
"call"
|
|
531
|
+
],
|
|
532
|
+
"unevaluatedProperties": false
|
|
533
|
+
},
|
|
534
|
+
"multiply_diff": {
|
|
535
|
+
"type": "object",
|
|
536
|
+
"description": "number — (a - b) * by, 2dp",
|
|
537
|
+
"returnType": "any",
|
|
538
|
+
"properties": {
|
|
539
|
+
"call": {
|
|
540
|
+
"const": "multiply_diff"
|
|
541
|
+
},
|
|
542
|
+
"args": {
|
|
543
|
+
"type": "object",
|
|
544
|
+
"properties": {
|
|
545
|
+
"a": {
|
|
546
|
+
"description": "row field"
|
|
547
|
+
},
|
|
548
|
+
"b": {
|
|
549
|
+
"description": "row field"
|
|
550
|
+
},
|
|
551
|
+
"by": {
|
|
552
|
+
"description": "row field (optional, default 1)"
|
|
553
|
+
}
|
|
554
|
+
}
|
|
555
|
+
}
|
|
556
|
+
},
|
|
557
|
+
"required": [
|
|
558
|
+
"call"
|
|
559
|
+
],
|
|
560
|
+
"unevaluatedProperties": false
|
|
561
|
+
},
|
|
562
|
+
"pct_diff": {
|
|
563
|
+
"type": "object",
|
|
564
|
+
"description": "number — (a - b) / b * 100, 2dp; null if b = 0",
|
|
565
|
+
"returnType": "any",
|
|
566
|
+
"properties": {
|
|
567
|
+
"call": {
|
|
568
|
+
"const": "pct_diff"
|
|
569
|
+
},
|
|
570
|
+
"args": {
|
|
571
|
+
"type": "object",
|
|
572
|
+
"properties": {
|
|
573
|
+
"a": {
|
|
574
|
+
"description": "row field"
|
|
575
|
+
},
|
|
576
|
+
"b": {
|
|
577
|
+
"description": "row field"
|
|
578
|
+
}
|
|
579
|
+
}
|
|
580
|
+
}
|
|
581
|
+
},
|
|
582
|
+
"required": [
|
|
583
|
+
"call"
|
|
584
|
+
],
|
|
585
|
+
"unevaluatedProperties": false
|
|
586
|
+
},
|
|
587
|
+
"signal_threshold": {
|
|
588
|
+
"type": "object",
|
|
589
|
+
"description": "string — above/mid/below label",
|
|
590
|
+
"returnType": "any",
|
|
591
|
+
"properties": {
|
|
592
|
+
"call": {
|
|
593
|
+
"const": "signal_threshold"
|
|
594
|
+
},
|
|
595
|
+
"args": {
|
|
596
|
+
"type": "object",
|
|
597
|
+
"properties": {
|
|
598
|
+
"src": {
|
|
599
|
+
"description": "row field"
|
|
600
|
+
},
|
|
601
|
+
"high": {
|
|
602
|
+
"description": "number (default 70)"
|
|
603
|
+
},
|
|
604
|
+
"low": {
|
|
605
|
+
"description": "number (default 30)"
|
|
606
|
+
},
|
|
607
|
+
"above": {
|
|
608
|
+
"description": "string (default overbought)"
|
|
609
|
+
},
|
|
610
|
+
"below": {
|
|
611
|
+
"description": "string (default oversold)"
|
|
612
|
+
},
|
|
613
|
+
"mid": {
|
|
614
|
+
"description": "string (default neutral)"
|
|
615
|
+
}
|
|
616
|
+
}
|
|
617
|
+
}
|
|
618
|
+
},
|
|
619
|
+
"required": [
|
|
620
|
+
"call"
|
|
621
|
+
],
|
|
622
|
+
"unevaluatedProperties": false
|
|
623
|
+
},
|
|
624
|
+
"sma": {
|
|
625
|
+
"type": "object",
|
|
626
|
+
"description": "rolling simple moving average, joined by row index",
|
|
627
|
+
"returnType": "any",
|
|
628
|
+
"properties": {
|
|
629
|
+
"call": {
|
|
630
|
+
"const": "sma"
|
|
631
|
+
},
|
|
632
|
+
"args": {
|
|
633
|
+
"type": "object",
|
|
634
|
+
"properties": {
|
|
635
|
+
"src": {
|
|
636
|
+
"description": "row field"
|
|
637
|
+
},
|
|
638
|
+
"window": {
|
|
639
|
+
"description": "integer (default 20)"
|
|
640
|
+
}
|
|
641
|
+
}
|
|
642
|
+
}
|
|
643
|
+
},
|
|
644
|
+
"required": [
|
|
645
|
+
"call"
|
|
646
|
+
],
|
|
647
|
+
"unevaluatedProperties": false
|
|
648
|
+
},
|
|
649
|
+
"rsi": {
|
|
650
|
+
"type": "object",
|
|
651
|
+
"description": "rolling RSI, joined by row index",
|
|
652
|
+
"returnType": "any",
|
|
653
|
+
"properties": {
|
|
654
|
+
"call": {
|
|
655
|
+
"const": "rsi"
|
|
656
|
+
},
|
|
657
|
+
"args": {
|
|
658
|
+
"type": "object",
|
|
659
|
+
"properties": {
|
|
660
|
+
"src": {
|
|
661
|
+
"description": "row field"
|
|
662
|
+
},
|
|
663
|
+
"window": {
|
|
664
|
+
"description": "integer (default 14)"
|
|
665
|
+
}
|
|
666
|
+
}
|
|
667
|
+
}
|
|
668
|
+
},
|
|
669
|
+
"required": [
|
|
670
|
+
"call"
|
|
671
|
+
],
|
|
672
|
+
"unevaluatedProperties": false
|
|
673
|
+
},
|
|
674
|
+
"bband_upper": {
|
|
675
|
+
"type": "object",
|
|
676
|
+
"description": "rolling Bollinger upper band",
|
|
677
|
+
"returnType": "any",
|
|
678
|
+
"properties": {
|
|
679
|
+
"call": {
|
|
680
|
+
"const": "bband_upper"
|
|
681
|
+
},
|
|
682
|
+
"args": {
|
|
683
|
+
"type": "object",
|
|
684
|
+
"properties": {
|
|
685
|
+
"src": {
|
|
686
|
+
"description": "row field"
|
|
687
|
+
},
|
|
688
|
+
"window": {
|
|
689
|
+
"description": "integer (default 20)"
|
|
690
|
+
},
|
|
691
|
+
"mult": {
|
|
692
|
+
"description": "number"
|
|
693
|
+
}
|
|
694
|
+
}
|
|
695
|
+
}
|
|
696
|
+
},
|
|
697
|
+
"required": [
|
|
698
|
+
"call"
|
|
699
|
+
],
|
|
700
|
+
"unevaluatedProperties": false
|
|
701
|
+
},
|
|
702
|
+
"bband_lower": {
|
|
703
|
+
"type": "object",
|
|
704
|
+
"description": "rolling Bollinger lower band",
|
|
705
|
+
"returnType": "any",
|
|
706
|
+
"properties": {
|
|
707
|
+
"call": {
|
|
708
|
+
"const": "bband_lower"
|
|
709
|
+
},
|
|
710
|
+
"args": {
|
|
711
|
+
"type": "object",
|
|
712
|
+
"properties": {
|
|
713
|
+
"src": {
|
|
714
|
+
"description": "row field"
|
|
715
|
+
},
|
|
716
|
+
"window": {
|
|
717
|
+
"description": "integer (default 20)"
|
|
718
|
+
},
|
|
719
|
+
"mult": {
|
|
720
|
+
"description": "number"
|
|
721
|
+
}
|
|
722
|
+
}
|
|
723
|
+
}
|
|
724
|
+
},
|
|
725
|
+
"required": [
|
|
726
|
+
"call"
|
|
727
|
+
],
|
|
728
|
+
"unevaluatedProperties": false
|
|
729
|
+
}
|
|
730
|
+
}
|
|
731
|
+
}
|