@vertesia/common 1.6.0-dev.20260923.085325Z → 1.6.0-dev.20261008.064737Z
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/lib/access-control-values.d.ts +2 -2
- package/lib/access-control-values.d.ts.map +1 -1
- package/lib/access-control-values.js +2 -2
- package/lib/access-control-values.js.map +1 -1
- package/lib/access-control.d.ts +7 -8
- package/lib/access-control.d.ts.map +1 -1
- package/lib/access-control.js +5 -0
- package/lib/access-control.js.map +1 -1
- package/lib/analytics.d.ts +6 -7
- package/lib/analytics.d.ts.map +1 -1
- package/lib/api-contract/components.generated.json +2553 -1046
- package/lib/api-contract/engine.d.ts +65 -0
- package/lib/api-contract/engine.d.ts.map +1 -0
- package/lib/api-contract/engine.js +569 -0
- package/lib/api-contract/engine.js.map +1 -0
- package/lib/api-contract/index.d.ts +21 -182
- package/lib/api-contract/index.d.ts.map +1 -1
- package/lib/api-contract/index.js +13 -551
- package/lib/api-contract/index.js.map +1 -1
- package/lib/api-schemas/access-control.d.ts +33 -10
- package/lib/api-schemas/access-control.d.ts.map +1 -1
- package/lib/api-schemas/access-control.js +7 -6
- package/lib/api-schemas/access-control.js.map +1 -1
- package/lib/api-schemas/account.d.ts +5 -9
- package/lib/api-schemas/account.d.ts.map +1 -1
- package/lib/api-schemas/account.js +0 -7
- package/lib/api-schemas/account.js.map +1 -1
- package/lib/api-schemas/agent-budget.d.ts +15 -0
- package/lib/api-schemas/agent-budget.d.ts.map +1 -0
- package/lib/api-schemas/agent-budget.js +55 -0
- package/lib/api-schemas/agent-budget.js.map +1 -0
- package/lib/api-schemas/agent-runs.d.ts +1525 -100
- package/lib/api-schemas/agent-runs.d.ts.map +1 -1
- package/lib/api-schemas/agent-runs.js +60 -28
- package/lib/api-schemas/agent-runs.js.map +1 -1
- package/lib/api-schemas/apikey.d.ts +11 -10
- package/lib/api-schemas/apikey.d.ts.map +1 -1
- package/lib/api-schemas/apikey.js.map +1 -1
- package/lib/api-schemas/app-lifecycle.d.ts +13 -0
- package/lib/api-schemas/app-lifecycle.d.ts.map +1 -1
- package/lib/api-schemas/app-lifecycle.js +4 -0
- package/lib/api-schemas/app-lifecycle.js.map +1 -1
- package/lib/api-schemas/app-runtime.d.ts +1821 -108
- package/lib/api-schemas/app-runtime.d.ts.map +1 -1
- package/lib/api-schemas/audit-trail.d.ts +275 -0
- package/lib/api-schemas/audit-trail.d.ts.map +1 -1
- package/lib/api-schemas/audit-trail.js +156 -1
- package/lib/api-schemas/audit-trail.js.map +1 -1
- package/lib/api-schemas/content.d.ts +665 -30
- package/lib/api-schemas/content.d.ts.map +1 -1
- package/lib/api-schemas/content.js +47 -0
- package/lib/api-schemas/content.js.map +1 -1
- package/lib/api-schemas/cost-analytics.d.ts +19 -0
- package/lib/api-schemas/cost-analytics.d.ts.map +1 -1
- package/lib/api-schemas/cost-analytics.js +38 -2
- package/lib/api-schemas/cost-analytics.js.map +1 -1
- package/lib/api-schemas/document-processing.d.ts +381 -18
- package/lib/api-schemas/document-processing.d.ts.map +1 -1
- package/lib/api-schemas/environment.d.ts +0 -5
- package/lib/api-schemas/environment.d.ts.map +1 -1
- package/lib/api-schemas/environment.js +0 -1
- package/lib/api-schemas/environment.js.map +1 -1
- package/lib/api-schemas/events.d.ts +1143 -54
- package/lib/api-schemas/events.d.ts.map +1 -1
- package/lib/api-schemas/group.d.ts +2 -1
- package/lib/api-schemas/group.d.ts.map +1 -1
- package/lib/api-schemas/group.js.map +1 -1
- package/lib/api-schemas/index.d.ts +2 -0
- package/lib/api-schemas/index.d.ts.map +1 -1
- package/lib/api-schemas/index.js +2 -0
- package/lib/api-schemas/index.js.map +1 -1
- package/lib/api-schemas/inference-profile.d.ts +5017 -0
- package/lib/api-schemas/inference-profile.d.ts.map +1 -0
- package/lib/api-schemas/inference-profile.js +135 -0
- package/lib/api-schemas/inference-profile.js.map +1 -0
- package/lib/api-schemas/integrations.d.ts +6 -6
- package/lib/api-schemas/interaction.d.ts +34391 -703
- package/lib/api-schemas/interaction.d.ts.map +1 -1
- package/lib/api-schemas/interaction.js +34 -1
- package/lib/api-schemas/interaction.js.map +1 -1
- package/lib/api-schemas/invites.d.ts +10 -9
- package/lib/api-schemas/invites.d.ts.map +1 -1
- package/lib/api-schemas/invites.js.map +1 -1
- package/lib/api-schemas/process.d.ts +653 -34
- package/lib/api-schemas/process.d.ts.map +1 -1
- package/lib/api-schemas/process.js +66 -0
- package/lib/api-schemas/process.js.map +1 -1
- package/lib/api-schemas/project-configuration.d.ts +1323 -62
- package/lib/api-schemas/project-configuration.d.ts.map +1 -1
- package/lib/api-schemas/project-configuration.js +15 -1
- package/lib/api-schemas/project-configuration.js.map +1 -1
- package/lib/api-schemas/project.d.ts +2031 -116
- package/lib/api-schemas/project.d.ts.map +1 -1
- package/lib/api-schemas/project.js +9 -1
- package/lib/api-schemas/project.js.map +1 -1
- package/lib/api-schemas/quota.d.ts +7 -6
- package/lib/api-schemas/quota.d.ts.map +1 -1
- package/lib/api-schemas/quota.js.map +1 -1
- package/lib/api-schemas/registry.d.ts +28171 -36096
- package/lib/api-schemas/registry.d.ts.map +1 -1
- package/lib/api-schemas/registry.js +77 -30
- package/lib/api-schemas/registry.js.map +1 -1
- package/lib/api-schemas/run-budget.d.ts +16 -0
- package/lib/api-schemas/run-budget.d.ts.map +1 -0
- package/lib/api-schemas/run-budget.js +22 -0
- package/lib/api-schemas/run-budget.js.map +1 -0
- package/lib/api-schemas/secrets.d.ts +0 -71
- package/lib/api-schemas/secrets.d.ts.map +1 -1
- package/lib/api-schemas/secrets.js +0 -73
- package/lib/api-schemas/secrets.js.map +1 -1
- package/lib/api-schemas/store.d.ts +6388 -338
- package/lib/api-schemas/store.d.ts.map +1 -1
- package/lib/api-schemas/store.js +11 -0
- package/lib/api-schemas/store.js.map +1 -1
- package/lib/api-schemas/user.d.ts +9 -8
- package/lib/api-schemas/user.d.ts.map +1 -1
- package/lib/api-schemas/user.js.map +1 -1
- package/lib/api-schemas/view-execution.d.ts +8 -0
- package/lib/api-schemas/view-execution.d.ts.map +1 -1
- package/lib/api-schemas/views.d.ts +14 -0
- package/lib/api-schemas/views.d.ts.map +1 -1
- package/lib/api-schemas/workflow-runs.d.ts +335 -12
- package/lib/api-schemas/workflow-runs.d.ts.map +1 -1
- package/lib/api-schemas/workflow-runs.js +2 -0
- package/lib/api-schemas/workflow-runs.js.map +1 -1
- package/lib/apikey.d.ts +30 -25
- package/lib/apikey.d.ts.map +1 -1
- package/lib/apikey.js.map +1 -1
- package/lib/apps.d.ts +116 -121
- package/lib/apps.d.ts.map +1 -1
- package/lib/apps.js.map +1 -1
- package/lib/audit-trail.d.ts +30 -19
- package/lib/audit-trail.d.ts.map +1 -1
- package/lib/audit-trail.js +6 -0
- package/lib/audit-trail.js.map +1 -1
- package/lib/browser-credentials.d.ts +11 -12
- package/lib/browser-credentials.d.ts.map +1 -1
- package/lib/common.d.ts +17 -24
- package/lib/common.d.ts.map +1 -1
- package/lib/content-query.d.ts +3 -4
- package/lib/content-query.d.ts.map +1 -1
- package/lib/cost-analytics.d.ts +13 -21
- package/lib/cost-analytics.d.ts.map +1 -1
- package/lib/cost-analytics.js +0 -7
- package/lib/cost-analytics.js.map +1 -1
- package/lib/data-platform.d.ts +79 -88
- package/lib/data-platform.d.ts.map +1 -1
- package/lib/data-platform.js.map +1 -1
- package/lib/delegation.d.ts +4 -5
- package/lib/delegation.d.ts.map +1 -1
- package/lib/email.d.ts +15 -17
- package/lib/email.d.ts.map +1 -1
- package/lib/email.js.map +1 -1
- package/lib/embeddings.d.ts +25 -26
- package/lib/embeddings.d.ts.map +1 -1
- package/lib/environment.d.ts +16 -17
- package/lib/environment.d.ts.map +1 -1
- package/lib/environment.js.map +1 -1
- package/lib/facets.d.ts +3 -4
- package/lib/facets.d.ts.map +1 -1
- package/lib/group.d.ts +6 -7
- package/lib/group.d.ts.map +1 -1
- package/lib/group.js.map +1 -1
- package/lib/index.d.ts +3 -1
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js.map +1 -1
- package/lib/inference-profile.d.ts +17 -0
- package/lib/inference-profile.d.ts.map +1 -0
- package/lib/inference-profile.js +2 -0
- package/lib/inference-profile.js.map +1 -0
- package/lib/integrations.d.ts +19 -20
- package/lib/integrations.d.ts.map +1 -1
- package/lib/integrations.js.map +1 -1
- package/lib/interaction.d.ts +68 -73
- package/lib/interaction.d.ts.map +1 -1
- package/lib/interaction.js.map +1 -1
- package/lib/meters.d.ts +4 -5
- package/lib/meters.d.ts.map +1 -1
- package/lib/oauth-server.d.ts +40 -41
- package/lib/oauth-server.d.ts.map +1 -1
- package/lib/oauth.d.ts +9 -10
- package/lib/oauth.d.ts.map +1 -1
- package/lib/payload.d.ts +11 -14
- package/lib/payload.d.ts.map +1 -1
- package/lib/pending-asks.d.ts +8 -13
- package/lib/pending-asks.d.ts.map +1 -1
- package/lib/pending-asks.js +0 -4
- package/lib/pending-asks.js.map +1 -1
- package/lib/platform-event.d.ts +48 -71
- package/lib/platform-event.d.ts.map +1 -1
- package/lib/platform-event.js.map +1 -1
- package/lib/principal-context.d.ts +3 -3
- package/lib/principal-context.d.ts.map +1 -1
- package/lib/project.d.ts +42 -43
- package/lib/project.d.ts.map +1 -1
- package/lib/project.js.map +1 -1
- package/lib/prompt.d.ts +14 -16
- package/lib/prompt.d.ts.map +1 -1
- package/lib/prompt.js.map +1 -1
- package/lib/query.d.ts +10 -13
- package/lib/query.d.ts.map +1 -1
- package/lib/rate-limiter.d.ts +7 -11
- package/lib/rate-limiter.d.ts.map +1 -1
- package/lib/refs.d.ts +2 -3
- package/lib/refs.d.ts.map +1 -1
- package/lib/refs.js.map +1 -1
- package/lib/roles/types.d.ts +5 -6
- package/lib/roles/types.d.ts.map +1 -1
- package/lib/roles/types.js.map +1 -1
- package/lib/run-budget.d.ts +4 -0
- package/lib/run-budget.d.ts.map +1 -0
- package/lib/run-budget.js +2 -0
- package/lib/run-budget.js.map +1 -0
- package/lib/runs.d.ts +9 -10
- package/lib/runs.d.ts.map +1 -1
- package/lib/secrets.d.ts +10 -21
- package/lib/secrets.d.ts.map +1 -1
- package/lib/store/agent-approval.d.ts +4 -5
- package/lib/store/agent-approval.d.ts.map +1 -1
- package/lib/store/agent-approval.js.map +1 -1
- package/lib/store/agent-run.d.ts +50 -52
- package/lib/store/agent-run.d.ts.map +1 -1
- package/lib/store/agent-run.js.map +1 -1
- package/lib/store/collections.d.ts +11 -12
- package/lib/store/collections.d.ts.map +1 -1
- package/lib/store/collections.js.map +1 -1
- package/lib/store/conversation-state.d.ts +14 -8
- package/lib/store/conversation-state.d.ts.map +1 -1
- package/lib/store/doc-analyzer.d.ts +7 -8
- package/lib/store/doc-analyzer.d.ts.map +1 -1
- package/lib/store/dsl-workflow.d.ts +10 -12
- package/lib/store/dsl-workflow.d.ts.map +1 -1
- package/lib/store/dsl-workflow.js.map +1 -1
- package/lib/store/duration.d.ts +12 -0
- package/lib/store/duration.d.ts.map +1 -0
- package/lib/store/duration.js +2 -0
- package/lib/store/duration.js.map +1 -0
- package/lib/store/grounded-extraction.d.ts +6 -7
- package/lib/store/grounded-extraction.d.ts.map +1 -1
- package/lib/store/intake-policy-schema.generated.d.ts.map +1 -1
- package/lib/store/intake-policy-schema.generated.js +143 -2
- package/lib/store/intake-policy-schema.generated.js.map +1 -1
- package/lib/store/process.d.ts +70 -69
- package/lib/store/process.d.ts.map +1 -1
- package/lib/store/process.js.map +1 -1
- package/lib/store/rendering.d.ts +6 -12
- package/lib/store/rendering.d.ts.map +1 -1
- package/lib/store/rendering.js +0 -5
- package/lib/store/rendering.js.map +1 -1
- package/lib/store/signals.d.ts +43 -0
- package/lib/store/signals.d.ts.map +1 -1
- package/lib/store/signals.js +6 -1
- package/lib/store/signals.js.map +1 -1
- package/lib/store/store.d.ts +92 -91
- package/lib/store/store.d.ts.map +1 -1
- package/lib/store/store.js.map +1 -1
- package/lib/store/task.d.ts +10 -14
- package/lib/store/task.d.ts.map +1 -1
- package/lib/store/workflow.d.ts +35 -41
- package/lib/store/workflow.d.ts.map +1 -1
- package/lib/store/workflow.js.map +1 -1
- package/lib/sts-token-types.d.ts +14 -19
- package/lib/sts-token-types.d.ts.map +1 -1
- package/lib/tools.d.ts +12 -13
- package/lib/tools.d.ts.map +1 -1
- package/lib/transient-tokens.d.ts +3 -3
- package/lib/transient-tokens.d.ts.map +1 -1
- package/lib/user.d.ts +16 -20
- package/lib/user.d.ts.map +1 -1
- package/lib/user.js.map +1 -1
- package/lib/vertesia-common.js +2 -2
- package/lib/vertesia-common.js.map +1 -1
- package/lib/views.d.ts +61 -64
- package/lib/views.d.ts.map +1 -1
- package/lib/views.js.map +1 -1
- package/lib/wire-types.generated.d.ts +11227 -0
- package/lib/wire-types.generated.d.ts.map +1 -0
- package/lib/wire-types.generated.js +4 -0
- package/lib/wire-types.generated.js.map +1 -0
- package/lib/workflow-analytics.d.ts +21 -19
- package/lib/workflow-analytics.d.ts.map +1 -1
- package/lib/workflow-analytics.js +2 -2
- package/lib/workflow-analytics.js.map +1 -1
- package/package.json +16 -11
- package/src/access-control-values.ts +2 -2
- package/src/access-control.ts +7 -15
- package/src/analytics.ts +6 -13
- package/src/api-contract/components.generated.json +2553 -1046
- package/src/api-contract/engine.ts +641 -0
- package/src/api-contract/index.ts +30 -661
- package/src/api-schemas/access-control.ts +18 -16
- package/src/api-schemas/account.ts +5 -12
- package/src/api-schemas/agent-budget.ts +60 -0
- package/src/api-schemas/agent-runs.ts +63 -27
- package/src/api-schemas/apikey.ts +11 -10
- package/src/api-schemas/app-lifecycle.ts +5 -0
- package/src/api-schemas/audit-trail.ts +175 -1
- package/src/api-schemas/content.ts +55 -0
- package/src/api-schemas/cost-analytics.ts +42 -2
- package/src/api-schemas/environment.ts +0 -1
- package/src/api-schemas/group.ts +2 -1
- package/src/api-schemas/index.ts +2 -0
- package/src/api-schemas/inference-profile.ts +151 -0
- package/src/api-schemas/interaction.ts +40 -1
- package/src/api-schemas/invites.ts +10 -9
- package/src/api-schemas/process.ts +78 -2
- package/src/api-schemas/project-configuration.ts +19 -1
- package/src/api-schemas/project.ts +19 -10
- package/src/api-schemas/quota.ts +7 -6
- package/src/api-schemas/registry.ts +164 -62
- package/src/api-schemas/run-budget.ts +23 -0
- package/src/api-schemas/secrets.ts +0 -84
- package/src/api-schemas/store.ts +12 -0
- package/src/api-schemas/user.ts +9 -8
- package/src/api-schemas/workflow-runs.ts +2 -0
- package/src/apikey.ts +30 -39
- package/src/apps.ts +116 -239
- package/src/audit-trail.ts +37 -35
- package/src/browser-credentials.ts +11 -23
- package/src/common.ts +17 -37
- package/src/content-query.ts +3 -4
- package/src/cost-analytics.ts +13 -35
- package/src/data-platform.ts +79 -168
- package/src/delegation.ts +4 -9
- package/src/email.ts +15 -29
- package/src/embeddings.ts +25 -51
- package/src/environment.ts +16 -33
- package/src/facets.ts +3 -4
- package/src/group.ts +6 -13
- package/src/index.ts +23 -0
- package/src/inference-profile.ts +20 -0
- package/src/integrations.ts +21 -41
- package/src/interaction.ts +68 -137
- package/src/meters.ts +4 -9
- package/src/oauth-server.ts +40 -81
- package/src/oauth.ts +9 -19
- package/src/payload.ts +11 -25
- package/src/pending-asks.ts +8 -22
- package/src/platform-event.ts +48 -122
- package/src/principal-context.ts +3 -3
- package/src/project.ts +43 -86
- package/src/prompt.ts +14 -31
- package/src/query.ts +10 -20
- package/src/rate-limiter.ts +7 -19
- package/src/refs.ts +2 -3
- package/src/roles/types.ts +5 -11
- package/src/run-budget.ts +4 -0
- package/src/runs.ts +9 -19
- package/src/secrets.ts +10 -42
- package/src/store/agent-approval.ts +4 -9
- package/src/store/agent-run.ts +53 -99
- package/src/store/collections.ts +11 -23
- package/src/store/conversation-state.ts +15 -15
- package/src/store/doc-analyzer.ts +7 -15
- package/src/store/dsl-workflow.ts +10 -23
- package/src/store/duration.ts +45 -0
- package/src/store/grounded-extraction.ts +6 -13
- package/src/store/intake-policy-schema.generated.ts +148 -2
- package/src/store/process.ts +70 -140
- package/src/store/rendering.ts +6 -19
- package/src/store/signals.ts +48 -0
- package/src/store/store.ts +92 -181
- package/src/store/task.ts +10 -24
- package/src/store/workflow.ts +35 -71
- package/src/sts-token-types.ts +14 -33
- package/src/tools.ts +12 -25
- package/src/transient-tokens.ts +3 -3
- package/src/user.ts +16 -40
- package/src/views.ts +61 -125
- package/src/wire-types.generated.ts +11888 -0
- package/src/workflow-analytics.ts +21 -19
- package/src/agent-resources.test.ts +0 -89
- package/src/api-contract/components.contract.test.ts +0 -99
- package/src/api-schemas/access-control.contract.test.ts +0 -209
- package/src/api-schemas/account-apikey.test.ts +0 -60
- package/src/api-schemas/account.contract.test.ts +0 -319
- package/src/api-schemas/adapter-edge-cases.test.ts +0 -499
- package/src/api-schemas/agent-communication.contract.test.ts +0 -90
- package/src/api-schemas/agent-history.contract.test.ts +0 -42
- package/src/api-schemas/agent-runs.contract.test.ts +0 -240
- package/src/api-schemas/api-discriminators.test.ts +0 -185
- package/src/api-schemas/apikey.contract.test.ts +0 -270
- package/src/api-schemas/app-delete-summary.contract.test.ts +0 -67
- package/src/api-schemas/bulk-operation.contract.test.ts +0 -39
- package/src/api-schemas/bundle-isolation.test.ts +0 -44
- package/src/api-schemas/commands.contract.test.ts +0 -51
- package/src/api-schemas/cost-analytics.contract.test.ts +0 -64
- package/src/api-schemas/dashboard.contract.test.ts +0 -138
- package/src/api-schemas/data-store.contract.test.ts +0 -97
- package/src/api-schemas/document-processing.contract.test.ts +0 -76
- package/src/api-schemas/emit-json-schema.test.ts +0 -36
- package/src/api-schemas/environment.contract.test.ts +0 -202
- package/src/api-schemas/group.contract.test.ts +0 -205
- package/src/api-schemas/indexing.contract.test.ts +0 -122
- package/src/api-schemas/interaction.contract.test.ts +0 -307
- package/src/api-schemas/invites.contract.test.ts +0 -268
- package/src/api-schemas/llumiverse.contract.test.ts +0 -179
- package/src/api-schemas/mcp-api-key.contract.test.ts +0 -125
- package/src/api-schemas/oauth.contract.test.ts +0 -181
- package/src/api-schemas/parameters.test.ts +0 -402
- package/src/api-schemas/process.contract.test.ts +0 -115
- package/src/api-schemas/project.contract.test.ts +0 -472
- package/src/api-schemas/pruning-limits.test.ts +0 -189
- package/src/api-schemas/quota.contract.test.ts +0 -147
- package/src/api-schemas/registry-groups.test.ts +0 -99
- package/src/api-schemas/response-pruning.test.ts +0 -260
- package/src/api-schemas/store.contract.test.ts +0 -378
- package/src/api-schemas/sts.contract.test.ts +0 -112
- package/src/api-schemas/user.contract.test.ts +0 -197
- package/src/api-schemas/views.contract.test.ts +0 -112
- package/src/api-schemas/zeno-response-contracts.test.ts +0 -380
- package/src/apps.test.ts +0 -89
- package/src/oauth-scopes.test.ts +0 -15
- package/src/roles.test.ts +0 -33
- package/src/schema-for-extraction.test.ts +0 -191
- package/src/store/agent-approval.test.ts +0 -18
- package/src/store/content-type-editing.test.ts +0 -17
- package/src/store/ms.d.ts +0 -42
- package/src/store/schedule.test.ts +0 -59
- package/src/store/workflow.test.ts +0 -640
- package/src/versions.test.ts +0 -13
|
@@ -1,240 +0,0 @@
|
|
|
1
|
-
import { describe, expect, expectTypeOf, it } from 'vitest';
|
|
2
|
-
import type {
|
|
3
|
-
AgentRunEvaluation,
|
|
4
|
-
AgentRunEvaluationRollup,
|
|
5
|
-
AgentRunFeedbackEntry,
|
|
6
|
-
AgentRunFeedbackPayload,
|
|
7
|
-
AgentRunFeedbackResponse,
|
|
8
|
-
} from '../store/agent-run.js';
|
|
9
|
-
import { AgentEventType, type TurnEvaluationEvent } from '../workflow-analytics.js';
|
|
10
|
-
import type {
|
|
11
|
-
AgentRunEvaluationRollupSchema,
|
|
12
|
-
AgentRunEvaluationSchema,
|
|
13
|
-
AgentRunFeedbackEntrySchema,
|
|
14
|
-
AgentRunFeedbackPayloadSchema,
|
|
15
|
-
AgentRunFeedbackResponseSchema,
|
|
16
|
-
} from './agent-runs.js';
|
|
17
|
-
import { validateApiRequest, validateApiResponse } from './registry.js';
|
|
18
|
-
|
|
19
|
-
const turnEvaluation: TurnEvaluationEvent = {
|
|
20
|
-
eventType: AgentEventType.TurnEvaluation,
|
|
21
|
-
eventId: 'run-1:main:1:answer',
|
|
22
|
-
timestamp: '2026-09-11T10:00:00.000Z',
|
|
23
|
-
runId: 'wf-run-1',
|
|
24
|
-
agentRunId: 'run-1',
|
|
25
|
-
model: 'claude',
|
|
26
|
-
environmentId: 'env-1',
|
|
27
|
-
environmentType: 'vertexai',
|
|
28
|
-
interactionId: 'sys:StudioAssistant',
|
|
29
|
-
schemaVersion: 1,
|
|
30
|
-
detectorVersion: 1,
|
|
31
|
-
workstreamId: 'main',
|
|
32
|
-
turnSeq: 1,
|
|
33
|
-
terminalType: 'answer',
|
|
34
|
-
startedAt: '2026-09-11T09:59:00.000Z',
|
|
35
|
-
endedAt: '2026-09-11T10:00:00.000Z',
|
|
36
|
-
durationMs: 60_000,
|
|
37
|
-
activeMs: 50_000,
|
|
38
|
-
askUserWaitMs: 0,
|
|
39
|
-
approvalWaitMs: 10_000,
|
|
40
|
-
toolCalls: 3,
|
|
41
|
-
errorToolResults: 1,
|
|
42
|
-
maxFailStreak: 1,
|
|
43
|
-
identicalRetryCount: 0,
|
|
44
|
-
unrecoveredTools: [],
|
|
45
|
-
errorClasses: { schema: 1, platform: 0, config: 0, environment: 0, other: 0 },
|
|
46
|
-
gatherCalls: 2,
|
|
47
|
-
gatherRatio: 2 / 3,
|
|
48
|
-
mutationAttempted: true,
|
|
49
|
-
mutationSucceeded: true,
|
|
50
|
-
rereadCount: 0,
|
|
51
|
-
overheadCalls: 0,
|
|
52
|
-
skillsLoaded: 0,
|
|
53
|
-
interruptedToolCalls: 0,
|
|
54
|
-
llmCalls: 4,
|
|
55
|
-
promptTokens: 1000,
|
|
56
|
-
completionTokens: 200,
|
|
57
|
-
cachedTokens: 800,
|
|
58
|
-
retryCompletionTokens: 50,
|
|
59
|
-
approvalsRequested: 1,
|
|
60
|
-
approvalsDenied: 0,
|
|
61
|
-
stopRequests: 0,
|
|
62
|
-
stallCorrectives: 0,
|
|
63
|
-
stallTrips: 0,
|
|
64
|
-
followupAfterAnswer: false,
|
|
65
|
-
severity: 'none',
|
|
66
|
-
flags: [],
|
|
67
|
-
tools: [
|
|
68
|
-
{
|
|
69
|
-
seq: 1,
|
|
70
|
-
toolUseId: 'tu-1',
|
|
71
|
-
name: 'create_view',
|
|
72
|
-
approvalClass: 'side_effecting',
|
|
73
|
-
ok: false,
|
|
74
|
-
errorClass: 'schema',
|
|
75
|
-
sig: 'abcd1234',
|
|
76
|
-
durationMs: 20,
|
|
77
|
-
},
|
|
78
|
-
],
|
|
79
|
-
toolsTruncated: 0,
|
|
80
|
-
};
|
|
81
|
-
|
|
82
|
-
describe('agent run evaluation API contracts', () => {
|
|
83
|
-
it('derives the public types from the runtime schemas', () => {
|
|
84
|
-
expectTypeOf<AgentRunFeedbackPayload>().toEqualTypeOf<
|
|
85
|
-
import('zod').z.infer<typeof AgentRunFeedbackPayloadSchema>
|
|
86
|
-
>();
|
|
87
|
-
expectTypeOf<AgentRunFeedbackResponse>().toEqualTypeOf<
|
|
88
|
-
import('zod').z.infer<typeof AgentRunFeedbackResponseSchema>
|
|
89
|
-
>();
|
|
90
|
-
expectTypeOf<AgentRunFeedbackEntry>().toEqualTypeOf<
|
|
91
|
-
import('zod').z.infer<typeof AgentRunFeedbackEntrySchema>
|
|
92
|
-
>();
|
|
93
|
-
expectTypeOf<AgentRunEvaluationRollup>().toEqualTypeOf<
|
|
94
|
-
import('zod').z.infer<typeof AgentRunEvaluationRollupSchema>
|
|
95
|
-
>();
|
|
96
|
-
expectTypeOf<AgentRunEvaluation>().toEqualTypeOf<import('zod').z.infer<typeof AgentRunEvaluationSchema>>();
|
|
97
|
-
});
|
|
98
|
-
|
|
99
|
-
it('accepts a turn_evaluation event through the ingest payload', () => {
|
|
100
|
-
expect(validateApiRequest('IngestAgentEventsPayload', { events: [turnEvaluation] }).valid).toBe(true);
|
|
101
|
-
});
|
|
102
|
-
|
|
103
|
-
it('accepts a turn_evaluation event from a producer that predates the stall counters', () => {
|
|
104
|
-
const { stallCorrectives: _c, stallTrips: _t, ...legacy } = turnEvaluation;
|
|
105
|
-
expect(validateApiRequest('IngestAgentEventsPayload', { events: [legacy] }).valid).toBe(true);
|
|
106
|
-
});
|
|
107
|
-
|
|
108
|
-
it('rejects a turn_evaluation event with an undeclared field', () => {
|
|
109
|
-
const events = [{ ...turnEvaluation, verdict: 'success' }];
|
|
110
|
-
expect(validateApiRequest('IngestAgentEventsPayload', { events }).valid).toBe(false);
|
|
111
|
-
});
|
|
112
|
-
|
|
113
|
-
it('accepts a feedback event and a judgement event', () => {
|
|
114
|
-
const base = {
|
|
115
|
-
timestamp: turnEvaluation.timestamp,
|
|
116
|
-
runId: 'wf-run-1',
|
|
117
|
-
agentRunId: 'run-1',
|
|
118
|
-
model: '',
|
|
119
|
-
environmentId: '',
|
|
120
|
-
environmentType: '',
|
|
121
|
-
interactionId: 'sys:StudioAssistant',
|
|
122
|
-
deployment: { env: 'staging', group: 'staging', version: 'abc' },
|
|
123
|
-
};
|
|
124
|
-
const events = [
|
|
125
|
-
{
|
|
126
|
-
...base,
|
|
127
|
-
eventType: 'feedback',
|
|
128
|
-
feedbackId: 'f1',
|
|
129
|
-
rating: 'down',
|
|
130
|
-
hasComment: false,
|
|
131
|
-
messageScoped: false,
|
|
132
|
-
replaced: false,
|
|
133
|
-
},
|
|
134
|
-
{
|
|
135
|
-
...base,
|
|
136
|
-
eventType: 'turn_judgement',
|
|
137
|
-
evaluationRev: 2,
|
|
138
|
-
workstreamId: 'main',
|
|
139
|
-
turnSeq: 1,
|
|
140
|
-
gate: 'signal',
|
|
141
|
-
sampleRate: 0,
|
|
142
|
-
selectedProbability: 1,
|
|
143
|
-
outcome: 'judged',
|
|
144
|
-
verdict: 'failure',
|
|
145
|
-
score: 0.2,
|
|
146
|
-
promptVersion: 'v1',
|
|
147
|
-
},
|
|
148
|
-
{
|
|
149
|
-
...base,
|
|
150
|
-
eventType: 'stall_breaker',
|
|
151
|
-
action: 'trip',
|
|
152
|
-
toolNames: ['fetch_document'],
|
|
153
|
-
repeatCount: 4,
|
|
154
|
-
stallMeasure: 4,
|
|
155
|
-
allErrored: false,
|
|
156
|
-
iteration: 7,
|
|
157
|
-
interactive: true,
|
|
158
|
-
workstreamId: 'main',
|
|
159
|
-
},
|
|
160
|
-
];
|
|
161
|
-
expect(validateApiRequest('IngestAgentEventsPayload', { events }).valid).toBe(true);
|
|
162
|
-
});
|
|
163
|
-
|
|
164
|
-
it('requires feedback_id and rejects the retired episode_seq field', () => {
|
|
165
|
-
expect(validateApiRequest('AgentRunFeedbackPayload', { rating: 'up' }).valid).toBe(false);
|
|
166
|
-
expect(validateApiRequest('AgentRunFeedbackPayload', { feedback_id: 'f1', rating: 'up' }).valid).toBe(true);
|
|
167
|
-
expect(
|
|
168
|
-
validateApiRequest('AgentRunFeedbackPayload', { feedback_id: 'f1', rating: 'up', episode_seq: 1 }).valid,
|
|
169
|
-
).toBe(false);
|
|
170
|
-
});
|
|
171
|
-
|
|
172
|
-
it('keeps the workflow rollup free of server-owned fields', () => {
|
|
173
|
-
const rollup: AgentRunEvaluationRollup = {
|
|
174
|
-
seq: 3,
|
|
175
|
-
detector_version: 1,
|
|
176
|
-
turns: 2,
|
|
177
|
-
severity: 'medium',
|
|
178
|
-
flags: ['unrecovered_tool'],
|
|
179
|
-
worst_turn_seq: 2,
|
|
180
|
-
last_terminal_type: 'answer',
|
|
181
|
-
totals: {
|
|
182
|
-
tool_calls: 5,
|
|
183
|
-
error_tool_results: 2,
|
|
184
|
-
unrecovered_tools: ['create_view'],
|
|
185
|
-
llm_calls: 6,
|
|
186
|
-
prompt_tokens: 100,
|
|
187
|
-
completion_tokens: 20,
|
|
188
|
-
cached_tokens: 0,
|
|
189
|
-
retry_completion_tokens: 5,
|
|
190
|
-
active_ms: 1000,
|
|
191
|
-
ask_user_wait_ms: 0,
|
|
192
|
-
approval_wait_ms: 0,
|
|
193
|
-
followups: 0,
|
|
194
|
-
approvals_requested: 0,
|
|
195
|
-
approvals_denied: 0,
|
|
196
|
-
stop_requests: 0,
|
|
197
|
-
stall_trips: 0,
|
|
198
|
-
},
|
|
199
|
-
updated_at: turnEvaluation.timestamp,
|
|
200
|
-
};
|
|
201
|
-
expect(validateApiRequest('UpdateAgentRunStatusPayload', { evaluation_rollup: rollup }).valid).toBe(true);
|
|
202
|
-
// Rollups stored or sent before the stall counter existed keep validating.
|
|
203
|
-
const { stall_trips: _s, ...legacyTotals } = rollup.totals;
|
|
204
|
-
expect(
|
|
205
|
-
validateApiRequest('UpdateAgentRunStatusPayload', {
|
|
206
|
-
evaluation_rollup: { ...rollup, totals: legacyTotals },
|
|
207
|
-
}).valid,
|
|
208
|
-
).toBe(true);
|
|
209
|
-
expect(
|
|
210
|
-
validateApiResponse('AgentRunEvaluation', {
|
|
211
|
-
rev: 1,
|
|
212
|
-
rollup: { ...rollup, totals: legacyTotals },
|
|
213
|
-
severity: 'medium',
|
|
214
|
-
flags: ['unrecovered_tool'],
|
|
215
|
-
contradicted: false,
|
|
216
|
-
updated_at: turnEvaluation.timestamp,
|
|
217
|
-
}).valid,
|
|
218
|
-
).toBe(true);
|
|
219
|
-
expect(
|
|
220
|
-
validateApiRequest('UpdateAgentRunStatusPayload', {
|
|
221
|
-
evaluation_rollup: { ...rollup, feedback_counts: { up: 1, down: 0 } },
|
|
222
|
-
}).valid,
|
|
223
|
-
).toBe(false);
|
|
224
|
-
});
|
|
225
|
-
|
|
226
|
-
it('validates the published evaluation summary', () => {
|
|
227
|
-
const evaluation: AgentRunEvaluation = {
|
|
228
|
-
rev: 2,
|
|
229
|
-
feedback_counts: { up: 0, down: 1, last_rating: 'down', last_reason_code: 'wrong_result' },
|
|
230
|
-
severity: 'none',
|
|
231
|
-
flags: [],
|
|
232
|
-
contradicted: true,
|
|
233
|
-
contradiction_reasons: ['feedback_down_on_clean_run'],
|
|
234
|
-
deployment_env: 'staging',
|
|
235
|
-
updated_at: turnEvaluation.timestamp,
|
|
236
|
-
};
|
|
237
|
-
expect(validateApiResponse('AgentRunEvaluation', evaluation).valid).toBe(true);
|
|
238
|
-
expect(validateApiRequest('ListAgentRunsQuery', { evaluation_severity: ['unrated', 'high'] }).valid).toBe(true);
|
|
239
|
-
});
|
|
240
|
-
});
|
|
@@ -1,185 +0,0 @@
|
|
|
1
|
-
import { describe, expect, it } from 'vitest';
|
|
2
|
-
import { type ApiComponentName, ApiSchemaComponents, validateApiResponse } from './registry.js';
|
|
3
|
-
|
|
4
|
-
/**
|
|
5
|
-
* The build-time half of `discriminator: true`.
|
|
6
|
-
*
|
|
7
|
-
* AJV applies its discriminator rules when it COMPILES a schema, not when it validates one, and it
|
|
8
|
-
* signals a union it cannot handle by throwing. Left unchecked that turns into a 500 on the first
|
|
9
|
-
* request to whichever endpoint publishes the offending component — a failure mode that depends on
|
|
10
|
-
* traffic and would reach a deployed environment before anyone saw it. Compiling every registered
|
|
11
|
-
* component here moves that to the build, and names the component when it happens.
|
|
12
|
-
*
|
|
13
|
-
* The rules a union has to satisfy, all of which `synthesizeDiscriminator` in the adapter already
|
|
14
|
-
* enforces before emitting a discriminator: `oneOf` members resolving to object schemas, a tag
|
|
15
|
-
* property present and REQUIRED in every branch, and a `const` or single-valued `enum` for the tag
|
|
16
|
-
* in each. A hand-written `.meta({ discriminator })` gets no such check when it is written, which
|
|
17
|
-
* is the case this test exists for.
|
|
18
|
-
*
|
|
19
|
-
* Generating a validator for each of the ~1000 components is real work: well under a second on a
|
|
20
|
-
* developer machine, ~8s on a loaded CI runner, past vitest's 5s default, hence the explicit budget
|
|
21
|
-
* below. It is generous on purpose — an unsupported discriminator makes AJV THROW during
|
|
22
|
-
* compilation, so a genuine regression is caught by the try/catch and never by the clock.
|
|
23
|
-
*/
|
|
24
|
-
const COMPILE_ALL_TIMEOUT_MS = 60_000;
|
|
25
|
-
|
|
26
|
-
describe('published discriminators', () => {
|
|
27
|
-
it(
|
|
28
|
-
'compiles every registered component under AJV discriminator support',
|
|
29
|
-
() => {
|
|
30
|
-
const failures: string[] = [];
|
|
31
|
-
for (const name of Object.keys(ApiSchemaComponents)) {
|
|
32
|
-
try {
|
|
33
|
-
// Compilation is the subject; the value only has to reach the validator. An
|
|
34
|
-
// invalid result is expected and irrelevant.
|
|
35
|
-
validateApiResponse(name as ApiComponentName, undefined);
|
|
36
|
-
} catch (err: unknown) {
|
|
37
|
-
failures.push(`${name}: ${err instanceof Error ? err.message : String(err)}`);
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
expect(failures, `components AJV could not compile:\n${failures.join('\n')}`).toEqual([]);
|
|
41
|
-
},
|
|
42
|
-
COMPILE_ALL_TIMEOUT_MS,
|
|
43
|
-
);
|
|
44
|
-
|
|
45
|
-
it('keeps discriminator mapping in the published components for generated clients', () => {
|
|
46
|
-
// AJV's copy drops `mapping`; the OpenAPI document must not. A Java or Go client reads the
|
|
47
|
-
// mapping to pick a concrete subtype, so losing it here would be a silent codegen
|
|
48
|
-
// regression that no schema assertion elsewhere would catch.
|
|
49
|
-
const union = ApiSchemaComponents.ToolCollectionObject as {
|
|
50
|
-
discriminator?: { propertyName?: string; mapping?: Record<string, string> };
|
|
51
|
-
};
|
|
52
|
-
expect(union.discriminator?.propertyName).toBe('type');
|
|
53
|
-
expect(union.discriminator?.mapping).toMatchObject({
|
|
54
|
-
mcp: '#/components/schemas/MCPToolCollectionObject',
|
|
55
|
-
});
|
|
56
|
-
});
|
|
57
|
-
|
|
58
|
-
it('reports only the tagged branch when a legacy MCP collection is missing its id', () => {
|
|
59
|
-
// The `hubspot-mcp-dev` shape: created before the write path required `id`, still served by
|
|
60
|
-
// the five-level resolution chain in fetch-tools.ts. Without discriminator support AJV also
|
|
61
|
-
// reported `oauth_app` as an undeclared property and `type` as not matching a constant —
|
|
62
|
-
// both from the vertesia_sdk branch this value never claimed to be.
|
|
63
|
-
const legacy = {
|
|
64
|
-
type: 'mcp',
|
|
65
|
-
name: 'HubSpot',
|
|
66
|
-
namespace: 'hubspot',
|
|
67
|
-
description: 'HubSpot MCP',
|
|
68
|
-
auth: 'oauth',
|
|
69
|
-
url: 'https://mcp.hubspot.com',
|
|
70
|
-
oauth_app: 'hubspot',
|
|
71
|
-
};
|
|
72
|
-
const result = validateApiResponse('ToolCollectionObject', legacy);
|
|
73
|
-
expect(result.valid).toBe(false);
|
|
74
|
-
if (result.valid) return;
|
|
75
|
-
expect(result.errors).toEqual(["/ must have required property 'id'"]);
|
|
76
|
-
});
|
|
77
|
-
|
|
78
|
-
/** A one-branch `condition` node, the smallest thing that reaches the untagged `branches` union. */
|
|
79
|
-
function withBranch(branch: unknown): unknown {
|
|
80
|
-
return {
|
|
81
|
-
format_version: 1,
|
|
82
|
-
process: 'demo',
|
|
83
|
-
initial: 'a',
|
|
84
|
-
context: { schema: { type: 'object' }, initial: {} },
|
|
85
|
-
nodes: { a: { type: 'condition', branches: [branch] } },
|
|
86
|
-
};
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
it('attributes every claim under an untagged union to the candidate that made it', () => {
|
|
90
|
-
// The process-runs list, which `ProcessDefinitionBody` reaches through
|
|
91
|
-
// `ListAgentRunsResponse.items[].process_definition_snapshot`. `branches` is a `oneOf` with
|
|
92
|
-
// no tag, so AJV reports every candidate's failures flat and unattributed:
|
|
93
|
-
//
|
|
94
|
-
// /nodes/a/branches/0 must NOT have additional properties: label, to, when
|
|
95
|
-
//
|
|
96
|
-
// `to` and `when` are declared on `BranchDefinition` — the shape this value plainly means —
|
|
97
|
-
// so read as a fact that line sends the reader after two valid fields.
|
|
98
|
-
const result = validateApiResponse(
|
|
99
|
-
'ProcessDefinitionBody',
|
|
100
|
-
withBranch({ label: 'Accepted', to: 'accepted', when: { '==': [{ var: 'ok' }, true] } }),
|
|
101
|
-
);
|
|
102
|
-
expect(result.valid).toBe(false);
|
|
103
|
-
if (result.valid) return;
|
|
104
|
-
|
|
105
|
-
// Against the candidate it means, `label` is the whole story.
|
|
106
|
-
expect(result.errors).toContain(
|
|
107
|
-
'/nodes/a/branches/0 as BranchDefinition: must NOT have additional properties: label',
|
|
108
|
-
);
|
|
109
|
-
// The other candidate is still reported — with no tag neither can be ruled out — but named,
|
|
110
|
-
// so it reads as a claim about that shape rather than about the value.
|
|
111
|
-
expect(result.errors).toContain(
|
|
112
|
-
'/nodes/a/branches/0 as BranchNodeBranchDefinition: must NOT have additional properties: label, to, when',
|
|
113
|
-
);
|
|
114
|
-
// Every attributed claim names a candidate of THIS union, never some nearer schema.
|
|
115
|
-
const named = result.issues.filter((i) => i.component !== undefined).map((i) => i.component);
|
|
116
|
-
expect(new Set(named)).toEqual(new Set(['BranchDefinition', 'BranchNodeBranchDefinition']));
|
|
117
|
-
});
|
|
118
|
-
|
|
119
|
-
it('attributes candidates that fail at different paths', () => {
|
|
120
|
-
// The case that defeats counting candidates per instance path: with a malformed `when`, the
|
|
121
|
-
// intended candidate fails at `/when` while the other fails at the branch root, so no path
|
|
122
|
-
// has two candidates and a per-path rule drops EVERY name — leaving
|
|
123
|
-
//
|
|
124
|
-
// /nodes/a/branches/0 must NOT have additional properties: to, when
|
|
125
|
-
//
|
|
126
|
-
// stated as a bare fact again. Attribution has to follow the union, not the path.
|
|
127
|
-
const result = validateApiResponse('ProcessDefinitionBody', withBranch({ to: 'accepted', when: 'bad' }));
|
|
128
|
-
expect(result.valid).toBe(false);
|
|
129
|
-
if (result.valid) return;
|
|
130
|
-
|
|
131
|
-
expect(result.errors).toContain('/nodes/a/branches/0/when as BranchDefinition: must be object');
|
|
132
|
-
expect(result.errors).toContain(
|
|
133
|
-
'/nodes/a/branches/0 as BranchNodeBranchDefinition: must NOT have additional properties: to, when',
|
|
134
|
-
);
|
|
135
|
-
// The point of the fix: nothing under a failed union is left unattributed except the union's
|
|
136
|
-
// own line, so no candidate's complaint can be mistaken for a fact about the value.
|
|
137
|
-
const unattributed = result.issues.filter((i) => i.component === undefined);
|
|
138
|
-
expect(unattributed.map((i) => i.message)).toEqual(['must match exactly one schema in oneOf']);
|
|
139
|
-
});
|
|
140
|
-
|
|
141
|
-
it('leaves the component off outside a union', () => {
|
|
142
|
-
// A component name marks a claim as conditional. Attaching one where the issue holds
|
|
143
|
-
// outright would weaken a fact, besides spending characters against the response budget.
|
|
144
|
-
const result = validateApiResponse('ProcessDefinitionBody', {
|
|
145
|
-
format_version: 1,
|
|
146
|
-
process: 'demo',
|
|
147
|
-
initial: 'a',
|
|
148
|
-
title: 'Undeclared at the body level',
|
|
149
|
-
context: { schema: { type: 'object' }, initial: {} },
|
|
150
|
-
nodes: {},
|
|
151
|
-
});
|
|
152
|
-
expect(result.valid).toBe(false);
|
|
153
|
-
if (result.valid) return;
|
|
154
|
-
expect(result.issues).toEqual([
|
|
155
|
-
{ path: '/', message: 'must NOT have additional properties', undeclared: ['title'], component: undefined },
|
|
156
|
-
]);
|
|
157
|
-
expect(result.errors).toEqual(['/ must NOT have additional properties: title']);
|
|
158
|
-
});
|
|
159
|
-
|
|
160
|
-
it('still gathers every undeclared name one schema reports at a path', () => {
|
|
161
|
-
// The case gathering exists for, unaffected by the split above: one strict object, many
|
|
162
|
-
// foreign keys — an unmapped Mongoose subdocument — stays a single issue.
|
|
163
|
-
const result = validateApiResponse('ProcessDefinitionBody', {
|
|
164
|
-
format_version: 1,
|
|
165
|
-
process: 'demo',
|
|
166
|
-
initial: 'a',
|
|
167
|
-
context: { schema: { type: 'object' }, initial: {} },
|
|
168
|
-
nodes: {},
|
|
169
|
-
$__parent: {},
|
|
170
|
-
$isNew: false,
|
|
171
|
-
_doc: {},
|
|
172
|
-
});
|
|
173
|
-
expect(result.valid).toBe(false);
|
|
174
|
-
if (result.valid) return;
|
|
175
|
-
expect(result.issues).toHaveLength(1);
|
|
176
|
-
expect(result.issues[0].undeclared).toEqual(['$__parent', '$isNew', '_doc']);
|
|
177
|
-
});
|
|
178
|
-
|
|
179
|
-
it('rejects a value whose tag names no branch', () => {
|
|
180
|
-
const result = validateApiResponse('ToolCollectionObject', { type: 'nonesuch', url: 'https://example.com' });
|
|
181
|
-
expect(result.valid).toBe(false);
|
|
182
|
-
if (result.valid) return;
|
|
183
|
-
expect(result.errors.join('; ')).toContain('tag');
|
|
184
|
-
});
|
|
185
|
-
});
|