@beryl-so/cli 0.77.1 → 0.92.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +18 -7
- package/dist/adapters/mcp.js +23 -10
- package/dist/beryl-test-skill.js +184 -33
- package/dist/code-ref.js +81 -0
- package/dist/commands/accounts.js +74 -18
- package/dist/commands/config-vars.js +207 -20
- package/dist/commands/environments.js +14 -7
- package/dist/commands/init.js +2 -2
- package/dist/commands/jobs.js +152 -20
- package/dist/commands/projects.js +115 -20
- package/dist/commands/runs.js +72 -11
- package/dist/commands/tests.js +44 -9
- package/dist/commands/util.js +38 -6
- package/dist/commands/watch.js +24 -12
- package/dist/config.js +2 -0
- package/dist/lint.js +180 -3
- package/dist/schema.generated.js +209 -8
- package/dist/skill-tables.js +4 -0
- package/package.json +1 -1
package/dist/schema.generated.js
CHANGED
|
@@ -15,6 +15,7 @@ export const ACTION_PLAN_SCHEMA = {
|
|
|
15
15
|
"hover",
|
|
16
16
|
"scroll",
|
|
17
17
|
"wait_for",
|
|
18
|
+
"wait_until",
|
|
18
19
|
"expect",
|
|
19
20
|
"capture_count",
|
|
20
21
|
"capture_text",
|
|
@@ -27,7 +28,9 @@ export const ACTION_PLAN_SCHEMA = {
|
|
|
27
28
|
"drag",
|
|
28
29
|
"third_party_authorize",
|
|
29
30
|
"await_third_party",
|
|
30
|
-
"send_third_party"
|
|
31
|
+
"send_third_party",
|
|
32
|
+
"sign_in_as",
|
|
33
|
+
"create_account"
|
|
31
34
|
],
|
|
32
35
|
"title": "ActionType",
|
|
33
36
|
"type": "string"
|
|
@@ -85,7 +88,8 @@ export const ACTION_PLAN_SCHEMA = {
|
|
|
85
88
|
"have_count",
|
|
86
89
|
"persisted",
|
|
87
90
|
"gone",
|
|
88
|
-
"count_delta"
|
|
91
|
+
"count_delta",
|
|
92
|
+
"judged"
|
|
89
93
|
],
|
|
90
94
|
"title": "ExpectKind",
|
|
91
95
|
"type": "string"
|
|
@@ -348,6 +352,29 @@ export const ACTION_PLAN_SCHEMA = {
|
|
|
348
352
|
]
|
|
349
353
|
}
|
|
350
354
|
},
|
|
355
|
+
{
|
|
356
|
+
"if": {
|
|
357
|
+
"properties": {
|
|
358
|
+
"action": {
|
|
359
|
+
"const": "wait_until"
|
|
360
|
+
}
|
|
361
|
+
},
|
|
362
|
+
"required": [
|
|
363
|
+
"action"
|
|
364
|
+
]
|
|
365
|
+
},
|
|
366
|
+
"then": {
|
|
367
|
+
"properties": {
|
|
368
|
+
"selector": {
|
|
369
|
+
"minLength": 1,
|
|
370
|
+
"type": "string"
|
|
371
|
+
}
|
|
372
|
+
},
|
|
373
|
+
"required": [
|
|
374
|
+
"selector"
|
|
375
|
+
]
|
|
376
|
+
}
|
|
377
|
+
},
|
|
351
378
|
{
|
|
352
379
|
"if": {
|
|
353
380
|
"properties": {
|
|
@@ -666,6 +693,45 @@ export const ACTION_PLAN_SCHEMA = {
|
|
|
666
693
|
]
|
|
667
694
|
}
|
|
668
695
|
},
|
|
696
|
+
{
|
|
697
|
+
"if": {
|
|
698
|
+
"properties": {
|
|
699
|
+
"action": {
|
|
700
|
+
"const": "sign_in_as"
|
|
701
|
+
}
|
|
702
|
+
},
|
|
703
|
+
"required": [
|
|
704
|
+
"action"
|
|
705
|
+
]
|
|
706
|
+
},
|
|
707
|
+
"then": {
|
|
708
|
+
"properties": {
|
|
709
|
+
"account": {
|
|
710
|
+
"minLength": 1,
|
|
711
|
+
"type": "string"
|
|
712
|
+
}
|
|
713
|
+
},
|
|
714
|
+
"required": [
|
|
715
|
+
"account"
|
|
716
|
+
]
|
|
717
|
+
}
|
|
718
|
+
},
|
|
719
|
+
{
|
|
720
|
+
"if": {
|
|
721
|
+
"properties": {
|
|
722
|
+
"action": {
|
|
723
|
+
"const": "create_account"
|
|
724
|
+
}
|
|
725
|
+
},
|
|
726
|
+
"required": [
|
|
727
|
+
"action"
|
|
728
|
+
]
|
|
729
|
+
},
|
|
730
|
+
"then": {
|
|
731
|
+
"properties": {},
|
|
732
|
+
"required": []
|
|
733
|
+
}
|
|
734
|
+
},
|
|
669
735
|
{
|
|
670
736
|
"if": {
|
|
671
737
|
"properties": {
|
|
@@ -835,6 +901,35 @@ export const ACTION_PLAN_SCHEMA = {
|
|
|
835
901
|
]
|
|
836
902
|
}
|
|
837
903
|
},
|
|
904
|
+
{
|
|
905
|
+
"if": {
|
|
906
|
+
"properties": {
|
|
907
|
+
"expect_kind": {
|
|
908
|
+
"const": "judged"
|
|
909
|
+
}
|
|
910
|
+
},
|
|
911
|
+
"required": [
|
|
912
|
+
"expect_kind"
|
|
913
|
+
]
|
|
914
|
+
},
|
|
915
|
+
"then": {
|
|
916
|
+
"properties": {
|
|
917
|
+
"expect_text": {
|
|
918
|
+
"not": {
|
|
919
|
+
"type": "null"
|
|
920
|
+
}
|
|
921
|
+
},
|
|
922
|
+
"selector": {
|
|
923
|
+
"minLength": 1,
|
|
924
|
+
"type": "string"
|
|
925
|
+
}
|
|
926
|
+
},
|
|
927
|
+
"required": [
|
|
928
|
+
"expect_text",
|
|
929
|
+
"selector"
|
|
930
|
+
]
|
|
931
|
+
}
|
|
932
|
+
},
|
|
838
933
|
{
|
|
839
934
|
"if": {
|
|
840
935
|
"properties": {
|
|
@@ -1037,9 +1132,41 @@ export const ACTION_PLAN_SCHEMA = {
|
|
|
1037
1132
|
}
|
|
1038
1133
|
}
|
|
1039
1134
|
}
|
|
1135
|
+
},
|
|
1136
|
+
{
|
|
1137
|
+
"if": {
|
|
1138
|
+
"properties": {
|
|
1139
|
+
"expect_kind": {
|
|
1140
|
+
"not": {
|
|
1141
|
+
"const": "have_value"
|
|
1142
|
+
}
|
|
1143
|
+
}
|
|
1144
|
+
}
|
|
1145
|
+
},
|
|
1146
|
+
"then": {
|
|
1147
|
+
"properties": {
|
|
1148
|
+
"expect_text": {
|
|
1149
|
+
"not": {
|
|
1150
|
+
"pattern": "\\{\\{\\s*(?!(?:timestamp|unique|uuid)\\s*\\}\\})[A-Za-z0-9_]+\\s*\\}\\}"
|
|
1151
|
+
}
|
|
1152
|
+
}
|
|
1153
|
+
}
|
|
1154
|
+
}
|
|
1040
1155
|
}
|
|
1041
1156
|
],
|
|
1042
1157
|
"properties": {
|
|
1158
|
+
"account": {
|
|
1159
|
+
"anyOf": [
|
|
1160
|
+
{
|
|
1161
|
+
"type": "string"
|
|
1162
|
+
},
|
|
1163
|
+
{
|
|
1164
|
+
"type": "null"
|
|
1165
|
+
}
|
|
1166
|
+
],
|
|
1167
|
+
"default": null,
|
|
1168
|
+
"title": "Account"
|
|
1169
|
+
},
|
|
1043
1170
|
"action": {
|
|
1044
1171
|
"$ref": "#/$defs/ActionType"
|
|
1045
1172
|
},
|
|
@@ -1048,7 +1175,16 @@ export const ACTION_PLAN_SCHEMA = {
|
|
|
1048
1175
|
{
|
|
1049
1176
|
"not": {
|
|
1050
1177
|
"enum": [
|
|
1178
|
+
"created_password",
|
|
1051
1179
|
"inbox_address",
|
|
1180
|
+
"inbox_address_2",
|
|
1181
|
+
"inbox_address_3",
|
|
1182
|
+
"inbox_address_4",
|
|
1183
|
+
"inbox_address_5",
|
|
1184
|
+
"inbox_address_6",
|
|
1185
|
+
"inbox_address_7",
|
|
1186
|
+
"inbox_address_8",
|
|
1187
|
+
"inbox_address_9",
|
|
1052
1188
|
"login_email",
|
|
1053
1189
|
"login_password",
|
|
1054
1190
|
"mailbox_address",
|
|
@@ -1079,6 +1215,20 @@ export const ACTION_PLAN_SCHEMA = {
|
|
|
1079
1215
|
"default": null,
|
|
1080
1216
|
"title": "Capture Ref"
|
|
1081
1217
|
},
|
|
1218
|
+
"deadline_s": {
|
|
1219
|
+
"anyOf": [
|
|
1220
|
+
{
|
|
1221
|
+
"maximum": 900,
|
|
1222
|
+
"minimum": 1,
|
|
1223
|
+
"type": "integer"
|
|
1224
|
+
},
|
|
1225
|
+
{
|
|
1226
|
+
"type": "null"
|
|
1227
|
+
}
|
|
1228
|
+
],
|
|
1229
|
+
"default": null,
|
|
1230
|
+
"title": "Deadline S"
|
|
1231
|
+
},
|
|
1082
1232
|
"dialog": {
|
|
1083
1233
|
"anyOf": [
|
|
1084
1234
|
{
|
|
@@ -1102,6 +1252,20 @@ export const ACTION_PLAN_SCHEMA = {
|
|
|
1102
1252
|
"default": null,
|
|
1103
1253
|
"title": "Dialog Expect Text"
|
|
1104
1254
|
},
|
|
1255
|
+
"every_s": {
|
|
1256
|
+
"anyOf": [
|
|
1257
|
+
{
|
|
1258
|
+
"maximum": 900,
|
|
1259
|
+
"minimum": 1,
|
|
1260
|
+
"type": "integer"
|
|
1261
|
+
},
|
|
1262
|
+
{
|
|
1263
|
+
"type": "null"
|
|
1264
|
+
}
|
|
1265
|
+
],
|
|
1266
|
+
"default": null,
|
|
1267
|
+
"title": "Every S"
|
|
1268
|
+
},
|
|
1105
1269
|
"expect_count": {
|
|
1106
1270
|
"anyOf": [
|
|
1107
1271
|
{
|
|
@@ -1141,9 +1305,6 @@ export const ACTION_PLAN_SCHEMA = {
|
|
|
1141
1305
|
"expect_text": {
|
|
1142
1306
|
"anyOf": [
|
|
1143
1307
|
{
|
|
1144
|
-
"not": {
|
|
1145
|
-
"pattern": "\\{\\{\\s*(?!(?:timestamp|unique|uuid)\\s*\\}\\})[A-Za-z0-9_]+\\s*\\}\\}"
|
|
1146
|
-
},
|
|
1147
1308
|
"type": "string"
|
|
1148
1309
|
},
|
|
1149
1310
|
{
|
|
@@ -1176,6 +1337,21 @@ export const ACTION_PLAN_SCHEMA = {
|
|
|
1176
1337
|
"default": null,
|
|
1177
1338
|
"title": "Extract Pattern"
|
|
1178
1339
|
},
|
|
1340
|
+
"fail_on": {
|
|
1341
|
+
"anyOf": [
|
|
1342
|
+
{
|
|
1343
|
+
"items": {
|
|
1344
|
+
"type": "string"
|
|
1345
|
+
},
|
|
1346
|
+
"type": "array"
|
|
1347
|
+
},
|
|
1348
|
+
{
|
|
1349
|
+
"type": "null"
|
|
1350
|
+
}
|
|
1351
|
+
],
|
|
1352
|
+
"default": null,
|
|
1353
|
+
"title": "Fail On"
|
|
1354
|
+
},
|
|
1179
1355
|
"from_contains": {
|
|
1180
1356
|
"anyOf": [
|
|
1181
1357
|
{
|
|
@@ -1215,9 +1391,6 @@ export const ACTION_PLAN_SCHEMA = {
|
|
|
1215
1391
|
"option": {
|
|
1216
1392
|
"anyOf": [
|
|
1217
1393
|
{
|
|
1218
|
-
"not": {
|
|
1219
|
-
"pattern": "\\{\\{\\s*(?!(?:timestamp|unique|uuid)\\s*\\}\\})[A-Za-z0-9_]+\\s*\\}\\}"
|
|
1220
|
-
},
|
|
1221
1394
|
"type": "string"
|
|
1222
1395
|
},
|
|
1223
1396
|
{
|
|
@@ -1243,6 +1416,34 @@ export const ACTION_PLAN_SCHEMA = {
|
|
|
1243
1416
|
],
|
|
1244
1417
|
"default": null
|
|
1245
1418
|
},
|
|
1419
|
+
"recipient": {
|
|
1420
|
+
"anyOf": [
|
|
1421
|
+
{
|
|
1422
|
+
"enum": [
|
|
1423
|
+
"inbox_address",
|
|
1424
|
+
"inbox_address_2",
|
|
1425
|
+
"inbox_address_3",
|
|
1426
|
+
"inbox_address_4",
|
|
1427
|
+
"inbox_address_5",
|
|
1428
|
+
"inbox_address_6",
|
|
1429
|
+
"inbox_address_7",
|
|
1430
|
+
"inbox_address_8",
|
|
1431
|
+
"inbox_address_9"
|
|
1432
|
+
],
|
|
1433
|
+
"type": "string"
|
|
1434
|
+
},
|
|
1435
|
+
{
|
|
1436
|
+
"type": "null"
|
|
1437
|
+
}
|
|
1438
|
+
],
|
|
1439
|
+
"default": null,
|
|
1440
|
+
"title": "Recipient"
|
|
1441
|
+
},
|
|
1442
|
+
"reload": {
|
|
1443
|
+
"default": false,
|
|
1444
|
+
"title": "Reload",
|
|
1445
|
+
"type": "boolean"
|
|
1446
|
+
},
|
|
1246
1447
|
"selector": {
|
|
1247
1448
|
"anyOf": [
|
|
1248
1449
|
{
|
package/dist/skill-tables.js
CHANGED
|
@@ -28,6 +28,7 @@ export const ACTION_DOCS = {
|
|
|
28
28
|
hover: "Hover the `selector` element",
|
|
29
29
|
scroll: "Scroll the page (no selector) or bring `selector` into view — see below",
|
|
30
30
|
wait_for: "Wait for the `selector` element to appear",
|
|
31
|
+
wait_until: "Hold the browser and poll `selector` every `every_s` until it appears or `deadline_s` passes (optional `reload`, `fail_on`): for a flow whose result lands minutes later",
|
|
31
32
|
expect: "Assert — kinds in the expect table below",
|
|
32
33
|
capture_count: "Bank the live count of `selector` matches under `capture_as` for a later `count_delta`",
|
|
33
34
|
capture_text: "Bank the `selector` element's visible text under `capture_as`, to restore it later via `{{handle}}`",
|
|
@@ -41,6 +42,8 @@ export const ACTION_DOCS = {
|
|
|
41
42
|
third_party_authorize: "Approve the `provider` install on its consent page as Beryl's account (cloud only, see third party integration tests)",
|
|
42
43
|
await_third_party: "Wait for the connected app's message on Beryl's `provider` account (cloud only)",
|
|
43
44
|
send_third_party: "Mention the connected app's bot with `value` as Beryl's `provider` account (cloud only)",
|
|
45
|
+
sign_in_as: "Continue as `account`: a test account label (signed in) or a fresh-address handle (signed out); switching back resumes that identity's page (see Two identities in one test)",
|
|
46
|
+
create_account: "Sign up a fresh user as `value` (default `{{inbox_address}}`) by replaying the default test account's signup plan (see Fresh users without typing the signup)",
|
|
44
47
|
};
|
|
45
48
|
export const EXPECT_DOCS = {
|
|
46
49
|
visible: "The element is visible",
|
|
@@ -57,6 +60,7 @@ export const EXPECT_DOCS = {
|
|
|
57
60
|
persisted: "The record just created is present — a visible match for the `{{unique}}`-named row",
|
|
58
61
|
gone: "Zero matches — absent from the DOM, stronger than `hidden`",
|
|
59
62
|
count_delta: "The match count moved by signed `expect_delta` vs the `capture_ref` baseline",
|
|
63
|
+
judged: "A model judges the LAST match's text, once it stops changing, against the plain-language criteria in `expect_text`: for answers that vary in wording (a chatbot reply)",
|
|
60
64
|
};
|
|
61
65
|
export const EXTRACT_DOCS = {
|
|
62
66
|
code: "the one-time code",
|