@vertesia/common 1.5.0-dev.20260722.120446Z → 1.5.0-dev.20260804.124748Z
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 +98 -0
- package/lib/access-control-values.d.ts.map +1 -0
- package/lib/access-control-values.js +101 -0
- package/lib/access-control-values.js.map +1 -0
- package/lib/access-control.d.ts +22 -119
- package/lib/access-control.d.ts.map +1 -1
- package/lib/access-control.js +6 -78
- package/lib/access-control.js.map +1 -1
- package/lib/account-values.d.ts +53 -0
- package/lib/account-values.d.ts.map +1 -0
- package/lib/account-values.js +91 -0
- package/lib/account-values.js.map +1 -0
- package/lib/analytics.d.ts +12 -38
- package/lib/analytics.d.ts.map +1 -1
- package/lib/api-schemas/access-control.d.ts +215 -0
- package/lib/api-schemas/access-control.d.ts.map +1 -0
- package/lib/api-schemas/access-control.js +165 -0
- package/lib/api-schemas/access-control.js.map +1 -0
- package/lib/api-schemas/account.d.ts +101 -0
- package/lib/api-schemas/account.d.ts.map +1 -0
- package/lib/api-schemas/account.js +136 -0
- package/lib/api-schemas/account.js.map +1 -0
- package/lib/api-schemas/adapter.d.ts +80 -0
- package/lib/api-schemas/adapter.d.ts.map +1 -0
- package/lib/api-schemas/adapter.js +726 -0
- package/lib/api-schemas/adapter.js.map +1 -0
- package/lib/api-schemas/agent-runs.d.ts +3781 -0
- package/lib/api-schemas/agent-runs.d.ts.map +1 -0
- package/lib/api-schemas/agent-runs.js +991 -0
- package/lib/api-schemas/agent-runs.js.map +1 -0
- package/lib/api-schemas/analytics.d.ts +86 -0
- package/lib/api-schemas/analytics.d.ts.map +1 -0
- package/lib/api-schemas/analytics.js +58 -0
- package/lib/api-schemas/analytics.js.map +1 -0
- package/lib/api-schemas/apikey.d.ts +231 -0
- package/lib/api-schemas/apikey.d.ts.map +1 -0
- package/lib/api-schemas/apikey.js +172 -0
- package/lib/api-schemas/apikey.js.map +1 -0
- package/lib/api-schemas/app-lifecycle.d.ts +1114 -0
- package/lib/api-schemas/app-lifecycle.d.ts.map +1 -0
- package/lib/api-schemas/app-lifecycle.js +750 -0
- package/lib/api-schemas/app-lifecycle.js.map +1 -0
- package/lib/api-schemas/app-runtime.d.ts +9056 -0
- package/lib/api-schemas/app-runtime.d.ts.map +1 -0
- package/lib/api-schemas/app-runtime.js +782 -0
- package/lib/api-schemas/app-runtime.js.map +1 -0
- package/lib/api-schemas/apps.d.ts +247 -0
- package/lib/api-schemas/apps.d.ts.map +1 -0
- package/lib/api-schemas/apps.js +366 -0
- package/lib/api-schemas/apps.js.map +1 -0
- package/lib/api-schemas/audit-trail.d.ts +465 -0
- package/lib/api-schemas/audit-trail.d.ts.map +1 -0
- package/lib/api-schemas/audit-trail.js +218 -0
- package/lib/api-schemas/audit-trail.js.map +1 -0
- package/lib/api-schemas/bulk-operation.d.ts +104 -0
- package/lib/api-schemas/bulk-operation.d.ts.map +1 -0
- package/lib/api-schemas/bulk-operation.js +66 -0
- package/lib/api-schemas/bulk-operation.js.map +1 -0
- package/lib/api-schemas/commands.d.ts +50 -0
- package/lib/api-schemas/commands.d.ts.map +1 -0
- package/lib/api-schemas/commands.js +58 -0
- package/lib/api-schemas/commands.js.map +1 -0
- package/lib/api-schemas/content.d.ts +3561 -0
- package/lib/api-schemas/content.d.ts.map +1 -0
- package/lib/api-schemas/content.js +842 -0
- package/lib/api-schemas/content.js.map +1 -0
- package/lib/api-schemas/cost-analytics.d.ts +300 -0
- package/lib/api-schemas/cost-analytics.d.ts.map +1 -0
- package/lib/api-schemas/cost-analytics.js +218 -0
- package/lib/api-schemas/cost-analytics.js.map +1 -0
- package/lib/api-schemas/dashboard.d.ts +408 -0
- package/lib/api-schemas/dashboard.d.ts.map +1 -0
- package/lib/api-schemas/dashboard.js +311 -0
- package/lib/api-schemas/dashboard.js.map +1 -0
- package/lib/api-schemas/data-store.d.ts +1650 -0
- package/lib/api-schemas/data-store.d.ts.map +1 -0
- package/lib/api-schemas/data-store.js +504 -0
- package/lib/api-schemas/data-store.js.map +1 -0
- package/lib/api-schemas/document-processing.d.ts +1501 -0
- package/lib/api-schemas/document-processing.d.ts.map +1 -0
- package/lib/api-schemas/document-processing.js +312 -0
- package/lib/api-schemas/document-processing.js.map +1 -0
- package/lib/api-schemas/embeddings.d.ts +184 -0
- package/lib/api-schemas/embeddings.d.ts.map +1 -0
- package/lib/api-schemas/embeddings.js +102 -0
- package/lib/api-schemas/embeddings.js.map +1 -0
- package/lib/api-schemas/environment.d.ts +412 -0
- package/lib/api-schemas/environment.d.ts.map +1 -0
- package/lib/api-schemas/environment.js +170 -0
- package/lib/api-schemas/environment.js.map +1 -0
- package/lib/api-schemas/events.d.ts +4880 -0
- package/lib/api-schemas/events.d.ts.map +1 -0
- package/lib/api-schemas/events.js +832 -0
- package/lib/api-schemas/events.js.map +1 -0
- package/lib/api-schemas/files.d.ts +107 -0
- package/lib/api-schemas/files.d.ts.map +1 -0
- package/lib/api-schemas/files.js +137 -0
- package/lib/api-schemas/files.js.map +1 -0
- package/lib/api-schemas/group.d.ts +122 -0
- package/lib/api-schemas/group.d.ts.map +1 -0
- package/lib/api-schemas/group.js +142 -0
- package/lib/api-schemas/group.js.map +1 -0
- package/lib/api-schemas/index.d.ts +36 -0
- package/lib/api-schemas/index.d.ts.map +1 -0
- package/lib/api-schemas/index.js +36 -0
- package/lib/api-schemas/index.js.map +1 -0
- package/lib/api-schemas/indexing.d.ts +144 -0
- package/lib/api-schemas/indexing.d.ts.map +1 -0
- package/lib/api-schemas/indexing.js +217 -0
- package/lib/api-schemas/indexing.js.map +1 -0
- package/lib/api-schemas/integrations.d.ts +269 -0
- package/lib/api-schemas/integrations.d.ts.map +1 -0
- package/lib/api-schemas/integrations.js +335 -0
- package/lib/api-schemas/integrations.js.map +1 -0
- package/lib/api-schemas/interaction.d.ts +22454 -0
- package/lib/api-schemas/interaction.d.ts.map +1 -0
- package/lib/api-schemas/interaction.js +2065 -0
- package/lib/api-schemas/interaction.js.map +1 -0
- package/lib/api-schemas/invites.d.ts +162 -0
- package/lib/api-schemas/invites.d.ts.map +1 -0
- package/lib/api-schemas/invites.js +106 -0
- package/lib/api-schemas/invites.js.map +1 -0
- package/lib/api-schemas/oauth-server.d.ts +415 -0
- package/lib/api-schemas/oauth-server.d.ts.map +1 -0
- package/lib/api-schemas/oauth-server.js +193 -0
- package/lib/api-schemas/oauth-server.js.map +1 -0
- package/lib/api-schemas/oauth.d.ts +150 -0
- package/lib/api-schemas/oauth.d.ts.map +1 -0
- package/lib/api-schemas/oauth.js +148 -0
- package/lib/api-schemas/oauth.js.map +1 -0
- package/lib/api-schemas/parameters.d.ts +64 -0
- package/lib/api-schemas/parameters.d.ts.map +1 -0
- package/lib/api-schemas/parameters.js +246 -0
- package/lib/api-schemas/parameters.js.map +1 -0
- package/lib/api-schemas/process.d.ts +499 -0
- package/lib/api-schemas/process.d.ts.map +1 -0
- package/lib/api-schemas/process.js +817 -0
- package/lib/api-schemas/process.js.map +1 -0
- package/lib/api-schemas/project-configuration.d.ts +4900 -0
- package/lib/api-schemas/project-configuration.d.ts.map +1 -0
- package/lib/api-schemas/project-configuration.js +425 -0
- package/lib/api-schemas/project-configuration.js.map +1 -0
- package/lib/api-schemas/project.d.ts +7247 -0
- package/lib/api-schemas/project.d.ts.map +1 -0
- package/lib/api-schemas/project.js +185 -0
- package/lib/api-schemas/project.js.map +1 -0
- package/lib/api-schemas/prompt.d.ts +70 -0
- package/lib/api-schemas/prompt.d.ts.map +1 -0
- package/lib/api-schemas/prompt.js +77 -0
- package/lib/api-schemas/prompt.js.map +1 -0
- package/lib/api-schemas/quota.d.ts +90 -0
- package/lib/api-schemas/quota.d.ts.map +1 -0
- package/lib/api-schemas/quota.js +95 -0
- package/lib/api-schemas/quota.js.map +1 -0
- package/lib/api-schemas/registry.d.ts +97458 -0
- package/lib/api-schemas/registry.d.ts.map +1 -0
- package/lib/api-schemas/registry.js +2586 -0
- package/lib/api-schemas/registry.js.map +1 -0
- package/lib/api-schemas/schema-primitives.d.ts +5 -0
- package/lib/api-schemas/schema-primitives.d.ts.map +1 -0
- package/lib/api-schemas/schema-primitives.js +11 -0
- package/lib/api-schemas/schema-primitives.js.map +1 -0
- package/lib/api-schemas/secrets.d.ts +497 -0
- package/lib/api-schemas/secrets.d.ts.map +1 -0
- package/lib/api-schemas/secrets.js +298 -0
- package/lib/api-schemas/secrets.js.map +1 -0
- package/lib/api-schemas/store.d.ts +22140 -0
- package/lib/api-schemas/store.d.ts.map +1 -0
- package/lib/api-schemas/store.js +557 -0
- package/lib/api-schemas/store.js.map +1 -0
- package/lib/api-schemas/sts.d.ts +156 -0
- package/lib/api-schemas/sts.d.ts.map +1 -0
- package/lib/api-schemas/sts.js +96 -0
- package/lib/api-schemas/sts.js.map +1 -0
- package/lib/api-schemas/task.d.ts +215 -0
- package/lib/api-schemas/task.d.ts.map +1 -0
- package/lib/api-schemas/task.js +95 -0
- package/lib/api-schemas/task.js.map +1 -0
- package/lib/api-schemas/tools.d.ts +111 -0
- package/lib/api-schemas/tools.d.ts.map +1 -0
- package/lib/api-schemas/tools.js +122 -0
- package/lib/api-schemas/tools.js.map +1 -0
- package/lib/api-schemas/user.d.ts +208 -0
- package/lib/api-schemas/user.d.ts.map +1 -0
- package/lib/api-schemas/user.js +180 -0
- package/lib/api-schemas/user.js.map +1 -0
- package/lib/api-schemas/view-execution.d.ts +3163 -0
- package/lib/api-schemas/view-execution.d.ts.map +1 -0
- package/lib/api-schemas/view-execution.js +172 -0
- package/lib/api-schemas/view-execution.js.map +1 -0
- package/lib/api-schemas/views.d.ts +5990 -0
- package/lib/api-schemas/views.d.ts.map +1 -0
- package/lib/api-schemas/views.js +396 -0
- package/lib/api-schemas/views.js.map +1 -0
- package/lib/api-schemas/workflow-runs.d.ts +2209 -0
- package/lib/api-schemas/workflow-runs.d.ts.map +1 -0
- package/lib/api-schemas/workflow-runs.js +589 -0
- package/lib/api-schemas/workflow-runs.js.map +1 -0
- package/lib/apikey-values.d.ts +10 -0
- package/lib/apikey-values.d.ts.map +1 -0
- package/lib/apikey-values.js +11 -0
- package/lib/apikey-values.js.map +1 -0
- package/lib/apikey.d.ts +37 -36
- package/lib/apikey.d.ts.map +1 -1
- package/lib/apikey.js +5 -4
- package/lib/apikey.js.map +1 -1
- package/lib/apps.d.ts +116 -1121
- package/lib/apps.d.ts.map +1 -1
- package/lib/apps.js.map +1 -1
- package/lib/ask-user.d.ts +8 -1
- package/lib/ask-user.d.ts.map +1 -1
- package/lib/audit-trail.d.ts +17 -128
- package/lib/audit-trail.d.ts.map +1 -1
- package/lib/audit-trail.js.map +1 -1
- package/lib/browser-credentials.d.ts +11 -106
- package/lib/browser-credentials.d.ts.map +1 -1
- package/lib/common.d.ts +59 -81
- package/lib/common.d.ts.map +1 -1
- package/lib/cost-analytics.d.ts +14 -167
- package/lib/cost-analytics.d.ts.map +1 -1
- package/lib/cost-analytics.js.map +1 -1
- package/lib/data-platform.d.ts +122 -786
- package/lib/data-platform.d.ts.map +1 -1
- package/lib/data-platform.js +41 -61
- package/lib/data-platform.js.map +1 -1
- package/lib/email.d.ts +5 -17
- package/lib/email.d.ts.map +1 -1
- package/lib/email.js +0 -3
- package/lib/email.js.map +1 -1
- package/lib/embeddings.d.ts +14 -56
- package/lib/embeddings.d.ts.map +1 -1
- package/lib/environment.d.ts +19 -113
- package/lib/environment.d.ts.map +1 -1
- package/lib/environment.js +3 -0
- package/lib/environment.js.map +1 -1
- package/lib/facets.d.ts +4 -7
- package/lib/facets.d.ts.map +1 -1
- package/lib/group.d.ts +33 -39
- package/lib/group.d.ts.map +1 -1
- package/lib/group.js +0 -1
- package/lib/group.js.map +1 -1
- package/lib/index.d.ts +7 -0
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js.map +1 -1
- package/lib/integrations.d.ts +20 -108
- package/lib/integrations.d.ts.map +1 -1
- package/lib/integrations.js.map +1 -1
- package/lib/interaction-values.d.ts +11 -0
- package/lib/interaction-values.d.ts.map +1 -0
- package/lib/interaction-values.js +24 -0
- package/lib/interaction-values.js.map +1 -0
- package/lib/interaction.d.ts +116 -734
- package/lib/interaction.d.ts.map +1 -1
- package/lib/interaction.js +56 -12
- package/lib/interaction.js.map +1 -1
- package/lib/meters.d.ts +11 -7
- package/lib/meters.d.ts.map +1 -1
- package/lib/meters.js.map +1 -1
- package/lib/oauth-server.d.ts +33 -119
- package/lib/oauth-server.d.ts.map +1 -1
- package/lib/oauth.d.ts +14 -96
- package/lib/oauth.d.ts.map +1 -1
- package/lib/oauth.js +0 -4
- package/lib/oauth.js.map +1 -1
- package/lib/payload.d.ts +15 -38
- package/lib/payload.d.ts.map +1 -1
- package/lib/platform-event.d.ts +49 -462
- package/lib/platform-event.d.ts.map +1 -1
- package/lib/platform-event.js.map +1 -1
- package/lib/principal-context.d.ts +10 -15
- package/lib/principal-context.d.ts.map +1 -1
- package/lib/project-values.d.ts +24 -0
- package/lib/project-values.d.ts.map +1 -0
- package/lib/project-values.js +42 -0
- package/lib/project-values.js.map +1 -0
- package/lib/project.d.ts +55 -503
- package/lib/project.d.ts.map +1 -1
- package/lib/project.js +6 -76
- package/lib/project.js.map +1 -1
- package/lib/prompt.d.ts +20 -51
- package/lib/prompt.d.ts.map +1 -1
- package/lib/prompt.js.map +1 -1
- package/lib/query.d.ts +27 -88
- package/lib/query.d.ts.map +1 -1
- package/lib/rate-limiter.d.ts +19 -70
- package/lib/rate-limiter.d.ts.map +1 -1
- package/lib/rate-limiter.js +0 -3
- package/lib/rate-limiter.js.map +1 -1
- package/lib/refs.d.ts +3 -11
- package/lib/refs.d.ts.map +1 -1
- package/lib/refs.js.map +1 -1
- package/lib/roles/types.d.ts +14 -20
- package/lib/roles/types.d.ts.map +1 -1
- package/lib/roles/types.js +5 -9
- package/lib/roles/types.js.map +1 -1
- package/lib/runs.d.ts +6 -25
- package/lib/runs.d.ts.map +1 -1
- package/lib/secrets.d.ts +20 -105
- package/lib/secrets.d.ts.map +1 -1
- package/lib/store/agent-approval.d.ts +5 -14
- 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 +63 -342
- package/lib/store/agent-run.d.ts.map +1 -1
- package/lib/store/collections.d.ts +11 -63
- package/lib/store/collections.d.ts.map +1 -1
- package/lib/store/collections.js.map +1 -1
- package/lib/store/conversation-state.d.ts +63 -61
- package/lib/store/conversation-state.d.ts.map +1 -1
- package/lib/store/conversation-state.js +2 -0
- package/lib/store/conversation-state.js.map +1 -1
- package/lib/store/doc-analyzer.d.ts +9 -32
- package/lib/store/doc-analyzer.d.ts.map +1 -1
- package/lib/store/dsl-workflow.d.ts +37 -151
- package/lib/store/dsl-workflow.d.ts.map +1 -1
- package/lib/store/dsl-workflow.js.map +1 -1
- package/lib/store/editing-policy-schema.generated.d.ts +3 -0
- package/lib/store/editing-policy-schema.generated.d.ts.map +1 -0
- package/lib/store/editing-policy-schema.generated.js +28 -0
- package/lib/store/editing-policy-schema.generated.js.map +1 -0
- package/lib/store/grounded-extraction.d.ts +7 -104
- package/lib/store/grounded-extraction.d.ts.map +1 -1
- package/lib/store/grounded-extraction.js.map +1 -1
- package/lib/store/index.d.ts +2 -0
- package/lib/store/index.d.ts.map +1 -1
- package/lib/store/index.js +3 -0
- package/lib/store/index.js.map +1 -1
- package/lib/store/intake-policy-schema.generated.d.ts +3 -0
- package/lib/store/intake-policy-schema.generated.d.ts.map +1 -0
- package/lib/store/intake-policy-schema.generated.js +1425 -0
- package/lib/store/intake-policy-schema.generated.js.map +1 -0
- package/lib/store/process-schema.d.ts +80 -0
- package/lib/store/process-schema.d.ts.map +1 -1
- package/lib/store/process-schema.js +79 -0
- package/lib/store/process-schema.js.map +1 -1
- package/lib/store/process-validation.d.ts.map +1 -1
- package/lib/store/process-validation.js +70 -2
- package/lib/store/process-validation.js.map +1 -1
- package/lib/store/process.d.ts +36 -125
- package/lib/store/process.d.ts.map +1 -1
- package/lib/store/process.js.map +1 -1
- package/lib/store/rendering.d.ts +9 -64
- package/lib/store/rendering.d.ts.map +1 -1
- package/lib/store/rendering.js.map +1 -1
- package/lib/store/store.d.ts +98 -693
- package/lib/store/store.d.ts.map +1 -1
- package/lib/store/store.js +4 -443
- package/lib/store/store.js.map +1 -1
- package/lib/store/task.d.ts +15 -59
- package/lib/store/task.d.ts.map +1 -1
- package/lib/store/task.js +0 -3
- package/lib/store/task.js.map +1 -1
- package/lib/store/workflow.d.ts +56 -516
- package/lib/store/workflow.d.ts.map +1 -1
- package/lib/store/workflow.js +28 -11
- package/lib/store/workflow.js.map +1 -1
- package/lib/sts-token-types.d.ts +12 -66
- package/lib/sts-token-types.d.ts.map +1 -1
- package/lib/sts-token-types.js.map +1 -1
- package/lib/tools.d.ts +8 -100
- package/lib/tools.d.ts.map +1 -1
- package/lib/transient-tokens-values.d.ts +11 -0
- package/lib/transient-tokens-values.d.ts.map +1 -0
- package/lib/transient-tokens-values.js +12 -0
- package/lib/transient-tokens-values.js.map +1 -0
- package/lib/transient-tokens.d.ts +15 -13
- package/lib/transient-tokens.d.ts.map +1 -1
- package/lib/transient-tokens.js +5 -5
- package/lib/transient-tokens.js.map +1 -1
- package/lib/user.d.ts +54 -155
- package/lib/user.d.ts.map +1 -1
- package/lib/user.js +1 -78
- package/lib/user.js.map +1 -1
- package/lib/versions.d.ts +24 -1
- package/lib/versions.d.ts.map +1 -1
- package/lib/versions.js +23 -0
- package/lib/versions.js.map +1 -1
- package/lib/vertesia-common.js +6 -2
- package/lib/vertesia-common.js.map +1 -1
- package/lib/views-schema.d.ts +4 -4
- package/lib/views.d.ts +56 -312
- package/lib/views.d.ts.map +1 -1
- package/lib/views.js.map +1 -1
- package/package.json +14 -5
- package/src/access-control-values.ts +113 -0
- package/src/access-control.ts +33 -138
- package/src/account-values.ts +95 -0
- package/src/agent-resources.test.ts +100 -0
- package/src/analytics.ts +18 -42
- package/src/api-schemas/access-control.contract.test.ts +209 -0
- package/src/api-schemas/access-control.ts +208 -0
- package/src/api-schemas/account.contract.test.ts +318 -0
- package/src/api-schemas/account.ts +150 -0
- package/src/api-schemas/adapter-edge-cases.test.ts +480 -0
- package/src/api-schemas/adapter.ts +778 -0
- package/src/api-schemas/agent-runs.ts +1081 -0
- package/src/api-schemas/analytics.ts +65 -0
- package/src/api-schemas/apikey.contract.test.ts +270 -0
- package/src/api-schemas/apikey.ts +199 -0
- package/src/api-schemas/app-lifecycle.ts +841 -0
- package/src/api-schemas/app-runtime.ts +919 -0
- package/src/api-schemas/apps.ts +415 -0
- package/src/api-schemas/audit-trail.ts +243 -0
- package/src/api-schemas/bulk-operation.contract.test.ts +39 -0
- package/src/api-schemas/bulk-operation.ts +75 -0
- package/src/api-schemas/bundle-isolation.test.ts +80 -0
- package/src/api-schemas/commands.contract.test.ts +51 -0
- package/src/api-schemas/commands.ts +62 -0
- package/src/api-schemas/content.ts +939 -0
- package/src/api-schemas/cost-analytics.contract.test.ts +64 -0
- package/src/api-schemas/cost-analytics.ts +235 -0
- package/src/api-schemas/dashboard.contract.test.ts +127 -0
- package/src/api-schemas/dashboard.ts +351 -0
- package/src/api-schemas/data-store.contract.test.ts +91 -0
- package/src/api-schemas/data-store.ts +571 -0
- package/src/api-schemas/document-processing.contract.test.ts +76 -0
- package/src/api-schemas/document-processing.ts +344 -0
- package/src/api-schemas/embeddings.ts +113 -0
- package/src/api-schemas/environment.contract.test.ts +184 -0
- package/src/api-schemas/environment.ts +190 -0
- package/src/api-schemas/events.ts +921 -0
- package/src/api-schemas/files.ts +159 -0
- package/src/api-schemas/group.contract.test.ts +205 -0
- package/src/api-schemas/group.ts +155 -0
- package/src/api-schemas/index.ts +35 -0
- package/src/api-schemas/indexing.contract.test.ts +83 -0
- package/src/api-schemas/indexing.ts +234 -0
- package/src/api-schemas/integrations.ts +369 -0
- package/src/api-schemas/interaction.ts +2357 -0
- package/src/api-schemas/invites.contract.test.ts +268 -0
- package/src/api-schemas/invites.ts +127 -0
- package/src/api-schemas/llumiverse.contract.test.ts +108 -0
- package/src/api-schemas/oauth-server.ts +219 -0
- package/src/api-schemas/oauth.contract.test.ts +118 -0
- package/src/api-schemas/oauth.ts +166 -0
- package/src/api-schemas/parameters.test.ts +402 -0
- package/src/api-schemas/parameters.ts +310 -0
- package/src/api-schemas/process.ts +929 -0
- package/src/api-schemas/project-configuration.ts +478 -0
- package/src/api-schemas/project.contract.test.ts +365 -0
- package/src/api-schemas/project.ts +214 -0
- package/src/api-schemas/prompt.ts +88 -0
- package/src/api-schemas/pruning-limits.test.ts +189 -0
- package/src/api-schemas/quota.contract.test.ts +147 -0
- package/src/api-schemas/quota.ts +122 -0
- package/src/api-schemas/registry-groups.test.ts +91 -0
- package/src/api-schemas/registry.ts +3487 -0
- package/src/api-schemas/response-pruning.test.ts +260 -0
- package/src/api-schemas/schema-primitives.ts +12 -0
- package/src/api-schemas/secrets.ts +332 -0
- package/src/api-schemas/store.contract.test.ts +450 -0
- package/src/api-schemas/store.ts +604 -0
- package/src/api-schemas/sts.contract.test.ts +80 -0
- package/src/api-schemas/sts.ts +110 -0
- package/src/api-schemas/task.ts +104 -0
- package/src/api-schemas/tools.ts +140 -0
- package/src/api-schemas/user.contract.test.ts +191 -0
- package/src/api-schemas/user.ts +204 -0
- package/src/api-schemas/view-execution.ts +200 -0
- package/src/api-schemas/views.ts +437 -0
- package/src/api-schemas/workflow-runs.ts +653 -0
- package/src/apikey-values.ts +10 -0
- package/src/apikey.ts +49 -40
- package/src/apps.ts +249 -1179
- package/src/ask-user.ts +9 -1
- package/src/audit-trail.ts +45 -137
- package/src/browser-credentials.ts +21 -106
- package/src/common.ts +67 -78
- package/src/cost-analytics.ts +37 -176
- package/src/data-platform.ts +205 -776
- package/src/email.ts +5 -17
- package/src/embeddings.ts +22 -60
- package/src/environment.ts +52 -124
- package/src/facets.ts +4 -7
- package/src/group.ts +38 -42
- package/src/index.ts +11 -0
- package/src/integrations.ts +39 -129
- package/src/interaction-values.ts +23 -0
- package/src/interaction.ts +231 -841
- package/src/meters.ts +11 -7
- package/src/oauth-server.ts +58 -127
- package/src/oauth.ts +24 -108
- package/src/payload.ts +25 -40
- package/src/platform-event.ts +98 -484
- package/src/principal-context.ts +11 -15
- package/src/project-values.ts +41 -0
- package/src/project.ts +116 -588
- package/src/prompt.ts +34 -61
- package/src/query.ts +34 -93
- package/src/rate-limiter.ts +27 -75
- package/src/refs.ts +4 -11
- package/src/roles/types.ts +20 -20
- package/src/runs.ts +11 -24
- package/src/secrets.ts +38 -117
- package/src/store/agent-approval.ts +9 -14
- package/src/store/agent-run.ts +106 -434
- package/src/store/collections.ts +21 -63
- package/src/store/content-type-editing.test.ts +17 -0
- package/src/store/conversation-state.ts +78 -64
- package/src/store/doc-analyzer.ts +17 -33
- package/src/store/dsl-workflow.ts +62 -158
- package/src/store/editing-policy-schema.generated.ts +30 -0
- package/src/store/grounded-extraction.ts +13 -104
- package/src/store/index.ts +3 -0
- package/src/store/intake-policy-schema.generated.ts +1442 -0
- package/src/store/process-schema.test.ts +43 -0
- package/src/store/process-schema.ts +79 -0
- package/src/store/process-validation.test.ts +141 -0
- package/src/store/process-validation.ts +82 -2
- package/src/store/process.ts +70 -146
- package/src/store/rendering.ts +15 -64
- package/src/store/store.ts +197 -1182
- package/src/store/task.ts +25 -59
- package/src/store/workflow.ts +103 -554
- package/src/sts-token-types.ts +24 -75
- package/src/tools.ts +18 -97
- package/src/transient-tokens-values.ts +11 -0
- package/src/transient-tokens.ts +16 -13
- package/src/user.ts +74 -214
- package/src/versions.ts +24 -0
- package/src/views-schema.test.ts +9 -1
- package/src/views.ts +106 -329
|
@@ -0,0 +1,450 @@
|
|
|
1
|
+
import { readFileSync } from 'node:fs';
|
|
2
|
+
import { fileURLToPath } from 'node:url';
|
|
3
|
+
import { Ajv } from 'ajv';
|
|
4
|
+
import { describe, expect, it } from 'vitest';
|
|
5
|
+
import { ContentTypeIntakePolicySchema as GeneratedIntakePolicySchema } from '../store/intake-policy-schema.generated.js';
|
|
6
|
+
import type { ContentObjectTypeRef, ContentTypeIntakePolicy, IntakePageRanges } from '../store/store.js';
|
|
7
|
+
import type { JsonObject } from './adapter.js';
|
|
8
|
+
import { ApiSchemaComponents, bundleCanonicalComponent, validateApiResponse } from './registry.js';
|
|
9
|
+
import { ContentTypeIntakePolicySchema } from './store.js';
|
|
10
|
+
|
|
11
|
+
/** Exact type identity — `extends` in both directions is too weak (any/unknown slip through). */
|
|
12
|
+
type Equals<A, B> = (<T>() => T extends A ? 1 : 2) extends <T>() => T extends B ? 1 : 2 ? true : false;
|
|
13
|
+
function assertType<T extends true>(_ok: T): void {}
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* The intake policy is now stated once, in Zod, and reaches its consumers three ways: as the
|
|
17
|
+
* published OpenAPI component, as the checked-in JSON artifact that zeno-server / the workflow tool /
|
|
18
|
+
* the web editor compiles, and as the TypeScript type. This file is the gate that keeps all three
|
|
19
|
+
* the same statement.
|
|
20
|
+
*
|
|
21
|
+
* It also pins the behaviour changes the conversion makes, because the schema it replaced was
|
|
22
|
+
* hand-written and disagreed with the contract in both directions. Each is asserted rather than
|
|
23
|
+
* described: the whole point of the migration is that a disagreement fails a build instead of
|
|
24
|
+
* shipping.
|
|
25
|
+
*/
|
|
26
|
+
const ajv = new Ajv({ strict: false, allErrors: true });
|
|
27
|
+
const validate = ajv.compile<ContentTypeIntakePolicy>(GeneratedIntakePolicySchema);
|
|
28
|
+
|
|
29
|
+
function errors(): string {
|
|
30
|
+
return ajv.errorsText(validate.errors, { separator: '\n' });
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* Reads a file from the studio repository this package is a submodule of.
|
|
35
|
+
*
|
|
36
|
+
* `undefined` when it is not there, which is the normal state in this repository's own CI: it clones
|
|
37
|
+
* composableai alone, so nothing above the submodule root exists. Two of the gates below compare
|
|
38
|
+
* against the published document and the generated-client fixture, both of which live up there — so
|
|
39
|
+
* they are skipped when they cannot be read rather than failing the whole file at import time, which
|
|
40
|
+
* is what used to happen and what left this suite red on every commit.
|
|
41
|
+
*
|
|
42
|
+
* They still run where they are the actual gate: a checkout of the parent repository, which is what
|
|
43
|
+
* the migration's own verification and the studio CI use.
|
|
44
|
+
*/
|
|
45
|
+
function readFromStudioRepo(relativePath: string): unknown {
|
|
46
|
+
try {
|
|
47
|
+
return JSON.parse(readFileSync(fileURLToPath(new URL(relativePath, import.meta.url)), 'utf8'));
|
|
48
|
+
} catch (error) {
|
|
49
|
+
if ((error as NodeJS.ErrnoException).code === 'ENOENT') return undefined;
|
|
50
|
+
throw error;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
const publishedDocument = readFromStudioRepo('../../../../../packages/api-specs/vertesia-openapi.json') as
|
|
55
|
+
| { components: { schemas: Record<string, Record<string, unknown>> } }
|
|
56
|
+
| undefined;
|
|
57
|
+
const published = publishedDocument?.components.schemas ?? {};
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* The published component minus the OpenAPI-only discriminator hint the bundler drops.
|
|
61
|
+
*
|
|
62
|
+
* Written out here rather than imported from the registry on purpose: reusing the production
|
|
63
|
+
* function to check the production function would make the comparison below pass by construction.
|
|
64
|
+
* The rule is small enough to state twice, and stating it twice is what makes it a gate.
|
|
65
|
+
*/
|
|
66
|
+
function withoutDiscriminatorHints(value: unknown): unknown {
|
|
67
|
+
if (Array.isArray(value)) return value.map(withoutDiscriminatorHints);
|
|
68
|
+
if (!value || typeof value !== 'object') return value;
|
|
69
|
+
const node = value as Record<string, unknown>;
|
|
70
|
+
const restated = node.discriminator !== undefined && node.properties === undefined;
|
|
71
|
+
return Object.fromEntries(
|
|
72
|
+
Object.entries(node)
|
|
73
|
+
.filter(([key]) => key !== 'discriminator' && !(restated && (key === 'type' || key === 'required')))
|
|
74
|
+
.map(([key, item]) => [key, withoutDiscriminatorHints(item)]),
|
|
75
|
+
);
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
function $defsOf(schema: unknown): unknown {
|
|
79
|
+
return (schema as { $defs: unknown }).$defs;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
describe.skipIf(!publishedDocument)('gate — generated artifact = canonical component = published component', () => {
|
|
83
|
+
it('is the exact bundle the registry emits, so the artifact is compiled output', () => {
|
|
84
|
+
// Deep equality, not a spot check: the file is generated by `pnpm run gen:schemas` from this
|
|
85
|
+
// same function, so any difference means someone hand-edited it or forgot to regenerate.
|
|
86
|
+
expect(GeneratedIntakePolicySchema).toEqual(bundleCanonicalComponent('ContentTypeIntakePolicy'));
|
|
87
|
+
});
|
|
88
|
+
|
|
89
|
+
it('describes the same shape as the component the OpenAPI document publishes', () => {
|
|
90
|
+
// The artifact re-roots `#/components/schemas/X` to `#/$defs/X` so AJV and Monaco can compile
|
|
91
|
+
// it standalone. Undoing that is what makes the two directly comparable.
|
|
92
|
+
const { $defs, ...body } = GeneratedIntakePolicySchema as { $defs: Record<string, unknown> };
|
|
93
|
+
const rerooted = JSON.parse(JSON.stringify(body).replaceAll('#/$defs/', '#/components/schemas/'));
|
|
94
|
+
expect(rerooted).toEqual(withoutDiscriminatorHints(published.ContentTypeIntakePolicy));
|
|
95
|
+
|
|
96
|
+
// ...and every definition it carries is the published component of that name, so the bundle
|
|
97
|
+
// cannot describe a private variant of a shared type.
|
|
98
|
+
for (const [name, definition] of Object.entries($defs)) {
|
|
99
|
+
const asComponent = JSON.parse(JSON.stringify(definition).replaceAll('#/$defs/', '#/components/schemas/'));
|
|
100
|
+
expect(asComponent, `$defs.${name} disagrees with the published component`).toEqual(
|
|
101
|
+
withoutDiscriminatorHints(published[name]),
|
|
102
|
+
);
|
|
103
|
+
}
|
|
104
|
+
});
|
|
105
|
+
|
|
106
|
+
it('drops the discriminator hint the published component keeps, and only that', () => {
|
|
107
|
+
// The one place the artifact and the component are allowed to differ, pinned from both sides
|
|
108
|
+
// so neither can move alone. `synthesizeDiscriminator` restates `type` and `required` on the
|
|
109
|
+
// union node for the generated Java/Go clients; the node has no `properties`, and Gemini
|
|
110
|
+
// rejects the whole tool schema over it ("requires unspecified property '_option_id'") when
|
|
111
|
+
// the artifact reaches Vertex inside `create_or_update_type`'s input schema.
|
|
112
|
+
expect(published.ModelOptions).toMatchObject({
|
|
113
|
+
discriminator: { propertyName: '_option_id' },
|
|
114
|
+
type: 'object',
|
|
115
|
+
required: ['_option_id'],
|
|
116
|
+
});
|
|
117
|
+
|
|
118
|
+
const bundled = ($defsOf(GeneratedIntakePolicySchema) as Record<string, Record<string, unknown>>).ModelOptions;
|
|
119
|
+
expect(bundled.discriminator).toBeUndefined();
|
|
120
|
+
expect(bundled.required).toBeUndefined();
|
|
121
|
+
expect(bundled.type).toBeUndefined();
|
|
122
|
+
// The branches are what carried the contract all along, so nothing was validated away.
|
|
123
|
+
expect((bundled.oneOf as unknown[]).length).toBe(
|
|
124
|
+
((published.ModelOptions as { oneOf: unknown[] }).oneOf ?? []).length,
|
|
125
|
+
);
|
|
126
|
+
});
|
|
127
|
+
|
|
128
|
+
it('registers the component the alias claims, under the id the alias name requires', () => {
|
|
129
|
+
expect(Object.keys(ApiSchemaComponents)).toContain('ContentTypeIntakePolicy');
|
|
130
|
+
assertType<Equals<ContentTypeIntakePolicy, (typeof ContentTypeIntakePolicySchema)['_zod']['output']>>(true);
|
|
131
|
+
});
|
|
132
|
+
});
|
|
133
|
+
|
|
134
|
+
/**
|
|
135
|
+
* Bodies that probe where the two validators could disagree.
|
|
136
|
+
*
|
|
137
|
+
* The gate above compares the artifact to the component, and both are produced by the SAME adapter
|
|
138
|
+
* from the SAME Zod schema — so any transform applied on the way out is invisible to it. That blind
|
|
139
|
+
* spot shipped once: an adapter pass stripped the bounds `z.int()` attaches for the JavaScript
|
|
140
|
+
* safe-integer range, on the reasoning that no JSON value could fall outside them. `1e20` does, and
|
|
141
|
+
* the Zod schema rejected it while the generated schema accepted it. Nothing in a
|
|
142
|
+
* schema-versus-schema comparison can see that; only running both validators over the same value can.
|
|
143
|
+
*/
|
|
144
|
+
const PROBES: unknown[] = [
|
|
145
|
+
// Numeric range, including the values that made the sentinel-stripping bug observable.
|
|
146
|
+
{},
|
|
147
|
+
{ extraction: { max_pages: 1 } },
|
|
148
|
+
{ extraction: { max_pages: 0 } },
|
|
149
|
+
{ extraction: { max_pages: 2.5 } },
|
|
150
|
+
{ extraction: { max_pages: 1e20 } },
|
|
151
|
+
{ extraction: { max_pages: 2147483647 } },
|
|
152
|
+
{ extraction: { max_pages: 2147483648 } },
|
|
153
|
+
{ extraction: { max_pages: Number.MAX_SAFE_INTEGER + 1 } },
|
|
154
|
+
{ extraction: { max_pages: -1 } },
|
|
155
|
+
{ locate: { instructions: 'x', min_pages: 0 } },
|
|
156
|
+
{ locate: { instructions: 'x', min_pages: -1 } },
|
|
157
|
+
{ locate: { instructions: 'x', min_pages: 1e20 } },
|
|
158
|
+
{ locate: { detail: 8 } },
|
|
159
|
+
{ text_conversion: { render_dpi: 72 } },
|
|
160
|
+
{ text_conversion: { render_dpi: 71 } },
|
|
161
|
+
{ text_conversion: { render_dpi: 1e20 } },
|
|
162
|
+
{ extraction: { verification: { threshold: 0 } } },
|
|
163
|
+
{ extraction: { verification: { threshold: 1 } } },
|
|
164
|
+
{ extraction: { verification: { threshold: 1.000001 } } },
|
|
165
|
+
{ extraction: { verification: { max_retries: 1e20 } } },
|
|
166
|
+
{ extraction: { vision: { max_image_tokens: 1e20, max_payload_mb: 1e20 } } },
|
|
167
|
+
{ extraction: { grounding: { window_pages: 1e20, grid_cell_pt: 1e20 } } },
|
|
168
|
+
{ extraction: { grounding: { hardness_threshold: 1e20 } } },
|
|
169
|
+
// Page ranges: length, element type, and element magnitude.
|
|
170
|
+
{ extraction: { page_ranges: [[1, 2]] } },
|
|
171
|
+
{ extraction: { page_ranges: [[-1, -1]] } },
|
|
172
|
+
{ extraction: { page_ranges: [[1]] } },
|
|
173
|
+
{ extraction: { page_ranges: [[1, 2, 3]] } },
|
|
174
|
+
{ extraction: { page_ranges: [[1.5, 2]] } },
|
|
175
|
+
{ extraction: { page_ranges: [[1e20, 2]] } },
|
|
176
|
+
// Nullability, unknown keys, and the enums.
|
|
177
|
+
{ generate_toc: null },
|
|
178
|
+
{ extraction: null },
|
|
179
|
+
{ extraction: { max_pages: null } },
|
|
180
|
+
{ grounded_extraction: { enabled: true } },
|
|
181
|
+
{ locate: { instructions: 'x', dpi: 300 } },
|
|
182
|
+
{ extraction: { scope: 'first-two' } },
|
|
183
|
+
{ extraction: { vision: { default_detail: 'ultra' } } },
|
|
184
|
+
{ default_view: 'pdf' },
|
|
185
|
+
{ mode: 'agentic' },
|
|
186
|
+
// The execution config: closedness, the option union, the two enums.
|
|
187
|
+
{ extraction: { config: { model: 'm' } } },
|
|
188
|
+
{ extraction: { config: { temperature: 0.5 } } },
|
|
189
|
+
{ extraction: { config: { http_timeout: { bodyTimeout: 1000 } } } },
|
|
190
|
+
{ extraction: { config: { http_timeout: { socketTimeout: 1000 } } } },
|
|
191
|
+
{ extraction: { config: { model_options: { _option_id: 'openai-text', temperature: 0.5 } } } },
|
|
192
|
+
{ extraction: { config: { model_options: { temperature: 0.5 } } } },
|
|
193
|
+
{ extraction: { config: { model_options: { _option_id: 'not-a-driver' } } } },
|
|
194
|
+
{ extraction: { config: { run_data: 'STANDARD' } } },
|
|
195
|
+
{ extraction: { config: { run_data: 'WHATEVER' } } },
|
|
196
|
+
{ extraction: { config: { configMode: 'RUN_CONFIG_ONLY' } } },
|
|
197
|
+
// Wrong types where a shape is expected.
|
|
198
|
+
{ extraction: 'nope' },
|
|
199
|
+
{ embeddings: { text: 'yes' } },
|
|
200
|
+
{ identification: { examples: 'not-a-list' } },
|
|
201
|
+
];
|
|
202
|
+
|
|
203
|
+
describe('gate — the artifact accepts exactly what the Zod schema accepts', () => {
|
|
204
|
+
it.each(PROBES.map((probe) => [JSON.stringify(probe), probe] as const))('agrees on %s', (_label, probe) => {
|
|
205
|
+
// The point of the migration is that ONE schema is enforced. Two validators built from it
|
|
206
|
+
// that disagree on a value means one of the consumers is enforcing something the source
|
|
207
|
+
// never said, which is the drift this whole exercise removes.
|
|
208
|
+
expect(validate(probe)).toBe(ContentTypeIntakePolicySchema.safeParse(probe).success);
|
|
209
|
+
});
|
|
210
|
+
});
|
|
211
|
+
|
|
212
|
+
describe.skipIf(!publishedDocument)('the fixture the generated Java and Go clients deserialize', () => {
|
|
213
|
+
// `openapi/fixtures/content-type-intake-policy.json` is read by
|
|
214
|
+
// `openapi/java/src/test/.../ContentTypeIntakePolicyDeserializationTest.java` and by
|
|
215
|
+
// `openapi/go/tests/intake_policy_deserialization_test.go`. Asserting it HERE is what stops it
|
|
216
|
+
// going stale: a schema change that the fixture no longer satisfies fails in this package,
|
|
217
|
+
// beside the schema, rather than in a client harness that only CI runs.
|
|
218
|
+
const fixture = readFromStudioRepo('../../../../../openapi/fixtures/content-type-intake-policy.json') ?? {};
|
|
219
|
+
|
|
220
|
+
it('is a policy the canonical schema and the generated artifact both accept', () => {
|
|
221
|
+
expect(ContentTypeIntakePolicySchema.safeParse(fixture).success).toBe(true);
|
|
222
|
+
expect(validate(fixture), errors()).toBe(true);
|
|
223
|
+
});
|
|
224
|
+
|
|
225
|
+
it('exercises the shapes the number -> integer correction changed', () => {
|
|
226
|
+
// The fields whose generated Java type moved from Double to Integer and whose Go type moved
|
|
227
|
+
// from float32 to int32. A fixture that omitted them would let the clients compile and
|
|
228
|
+
// deserialize while proving nothing about the change this batch makes.
|
|
229
|
+
const policy = fixture as ContentTypeIntakePolicy;
|
|
230
|
+
expect(policy.extraction?.max_pages).toBe(6);
|
|
231
|
+
expect(policy.extraction?.page_ranges).toEqual([
|
|
232
|
+
[1, 2],
|
|
233
|
+
[-1, -1],
|
|
234
|
+
]);
|
|
235
|
+
expect(policy.text_conversion?.render_dpi).toBe(150);
|
|
236
|
+
expect(policy.extraction?.vision?.max_image_tokens).toBe(9000);
|
|
237
|
+
expect(policy.extraction?.grounding?.window_pages).toBe(4);
|
|
238
|
+
// ...and the discriminated union, which is what a Go oneOf decoder gets wrong when the
|
|
239
|
+
// discriminator is missing from the document.
|
|
240
|
+
expect(policy.extraction?.config?.model_options?._option_id).toBe('vertexai-claude');
|
|
241
|
+
});
|
|
242
|
+
});
|
|
243
|
+
|
|
244
|
+
describe('the TypeScript type says what the schema says', () => {
|
|
245
|
+
it('widens page ranges to number[][], which is what the component has always described', () => {
|
|
246
|
+
// `[number, number][]` is what the interface used to claim. The published component is
|
|
247
|
+
// `items: {type: integer}` with `minItems`/`maxItems` — a two-element ARRAY, not a tuple —
|
|
248
|
+
// because a Zod tuple emits `prefixItems`, which generated Java and Go clients read
|
|
249
|
+
// differently. The wire shape is unchanged; the SDK type is corrected to match it.
|
|
250
|
+
assertType<Equals<IntakePageRanges, number[][]>>(true);
|
|
251
|
+
expect(validate({ extraction: { page_ranges: [[1, 2]] } }), errors()).toBe(true);
|
|
252
|
+
});
|
|
253
|
+
|
|
254
|
+
it('keeps the two type refs’ default_view in step with the policy', () => {
|
|
255
|
+
// Those refs spell the union out rather than writing `ContentTypeIntakePolicy['default_view']`,
|
|
256
|
+
// because indexing into a canonical alias makes the generator DROP the property instead of
|
|
257
|
+
// failing. This is what stops the restatement from drifting.
|
|
258
|
+
assertType<
|
|
259
|
+
Equals<
|
|
260
|
+
NonNullable<ContentObjectTypeRef['default_view']>,
|
|
261
|
+
NonNullable<ContentTypeIntakePolicy['default_view']>
|
|
262
|
+
>
|
|
263
|
+
>(true);
|
|
264
|
+
});
|
|
265
|
+
});
|
|
266
|
+
|
|
267
|
+
describe('parity with the hand-written AJV schema it replaces', () => {
|
|
268
|
+
it('still accepts a full policy across every block', () => {
|
|
269
|
+
const policy: ContentTypeIntakePolicy = {
|
|
270
|
+
mode: 'programmatic',
|
|
271
|
+
identification: { guidance: 'Investor reports' },
|
|
272
|
+
locate: { instructions: 'allocation tables', detail: 8, min_pages: 10 },
|
|
273
|
+
text_conversion: { method: 'llm', scope: 'located', render_dpi: 150 },
|
|
274
|
+
extraction: {
|
|
275
|
+
source: 'vision',
|
|
276
|
+
page_ranges: [
|
|
277
|
+
[1, 2],
|
|
278
|
+
[-1, -1],
|
|
279
|
+
],
|
|
280
|
+
max_pages: 6,
|
|
281
|
+
vision: { default_detail: 'high', max_image_tokens: 9000, max_payload_mb: 12 },
|
|
282
|
+
verification: { threshold: 0.7, max_retries: 2 },
|
|
283
|
+
grounding: {
|
|
284
|
+
enabled: true,
|
|
285
|
+
max_pages: 12,
|
|
286
|
+
hardness_threshold: 0.5,
|
|
287
|
+
config: { model: 'claude-sonnet-4-5' },
|
|
288
|
+
review: { threshold: 0.7, coverage_threshold: 0.2 },
|
|
289
|
+
},
|
|
290
|
+
},
|
|
291
|
+
embeddings: { text: true, properties: true },
|
|
292
|
+
default_view: 'pdf',
|
|
293
|
+
};
|
|
294
|
+
expect(validate(policy), errors()).toBe(true);
|
|
295
|
+
});
|
|
296
|
+
|
|
297
|
+
it('keeps every numeric bound the hand-written schema enforced', () => {
|
|
298
|
+
// These were NOT in the published component — the interface carried no `@minimum` tags — so
|
|
299
|
+
// converting to Zod dropped all eighteen of them until this test caught it. They are restored
|
|
300
|
+
// in the schema, which means the document now publishes constraints the server has enforced
|
|
301
|
+
// all along.
|
|
302
|
+
expect(validate({ locate: { instructions: 'x', min_pages: -1 } })).toBe(false);
|
|
303
|
+
expect(validate({ text_conversion: { render_dpi: 71 } })).toBe(false);
|
|
304
|
+
expect(validate({ extraction: { max_pages: 0 } })).toBe(false);
|
|
305
|
+
expect(validate({ extraction: { verification: { threshold: 1.2 } } })).toBe(false);
|
|
306
|
+
expect(validate({ extraction: { verification: { max_retries: -1 } } })).toBe(false);
|
|
307
|
+
expect(validate({ extraction: { vision: { max_image_tokens: 0 } } })).toBe(false);
|
|
308
|
+
expect(validate({ extraction: { vision: { max_payload_mb: 0 } } })).toBe(false);
|
|
309
|
+
expect(validate({ extraction: { vision: { max_pages_per_call: 0 } } })).toBe(false);
|
|
310
|
+
expect(validate({ extraction: { grounding: { max_pages: 0 } } })).toBe(false);
|
|
311
|
+
expect(validate({ extraction: { grounding: { window_pages: 0 } } })).toBe(false);
|
|
312
|
+
expect(validate({ extraction: { grounding: { grid_cell_pt: 0 } } })).toBe(false);
|
|
313
|
+
expect(validate({ extraction: { grounding: { hardness_threshold: -0.1 } } })).toBe(false);
|
|
314
|
+
expect(validate({ extraction: { grounding: { min_citation_density: 1.1 } } })).toBe(false);
|
|
315
|
+
expect(validate({ extraction: { grounding: { review: { threshold: 1.1 } } } })).toBe(false);
|
|
316
|
+
expect(validate({ extraction: { grounding: { review: { coverage_threshold: -0.1 } } } })).toBe(false);
|
|
317
|
+
});
|
|
318
|
+
|
|
319
|
+
it('keeps the page and DPI counters integral', () => {
|
|
320
|
+
// `type: 'integer'`, which the published component also never stated. A fractional page cap
|
|
321
|
+
// was rejected before this conversion and is rejected after it.
|
|
322
|
+
expect(validate({ extraction: { max_pages: 2.5 } })).toBe(false);
|
|
323
|
+
expect(validate({ text_conversion: { render_dpi: 150.5 } })).toBe(false);
|
|
324
|
+
expect(validate({ extraction: { page_ranges: [[1.5, 2]] } })).toBe(false);
|
|
325
|
+
expect(validate({ extraction: { page_ranges: [[1]] } })).toBe(false);
|
|
326
|
+
expect(validate({ locate: { instructions: 'x', min_pages: 8.5 } })).toBe(false);
|
|
327
|
+
});
|
|
328
|
+
|
|
329
|
+
it('keeps rejecting unknown keys and the obsolete root block', () => {
|
|
330
|
+
expect(validate({ grounded_extraction: { enabled: true } })).toBe(false);
|
|
331
|
+
expect(validate({ locate: { instructions: 'x', dpi: 300 } })).toBe(false);
|
|
332
|
+
expect(validate({ extraction: { vision: { default_detail: 'ultra' } } })).toBe(false);
|
|
333
|
+
});
|
|
334
|
+
});
|
|
335
|
+
|
|
336
|
+
describe('runtime tightenings — recorded as operation 25 of the 1.5 runbook', () => {
|
|
337
|
+
it('rejects an explicit null where the hand-written schema accepted one', () => {
|
|
338
|
+
// The replaced schema carried `nullable: true` on 112 subschemas and AJV honours that keyword
|
|
339
|
+
// for OpenAPI compatibility, so 101 of them accepted `null` — which neither the TypeScript
|
|
340
|
+
// type nor the published component has ever allowed. The fields are optional, not nullable.
|
|
341
|
+
expect(validate({ generate_toc: null })).toBe(false);
|
|
342
|
+
expect(validate({ rendering_template: null })).toBe(false);
|
|
343
|
+
expect(validate({ extraction: { max_pages: null } })).toBe(false);
|
|
344
|
+
expect(validate({ extraction: null })).toBe(false);
|
|
345
|
+
// Omission is still how you say "inherit", which is what every one of those fields meant.
|
|
346
|
+
expect(validate({}), errors()).toBe(true);
|
|
347
|
+
expect(validate({ extraction: {} }), errors()).toBe(true);
|
|
348
|
+
});
|
|
349
|
+
|
|
350
|
+
it('closes the execution config, which the published component already described closed', () => {
|
|
351
|
+
// `config` was `additionalProperties: true` in the hand-written schema while
|
|
352
|
+
// `InteractionExecutionConfiguration` has always been published closed. A stored policy
|
|
353
|
+
// carrying an undeclared key there is now rejected at write time.
|
|
354
|
+
expect(ApiSchemaComponents.InteractionExecutionConfiguration.additionalProperties).toBe(false);
|
|
355
|
+
expect(validate({ extraction: { config: { model: 'claude-sonnet-4-5' } } }), errors()).toBe(true);
|
|
356
|
+
expect(validate({ extraction: { config: { temperature: 0.5 } } })).toBe(false);
|
|
357
|
+
expect(validate({ extraction: { config: { http_timeout: { socketTimeout: 1000 } } } })).toBe(false);
|
|
358
|
+
});
|
|
359
|
+
|
|
360
|
+
it('validates model_options against the union instead of accepting any object', () => {
|
|
361
|
+
// Same class: `model_options` was `{type: object, additionalProperties: true}` in the
|
|
362
|
+
// hand-written schema and `$ref: ModelOptions` in the published component. It now has to name
|
|
363
|
+
// a driver through `_option_id`, which is the discriminator generated clients already use.
|
|
364
|
+
expect(ApiSchemaComponents.ContentTypeIntakePolicy).toBeDefined();
|
|
365
|
+
expect(
|
|
366
|
+
validate({
|
|
367
|
+
extraction: { config: { model_options: { _option_id: 'openai-text', temperature: 0.5 } } },
|
|
368
|
+
}),
|
|
369
|
+
errors(),
|
|
370
|
+
).toBe(true);
|
|
371
|
+
expect(validate({ extraction: { config: { model_options: { temperature: 0.5 } } } })).toBe(false);
|
|
372
|
+
expect(validate({ extraction: { config: { model_options: { _option_id: 'not-a-driver' } } } })).toBe(false);
|
|
373
|
+
// The empty object is rejected for the same reason, which is why nothing may PUT it on the
|
|
374
|
+
// wire — see `normalizeModelOptions`, which drops an options bag with no options in it.
|
|
375
|
+
expect(validate({ extraction: { config: { model_options: {} } } })).toBe(false);
|
|
376
|
+
});
|
|
377
|
+
|
|
378
|
+
it('constrains the two config enums that were unconstrained strings', () => {
|
|
379
|
+
expect(validate({ extraction: { config: { run_data: 'STANDARD' } } }), errors()).toBe(true);
|
|
380
|
+
expect(validate({ extraction: { config: { run_data: 'WHATEVER' } } })).toBe(false);
|
|
381
|
+
expect(validate({ extraction: { config: { configMode: 'RUN_CONFIG_ONLY' } } }), errors()).toBe(true);
|
|
382
|
+
expect(validate({ extraction: { config: { configMode: 'WHATEVER' } } })).toBe(false);
|
|
383
|
+
});
|
|
384
|
+
});
|
|
385
|
+
|
|
386
|
+
describe('the five content-type shapes are composed, not repeated', () => {
|
|
387
|
+
const properties = (name: string) =>
|
|
388
|
+
Object.keys((ApiSchemaComponents[name] as { properties: Record<string, unknown> }).properties);
|
|
389
|
+
const property = (name: string, key: string) =>
|
|
390
|
+
(ApiSchemaComponents[name] as { properties: Record<string, JsonObject> }).properties[key];
|
|
391
|
+
|
|
392
|
+
it('gives every shape the same definition for a shared field', () => {
|
|
393
|
+
// The drift this guards: five hand-transcribed copies of `table_layout` could disagree about
|
|
394
|
+
// its item type or its description and nothing would notice. They come from one dictionary now.
|
|
395
|
+
const shapes = [
|
|
396
|
+
'ContentObjectTypeItem',
|
|
397
|
+
'ContentObjectType',
|
|
398
|
+
'ContentObjectTypeCatalogEntry',
|
|
399
|
+
'InCodeTypeDefinition',
|
|
400
|
+
'CreateContentObjectTypePayload',
|
|
401
|
+
];
|
|
402
|
+
for (const field of ['table_layout', 'object_schema', 'strict_mode', 'intake', 'editing', 'status']) {
|
|
403
|
+
const rendered = shapes.map((shape) => JSON.stringify(property(shape, field)));
|
|
404
|
+
expect(new Set(rendered).size, `${field} differs across the content-type shapes`).toBe(1);
|
|
405
|
+
}
|
|
406
|
+
});
|
|
407
|
+
|
|
408
|
+
it('keeps the published property order, which composition must not reshuffle', () => {
|
|
409
|
+
// Order is contract: it decides the order of the generated clients' constructor arguments and
|
|
410
|
+
// model fields. The five orders differ because they were derived from five different types.
|
|
411
|
+
expect(properties('ContentObjectTypeItem')).toEqual(properties('ContentObjectType'));
|
|
412
|
+
expect(properties('ContentObjectTypeCatalogEntry').slice(0, 11)).toEqual(properties('InCodeTypeDefinition'));
|
|
413
|
+
expect(properties('CreateContentObjectTypePayload')).toEqual([
|
|
414
|
+
'status',
|
|
415
|
+
'is_chunkable',
|
|
416
|
+
'intake',
|
|
417
|
+
'editing',
|
|
418
|
+
'table_layout',
|
|
419
|
+
'object_schema',
|
|
420
|
+
'strict_mode',
|
|
421
|
+
'name',
|
|
422
|
+
'description',
|
|
423
|
+
'tags',
|
|
424
|
+
]);
|
|
425
|
+
});
|
|
426
|
+
|
|
427
|
+
it('keeps the audit fields required on a stored type and optional in the catalog', () => {
|
|
428
|
+
// Not a detail: a catalog entry may be an in-code type contributed by a plugin, which nobody
|
|
429
|
+
// created and nobody has modified. Requiring the four there would reject a legitimate entry.
|
|
430
|
+
const audit = ['updated_by', 'created_by', 'created_at', 'updated_at'];
|
|
431
|
+
const required = (name: string) => (ApiSchemaComponents[name] as { required?: string[] }).required ?? [];
|
|
432
|
+
|
|
433
|
+
expect(required('ContentObjectTypeItem')).toEqual(expect.arrayContaining(audit));
|
|
434
|
+
expect(required('ContentObjectType')).toEqual(expect.arrayContaining(audit));
|
|
435
|
+
for (const field of audit) {
|
|
436
|
+
expect(required('ContentObjectTypeCatalogEntry')).not.toContain(field);
|
|
437
|
+
expect(property('ContentObjectTypeCatalogEntry', field)).toEqual({ type: 'string' });
|
|
438
|
+
}
|
|
439
|
+
});
|
|
440
|
+
|
|
441
|
+
it('accepts a catalog entry for an in-code type that has no audit trail', () => {
|
|
442
|
+
expect(
|
|
443
|
+
validateApiResponse('ContentObjectTypeCatalogEntry', {
|
|
444
|
+
id: 'sys:Invoice',
|
|
445
|
+
name: 'Invoice',
|
|
446
|
+
is_chunkable: false,
|
|
447
|
+
}).valid,
|
|
448
|
+
).toBe(true);
|
|
449
|
+
});
|
|
450
|
+
});
|