@fleetless/contracts 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +26 -0
- package/LICENSE +202 -0
- package/NOTICE +17 -0
- package/README.md +88 -0
- package/artifacts/constants.json +24 -0
- package/artifacts/openapi.json +17219 -0
- package/artifacts/routes.json +4605 -0
- package/artifacts/schema/accept-team-invite-request.schema.json +22 -0
- package/artifacts/schema/action-config.schema.json +198 -0
- package/artifacts/schema/alert-list-response.schema.json +172 -0
- package/artifacts/schema/api-error.schema.json +20 -0
- package/artifacts/schema/app-auth-config.schema.json +106 -0
- package/artifacts/schema/app-invitation-list-response.schema.json +57 -0
- package/artifacts/schema/app-invitation.schema.json +69 -0
- package/artifacts/schema/app-list-response.schema.json +82 -0
- package/artifacts/schema/app-mail-template-list-response.schema.json +68 -0
- package/artifacts/schema/app-mail-template.schema.json +54 -0
- package/artifacts/schema/app-oidc-provider-list-response.schema.json +93 -0
- package/artifacts/schema/app-oidc-provider.schema.json +80 -0
- package/artifacts/schema/app-user-list-response.schema.json +111 -0
- package/artifacts/schema/app-user.schema.json +98 -0
- package/artifacts/schema/app.schema.json +69 -0
- package/artifacts/schema/apply-error.schema.json +41 -0
- package/artifacts/schema/asset-list-response.schema.json +288 -0
- package/artifacts/schema/asset-sync-request.schema.json +17 -0
- package/artifacts/schema/asset-sync-response.schema.json +16 -0
- package/artifacts/schema/asset-sync-status.schema.json +136 -0
- package/artifacts/schema/asset.schema.json +68 -0
- package/artifacts/schema/audit-actor.schema.json +32 -0
- package/artifacts/schema/audit-event.schema.json +119 -0
- package/artifacts/schema/audit-list-response.schema.json +144 -0
- package/artifacts/schema/audit-query.schema.json +79 -0
- package/artifacts/schema/auth-error.schema.json +23 -0
- package/artifacts/schema/auth-me-response.schema.json +99 -0
- package/artifacts/schema/auth-ok.schema.json +115 -0
- package/artifacts/schema/authorization-server-metadata.schema.json +80 -0
- package/artifacts/schema/bridge-asset-progress.schema.json +99 -0
- package/artifacts/schema/bridge-assets-available.schema.json +25 -0
- package/artifacts/schema/bridge-camera-state.schema.json +78 -0
- package/artifacts/schema/bridge-config-applied.schema.json +67 -0
- package/artifacts/schema/bridge-hello.schema.json +65 -0
- package/artifacts/schema/bridge-introspect.schema.json +114 -0
- package/artifacts/schema/bridge-job-lost.schema.json +22 -0
- package/artifacts/schema/bridge-job-update.schema.json +100 -0
- package/artifacts/schema/bridge-pong.schema.json +19 -0
- package/artifacts/schema/bridge-pressure.schema.json +292 -0
- package/artifacts/schema/bridge-state.schema.json +24 -0
- package/artifacts/schema/bridge-type-definitions.schema.json +169 -0
- package/artifacts/schema/busy-details.schema.json +115 -0
- package/artifacts/schema/camera-descriptor.schema.json +45 -0
- package/artifacts/schema/camera-list-response.schema.json +58 -0
- package/artifacts/schema/camera-source.schema.json +240 -0
- package/artifacts/schema/cancel-request.schema.json +20 -0
- package/artifacts/schema/client-accept-invitation-request.schema.json +35 -0
- package/artifacts/schema/client-auth.schema.json +18 -0
- package/artifacts/schema/client-cancel.schema.json +45 -0
- package/artifacts/schema/client-identity.schema.json +103 -0
- package/artifacts/schema/client-invoke.schema.json +45 -0
- package/artifacts/schema/client-login-request.schema.json +29 -0
- package/artifacts/schema/client-logout-request.schema.json +14 -0
- package/artifacts/schema/client-mcp-interaction-decision-response.schema.json +15 -0
- package/artifacts/schema/client-mcp-interaction.schema.json +59 -0
- package/artifacts/schema/client-oidc-callback-query.schema.json +28 -0
- package/artifacts/schema/client-oidc-exchange-request.schema.json +21 -0
- package/artifacts/schema/client-oidc-start-query.schema.json +36 -0
- package/artifacts/schema/client-password-reset-confirm-request.schema.json +22 -0
- package/artifacts/schema/client-password-reset-request.schema.json +24 -0
- package/artifacts/schema/client-provider-list-query.schema.json +17 -0
- package/artifacts/schema/client-provider-list-response.schema.json +34 -0
- package/artifacts/schema/client-publish.schema.json +40 -0
- package/artifacts/schema/client-refresh-request.schema.json +14 -0
- package/artifacts/schema/client-register-request.schema.json +44 -0
- package/artifacts/schema/client-resend-verification-request.schema.json +24 -0
- package/artifacts/schema/client-subscribe.schema.json +43 -0
- package/artifacts/schema/client-unsubscribe.schema.json +26 -0
- package/artifacts/schema/client-verify-email-request.schema.json +15 -0
- package/artifacts/schema/cloud-asset-request.schema.json +37 -0
- package/artifacts/schema/cloud-camera-start.schema.json +41 -0
- package/artifacts/schema/cloud-camera-stop.schema.json +26 -0
- package/artifacts/schema/cloud-cancel.schema.json +33 -0
- package/artifacts/schema/cloud-config.schema.json +1635 -0
- package/artifacts/schema/cloud-hello-error.schema.json +23 -0
- package/artifacts/schema/cloud-hello-ok.schema.json +19 -0
- package/artifacts/schema/cloud-introspect-request.schema.json +19 -0
- package/artifacts/schema/cloud-invoke.schema.json +40 -0
- package/artifacts/schema/cloud-ping.schema.json +19 -0
- package/artifacts/schema/cloud-publish.schema.json +28 -0
- package/artifacts/schema/cloud-type-request.schema.json +30 -0
- package/artifacts/schema/command-result.schema.json +175 -0
- package/artifacts/schema/config-draft-response.schema.json +1695 -0
- package/artifacts/schema/config-state.schema.json +124 -0
- package/artifacts/schema/config-version-response.schema.json +1641 -0
- package/artifacts/schema/config-versions-response.schema.json +33 -0
- package/artifacts/schema/create-app-invitation-request.schema.json +40 -0
- package/artifacts/schema/create-app-oidc-provider-request.schema.json +70 -0
- package/artifacts/schema/create-app-request.schema.json +30 -0
- package/artifacts/schema/create-app-user-request.schema.json +42 -0
- package/artifacts/schema/create-robot-request.schema.json +14 -0
- package/artifacts/schema/create-robot-response.schema.json +44 -0
- package/artifacts/schema/create-server-key-response.schema.json +65 -0
- package/artifacts/schema/create-team-invite-request.schema.json +43 -0
- package/artifacts/schema/datapoint-alert-row.schema.json +160 -0
- package/artifacts/schema/datapoint-config.schema.json +366 -0
- package/artifacts/schema/datapoint-display.schema.json +31 -0
- package/artifacts/schema/datapoint-event.schema.json +34 -0
- package/artifacts/schema/datapoint-frame.schema.json +28 -0
- package/artifacts/schema/datapoint-list-response.schema.json +61 -0
- package/artifacts/schema/datapoint-value.schema.json +28 -0
- package/artifacts/schema/developer-login-request.schema.json +19 -0
- package/artifacts/schema/dynamic-client-registration-request.schema.json +60 -0
- package/artifacts/schema/dynamic-client-registration-response.schema.json +68 -0
- package/artifacts/schema/error-frame.schema.json +23 -0
- package/artifacts/schema/exposure-counts.schema.json +39 -0
- package/artifacts/schema/exposure-list-response.schema.json +43 -0
- package/artifacts/schema/fetch-types-request.schema.json +19 -0
- package/artifacts/schema/fetch-types-response.schema.json +163 -0
- package/artifacts/schema/fleetless-user-list-response.schema.json +73 -0
- package/artifacts/schema/fleetless-user.schema.json +60 -0
- package/artifacts/schema/history-buckets-response.schema.json +79 -0
- package/artifacts/schema/history-query.schema.json +58 -0
- package/artifacts/schema/history-response.schema.json +150 -0
- package/artifacts/schema/history-samples-response.schema.json +68 -0
- package/artifacts/schema/introspection-response.schema.json +118 -0
- package/artifacts/schema/invoke-or-service-response.schema.json +141 -0
- package/artifacts/schema/invoke-request.schema.json +23 -0
- package/artifacts/schema/invoke-response.schema.json +125 -0
- package/artifacts/schema/job-actor.schema.json +34 -0
- package/artifacts/schema/job-event.schema.json +158 -0
- package/artifacts/schema/job-response.schema.json +123 -0
- package/artifacts/schema/job-run-list-response.schema.json +222 -0
- package/artifacts/schema/job-run-query.schema.json +95 -0
- package/artifacts/schema/job-run-summary-query.schema.json +23 -0
- package/artifacts/schema/job-run-summary.schema.json +33 -0
- package/artifacts/schema/job-run.schema.json +195 -0
- package/artifacts/schema/job-state.schema.json +11 -0
- package/artifacts/schema/job.schema.json +106 -0
- package/artifacts/schema/latency-bucket.schema.json +63 -0
- package/artifacts/schema/live-session-response.schema.json +41 -0
- package/artifacts/schema/mail-outcome.schema.json +20 -0
- package/artifacts/schema/mail-template-preview-request.schema.json +35 -0
- package/artifacts/schema/mail-template-preview-response.schema.json +31 -0
- package/artifacts/schema/mail-template-problem-details.schema.json +24 -0
- package/artifacts/schema/mcp-consent-grant-list-response.schema.json +52 -0
- package/artifacts/schema/mcp-consent-grant.schema.json +39 -0
- package/artifacts/schema/mcp-robot-datasheet.schema.json +115 -0
- package/artifacts/schema/mcp-role-preview-response.schema.json +134 -0
- package/artifacts/schema/missing-asset-query.schema.json +11 -0
- package/artifacts/schema/oauth-authorize-query.schema.json +47 -0
- package/artifacts/schema/oauth-redirect-response.schema.json +15 -0
- package/artifacts/schema/oauth-token-request.schema.json +47 -0
- package/artifacts/schema/oauth-token-response.schema.json +38 -0
- package/artifacts/schema/org-alerts-query.schema.json +15 -0
- package/artifacts/schema/org-event-dropped.schema.json +26 -0
- package/artifacts/schema/org-event-replay.schema.json +97 -0
- package/artifacts/schema/org-event-subscribe.schema.json +14 -0
- package/artifacts/schema/org-event-unsubscribe.schema.json +14 -0
- package/artifacts/schema/org-event.schema.json +75 -0
- package/artifacts/schema/org-firing-alerts-response.schema.json +178 -0
- package/artifacts/schema/org-health-query.schema.json +13 -0
- package/artifacts/schema/org-latency-query.schema.json +42 -0
- package/artifacts/schema/org-latency-response.schema.json +124 -0
- package/artifacts/schema/org-quota-usage-counts.schema.json +42 -0
- package/artifacts/schema/org-quota-usage.schema.json +102 -0
- package/artifacts/schema/org-quotas.schema.json +51 -0
- package/artifacts/schema/org-usage-query.schema.json +19 -0
- package/artifacts/schema/org-usage-response.schema.json +77 -0
- package/artifacts/schema/org.schema.json +30 -0
- package/artifacts/schema/parameter-invalid-details.schema.json +37 -0
- package/artifacts/schema/parameter-spec.schema.json +120 -0
- package/artifacts/schema/parameter-violation.schema.json +24 -0
- package/artifacts/schema/password-change-request.schema.json +21 -0
- package/artifacts/schema/password-reset-confirm.schema.json +19 -0
- package/artifacts/schema/password-reset-request.schema.json +14 -0
- package/artifacts/schema/patch-app-oidc-provider-request.schema.json +50 -0
- package/artifacts/schema/patch-app-user-request.schema.json +34 -0
- package/artifacts/schema/patch-auth-me-request.schema.json +22 -0
- package/artifacts/schema/patch-fleetless-user-request.schema.json +20 -0
- package/artifacts/schema/patch-org-request.schema.json +15 -0
- package/artifacts/schema/patch-org-response.schema.json +40 -0
- package/artifacts/schema/patch-robot-request.schema.json +15 -0
- package/artifacts/schema/patch-robot-response.schema.json +40 -0
- package/artifacts/schema/pending-team-invite-list-response.schema.json +52 -0
- package/artifacts/schema/pending-team-invite.schema.json +39 -0
- package/artifacts/schema/protected-resource-metadata.schema.json +41 -0
- package/artifacts/schema/publish-config-response.schema.json +21 -0
- package/artifacts/schema/publish-request.schema.json +17 -0
- package/artifacts/schema/publisher-config.schema.json +285 -0
- package/artifacts/schema/put-app-auth-config-request.schema.json +93 -0
- package/artifacts/schema/put-app-mail-template-request.schema.json +35 -0
- package/artifacts/schema/put-config-draft-request.schema.json +13 -0
- package/artifacts/schema/put-datapoint-display-request.schema.json +31 -0
- package/artifacts/schema/put-robot-details-request.schema.json +41 -0
- package/artifacts/schema/put-robot-details-response.schema.json +43 -0
- package/artifacts/schema/rate-limit-details.schema.json +15 -0
- package/artifacts/schema/refresh-request.schema.json +13 -0
- package/artifacts/schema/release-live-query.schema.json +13 -0
- package/artifacts/schema/rename-slug-request.schema.json +23 -0
- package/artifacts/schema/rename-slug-response.schema.json +24 -0
- package/artifacts/schema/resource-health-event.schema.json +72 -0
- package/artifacts/schema/resource-health-list-response.schema.json +80 -0
- package/artifacts/schema/resource-health-state.schema.json +68 -0
- package/artifacts/schema/robot-config-doc.schema.json +1616 -0
- package/artifacts/schema/robot-delete-query.schema.json +12 -0
- package/artifacts/schema/robot-deletion-summary.schema.json +63 -0
- package/artifacts/schema/robot-detail-response.schema.json +262 -0
- package/artifacts/schema/robot-details-doc.schema.json +33 -0
- package/artifacts/schema/robot-jobs-response.schema.json +119 -0
- package/artifacts/schema/robot-latency-series.schema.json +81 -0
- package/artifacts/schema/robot-list-item.schema.json +94 -0
- package/artifacts/schema/robot-list-response.schema.json +106 -0
- package/artifacts/schema/robot.schema.json +30 -0
- package/artifacts/schema/role-list-response.schema.json +48 -0
- package/artifacts/schema/role-permissions.schema.json +61 -0
- package/artifacts/schema/role.schema.json +35 -0
- package/artifacts/schema/ros-graph.schema.json +99 -0
- package/artifacts/schema/server-key-list-response.schema.json +64 -0
- package/artifacts/schema/server-key.schema.json +51 -0
- package/artifacts/schema/service-call-response.schema.json +13 -0
- package/artifacts/schema/service-config.schema.json +198 -0
- package/artifacts/schema/session-tokens.schema.json +28 -0
- package/artifacts/schema/sign-up-request.schema.json +26 -0
- package/artifacts/schema/sign-up-response.schema.json +127 -0
- package/artifacts/schema/slug-usage-response.schema.json +32 -0
- package/artifacts/schema/snapshot-header.schema.json +44 -0
- package/artifacts/schema/snapshot-meta-response.schema.json +85 -0
- package/artifacts/schema/subscribe-error.schema.json +31 -0
- package/artifacts/schema/team-invite.schema.json +57 -0
- package/artifacts/schema/tier-change-request.schema.json +17 -0
- package/artifacts/schema/type-definition.schema.json +144 -0
- package/artifacts/schema/types-response.schema.json +156 -0
- package/artifacts/schema/update-app-request.schema.json +32 -0
- package/artifacts/schema/urdf-completeness.schema.json +50 -0
- package/artifacts/schema/validation-issue.schema.json +43 -0
- package/artifacts/schema/waitlist-request.schema.json +15 -0
- package/artifacts/schema-outgoing/bridge-asset-progress.schema.json +102 -0
- package/artifacts/schema-outgoing/bridge-assets-available.schema.json +26 -0
- package/artifacts/schema-outgoing/bridge-camera-state.schema.json +80 -0
- package/artifacts/schema-outgoing/bridge-config-applied.schema.json +69 -0
- package/artifacts/schema-outgoing/bridge-hello.schema.json +68 -0
- package/artifacts/schema-outgoing/bridge-introspect.schema.json +119 -0
- package/artifacts/schema-outgoing/bridge-job-lost.schema.json +23 -0
- package/artifacts/schema-outgoing/bridge-job-update.schema.json +102 -0
- package/artifacts/schema-outgoing/bridge-pong.schema.json +20 -0
- package/artifacts/schema-outgoing/bridge-type-definitions.schema.json +174 -0
- package/artifacts/schema-outgoing/datapoint-frame.schema.json +29 -0
- package/artifacts/schema-outgoing/snapshot-header.schema.json +45 -0
- package/dist/alerts.d.ts +255 -0
- package/dist/alerts.js +193 -0
- package/dist/app-users.d.ts +606 -0
- package/dist/app-users.js +696 -0
- package/dist/apps.d.ts +175 -0
- package/dist/apps.js +267 -0
- package/dist/assets.d.ts +434 -0
- package/dist/assets.js +546 -0
- package/dist/audit.d.ts +129 -0
- package/dist/audit.js +238 -0
- package/dist/client-auth.d.ts +409 -0
- package/dist/client-auth.js +487 -0
- package/dist/common.d.ts +186 -0
- package/dist/common.js +199 -0
- package/dist/config-issues.d.ts +175 -0
- package/dist/config-issues.js +339 -0
- package/dist/config.d.ts +862 -0
- package/dist/config.js +1988 -0
- package/dist/errors.d.ts +52 -0
- package/dist/errors.js +786 -0
- package/dist/identity.d.ts +549 -0
- package/dist/identity.js +503 -0
- package/dist/index.d.ts +51 -0
- package/dist/index.js +51 -0
- package/dist/introspection.d.ts +99 -0
- package/dist/introspection.js +97 -0
- package/dist/jobs.d.ts +334 -0
- package/dist/jobs.js +345 -0
- package/dist/mcp.d.ts +239 -0
- package/dist/mcp.js +153 -0
- package/dist/oauth.d.ts +344 -0
- package/dist/oauth.js +488 -0
- package/dist/protocol.d.ts +781 -0
- package/dist/protocol.js +715 -0
- package/dist/realtime.d.ts +494 -0
- package/dist/realtime.js +512 -0
- package/dist/rest.d.ts +1989 -0
- package/dist/rest.js +1963 -0
- package/dist/routes.d.ts +94 -0
- package/dist/routes.js +2298 -0
- package/package.json +61 -0
package/dist/config.d.ts
ADDED
|
@@ -0,0 +1,862 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
/**
|
|
3
|
+
* What an exposed service *is*, in the developer's own words (§17).
|
|
4
|
+
*
|
|
5
|
+
* This is what `robot_describe` carries verbatim, so it is read by a model
|
|
6
|
+
* that has never seen this robot and cannot ask a follow-up question.
|
|
7
|
+
* `unit` and `range` already say what a number *is*; this says what it
|
|
8
|
+
* *means*.
|
|
9
|
+
*
|
|
10
|
+
* **It lives on the configuration rather than on the app, and that was a
|
|
11
|
+
* decision with a cost.** §17's own wording put the semantic descriptions in
|
|
12
|
+
* the MCP app; André moved them here on 2026-08-18 so that a description is
|
|
13
|
+
* written once per service and true for every app that reaches the robot,
|
|
14
|
+
* beside the other metadata. What is given up is real and should not be
|
|
15
|
+
* rediscovered as a bug: **two apps can no longer describe one service
|
|
16
|
+
* differently for two audiences.** §17 was reworded in the same wave rather
|
|
17
|
+
* than left contradicting this field.
|
|
18
|
+
*
|
|
19
|
+
* **`.optional()` and not `.nullable().default(null)`, deliberately.** The
|
|
20
|
+
* established shape in this file is a default — and every use of it has
|
|
21
|
+
* added an instance to a known contradiction: `.default()` publishes the
|
|
22
|
+
* field as **required** in the generated JSON Schema, because after parsing
|
|
23
|
+
* it is always present. That is recorded four times over in
|
|
24
|
+
* `scripts/export-schemas.ts`, whose fix (`io: 'input'`, applied per schema)
|
|
25
|
+
* is a judgement call across roughly sixty schemas plus a re-vendor and a
|
|
26
|
+
* re-pin in four repos. W7c's playbook said task 0 would do it; reading the
|
|
27
|
+
* measured blast radius — 90 artifacts, 436 deletions for the blanket
|
|
28
|
+
* version — said otherwise, at the start of a wave with five people blocked
|
|
29
|
+
* on this pin. So the field simply does not create a fifth instance:
|
|
30
|
+
* optional is optional in both modes, and *absent* is the single spelling of
|
|
31
|
+
* "not described". `.min(1)` keeps the empty string from becoming a second.
|
|
32
|
+
*/
|
|
33
|
+
export declare const serviceDescription: z.ZodOptional<z.ZodString>;
|
|
34
|
+
/**
|
|
35
|
+
* One parameter's prose, for the same reader as `serviceDescription` and
|
|
36
|
+
* under the same rules. Shorter, because it describes one field of one call
|
|
37
|
+
* rather than the call itself.
|
|
38
|
+
*/
|
|
39
|
+
export declare const parameterDescription: z.ZodOptional<z.ZodString>;
|
|
40
|
+
/** The ROS 2 primitive field types, spelled as ROS 2 spells them. */
|
|
41
|
+
export declare const parameterType: z.ZodEnum<{
|
|
42
|
+
string: "string";
|
|
43
|
+
bool: "bool";
|
|
44
|
+
byte: "byte";
|
|
45
|
+
char: "char";
|
|
46
|
+
int8: "int8";
|
|
47
|
+
uint8: "uint8";
|
|
48
|
+
int16: "int16";
|
|
49
|
+
uint16: "uint16";
|
|
50
|
+
int32: "int32";
|
|
51
|
+
uint32: "uint32";
|
|
52
|
+
int64: "int64";
|
|
53
|
+
uint64: "uint64";
|
|
54
|
+
float32: "float32";
|
|
55
|
+
float64: "float64";
|
|
56
|
+
wstring: "wstring";
|
|
57
|
+
}>;
|
|
58
|
+
export type ParameterType = z.infer<typeof parameterType>;
|
|
59
|
+
/**
|
|
60
|
+
* One parameter a caller may fill in a message template.
|
|
61
|
+
*
|
|
62
|
+
* `type` is required and **not derived from the template position**, even
|
|
63
|
+
* though introspection usually knows it. The reason is the robot that has
|
|
64
|
+
* never connected: there is nothing to derive there, and that is exactly
|
|
65
|
+
* where the editor has to help most.
|
|
66
|
+
*
|
|
67
|
+
* Which constraints exist depends on the type, and a constraint on the wrong
|
|
68
|
+
* type is refused rather than silently inert. Floats deliberately have no
|
|
69
|
+
* `enum`: equality on floating point is unreliable, so an enumerated float
|
|
70
|
+
* list is a trap that only shows up in operation.
|
|
71
|
+
*
|
|
72
|
+
* **A `default` and every `enum` entry must match `type`**, and that is
|
|
73
|
+
* decided here rather than in the cloud. Its sibling
|
|
74
|
+
* `constraint_not_allowed_for_type` was always here, and leaving one of a
|
|
75
|
+
* pair in zod and the other in the cloud is two policies for one decision.
|
|
76
|
+
* It needs nothing this schema does not have: a value and a declared type.
|
|
77
|
+
* `type_mismatch` — the declared type against the type at the template
|
|
78
|
+
* position — is the one that needs introspection, and it is the cloud's.
|
|
79
|
+
*
|
|
80
|
+
* There is no `required` field. A placeholder cannot be left unfilled, so
|
|
81
|
+
* "required" is exactly "has no `default`" — a second spelling of one fact
|
|
82
|
+
* is the defect this file has spent two waves removing.
|
|
83
|
+
*/
|
|
84
|
+
export declare const parameterSpec: z.ZodObject<{
|
|
85
|
+
type: z.ZodEnum<{
|
|
86
|
+
string: "string";
|
|
87
|
+
bool: "bool";
|
|
88
|
+
byte: "byte";
|
|
89
|
+
char: "char";
|
|
90
|
+
int8: "int8";
|
|
91
|
+
uint8: "uint8";
|
|
92
|
+
int16: "int16";
|
|
93
|
+
uint16: "uint16";
|
|
94
|
+
int32: "int32";
|
|
95
|
+
uint32: "uint32";
|
|
96
|
+
int64: "int64";
|
|
97
|
+
uint64: "uint64";
|
|
98
|
+
float32: "float32";
|
|
99
|
+
float64: "float64";
|
|
100
|
+
wstring: "wstring";
|
|
101
|
+
}>;
|
|
102
|
+
default: z.ZodOptional<z.ZodUnion<readonly [z.ZodNumber, z.ZodString, z.ZodBoolean]>>;
|
|
103
|
+
min_value: z.ZodOptional<z.ZodNumber>;
|
|
104
|
+
max_value: z.ZodOptional<z.ZodNumber>;
|
|
105
|
+
enum: z.ZodOptional<z.ZodArray<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>>;
|
|
106
|
+
regex: z.ZodOptional<z.ZodString>;
|
|
107
|
+
description: z.ZodOptional<z.ZodString>;
|
|
108
|
+
}, z.core.$strict>;
|
|
109
|
+
export type ParameterSpec = z.infer<typeof parameterSpec>;
|
|
110
|
+
/** Parameters of one entry, keyed by name. At most 50. */
|
|
111
|
+
export declare const parameterMap: z.ZodRecord<z.ZodString, z.ZodObject<{
|
|
112
|
+
type: z.ZodEnum<{
|
|
113
|
+
string: "string";
|
|
114
|
+
bool: "bool";
|
|
115
|
+
byte: "byte";
|
|
116
|
+
char: "char";
|
|
117
|
+
int8: "int8";
|
|
118
|
+
uint8: "uint8";
|
|
119
|
+
int16: "int16";
|
|
120
|
+
uint16: "uint16";
|
|
121
|
+
int32: "int32";
|
|
122
|
+
uint32: "uint32";
|
|
123
|
+
int64: "int64";
|
|
124
|
+
uint64: "uint64";
|
|
125
|
+
float32: "float32";
|
|
126
|
+
float64: "float64";
|
|
127
|
+
wstring: "wstring";
|
|
128
|
+
}>;
|
|
129
|
+
default: z.ZodOptional<z.ZodUnion<readonly [z.ZodNumber, z.ZodString, z.ZodBoolean]>>;
|
|
130
|
+
min_value: z.ZodOptional<z.ZodNumber>;
|
|
131
|
+
max_value: z.ZodOptional<z.ZodNumber>;
|
|
132
|
+
enum: z.ZodOptional<z.ZodArray<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>>;
|
|
133
|
+
regex: z.ZodOptional<z.ZodString>;
|
|
134
|
+
description: z.ZodOptional<z.ZodString>;
|
|
135
|
+
}, z.core.$strict>>;
|
|
136
|
+
/**
|
|
137
|
+
* Slugs no configured entry may take (spec §4.3), across **all five exposure
|
|
138
|
+
* sections at once** — slugs are one namespace, so a name reserved here is
|
|
139
|
+
* reserved everywhere.
|
|
140
|
+
*
|
|
141
|
+
* The first three are built-ins: the cloud or the bridge already publishes
|
|
142
|
+
* something under them, so a configured entry would be a second producer for
|
|
143
|
+
* one name. `history` is reserved for a different reason and is not a built-in
|
|
144
|
+
* — nothing publishes it. `GET /api/robots/:id/jobs/history` is a **literal
|
|
145
|
+
* sibling** of `GET /api/robots/:id/jobs/:slug`, so an action or service named
|
|
146
|
+
* `history` would have a job route no caller could ever reach. Reserving the
|
|
147
|
+
* name is the honest half of that: the alternative is a slug the format
|
|
148
|
+
* accepts and one route silently cannot address.
|
|
149
|
+
*
|
|
150
|
+
* **This constant is the only list.** The cloud's `validation.ts` builds its
|
|
151
|
+
* set from it and emits `reserved_slug`; `config-store.ts` reads it for the
|
|
152
|
+
* rename target; the console reads it for slug suggestion and repairs. Nothing
|
|
153
|
+
* copies the members. Note that it is NOT the enumeration of built-in
|
|
154
|
+
* datapoints — the cloud keeps that separately, and it must, now that a
|
|
155
|
+
* reserved name exists that no plane serves.
|
|
156
|
+
*
|
|
157
|
+
* **What it does not do: `robotConfigDoc` does not enforce it.** Reservation is
|
|
158
|
+
* a semantic check that belongs with the ones that need the robot's context,
|
|
159
|
+
* and it answers as a `ValidationIssue` carrying the section, the slug and a
|
|
160
|
+
* severity — which a zod issue could not, and which is what the console's
|
|
161
|
+
* repair actions read. The section descriptions below therefore say "refused
|
|
162
|
+
* when the document is validated" rather than "refused here" — the artifact
|
|
163
|
+
* ships those sentences to readers who have only the JSON Schema, and
|
|
164
|
+
* "here" would have promised them a refusal this parse does not make.
|
|
165
|
+
*/
|
|
166
|
+
export declare const RESERVED_SLUGS: readonly ["bridge_state", "robot_details", "bridge_pressure", "history"];
|
|
167
|
+
/**
|
|
168
|
+
* When an alert fires and when it is ok again. There is no discriminator:
|
|
169
|
+
* `resolve_at` absent means equality, present means a threshold whose
|
|
170
|
+
* direction follows from the comparison. The gap is the hysteresis, and it
|
|
171
|
+
* is therefore mandatory for thresholds — a value sitting exactly on a
|
|
172
|
+
* threshold with no gap flips on every sample.
|
|
173
|
+
*/
|
|
174
|
+
export declare const alertCondition: z.ZodObject<{
|
|
175
|
+
fire_at: z.ZodUnion<readonly [z.ZodNumber, z.ZodString, z.ZodBoolean]>;
|
|
176
|
+
resolve_at: z.ZodOptional<z.ZodNumber>;
|
|
177
|
+
}, z.core.$strict>;
|
|
178
|
+
export type AlertCondition = z.infer<typeof alertCondition>;
|
|
179
|
+
/**
|
|
180
|
+
* The four defaults the format names, as constants.
|
|
181
|
+
*
|
|
182
|
+
* **The fields stay `.optional()`, not `.default()`** — that argument is on
|
|
183
|
+
* `serviceDescription` above and has not changed: `.default()` publishes a
|
|
184
|
+
* field as *required* in the generated JSON Schema, and absence is the
|
|
185
|
+
* single spelling of "not set" in this format. What was missing is the
|
|
186
|
+
* number itself. Left only in prose, the cloud and the console each invent
|
|
187
|
+
* their own, and the two agree until one of them is edited. The house answer
|
|
188
|
+
* is a named constant, so a consumer applying a default reads it from here.
|
|
189
|
+
*/
|
|
190
|
+
export declare const ALERT_SEVERITY_DEFAULT = "warning";
|
|
191
|
+
export declare const ALERT_ENABLED_DEFAULT = true;
|
|
192
|
+
/** How often a value is written to history — not how often it is sent. */
|
|
193
|
+
export declare const RETENTION_INTERVAL_SECONDS_DEFAULT = 300;
|
|
194
|
+
/** The window a chart opens on, in minutes. Display only. */
|
|
195
|
+
export declare const CHART_WINDOW_MINUTES_DEFAULT = 60;
|
|
196
|
+
/**
|
|
197
|
+
* An alert's definition. Runtime state — whether it is firing, since when,
|
|
198
|
+
* with what value — is NOT here: it lives in the database and survives a
|
|
199
|
+
* restart, and it has no business in a versioned document.
|
|
200
|
+
*
|
|
201
|
+
* `severity` and `enabled` are absent-means-`ALERT_SEVERITY_DEFAULT` and
|
|
202
|
+
* absent-means-`ALERT_ENABLED_DEFAULT`; see those constants for why the
|
|
203
|
+
* default is not applied here.
|
|
204
|
+
*/
|
|
205
|
+
export declare const datapointAlert: z.ZodObject<{
|
|
206
|
+
condition: z.ZodObject<{
|
|
207
|
+
fire_at: z.ZodUnion<readonly [z.ZodNumber, z.ZodString, z.ZodBoolean]>;
|
|
208
|
+
resolve_at: z.ZodOptional<z.ZodNumber>;
|
|
209
|
+
}, z.core.$strict>;
|
|
210
|
+
severity: z.ZodOptional<z.ZodEnum<{
|
|
211
|
+
error: "error";
|
|
212
|
+
warning: "warning";
|
|
213
|
+
}>>;
|
|
214
|
+
name: z.ZodOptional<z.ZodString>;
|
|
215
|
+
enabled: z.ZodOptional<z.ZodBoolean>;
|
|
216
|
+
}, z.core.$strict>;
|
|
217
|
+
export type DatapointAlert = z.infer<typeof datapointAlert>;
|
|
218
|
+
/** Requires a numeric field — all four fields share that one precondition. */
|
|
219
|
+
export declare const datapointNumeric: z.ZodObject<{
|
|
220
|
+
scale: z.ZodOptional<z.ZodNumber>;
|
|
221
|
+
offset: z.ZodOptional<z.ZodNumber>;
|
|
222
|
+
unit: z.ZodOptional<z.ZodString>;
|
|
223
|
+
decimals: z.ZodOptional<z.ZodNumber>;
|
|
224
|
+
}, z.core.$strict>;
|
|
225
|
+
export type DatapointNumeric = z.infer<typeof datapointNumeric>;
|
|
226
|
+
/**
|
|
227
|
+
* `interval_seconds` absent means `RETENTION_INTERVAL_SECONDS_DEFAULT`.
|
|
228
|
+
*
|
|
229
|
+
* **`enabled` absent means off**, and that direction is the deliberate one.
|
|
230
|
+
* Stored points are what a customer is billed for, so a default that silently
|
|
231
|
+
* turned history on would start charging for a value nobody asked to keep. The
|
|
232
|
+
* cheap mistake is a developer noticing a datapoint has no history and
|
|
233
|
+
* switching it on; the expensive one is nobody noticing that everything has
|
|
234
|
+
* history. Absent-means-off is also what the cloud already does — this comment
|
|
235
|
+
* exists because it was doing it without anything saying so.
|
|
236
|
+
*
|
|
237
|
+
* Not spelled `.default(false)` for the same reason as every other default in
|
|
238
|
+
* this file: the document a developer wrote is the document that is stored,
|
|
239
|
+
* and a parse that inserts fields makes the round trip a lie.
|
|
240
|
+
*/
|
|
241
|
+
export declare const datapointRetention: z.ZodObject<{
|
|
242
|
+
enabled: z.ZodOptional<z.ZodBoolean>;
|
|
243
|
+
interval_seconds: z.ZodOptional<z.ZodNumber>;
|
|
244
|
+
max_buffer_values: z.ZodOptional<z.ZodNumber>;
|
|
245
|
+
}, z.core.$strict>;
|
|
246
|
+
export type DatapointRetention = z.infer<typeof datapointRetention>;
|
|
247
|
+
export declare const datapointChart: z.ZodObject<{
|
|
248
|
+
y_min: z.ZodOptional<z.ZodNumber>;
|
|
249
|
+
y_max: z.ZodOptional<z.ZodNumber>;
|
|
250
|
+
style: z.ZodOptional<z.ZodEnum<{
|
|
251
|
+
line: "line";
|
|
252
|
+
step: "step";
|
|
253
|
+
}>>;
|
|
254
|
+
default_window_minutes: z.ZodOptional<z.ZodNumber>;
|
|
255
|
+
}, z.core.$strict>;
|
|
256
|
+
export type DatapointChart = z.infer<typeof datapointChart>;
|
|
257
|
+
/**
|
|
258
|
+
* The ceiling lives here once. `rest.ts`'s `datapointDescriptor` reuses it,
|
|
259
|
+
* so the two cannot drift apart the way a number spelled out twice always
|
|
260
|
+
* eventually does. `0` is deliberately admitted — zero and "omitted"
|
|
261
|
+
* (`datapointConfig`) or `null` (`datapointDescriptor`) are the same fact,
|
|
262
|
+
* "no throttling", not a refused value: `.positive()` here would exclude
|
|
263
|
+
* the very thing this field's own absence already means.
|
|
264
|
+
*/
|
|
265
|
+
export declare const rateThrottleHz: z.ZodNumber;
|
|
266
|
+
/**
|
|
267
|
+
* One exposed datapoint: one field of a topic, or the whole topic
|
|
268
|
+
* (`field` omitted). Never several topics.
|
|
269
|
+
*
|
|
270
|
+
* `rate_throttle_hz` is an upper bound, not a clock — the bridge drops what
|
|
271
|
+
* arrives too fast and never repeats a value to manufacture a rate. The
|
|
272
|
+
* ceiling is 20: an app's surface has no use for more, and a control loop
|
|
273
|
+
* belongs on a tool that reads at the robot.
|
|
274
|
+
*/
|
|
275
|
+
export declare const datapointConfig: z.ZodObject<{
|
|
276
|
+
topic: z.ZodString;
|
|
277
|
+
type: z.ZodString;
|
|
278
|
+
field: z.ZodOptional<z.ZodString>;
|
|
279
|
+
rate_throttle_hz: z.ZodOptional<z.ZodNumber>;
|
|
280
|
+
description: z.ZodOptional<z.ZodString>;
|
|
281
|
+
numeric: z.ZodOptional<z.ZodObject<{
|
|
282
|
+
scale: z.ZodOptional<z.ZodNumber>;
|
|
283
|
+
offset: z.ZodOptional<z.ZodNumber>;
|
|
284
|
+
unit: z.ZodOptional<z.ZodString>;
|
|
285
|
+
decimals: z.ZodOptional<z.ZodNumber>;
|
|
286
|
+
}, z.core.$strict>>;
|
|
287
|
+
retention: z.ZodOptional<z.ZodObject<{
|
|
288
|
+
enabled: z.ZodOptional<z.ZodBoolean>;
|
|
289
|
+
interval_seconds: z.ZodOptional<z.ZodNumber>;
|
|
290
|
+
max_buffer_values: z.ZodOptional<z.ZodNumber>;
|
|
291
|
+
}, z.core.$strict>>;
|
|
292
|
+
chart: z.ZodOptional<z.ZodObject<{
|
|
293
|
+
y_min: z.ZodOptional<z.ZodNumber>;
|
|
294
|
+
y_max: z.ZodOptional<z.ZodNumber>;
|
|
295
|
+
style: z.ZodOptional<z.ZodEnum<{
|
|
296
|
+
line: "line";
|
|
297
|
+
step: "step";
|
|
298
|
+
}>>;
|
|
299
|
+
default_window_minutes: z.ZodOptional<z.ZodNumber>;
|
|
300
|
+
}, z.core.$strict>>;
|
|
301
|
+
alerts: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
|
|
302
|
+
condition: z.ZodObject<{
|
|
303
|
+
fire_at: z.ZodUnion<readonly [z.ZodNumber, z.ZodString, z.ZodBoolean]>;
|
|
304
|
+
resolve_at: z.ZodOptional<z.ZodNumber>;
|
|
305
|
+
}, z.core.$strict>;
|
|
306
|
+
severity: z.ZodOptional<z.ZodEnum<{
|
|
307
|
+
error: "error";
|
|
308
|
+
warning: "warning";
|
|
309
|
+
}>>;
|
|
310
|
+
name: z.ZodOptional<z.ZodString>;
|
|
311
|
+
enabled: z.ZodOptional<z.ZodBoolean>;
|
|
312
|
+
}, z.core.$strict>>>;
|
|
313
|
+
}, z.core.$strict>;
|
|
314
|
+
export type DatapointConfig = z.infer<typeof datapointConfig>;
|
|
315
|
+
/**
|
|
316
|
+
* A message template: the goal, request or published message, written out in
|
|
317
|
+
* full. Literals are fixed; `${name}` is a hole a caller fills.
|
|
318
|
+
*
|
|
319
|
+
* The shape cannot be narrower than `unknown` here — it is the shape of an
|
|
320
|
+
* arbitrary ROS message, which only the robot's own type definition knows.
|
|
321
|
+
* What CAN be checked here is the placeholder grammar; everything else is
|
|
322
|
+
* checked in the cloud against the introspected type.
|
|
323
|
+
*
|
|
324
|
+
* **`null` is refused, at every depth of this position.** Omission is the
|
|
325
|
+
* only spelling of "not set" in this format, and a bare `z.unknown()` made
|
|
326
|
+
* every message position the one place that also accepted the second
|
|
327
|
+
* spelling: `publishers.p.message: null`, `failsafe.message: null`,
|
|
328
|
+
* `actions.a.message: null` and `messages: {stop: null}` all parsed. Every
|
|
329
|
+
* other field gets this from its own type refusing `null`; this one has no
|
|
330
|
+
* type to get it from, so it says it here.
|
|
331
|
+
*
|
|
332
|
+
* The refusal is a refinement and therefore **invisible in the JSON Schema
|
|
333
|
+
* artifact**, which publishes this position as `{}`. The artifact says what
|
|
334
|
+
* the shape is, not what the parser refuses; a consumer that validates
|
|
335
|
+
* against the artifact instead of against this schema does not get it.
|
|
336
|
+
*/
|
|
337
|
+
export declare const messageTemplate: z.ZodUnknown;
|
|
338
|
+
/** `${name}` and nothing else. A bare word is always a literal. */
|
|
339
|
+
export declare const PLACEHOLDER_RE: RegExp;
|
|
340
|
+
export declare const messageRef: z.ZodString;
|
|
341
|
+
/**
|
|
342
|
+
* What may stand at a `message:` position: a shared message by name
|
|
343
|
+
* (`${name}`), or an inline template. Position decides which — directly after
|
|
344
|
+
* `message:` a `${name}` resolves to a shared message, inside a body it
|
|
345
|
+
* resolves to a parameter.
|
|
346
|
+
*
|
|
347
|
+
* **This is `messageTemplate`, not a union with `messageRef`, and that is a
|
|
348
|
+
* correction rather than a simplification.** It was written as
|
|
349
|
+
* `z.union([messageRef, messageTemplate])`, whose second member accepts
|
|
350
|
+
* everything the first does: the union could never refuse, never narrowed
|
|
351
|
+
* anything (`string | unknown` is `unknown`), and published as
|
|
352
|
+
* `anyOf: [{pattern: …}, {}]` — an artifact that claims a distinction no
|
|
353
|
+
* validator makes. The distinction is real but it is not a shape distinction:
|
|
354
|
+
* a `${name}` here means a reference and elsewhere means a parameter, and
|
|
355
|
+
* only the cloud can say whether that name is a defined message
|
|
356
|
+
* (`unknown_message`) or a nested one (`nested_message_reference`).
|
|
357
|
+
*
|
|
358
|
+
* `messageRef` stays exported as the predicate that decides it. It is what a
|
|
359
|
+
* consumer applies to a body to ask "is this a reference?"; it is not what
|
|
360
|
+
* validates one.
|
|
361
|
+
*/
|
|
362
|
+
export declare const messageBody: z.ZodUnknown;
|
|
363
|
+
/**
|
|
364
|
+
* Every placeholder name in a template, at any depth.
|
|
365
|
+
*
|
|
366
|
+
* **An explicit stack, not recursion, and the reason is `safeParse`'s
|
|
367
|
+
* contract.** This runs inside `publisherConfig`'s failsafe refinement, so a
|
|
368
|
+
* `RangeError: Maximum call stack size exceeded` did not stay here: it
|
|
369
|
+
* propagated out of `safeParse`, which is specified to return a result and
|
|
370
|
+
* not to throw. Measured on the recursive version — fine at 8 000 levels of
|
|
371
|
+
* nesting, throwing at 20 000 — and a flow-style YAML one-liner reaches that
|
|
372
|
+
* in about 120 KB of input. A draft PUT would have answered 500 where it
|
|
373
|
+
* meant 400.
|
|
374
|
+
*
|
|
375
|
+
* `seen` is not an optimisation. YAML anchors can express a cycle
|
|
376
|
+
* (`&a { b: *a }`), and the parser resolves an alias to the same object, so
|
|
377
|
+
* without it the loop that fixed the overflow would hang instead — the
|
|
378
|
+
* failure mode a stack trades for, made worse by being silent.
|
|
379
|
+
*
|
|
380
|
+
* The array branch is explicit, not necessary: `Object.values()` on an array
|
|
381
|
+
* yields the same elements. It is here so the walk reads as covering both
|
|
382
|
+
* shapes; a reader does not have to know that property of `Object.values`.
|
|
383
|
+
*/
|
|
384
|
+
export declare function placeholderNames(node: unknown, found?: Set<string>): Set<string>;
|
|
385
|
+
/**
|
|
386
|
+
* Reusable message bodies, keyed by name. A shared message may hold
|
|
387
|
+
* placeholders; whoever inserts it declares the parameters. It may NOT
|
|
388
|
+
* insert another — that excludes cycles and lets every check look at exactly
|
|
389
|
+
* one body instead of walking a reference tree.
|
|
390
|
+
*/
|
|
391
|
+
export declare const messageMap: z.ZodRecord<z.ZodString, z.ZodUnknown>;
|
|
392
|
+
/**
|
|
393
|
+
* An action the robot can be asked to perform (spec §4.2, §11.3). At most one
|
|
394
|
+
* job runs per action slug; a second call is refused `busy`, and every
|
|
395
|
+
* observer of the slug watches the same job.
|
|
396
|
+
*/
|
|
397
|
+
export declare const actionConfig: z.ZodObject<{
|
|
398
|
+
ros_name: z.ZodString;
|
|
399
|
+
type: z.ZodString;
|
|
400
|
+
message: z.ZodOptional<z.ZodUnknown>;
|
|
401
|
+
parameters: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
|
|
402
|
+
type: z.ZodEnum<{
|
|
403
|
+
string: "string";
|
|
404
|
+
bool: "bool";
|
|
405
|
+
byte: "byte";
|
|
406
|
+
char: "char";
|
|
407
|
+
int8: "int8";
|
|
408
|
+
uint8: "uint8";
|
|
409
|
+
int16: "int16";
|
|
410
|
+
uint16: "uint16";
|
|
411
|
+
int32: "int32";
|
|
412
|
+
uint32: "uint32";
|
|
413
|
+
int64: "int64";
|
|
414
|
+
uint64: "uint64";
|
|
415
|
+
float32: "float32";
|
|
416
|
+
float64: "float64";
|
|
417
|
+
wstring: "wstring";
|
|
418
|
+
}>;
|
|
419
|
+
default: z.ZodOptional<z.ZodUnion<readonly [z.ZodNumber, z.ZodString, z.ZodBoolean]>>;
|
|
420
|
+
min_value: z.ZodOptional<z.ZodNumber>;
|
|
421
|
+
max_value: z.ZodOptional<z.ZodNumber>;
|
|
422
|
+
enum: z.ZodOptional<z.ZodArray<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>>;
|
|
423
|
+
regex: z.ZodOptional<z.ZodString>;
|
|
424
|
+
description: z.ZodOptional<z.ZodString>;
|
|
425
|
+
}, z.core.$strict>>>;
|
|
426
|
+
description: z.ZodOptional<z.ZodString>;
|
|
427
|
+
}, z.core.$strict>;
|
|
428
|
+
export type ActionConfig = z.infer<typeof actionConfig>;
|
|
429
|
+
/** A ROS service call with validated parameters (spec §4.2). */
|
|
430
|
+
export declare const serviceConfig: z.ZodObject<{
|
|
431
|
+
ros_name: z.ZodString;
|
|
432
|
+
type: z.ZodString;
|
|
433
|
+
message: z.ZodOptional<z.ZodUnknown>;
|
|
434
|
+
parameters: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
|
|
435
|
+
type: z.ZodEnum<{
|
|
436
|
+
string: "string";
|
|
437
|
+
bool: "bool";
|
|
438
|
+
byte: "byte";
|
|
439
|
+
char: "char";
|
|
440
|
+
int8: "int8";
|
|
441
|
+
uint8: "uint8";
|
|
442
|
+
int16: "int16";
|
|
443
|
+
uint16: "uint16";
|
|
444
|
+
int32: "int32";
|
|
445
|
+
uint32: "uint32";
|
|
446
|
+
int64: "int64";
|
|
447
|
+
uint64: "uint64";
|
|
448
|
+
float32: "float32";
|
|
449
|
+
float64: "float64";
|
|
450
|
+
wstring: "wstring";
|
|
451
|
+
}>;
|
|
452
|
+
default: z.ZodOptional<z.ZodUnion<readonly [z.ZodNumber, z.ZodString, z.ZodBoolean]>>;
|
|
453
|
+
min_value: z.ZodOptional<z.ZodNumber>;
|
|
454
|
+
max_value: z.ZodOptional<z.ZodNumber>;
|
|
455
|
+
enum: z.ZodOptional<z.ZodArray<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>>;
|
|
456
|
+
regex: z.ZodOptional<z.ZodString>;
|
|
457
|
+
description: z.ZodOptional<z.ZodString>;
|
|
458
|
+
}, z.core.$strict>>>;
|
|
459
|
+
description: z.ZodOptional<z.ZodString>;
|
|
460
|
+
}, z.core.$strict>;
|
|
461
|
+
export type ServiceConfig = z.infer<typeof serviceConfig>;
|
|
462
|
+
/**
|
|
463
|
+
* A topic clients may publish to.
|
|
464
|
+
*
|
|
465
|
+
* `failsafe` groups the deadline with the message it triggers, because the
|
|
466
|
+
* deadline exists for nothing else. The message must hold no placeholder:
|
|
467
|
+
* the bridge sends it with no caller present, so there would be nobody to
|
|
468
|
+
* fill one.
|
|
469
|
+
*
|
|
470
|
+
* **What that check can and cannot see.** It refuses a placeholder written
|
|
471
|
+
* into an inline failsafe body. It does not refuse
|
|
472
|
+
* `failsafe: { message: '${anything}' }` — a string at a `message:` position
|
|
473
|
+
* is a *reference to a shared message*, and whether that message holds a
|
|
474
|
+
* placeholder is a question about another section of the document, which a
|
|
475
|
+
* schema over one publisher cannot answer. So `failsafe_has_parameters` is
|
|
476
|
+
* half here and half in the cloud, on purpose and by position rather than by
|
|
477
|
+
* accident: the inline half is decidable here, the referenced half is one of
|
|
478
|
+
* the name-resolution codes the file header assigns to the cloud.
|
|
479
|
+
*
|
|
480
|
+
* `quiet_timeout_ms` is unrelated — how long a publisher must be silent
|
|
481
|
+
* before a *different* user may send.
|
|
482
|
+
*/
|
|
483
|
+
export declare const publisherConfig: z.ZodObject<{
|
|
484
|
+
topic: z.ZodString;
|
|
485
|
+
type: z.ZodString;
|
|
486
|
+
message: z.ZodUnknown;
|
|
487
|
+
parameters: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
|
|
488
|
+
type: z.ZodEnum<{
|
|
489
|
+
string: "string";
|
|
490
|
+
bool: "bool";
|
|
491
|
+
byte: "byte";
|
|
492
|
+
char: "char";
|
|
493
|
+
int8: "int8";
|
|
494
|
+
uint8: "uint8";
|
|
495
|
+
int16: "int16";
|
|
496
|
+
uint16: "uint16";
|
|
497
|
+
int32: "int32";
|
|
498
|
+
uint32: "uint32";
|
|
499
|
+
int64: "int64";
|
|
500
|
+
uint64: "uint64";
|
|
501
|
+
float32: "float32";
|
|
502
|
+
float64: "float64";
|
|
503
|
+
wstring: "wstring";
|
|
504
|
+
}>;
|
|
505
|
+
default: z.ZodOptional<z.ZodUnion<readonly [z.ZodNumber, z.ZodString, z.ZodBoolean]>>;
|
|
506
|
+
min_value: z.ZodOptional<z.ZodNumber>;
|
|
507
|
+
max_value: z.ZodOptional<z.ZodNumber>;
|
|
508
|
+
enum: z.ZodOptional<z.ZodArray<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>>;
|
|
509
|
+
regex: z.ZodOptional<z.ZodString>;
|
|
510
|
+
description: z.ZodOptional<z.ZodString>;
|
|
511
|
+
}, z.core.$strict>>>;
|
|
512
|
+
failsafe: z.ZodObject<{
|
|
513
|
+
timeout_ms: z.ZodNumber;
|
|
514
|
+
message: z.ZodUnknown;
|
|
515
|
+
}, z.core.$strict>;
|
|
516
|
+
quiet_timeout_ms: z.ZodNumber;
|
|
517
|
+
description: z.ZodOptional<z.ZodString>;
|
|
518
|
+
}, z.core.$strict>;
|
|
519
|
+
export type PublisherConfig = z.infer<typeof publisherConfig>;
|
|
520
|
+
/**
|
|
521
|
+
* Camera credentials, in the document. There is no separate store any more.
|
|
522
|
+
*
|
|
523
|
+
* This was decided against a recorded objection, and the objection stands: a
|
|
524
|
+
* password here is in every published version, and those are immutable. It
|
|
525
|
+
* cannot be removed from history and cannot be rotated without republishing.
|
|
526
|
+
* The bound on that decision is elsewhere and load-bearing — the publish
|
|
527
|
+
* audit event and the org event stream must not carry the document body.
|
|
528
|
+
*/
|
|
529
|
+
export declare const cameraCredentials: z.ZodObject<{
|
|
530
|
+
username: z.ZodOptional<z.ZodString>;
|
|
531
|
+
password: z.ZodOptional<z.ZodString>;
|
|
532
|
+
}, z.core.$strict>;
|
|
533
|
+
export type CameraCredentials = z.infer<typeof cameraCredentials>;
|
|
534
|
+
export declare const cameraSource: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
535
|
+
kind: z.ZodLiteral<"ros">;
|
|
536
|
+
topic: z.ZodString;
|
|
537
|
+
type: z.ZodString;
|
|
538
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
539
|
+
kind: z.ZodLiteral<"rtsp">;
|
|
540
|
+
url: z.ZodString;
|
|
541
|
+
transport: z.ZodOptional<z.ZodEnum<{
|
|
542
|
+
tcp: "tcp";
|
|
543
|
+
udp: "udp";
|
|
544
|
+
}>>;
|
|
545
|
+
credentials: z.ZodOptional<z.ZodObject<{
|
|
546
|
+
username: z.ZodOptional<z.ZodString>;
|
|
547
|
+
password: z.ZodOptional<z.ZodString>;
|
|
548
|
+
}, z.core.$strict>>;
|
|
549
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
550
|
+
kind: z.ZodLiteral<"mjpeg">;
|
|
551
|
+
url: z.ZodString;
|
|
552
|
+
credentials: z.ZodOptional<z.ZodObject<{
|
|
553
|
+
username: z.ZodOptional<z.ZodString>;
|
|
554
|
+
password: z.ZodOptional<z.ZodString>;
|
|
555
|
+
}, z.core.$strict>>;
|
|
556
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
557
|
+
kind: z.ZodLiteral<"v4l2">;
|
|
558
|
+
device: z.ZodString;
|
|
559
|
+
}, z.core.$strict>], "kind">;
|
|
560
|
+
export type CameraSource = z.infer<typeof cameraSource>;
|
|
561
|
+
/**
|
|
562
|
+
* How often a snapshot is captured, in seconds. Bounded below at one second
|
|
563
|
+
* because a snapshot is the *cheap* mode — a developer who wants motion wants
|
|
564
|
+
* live, and an interval faster than this is a live stream wearing a disguise.
|
|
565
|
+
*
|
|
566
|
+
* The bound lives here once, and `rest.ts`'s `cameraDescriptor` reuses it —
|
|
567
|
+
* the same treatment `rateThrottleHz` got, and for the same reason: the
|
|
568
|
+
* descriptor used to say `snapshot_interval_ms` while the document said
|
|
569
|
+
* seconds, so the cloud converted on one descriptor and not its sibling, with
|
|
570
|
+
* nothing in either file saying so.
|
|
571
|
+
*/
|
|
572
|
+
export declare const snapshotIntervalSeconds: z.ZodNumber;
|
|
573
|
+
/**
|
|
574
|
+
* A camera the robot exposes (spec §10).
|
|
575
|
+
*
|
|
576
|
+
* `width`/`height`/`fps`/`bitrate_kbps` are not cosmetic: §10 makes them the
|
|
577
|
+
* developer's control over **the robot's own bandwidth**, which is why they
|
|
578
|
+
* live in the configuration rather than in a viewer's request. A viewer never
|
|
579
|
+
* gets to make a robot send more.
|
|
580
|
+
*
|
|
581
|
+
* The two modes are deliberately independent (§10):
|
|
582
|
+
*
|
|
583
|
+
* - **Snapshot** runs always, at `snapshot_interval_seconds`, whether or not
|
|
584
|
+
* anyone is watching live. The cloud caches the one frame and serves every
|
|
585
|
+
* client from it, so a hundred pollers cost the robot exactly one image per
|
|
586
|
+
* interval.
|
|
587
|
+
* - **Live** runs on demand and is refcounted in the cloud: the first viewer
|
|
588
|
+
* starts it, the last one ends it.
|
|
589
|
+
*/
|
|
590
|
+
export declare const cameraConfig: z.ZodObject<{
|
|
591
|
+
source: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
592
|
+
kind: z.ZodLiteral<"ros">;
|
|
593
|
+
topic: z.ZodString;
|
|
594
|
+
type: z.ZodString;
|
|
595
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
596
|
+
kind: z.ZodLiteral<"rtsp">;
|
|
597
|
+
url: z.ZodString;
|
|
598
|
+
transport: z.ZodOptional<z.ZodEnum<{
|
|
599
|
+
tcp: "tcp";
|
|
600
|
+
udp: "udp";
|
|
601
|
+
}>>;
|
|
602
|
+
credentials: z.ZodOptional<z.ZodObject<{
|
|
603
|
+
username: z.ZodOptional<z.ZodString>;
|
|
604
|
+
password: z.ZodOptional<z.ZodString>;
|
|
605
|
+
}, z.core.$strict>>;
|
|
606
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
607
|
+
kind: z.ZodLiteral<"mjpeg">;
|
|
608
|
+
url: z.ZodString;
|
|
609
|
+
credentials: z.ZodOptional<z.ZodObject<{
|
|
610
|
+
username: z.ZodOptional<z.ZodString>;
|
|
611
|
+
password: z.ZodOptional<z.ZodString>;
|
|
612
|
+
}, z.core.$strict>>;
|
|
613
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
614
|
+
kind: z.ZodLiteral<"v4l2">;
|
|
615
|
+
device: z.ZodString;
|
|
616
|
+
}, z.core.$strict>], "kind">;
|
|
617
|
+
width: z.ZodNumber;
|
|
618
|
+
height: z.ZodNumber;
|
|
619
|
+
fps: z.ZodNumber;
|
|
620
|
+
bitrate_kbps: z.ZodNumber;
|
|
621
|
+
snapshot_interval_seconds: z.ZodNumber;
|
|
622
|
+
description: z.ZodOptional<z.ZodString>;
|
|
623
|
+
}, z.core.$strict>;
|
|
624
|
+
export type CameraConfig = z.infer<typeof cameraConfig>;
|
|
625
|
+
/**
|
|
626
|
+
* The format version of a `fleetless.yaml`. Deliberately not called
|
|
627
|
+
* `version`: the console counts published states with "v12 → v13", and two
|
|
628
|
+
* numbers called version would be the likeliest confusion in the format.
|
|
629
|
+
*/
|
|
630
|
+
export declare const FLEETLESS_FORMAT_VERSION = 1;
|
|
631
|
+
/**
|
|
632
|
+
* A whole robot configuration — everything configurable about one robot.
|
|
633
|
+
*
|
|
634
|
+
* Every section is a mapping keyed by name, not a list of objects carrying
|
|
635
|
+
* their own name. A duplicate name is then a YAML syntax error rather than a
|
|
636
|
+
* rule somebody has to write, and the name reads as the entry's heading.
|
|
637
|
+
*
|
|
638
|
+
* Slugs remain ONE namespace across all five exposure sections (§4.1), which
|
|
639
|
+
* is what lets a role grant say `{robot, slug}` without naming a kind. That
|
|
640
|
+
* check spans sections and therefore lives in the cloud, not here.
|
|
641
|
+
*/
|
|
642
|
+
export declare const robotConfigDoc: z.ZodObject<{
|
|
643
|
+
fleetless: z.ZodLiteral<1>;
|
|
644
|
+
messages: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
645
|
+
datapoints: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
|
|
646
|
+
topic: z.ZodString;
|
|
647
|
+
type: z.ZodString;
|
|
648
|
+
field: z.ZodOptional<z.ZodString>;
|
|
649
|
+
rate_throttle_hz: z.ZodOptional<z.ZodNumber>;
|
|
650
|
+
description: z.ZodOptional<z.ZodString>;
|
|
651
|
+
numeric: z.ZodOptional<z.ZodObject<{
|
|
652
|
+
scale: z.ZodOptional<z.ZodNumber>;
|
|
653
|
+
offset: z.ZodOptional<z.ZodNumber>;
|
|
654
|
+
unit: z.ZodOptional<z.ZodString>;
|
|
655
|
+
decimals: z.ZodOptional<z.ZodNumber>;
|
|
656
|
+
}, z.core.$strict>>;
|
|
657
|
+
retention: z.ZodOptional<z.ZodObject<{
|
|
658
|
+
enabled: z.ZodOptional<z.ZodBoolean>;
|
|
659
|
+
interval_seconds: z.ZodOptional<z.ZodNumber>;
|
|
660
|
+
max_buffer_values: z.ZodOptional<z.ZodNumber>;
|
|
661
|
+
}, z.core.$strict>>;
|
|
662
|
+
chart: z.ZodOptional<z.ZodObject<{
|
|
663
|
+
y_min: z.ZodOptional<z.ZodNumber>;
|
|
664
|
+
y_max: z.ZodOptional<z.ZodNumber>;
|
|
665
|
+
style: z.ZodOptional<z.ZodEnum<{
|
|
666
|
+
line: "line";
|
|
667
|
+
step: "step";
|
|
668
|
+
}>>;
|
|
669
|
+
default_window_minutes: z.ZodOptional<z.ZodNumber>;
|
|
670
|
+
}, z.core.$strict>>;
|
|
671
|
+
alerts: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
|
|
672
|
+
condition: z.ZodObject<{
|
|
673
|
+
fire_at: z.ZodUnion<readonly [z.ZodNumber, z.ZodString, z.ZodBoolean]>;
|
|
674
|
+
resolve_at: z.ZodOptional<z.ZodNumber>;
|
|
675
|
+
}, z.core.$strict>;
|
|
676
|
+
severity: z.ZodOptional<z.ZodEnum<{
|
|
677
|
+
error: "error";
|
|
678
|
+
warning: "warning";
|
|
679
|
+
}>>;
|
|
680
|
+
name: z.ZodOptional<z.ZodString>;
|
|
681
|
+
enabled: z.ZodOptional<z.ZodBoolean>;
|
|
682
|
+
}, z.core.$strict>>>;
|
|
683
|
+
}, z.core.$strict>>>;
|
|
684
|
+
actions: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
|
|
685
|
+
ros_name: z.ZodString;
|
|
686
|
+
type: z.ZodString;
|
|
687
|
+
message: z.ZodOptional<z.ZodUnknown>;
|
|
688
|
+
parameters: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
|
|
689
|
+
type: z.ZodEnum<{
|
|
690
|
+
string: "string";
|
|
691
|
+
bool: "bool";
|
|
692
|
+
byte: "byte";
|
|
693
|
+
char: "char";
|
|
694
|
+
int8: "int8";
|
|
695
|
+
uint8: "uint8";
|
|
696
|
+
int16: "int16";
|
|
697
|
+
uint16: "uint16";
|
|
698
|
+
int32: "int32";
|
|
699
|
+
uint32: "uint32";
|
|
700
|
+
int64: "int64";
|
|
701
|
+
uint64: "uint64";
|
|
702
|
+
float32: "float32";
|
|
703
|
+
float64: "float64";
|
|
704
|
+
wstring: "wstring";
|
|
705
|
+
}>;
|
|
706
|
+
default: z.ZodOptional<z.ZodUnion<readonly [z.ZodNumber, z.ZodString, z.ZodBoolean]>>;
|
|
707
|
+
min_value: z.ZodOptional<z.ZodNumber>;
|
|
708
|
+
max_value: z.ZodOptional<z.ZodNumber>;
|
|
709
|
+
enum: z.ZodOptional<z.ZodArray<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>>;
|
|
710
|
+
regex: z.ZodOptional<z.ZodString>;
|
|
711
|
+
description: z.ZodOptional<z.ZodString>;
|
|
712
|
+
}, z.core.$strict>>>;
|
|
713
|
+
description: z.ZodOptional<z.ZodString>;
|
|
714
|
+
}, z.core.$strict>>>;
|
|
715
|
+
services: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
|
|
716
|
+
ros_name: z.ZodString;
|
|
717
|
+
type: z.ZodString;
|
|
718
|
+
message: z.ZodOptional<z.ZodUnknown>;
|
|
719
|
+
parameters: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
|
|
720
|
+
type: z.ZodEnum<{
|
|
721
|
+
string: "string";
|
|
722
|
+
bool: "bool";
|
|
723
|
+
byte: "byte";
|
|
724
|
+
char: "char";
|
|
725
|
+
int8: "int8";
|
|
726
|
+
uint8: "uint8";
|
|
727
|
+
int16: "int16";
|
|
728
|
+
uint16: "uint16";
|
|
729
|
+
int32: "int32";
|
|
730
|
+
uint32: "uint32";
|
|
731
|
+
int64: "int64";
|
|
732
|
+
uint64: "uint64";
|
|
733
|
+
float32: "float32";
|
|
734
|
+
float64: "float64";
|
|
735
|
+
wstring: "wstring";
|
|
736
|
+
}>;
|
|
737
|
+
default: z.ZodOptional<z.ZodUnion<readonly [z.ZodNumber, z.ZodString, z.ZodBoolean]>>;
|
|
738
|
+
min_value: z.ZodOptional<z.ZodNumber>;
|
|
739
|
+
max_value: z.ZodOptional<z.ZodNumber>;
|
|
740
|
+
enum: z.ZodOptional<z.ZodArray<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>>;
|
|
741
|
+
regex: z.ZodOptional<z.ZodString>;
|
|
742
|
+
description: z.ZodOptional<z.ZodString>;
|
|
743
|
+
}, z.core.$strict>>>;
|
|
744
|
+
description: z.ZodOptional<z.ZodString>;
|
|
745
|
+
}, z.core.$strict>>>;
|
|
746
|
+
publishers: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
|
|
747
|
+
topic: z.ZodString;
|
|
748
|
+
type: z.ZodString;
|
|
749
|
+
message: z.ZodUnknown;
|
|
750
|
+
parameters: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
|
|
751
|
+
type: z.ZodEnum<{
|
|
752
|
+
string: "string";
|
|
753
|
+
bool: "bool";
|
|
754
|
+
byte: "byte";
|
|
755
|
+
char: "char";
|
|
756
|
+
int8: "int8";
|
|
757
|
+
uint8: "uint8";
|
|
758
|
+
int16: "int16";
|
|
759
|
+
uint16: "uint16";
|
|
760
|
+
int32: "int32";
|
|
761
|
+
uint32: "uint32";
|
|
762
|
+
int64: "int64";
|
|
763
|
+
uint64: "uint64";
|
|
764
|
+
float32: "float32";
|
|
765
|
+
float64: "float64";
|
|
766
|
+
wstring: "wstring";
|
|
767
|
+
}>;
|
|
768
|
+
default: z.ZodOptional<z.ZodUnion<readonly [z.ZodNumber, z.ZodString, z.ZodBoolean]>>;
|
|
769
|
+
min_value: z.ZodOptional<z.ZodNumber>;
|
|
770
|
+
max_value: z.ZodOptional<z.ZodNumber>;
|
|
771
|
+
enum: z.ZodOptional<z.ZodArray<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>>;
|
|
772
|
+
regex: z.ZodOptional<z.ZodString>;
|
|
773
|
+
description: z.ZodOptional<z.ZodString>;
|
|
774
|
+
}, z.core.$strict>>>;
|
|
775
|
+
failsafe: z.ZodObject<{
|
|
776
|
+
timeout_ms: z.ZodNumber;
|
|
777
|
+
message: z.ZodUnknown;
|
|
778
|
+
}, z.core.$strict>;
|
|
779
|
+
quiet_timeout_ms: z.ZodNumber;
|
|
780
|
+
description: z.ZodOptional<z.ZodString>;
|
|
781
|
+
}, z.core.$strict>>>;
|
|
782
|
+
cameras: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
|
|
783
|
+
source: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
784
|
+
kind: z.ZodLiteral<"ros">;
|
|
785
|
+
topic: z.ZodString;
|
|
786
|
+
type: z.ZodString;
|
|
787
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
788
|
+
kind: z.ZodLiteral<"rtsp">;
|
|
789
|
+
url: z.ZodString;
|
|
790
|
+
transport: z.ZodOptional<z.ZodEnum<{
|
|
791
|
+
tcp: "tcp";
|
|
792
|
+
udp: "udp";
|
|
793
|
+
}>>;
|
|
794
|
+
credentials: z.ZodOptional<z.ZodObject<{
|
|
795
|
+
username: z.ZodOptional<z.ZodString>;
|
|
796
|
+
password: z.ZodOptional<z.ZodString>;
|
|
797
|
+
}, z.core.$strict>>;
|
|
798
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
799
|
+
kind: z.ZodLiteral<"mjpeg">;
|
|
800
|
+
url: z.ZodString;
|
|
801
|
+
credentials: z.ZodOptional<z.ZodObject<{
|
|
802
|
+
username: z.ZodOptional<z.ZodString>;
|
|
803
|
+
password: z.ZodOptional<z.ZodString>;
|
|
804
|
+
}, z.core.$strict>>;
|
|
805
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
806
|
+
kind: z.ZodLiteral<"v4l2">;
|
|
807
|
+
device: z.ZodString;
|
|
808
|
+
}, z.core.$strict>], "kind">;
|
|
809
|
+
width: z.ZodNumber;
|
|
810
|
+
height: z.ZodNumber;
|
|
811
|
+
fps: z.ZodNumber;
|
|
812
|
+
bitrate_kbps: z.ZodNumber;
|
|
813
|
+
snapshot_interval_seconds: z.ZodNumber;
|
|
814
|
+
description: z.ZodOptional<z.ZodString>;
|
|
815
|
+
}, z.core.$strict>>>;
|
|
816
|
+
}, z.core.$strict>;
|
|
817
|
+
export type RobotConfigDoc = z.infer<typeof robotConfigDoc>;
|
|
818
|
+
/**
|
|
819
|
+
* One thing the cloud has to say about a configuration (spec §11.5: field +
|
|
820
|
+
* violated rule).
|
|
821
|
+
*
|
|
822
|
+
* `error` blocks the publish. `warning` does not — an unknown topic is a
|
|
823
|
+
* warning on purpose, because configuring a robot that has never been
|
|
824
|
+
* connected must stay possible (spec §4.1).
|
|
825
|
+
*/
|
|
826
|
+
export declare const validationIssue: z.ZodObject<{
|
|
827
|
+
path: z.ZodString;
|
|
828
|
+
slug: z.ZodNullable<z.ZodString>;
|
|
829
|
+
code: z.ZodString;
|
|
830
|
+
message: z.ZodString;
|
|
831
|
+
severity: z.ZodEnum<{
|
|
832
|
+
error: "error";
|
|
833
|
+
warning: "warning";
|
|
834
|
+
}>;
|
|
835
|
+
}, z.core.$strip>;
|
|
836
|
+
export type ValidationIssue = z.infer<typeof validationIssue>;
|
|
837
|
+
/**
|
|
838
|
+
* Where a robot's configuration stands — the material for the console's
|
|
839
|
+
* "draft newer than published", "published v2 · applied v1 · bridge offline"
|
|
840
|
+
* (spec §15.2, robot tab 1).
|
|
841
|
+
*/
|
|
842
|
+
export declare const configState: z.ZodObject<{
|
|
843
|
+
published_version: z.ZodNullable<z.ZodNumber>;
|
|
844
|
+
published_at: z.ZodNullable<z.ZodISODateTime>;
|
|
845
|
+
draft_updated_at: z.ZodNullable<z.ZodISODateTime>;
|
|
846
|
+
applied_version: z.ZodNullable<z.ZodNumber>;
|
|
847
|
+
applied_ok: z.ZodNullable<z.ZodBoolean>;
|
|
848
|
+
applied_errors: z.ZodNullable<z.ZodArray<z.ZodObject<{
|
|
849
|
+
slug: z.ZodString;
|
|
850
|
+
kind: z.ZodEnum<{
|
|
851
|
+
datapoint: "datapoint";
|
|
852
|
+
action: "action";
|
|
853
|
+
service: "service";
|
|
854
|
+
publisher: "publisher";
|
|
855
|
+
camera: "camera";
|
|
856
|
+
}>;
|
|
857
|
+
code: z.ZodString;
|
|
858
|
+
message: z.ZodString;
|
|
859
|
+
details: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
860
|
+
}, z.core.$strip>>>;
|
|
861
|
+
}, z.core.$strip>;
|
|
862
|
+
export type ConfigState = z.infer<typeof configState>;
|