@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.
Files changed (287) hide show
  1. package/CHANGELOG.md +26 -0
  2. package/LICENSE +202 -0
  3. package/NOTICE +17 -0
  4. package/README.md +88 -0
  5. package/artifacts/constants.json +24 -0
  6. package/artifacts/openapi.json +17219 -0
  7. package/artifacts/routes.json +4605 -0
  8. package/artifacts/schema/accept-team-invite-request.schema.json +22 -0
  9. package/artifacts/schema/action-config.schema.json +198 -0
  10. package/artifacts/schema/alert-list-response.schema.json +172 -0
  11. package/artifacts/schema/api-error.schema.json +20 -0
  12. package/artifacts/schema/app-auth-config.schema.json +106 -0
  13. package/artifacts/schema/app-invitation-list-response.schema.json +57 -0
  14. package/artifacts/schema/app-invitation.schema.json +69 -0
  15. package/artifacts/schema/app-list-response.schema.json +82 -0
  16. package/artifacts/schema/app-mail-template-list-response.schema.json +68 -0
  17. package/artifacts/schema/app-mail-template.schema.json +54 -0
  18. package/artifacts/schema/app-oidc-provider-list-response.schema.json +93 -0
  19. package/artifacts/schema/app-oidc-provider.schema.json +80 -0
  20. package/artifacts/schema/app-user-list-response.schema.json +111 -0
  21. package/artifacts/schema/app-user.schema.json +98 -0
  22. package/artifacts/schema/app.schema.json +69 -0
  23. package/artifacts/schema/apply-error.schema.json +41 -0
  24. package/artifacts/schema/asset-list-response.schema.json +288 -0
  25. package/artifacts/schema/asset-sync-request.schema.json +17 -0
  26. package/artifacts/schema/asset-sync-response.schema.json +16 -0
  27. package/artifacts/schema/asset-sync-status.schema.json +136 -0
  28. package/artifacts/schema/asset.schema.json +68 -0
  29. package/artifacts/schema/audit-actor.schema.json +32 -0
  30. package/artifacts/schema/audit-event.schema.json +119 -0
  31. package/artifacts/schema/audit-list-response.schema.json +144 -0
  32. package/artifacts/schema/audit-query.schema.json +79 -0
  33. package/artifacts/schema/auth-error.schema.json +23 -0
  34. package/artifacts/schema/auth-me-response.schema.json +99 -0
  35. package/artifacts/schema/auth-ok.schema.json +115 -0
  36. package/artifacts/schema/authorization-server-metadata.schema.json +80 -0
  37. package/artifacts/schema/bridge-asset-progress.schema.json +99 -0
  38. package/artifacts/schema/bridge-assets-available.schema.json +25 -0
  39. package/artifacts/schema/bridge-camera-state.schema.json +78 -0
  40. package/artifacts/schema/bridge-config-applied.schema.json +67 -0
  41. package/artifacts/schema/bridge-hello.schema.json +65 -0
  42. package/artifacts/schema/bridge-introspect.schema.json +114 -0
  43. package/artifacts/schema/bridge-job-lost.schema.json +22 -0
  44. package/artifacts/schema/bridge-job-update.schema.json +100 -0
  45. package/artifacts/schema/bridge-pong.schema.json +19 -0
  46. package/artifacts/schema/bridge-pressure.schema.json +292 -0
  47. package/artifacts/schema/bridge-state.schema.json +24 -0
  48. package/artifacts/schema/bridge-type-definitions.schema.json +169 -0
  49. package/artifacts/schema/busy-details.schema.json +115 -0
  50. package/artifacts/schema/camera-descriptor.schema.json +45 -0
  51. package/artifacts/schema/camera-list-response.schema.json +58 -0
  52. package/artifacts/schema/camera-source.schema.json +240 -0
  53. package/artifacts/schema/cancel-request.schema.json +20 -0
  54. package/artifacts/schema/client-accept-invitation-request.schema.json +35 -0
  55. package/artifacts/schema/client-auth.schema.json +18 -0
  56. package/artifacts/schema/client-cancel.schema.json +45 -0
  57. package/artifacts/schema/client-identity.schema.json +103 -0
  58. package/artifacts/schema/client-invoke.schema.json +45 -0
  59. package/artifacts/schema/client-login-request.schema.json +29 -0
  60. package/artifacts/schema/client-logout-request.schema.json +14 -0
  61. package/artifacts/schema/client-mcp-interaction-decision-response.schema.json +15 -0
  62. package/artifacts/schema/client-mcp-interaction.schema.json +59 -0
  63. package/artifacts/schema/client-oidc-callback-query.schema.json +28 -0
  64. package/artifacts/schema/client-oidc-exchange-request.schema.json +21 -0
  65. package/artifacts/schema/client-oidc-start-query.schema.json +36 -0
  66. package/artifacts/schema/client-password-reset-confirm-request.schema.json +22 -0
  67. package/artifacts/schema/client-password-reset-request.schema.json +24 -0
  68. package/artifacts/schema/client-provider-list-query.schema.json +17 -0
  69. package/artifacts/schema/client-provider-list-response.schema.json +34 -0
  70. package/artifacts/schema/client-publish.schema.json +40 -0
  71. package/artifacts/schema/client-refresh-request.schema.json +14 -0
  72. package/artifacts/schema/client-register-request.schema.json +44 -0
  73. package/artifacts/schema/client-resend-verification-request.schema.json +24 -0
  74. package/artifacts/schema/client-subscribe.schema.json +43 -0
  75. package/artifacts/schema/client-unsubscribe.schema.json +26 -0
  76. package/artifacts/schema/client-verify-email-request.schema.json +15 -0
  77. package/artifacts/schema/cloud-asset-request.schema.json +37 -0
  78. package/artifacts/schema/cloud-camera-start.schema.json +41 -0
  79. package/artifacts/schema/cloud-camera-stop.schema.json +26 -0
  80. package/artifacts/schema/cloud-cancel.schema.json +33 -0
  81. package/artifacts/schema/cloud-config.schema.json +1635 -0
  82. package/artifacts/schema/cloud-hello-error.schema.json +23 -0
  83. package/artifacts/schema/cloud-hello-ok.schema.json +19 -0
  84. package/artifacts/schema/cloud-introspect-request.schema.json +19 -0
  85. package/artifacts/schema/cloud-invoke.schema.json +40 -0
  86. package/artifacts/schema/cloud-ping.schema.json +19 -0
  87. package/artifacts/schema/cloud-publish.schema.json +28 -0
  88. package/artifacts/schema/cloud-type-request.schema.json +30 -0
  89. package/artifacts/schema/command-result.schema.json +175 -0
  90. package/artifacts/schema/config-draft-response.schema.json +1695 -0
  91. package/artifacts/schema/config-state.schema.json +124 -0
  92. package/artifacts/schema/config-version-response.schema.json +1641 -0
  93. package/artifacts/schema/config-versions-response.schema.json +33 -0
  94. package/artifacts/schema/create-app-invitation-request.schema.json +40 -0
  95. package/artifacts/schema/create-app-oidc-provider-request.schema.json +70 -0
  96. package/artifacts/schema/create-app-request.schema.json +30 -0
  97. package/artifacts/schema/create-app-user-request.schema.json +42 -0
  98. package/artifacts/schema/create-robot-request.schema.json +14 -0
  99. package/artifacts/schema/create-robot-response.schema.json +44 -0
  100. package/artifacts/schema/create-server-key-response.schema.json +65 -0
  101. package/artifacts/schema/create-team-invite-request.schema.json +43 -0
  102. package/artifacts/schema/datapoint-alert-row.schema.json +160 -0
  103. package/artifacts/schema/datapoint-config.schema.json +366 -0
  104. package/artifacts/schema/datapoint-display.schema.json +31 -0
  105. package/artifacts/schema/datapoint-event.schema.json +34 -0
  106. package/artifacts/schema/datapoint-frame.schema.json +28 -0
  107. package/artifacts/schema/datapoint-list-response.schema.json +61 -0
  108. package/artifacts/schema/datapoint-value.schema.json +28 -0
  109. package/artifacts/schema/developer-login-request.schema.json +19 -0
  110. package/artifacts/schema/dynamic-client-registration-request.schema.json +60 -0
  111. package/artifacts/schema/dynamic-client-registration-response.schema.json +68 -0
  112. package/artifacts/schema/error-frame.schema.json +23 -0
  113. package/artifacts/schema/exposure-counts.schema.json +39 -0
  114. package/artifacts/schema/exposure-list-response.schema.json +43 -0
  115. package/artifacts/schema/fetch-types-request.schema.json +19 -0
  116. package/artifacts/schema/fetch-types-response.schema.json +163 -0
  117. package/artifacts/schema/fleetless-user-list-response.schema.json +73 -0
  118. package/artifacts/schema/fleetless-user.schema.json +60 -0
  119. package/artifacts/schema/history-buckets-response.schema.json +79 -0
  120. package/artifacts/schema/history-query.schema.json +58 -0
  121. package/artifacts/schema/history-response.schema.json +150 -0
  122. package/artifacts/schema/history-samples-response.schema.json +68 -0
  123. package/artifacts/schema/introspection-response.schema.json +118 -0
  124. package/artifacts/schema/invoke-or-service-response.schema.json +141 -0
  125. package/artifacts/schema/invoke-request.schema.json +23 -0
  126. package/artifacts/schema/invoke-response.schema.json +125 -0
  127. package/artifacts/schema/job-actor.schema.json +34 -0
  128. package/artifacts/schema/job-event.schema.json +158 -0
  129. package/artifacts/schema/job-response.schema.json +123 -0
  130. package/artifacts/schema/job-run-list-response.schema.json +222 -0
  131. package/artifacts/schema/job-run-query.schema.json +95 -0
  132. package/artifacts/schema/job-run-summary-query.schema.json +23 -0
  133. package/artifacts/schema/job-run-summary.schema.json +33 -0
  134. package/artifacts/schema/job-run.schema.json +195 -0
  135. package/artifacts/schema/job-state.schema.json +11 -0
  136. package/artifacts/schema/job.schema.json +106 -0
  137. package/artifacts/schema/latency-bucket.schema.json +63 -0
  138. package/artifacts/schema/live-session-response.schema.json +41 -0
  139. package/artifacts/schema/mail-outcome.schema.json +20 -0
  140. package/artifacts/schema/mail-template-preview-request.schema.json +35 -0
  141. package/artifacts/schema/mail-template-preview-response.schema.json +31 -0
  142. package/artifacts/schema/mail-template-problem-details.schema.json +24 -0
  143. package/artifacts/schema/mcp-consent-grant-list-response.schema.json +52 -0
  144. package/artifacts/schema/mcp-consent-grant.schema.json +39 -0
  145. package/artifacts/schema/mcp-robot-datasheet.schema.json +115 -0
  146. package/artifacts/schema/mcp-role-preview-response.schema.json +134 -0
  147. package/artifacts/schema/missing-asset-query.schema.json +11 -0
  148. package/artifacts/schema/oauth-authorize-query.schema.json +47 -0
  149. package/artifacts/schema/oauth-redirect-response.schema.json +15 -0
  150. package/artifacts/schema/oauth-token-request.schema.json +47 -0
  151. package/artifacts/schema/oauth-token-response.schema.json +38 -0
  152. package/artifacts/schema/org-alerts-query.schema.json +15 -0
  153. package/artifacts/schema/org-event-dropped.schema.json +26 -0
  154. package/artifacts/schema/org-event-replay.schema.json +97 -0
  155. package/artifacts/schema/org-event-subscribe.schema.json +14 -0
  156. package/artifacts/schema/org-event-unsubscribe.schema.json +14 -0
  157. package/artifacts/schema/org-event.schema.json +75 -0
  158. package/artifacts/schema/org-firing-alerts-response.schema.json +178 -0
  159. package/artifacts/schema/org-health-query.schema.json +13 -0
  160. package/artifacts/schema/org-latency-query.schema.json +42 -0
  161. package/artifacts/schema/org-latency-response.schema.json +124 -0
  162. package/artifacts/schema/org-quota-usage-counts.schema.json +42 -0
  163. package/artifacts/schema/org-quota-usage.schema.json +102 -0
  164. package/artifacts/schema/org-quotas.schema.json +51 -0
  165. package/artifacts/schema/org-usage-query.schema.json +19 -0
  166. package/artifacts/schema/org-usage-response.schema.json +77 -0
  167. package/artifacts/schema/org.schema.json +30 -0
  168. package/artifacts/schema/parameter-invalid-details.schema.json +37 -0
  169. package/artifacts/schema/parameter-spec.schema.json +120 -0
  170. package/artifacts/schema/parameter-violation.schema.json +24 -0
  171. package/artifacts/schema/password-change-request.schema.json +21 -0
  172. package/artifacts/schema/password-reset-confirm.schema.json +19 -0
  173. package/artifacts/schema/password-reset-request.schema.json +14 -0
  174. package/artifacts/schema/patch-app-oidc-provider-request.schema.json +50 -0
  175. package/artifacts/schema/patch-app-user-request.schema.json +34 -0
  176. package/artifacts/schema/patch-auth-me-request.schema.json +22 -0
  177. package/artifacts/schema/patch-fleetless-user-request.schema.json +20 -0
  178. package/artifacts/schema/patch-org-request.schema.json +15 -0
  179. package/artifacts/schema/patch-org-response.schema.json +40 -0
  180. package/artifacts/schema/patch-robot-request.schema.json +15 -0
  181. package/artifacts/schema/patch-robot-response.schema.json +40 -0
  182. package/artifacts/schema/pending-team-invite-list-response.schema.json +52 -0
  183. package/artifacts/schema/pending-team-invite.schema.json +39 -0
  184. package/artifacts/schema/protected-resource-metadata.schema.json +41 -0
  185. package/artifacts/schema/publish-config-response.schema.json +21 -0
  186. package/artifacts/schema/publish-request.schema.json +17 -0
  187. package/artifacts/schema/publisher-config.schema.json +285 -0
  188. package/artifacts/schema/put-app-auth-config-request.schema.json +93 -0
  189. package/artifacts/schema/put-app-mail-template-request.schema.json +35 -0
  190. package/artifacts/schema/put-config-draft-request.schema.json +13 -0
  191. package/artifacts/schema/put-datapoint-display-request.schema.json +31 -0
  192. package/artifacts/schema/put-robot-details-request.schema.json +41 -0
  193. package/artifacts/schema/put-robot-details-response.schema.json +43 -0
  194. package/artifacts/schema/rate-limit-details.schema.json +15 -0
  195. package/artifacts/schema/refresh-request.schema.json +13 -0
  196. package/artifacts/schema/release-live-query.schema.json +13 -0
  197. package/artifacts/schema/rename-slug-request.schema.json +23 -0
  198. package/artifacts/schema/rename-slug-response.schema.json +24 -0
  199. package/artifacts/schema/resource-health-event.schema.json +72 -0
  200. package/artifacts/schema/resource-health-list-response.schema.json +80 -0
  201. package/artifacts/schema/resource-health-state.schema.json +68 -0
  202. package/artifacts/schema/robot-config-doc.schema.json +1616 -0
  203. package/artifacts/schema/robot-delete-query.schema.json +12 -0
  204. package/artifacts/schema/robot-deletion-summary.schema.json +63 -0
  205. package/artifacts/schema/robot-detail-response.schema.json +262 -0
  206. package/artifacts/schema/robot-details-doc.schema.json +33 -0
  207. package/artifacts/schema/robot-jobs-response.schema.json +119 -0
  208. package/artifacts/schema/robot-latency-series.schema.json +81 -0
  209. package/artifacts/schema/robot-list-item.schema.json +94 -0
  210. package/artifacts/schema/robot-list-response.schema.json +106 -0
  211. package/artifacts/schema/robot.schema.json +30 -0
  212. package/artifacts/schema/role-list-response.schema.json +48 -0
  213. package/artifacts/schema/role-permissions.schema.json +61 -0
  214. package/artifacts/schema/role.schema.json +35 -0
  215. package/artifacts/schema/ros-graph.schema.json +99 -0
  216. package/artifacts/schema/server-key-list-response.schema.json +64 -0
  217. package/artifacts/schema/server-key.schema.json +51 -0
  218. package/artifacts/schema/service-call-response.schema.json +13 -0
  219. package/artifacts/schema/service-config.schema.json +198 -0
  220. package/artifacts/schema/session-tokens.schema.json +28 -0
  221. package/artifacts/schema/sign-up-request.schema.json +26 -0
  222. package/artifacts/schema/sign-up-response.schema.json +127 -0
  223. package/artifacts/schema/slug-usage-response.schema.json +32 -0
  224. package/artifacts/schema/snapshot-header.schema.json +44 -0
  225. package/artifacts/schema/snapshot-meta-response.schema.json +85 -0
  226. package/artifacts/schema/subscribe-error.schema.json +31 -0
  227. package/artifacts/schema/team-invite.schema.json +57 -0
  228. package/artifacts/schema/tier-change-request.schema.json +17 -0
  229. package/artifacts/schema/type-definition.schema.json +144 -0
  230. package/artifacts/schema/types-response.schema.json +156 -0
  231. package/artifacts/schema/update-app-request.schema.json +32 -0
  232. package/artifacts/schema/urdf-completeness.schema.json +50 -0
  233. package/artifacts/schema/validation-issue.schema.json +43 -0
  234. package/artifacts/schema/waitlist-request.schema.json +15 -0
  235. package/artifacts/schema-outgoing/bridge-asset-progress.schema.json +102 -0
  236. package/artifacts/schema-outgoing/bridge-assets-available.schema.json +26 -0
  237. package/artifacts/schema-outgoing/bridge-camera-state.schema.json +80 -0
  238. package/artifacts/schema-outgoing/bridge-config-applied.schema.json +69 -0
  239. package/artifacts/schema-outgoing/bridge-hello.schema.json +68 -0
  240. package/artifacts/schema-outgoing/bridge-introspect.schema.json +119 -0
  241. package/artifacts/schema-outgoing/bridge-job-lost.schema.json +23 -0
  242. package/artifacts/schema-outgoing/bridge-job-update.schema.json +102 -0
  243. package/artifacts/schema-outgoing/bridge-pong.schema.json +20 -0
  244. package/artifacts/schema-outgoing/bridge-type-definitions.schema.json +174 -0
  245. package/artifacts/schema-outgoing/datapoint-frame.schema.json +29 -0
  246. package/artifacts/schema-outgoing/snapshot-header.schema.json +45 -0
  247. package/dist/alerts.d.ts +255 -0
  248. package/dist/alerts.js +193 -0
  249. package/dist/app-users.d.ts +606 -0
  250. package/dist/app-users.js +696 -0
  251. package/dist/apps.d.ts +175 -0
  252. package/dist/apps.js +267 -0
  253. package/dist/assets.d.ts +434 -0
  254. package/dist/assets.js +546 -0
  255. package/dist/audit.d.ts +129 -0
  256. package/dist/audit.js +238 -0
  257. package/dist/client-auth.d.ts +409 -0
  258. package/dist/client-auth.js +487 -0
  259. package/dist/common.d.ts +186 -0
  260. package/dist/common.js +199 -0
  261. package/dist/config-issues.d.ts +175 -0
  262. package/dist/config-issues.js +339 -0
  263. package/dist/config.d.ts +862 -0
  264. package/dist/config.js +1988 -0
  265. package/dist/errors.d.ts +52 -0
  266. package/dist/errors.js +786 -0
  267. package/dist/identity.d.ts +549 -0
  268. package/dist/identity.js +503 -0
  269. package/dist/index.d.ts +51 -0
  270. package/dist/index.js +51 -0
  271. package/dist/introspection.d.ts +99 -0
  272. package/dist/introspection.js +97 -0
  273. package/dist/jobs.d.ts +334 -0
  274. package/dist/jobs.js +345 -0
  275. package/dist/mcp.d.ts +239 -0
  276. package/dist/mcp.js +153 -0
  277. package/dist/oauth.d.ts +344 -0
  278. package/dist/oauth.js +488 -0
  279. package/dist/protocol.d.ts +781 -0
  280. package/dist/protocol.js +715 -0
  281. package/dist/realtime.d.ts +494 -0
  282. package/dist/realtime.js +512 -0
  283. package/dist/rest.d.ts +1989 -0
  284. package/dist/rest.js +1963 -0
  285. package/dist/routes.d.ts +94 -0
  286. package/dist/routes.js +2298 -0
  287. package/package.json +61 -0
@@ -0,0 +1,494 @@
1
+ import { z } from 'zod';
2
+ /**
3
+ * Client realtime protocol (spec §11.1): WebSocket subscriptions on
4
+ * datapoints. W1 scope: subscribe/unsubscribe plus the datapoint event
5
+ * stream; command parity arrives in W4.
6
+ */
7
+ /**
8
+ * The first frame a client sends after the socket opens (W3, spec §3.4).
9
+ *
10
+ * A browser cannot set an `Authorization` header on a WebSocket handshake,
11
+ * and a token in the query string would outlive the request in server,
12
+ * proxy and browser-history logs. So `/realtime` authenticates the way
13
+ * `/bridge` already does: with a frame. `token` is the same bearer value
14
+ * REST takes — a user's JWT or a server key (`flk_…`), told apart by prefix.
15
+ *
16
+ * Any `subscribe` before `auth_ok` is refused, and a socket that sends no
17
+ * auth frame in time is closed with **4002**, the code the bridge socket
18
+ * already uses for a missing hello.
19
+ */
20
+ export declare const clientAuth: z.ZodObject<{
21
+ type: z.ZodLiteral<"auth">;
22
+ token: z.ZodString;
23
+ }, z.core.$strip>;
24
+ export type ClientAuth = z.infer<typeof clientAuth>;
25
+ /**
26
+ * Who the socket turned out to belong to. Carrying the identity here means a
27
+ * client never has to decode a JWT to render its own session — decoding a
28
+ * token client-side is how apps end up trusting claims nobody verified.
29
+ */
30
+ export declare const authOk: z.ZodObject<{
31
+ type: z.ZodLiteral<"auth_ok">;
32
+ identity: z.ZodObject<{
33
+ kind: z.ZodEnum<{
34
+ developer: "developer";
35
+ server_key: "server_key";
36
+ app_user: "app_user";
37
+ }>;
38
+ developer_id: z.ZodNullable<z.ZodUUID>;
39
+ app_user_id: z.ZodNullable<z.ZodUUID>;
40
+ server_key_id: z.ZodNullable<z.ZodUUID>;
41
+ app_id: z.ZodNullable<z.ZodUUID>;
42
+ role_id: z.ZodNullable<z.ZodUUID>;
43
+ email: z.ZodNullable<z.ZodEmail>;
44
+ }, z.core.$strip>;
45
+ }, z.core.$strip>;
46
+ export type AuthOk = z.infer<typeof authOk>;
47
+ /** Refusal, followed by close 1008 — same shape as the bridge's hello_error. */
48
+ export declare const authError: z.ZodObject<{
49
+ type: z.ZodLiteral<"auth_error">;
50
+ code: z.ZodString;
51
+ message: z.ZodString;
52
+ }, z.core.$strip>;
53
+ export type AuthError = z.infer<typeof authError>;
54
+ /**
55
+ * Command parity (spec §11.1): everything REST can do — invoke an action,
56
+ * call a service, publish, cancel — also travels over this socket.
57
+ *
58
+ * **Every command carries a `request_id` and every reply echoes it.** A
59
+ * subscribe that gets dropped is self-healing: the client resubscribes on
60
+ * reconnect and nothing was promised. A *command* that gets dropped is an
61
+ * instruction someone believes they issued and no one will ever run — on a
62
+ * machine that may be moving. Correlation is what makes the difference
63
+ * observable instead of silent.
64
+ */
65
+ export declare const clientInvoke: z.ZodObject<{
66
+ type: z.ZodLiteral<"invoke">;
67
+ request_id: z.ZodString;
68
+ robot_id: z.ZodUUID;
69
+ slug: z.ZodString;
70
+ params: z.ZodRecord<z.ZodString, z.ZodUnknown>;
71
+ patience_ms: z.ZodOptional<z.ZodNumber>;
72
+ }, z.core.$strip>;
73
+ export type ClientInvoke = z.infer<typeof clientInvoke>;
74
+ export declare const clientCancel: z.ZodObject<{
75
+ type: z.ZodLiteral<"cancel">;
76
+ request_id: z.ZodString;
77
+ robot_id: z.ZodUUID;
78
+ slug: z.ZodString;
79
+ job_id: z.ZodNullable<z.ZodUUID>;
80
+ }, z.core.$strip>;
81
+ export type ClientCancel = z.infer<typeof clientCancel>;
82
+ export declare const clientPublish: z.ZodObject<{
83
+ type: z.ZodLiteral<"publish">;
84
+ request_id: z.ZodString;
85
+ robot_id: z.ZodUUID;
86
+ slug: z.ZodString;
87
+ message: z.ZodRecord<z.ZodString, z.ZodUnknown>;
88
+ }, z.core.$strip>;
89
+ export type ClientPublish = z.infer<typeof clientPublish>;
90
+ /**
91
+ * The reply to exactly one command. `ok:false` carries the stable code —
92
+ * `busy`, `robot_offline`, `parameter_invalid`, `forbidden` — so a caller
93
+ * branches without parsing prose.
94
+ *
95
+ * **`request_id` is the only correlation, and the order these arrive in is
96
+ * not promised.** Commands sent on one socket reach the robot in the order
97
+ * they were sent — that ordering is guaranteed and is the point of the
98
+ * command chain — but their *replies* may arrive in any order, and a client
99
+ * that pairs them up by arrival order will attribute an outcome to the wrong
100
+ * command.
101
+ *
102
+ * This is not theoretical and not jitter. The ordering chain is released once
103
+ * a command has reached the bridge, deliberately, so that the next command —
104
+ * a stop, say — is never held up behind bookkeeping. Work that follows the
105
+ * send therefore runs unordered: a publish that *acquires* a slug writes an
106
+ * audit record before answering, while an immediately following publish by
107
+ * the now-current holder has nothing to write and answers at once. Its reply
108
+ * overtakes. Measured in W5: exactly one reversal in fifty-six zero-gap
109
+ * bursts, which is the signature of that cause — it can happen only once per
110
+ * identity and slug — and not of a race.
111
+ *
112
+ * Serialising the replies would mean putting that bookkeeping in front of
113
+ * every following command, including the stop. The ordering that matters is
114
+ * the one on the wire to the robot, and it is kept.
115
+ */
116
+ export declare const commandResult: z.ZodObject<{
117
+ type: z.ZodLiteral<"command_result">;
118
+ request_id: z.ZodString;
119
+ ok: z.ZodBoolean;
120
+ job: z.ZodNullable<z.ZodObject<{
121
+ id: z.ZodUUID;
122
+ robot_id: z.ZodUUID;
123
+ slug: z.ZodString;
124
+ state: z.ZodEnum<{
125
+ failed: "failed";
126
+ running: "running";
127
+ succeeded: "succeeded";
128
+ cancelled: "cancelled";
129
+ lost: "lost";
130
+ }>;
131
+ started_at: z.ZodISODateTime;
132
+ updated_at: z.ZodISODateTime;
133
+ seq: z.ZodNumber;
134
+ result: z.ZodNullable<z.ZodUnknown>;
135
+ error: z.ZodNullable<z.ZodObject<{
136
+ code: z.ZodString;
137
+ message: z.ZodString;
138
+ details: z.ZodOptional<z.ZodUnknown>;
139
+ }, z.core.$strip>>;
140
+ }, z.core.$strip>>;
141
+ kind: z.ZodNullable<z.ZodEnum<{
142
+ datapoint: "datapoint";
143
+ action: "action";
144
+ service: "service";
145
+ publisher: "publisher";
146
+ camera: "camera";
147
+ }>>;
148
+ code: z.ZodNullable<z.ZodString>;
149
+ message: z.ZodNullable<z.ZodString>;
150
+ details: z.ZodOptional<z.ZodUnknown>;
151
+ }, z.core.$strip>;
152
+ export type CommandResult = z.infer<typeof commandResult>;
153
+ /**
154
+ * A well-formed frame this server does not understand. The socket **stays
155
+ * open** — closing it would mean a newer client against an older cloud
156
+ * reconnects, resends, and takes every unrelated subscription down with it
157
+ * on every attempt. Close 1008 is reserved for frames that are not parseable
158
+ * JSON objects at all.
159
+ */
160
+ export declare const errorFrame: z.ZodObject<{
161
+ type: z.ZodLiteral<"error">;
162
+ code: z.ZodString;
163
+ message: z.ZodString;
164
+ }, z.core.$strip>;
165
+ export type ErrorFrame = z.infer<typeof errorFrame>;
166
+ /**
167
+ * Subscribe to a slug's stream (spec §11.3: **state is observed by slug**).
168
+ *
169
+ * Which kinds are subscribable, and why it is not a matter of taste:
170
+ *
171
+ * - **datapoint** — its values.
172
+ * - **action** — its `jobEvent`s.
173
+ * - **service** — its `jobEvent`s too. A service call mints a job like an
174
+ * action does; the only difference is that the caller usually gets the
175
+ * result inline. But when they do *not* — a socket that died before the
176
+ * reply, answered with `command_outcome_unknown` — the documented recovery
177
+ * is to observe the slug. Refusing that leaves the caller with an error
178
+ * that names a remedy the platform does not offer.
179
+ * - **publisher** — not subscribable: there is no job and no stream. It must
180
+ * still be refused *honestly*, with a code saying so, and never as though
181
+ * the slug did not exist. A caller who was granted a slug is entitled to
182
+ * be told the truth about it.
183
+ */
184
+ export declare const clientSubscribe: z.ZodObject<{
185
+ type: z.ZodLiteral<"subscribe">;
186
+ robot_id: z.ZodUUID;
187
+ slug: z.ZodString;
188
+ kind: z.ZodOptional<z.ZodEnum<{
189
+ datapoint: "datapoint";
190
+ action: "action";
191
+ service: "service";
192
+ publisher: "publisher";
193
+ camera: "camera";
194
+ }>>;
195
+ options: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
196
+ }, z.core.$strip>;
197
+ export type ClientSubscribe = z.infer<typeof clientSubscribe>;
198
+ export declare const clientUnsubscribe: z.ZodObject<{
199
+ type: z.ZodLiteral<"unsubscribe">;
200
+ robot_id: z.ZodUUID;
201
+ slug: z.ZodString;
202
+ }, z.core.$strip>;
203
+ export type ClientUnsubscribe = z.infer<typeof clientUnsubscribe>;
204
+ /**
205
+ * Refusal of a subscribe, addressed by the (robot_id, slug) it refers to.
206
+ * Codes follow the §11.5 error culture: stable code + human message.
207
+ * robot_id/slug are plain strings ECHOING what the client sent — the frame
208
+ * must be constructible precisely when those values are malformed, so that
209
+ * a bad robot_id or slug gets a diagnosis instead of a dead socket.
210
+ */
211
+ export declare const subscribeError: z.ZodObject<{
212
+ type: z.ZodLiteral<"subscribe_error">;
213
+ robot_id: z.ZodString;
214
+ slug: z.ZodString;
215
+ code: z.ZodString;
216
+ message: z.ZodString;
217
+ }, z.core.$strip>;
218
+ export type SubscribeError = z.infer<typeof subscribeError>;
219
+ /**
220
+ * One datapoint sample pushed to a subscriber. The current value arrives
221
+ * immediately on subscribe, then every change. `timestamp_ms` semantics as
222
+ * in `datapointValue` (capture time; cloud-observed for `bridge_state`).
223
+ */
224
+ export declare const datapointEvent: z.ZodObject<{
225
+ type: z.ZodLiteral<"datapoint">;
226
+ robot_id: z.ZodUUID;
227
+ slug: z.ZodString;
228
+ value: z.ZodUnknown;
229
+ timestamp_ms: z.ZodNumber;
230
+ }, z.core.$strip>;
231
+ export type DatapointEvent = z.infer<typeof datapointEvent>;
232
+ /**
233
+ * A change in the health of something the developer configured (W6a).
234
+ *
235
+ * The push half of `resourceHealthState`; the REST list is the snapshot half,
236
+ * and neither is useful alone — a page that loads after the change would see
237
+ * nothing, and a page that never reloads would never learn.
238
+ *
239
+ * Delivered on the **developer** socket and scoped to the org, not to a
240
+ * subscription: the whole point is to reach somebody who is *not* currently
241
+ * looking at the thing that broke.
242
+ */
243
+ /**
244
+ * Why a live camera session ended (W9a).
245
+ *
246
+ * **The reason travels WITH the ending, and that is the whole point of this
247
+ * enum existing rather than a state somebody reads afterwards.** W6a put a
248
+ * `cause` on the wire, the console named the real reason, and the lead
249
+ * observed the gate step and closed it — and the review then found it still
250
+ * could not tell, for a different reason: `stopped_by_config_change` is
251
+ * **sticky**, nothing moves a camera out of it, and `LiveCameraRow` read that
252
+ * *current* state at the moment a stream ended. A config change at 10:00 and
253
+ * an unrelated release at 10:30 therefore reported the same cause (DEF-070).
254
+ *
255
+ * A state read after the fact answers "what is true now". A viewer needs
256
+ * "what happened to my session", and only an event carries that.
257
+ */
258
+ export declare const liveSessionEndReason: z.ZodEnum<{
259
+ unknown: "unknown";
260
+ robot_offline: "robot_offline";
261
+ publish_failed: "publish_failed";
262
+ released_by_peer: "released_by_peer";
263
+ config_changed: "config_changed";
264
+ revoked: "revoked";
265
+ expired: "expired";
266
+ robot_deleted: "robot_deleted";
267
+ }>;
268
+ export type LiveSessionEndReason = z.infer<typeof liveSessionEndReason>;
269
+ /**
270
+ * A live camera session ended, told to the **client that holds it** (W9a).
271
+ *
272
+ * This is the channel `DEF-051`, `DEF-052`, `DEF-053` and `DEF-070` each
273
+ * described from a different direction across four waves. Until now the only
274
+ * vehicle was `camera_state`, which the cloud stores in `publishState` and
275
+ * reads in exactly one place — refusing a *later* joiner — so reporting a
276
+ * failure would have written to a dead end.
277
+ *
278
+ * Unlike `resourceHealthEvent`, which is developer-only and org-scoped, this
279
+ * one is addressed to the **holder of the session**: it names `session_id`
280
+ * (W6b gave `liveSessionResponse` one precisely so a session could be
281
+ * addressed) and is delivered only to the identity that session was minted
282
+ * for. A developer watching the same robot learns about the *resource* health;
283
+ * the viewer learns about *their own session*. Two questions, two channels,
284
+ * on purpose.
285
+ */
286
+ export declare const liveSessionEvent: z.ZodObject<{
287
+ type: z.ZodLiteral<"live_session">;
288
+ robot_id: z.ZodUUID;
289
+ slug: z.ZodString;
290
+ session_id: z.ZodUUID;
291
+ state: z.ZodLiteral<"ended">;
292
+ reason: z.ZodEnum<{
293
+ unknown: "unknown";
294
+ robot_offline: "robot_offline";
295
+ publish_failed: "publish_failed";
296
+ released_by_peer: "released_by_peer";
297
+ config_changed: "config_changed";
298
+ revoked: "revoked";
299
+ expired: "expired";
300
+ robot_deleted: "robot_deleted";
301
+ }>;
302
+ detail: z.ZodNullable<z.ZodString>;
303
+ ended_at_ms: z.ZodNumber;
304
+ }, z.core.$strip>;
305
+ export type LiveSessionEvent = z.infer<typeof liveSessionEvent>;
306
+ /**
307
+ * A resource's health entry was **withdrawn** (W9a, DEF-071).
308
+ *
309
+ * The store's `invalidate()` deliberately emitted nothing, reasoning that
310
+ * "withdrawing a claim nobody can currently stand behind is not new
311
+ * information — the next `GET` already reflects it." That holds for a page
312
+ * that loads later. **It is false for a page that is already open, because
313
+ * there is no next `GET`:** `ensureSnapshot()` runs on `acquire` and nowhere
314
+ * else, there is no interval, and the event handler only ever *writes* keys.
315
+ * A camera retargeted to a source that never reports — which is the case the
316
+ * clearing exists for — leaves an open tab showing the old value indefinitely.
317
+ *
318
+ * **A separate event type rather than a nullable `state` on the existing
319
+ * one**, so a consumer's `switch` has to name it. A nullable field invites
320
+ * `if (state)` and fails silently when somebody forgets; an unhandled variant
321
+ * fails `tsc`, which is the difference between a rule and a mechanism.
322
+ */
323
+ export declare const resourceHealthCleared: z.ZodObject<{
324
+ type: z.ZodLiteral<"resource_health_cleared">;
325
+ robot_id: z.ZodUUID;
326
+ kind: z.ZodEnum<{
327
+ camera: "camera";
328
+ }>;
329
+ ref: z.ZodString;
330
+ facet: z.ZodEnum<{
331
+ source: "source";
332
+ publish: "publish";
333
+ }>;
334
+ cleared_at_ms: z.ZodNumber;
335
+ }, z.core.$strip>;
336
+ export type ResourceHealthCleared = z.infer<typeof resourceHealthCleared>;
337
+ export declare const resourceHealthEvent: z.ZodObject<{
338
+ type: z.ZodLiteral<"resource_health">;
339
+ robot_id: z.ZodUUID;
340
+ kind: z.ZodEnum<{
341
+ camera: "camera";
342
+ }>;
343
+ ref: z.ZodString;
344
+ facet: z.ZodEnum<{
345
+ source: "source";
346
+ publish: "publish";
347
+ }>;
348
+ state: z.ZodEnum<{
349
+ unknown: "unknown";
350
+ ok: "ok";
351
+ unreachable: "unreachable";
352
+ auth_failed: "auth_failed";
353
+ unreadable_credential: "unreadable_credential";
354
+ credential_missing: "credential_missing";
355
+ stopped_by_config_change: "stopped_by_config_change";
356
+ publish_failed: "publish_failed";
357
+ }>;
358
+ reason: z.ZodNullable<z.ZodString>;
359
+ changed_at_ms: z.ZodNumber;
360
+ }, z.core.$strip>;
361
+ export type ResourceHealthEvent = z.infer<typeof resourceHealthEvent>;
362
+ /**
363
+ * One line of the developer console's activity panel (spec
364
+ * `2026-08-20-org-event-stream`).
365
+ *
366
+ * **This is an activity log for humans, not a complete feed.** It is throttled
367
+ * and sampled. `orgEventDropped` still reports a drop on the wire, but since
368
+ * FL-001 **no Fleetless surface renders it** — the console's gap banner was
369
+ * removed on request, and nothing replaced it. A reader of this stream
370
+ * therefore cannot tell a complete window from a sampled one, and this
371
+ * comment says so rather than implying a notice that exists only in the
372
+ * protocol. Anything that needs completeness reads the audit log or the
373
+ * job-run history, both durable, both 90 days.
374
+ */
375
+ export declare const ORG_EVENT_SAMPLE_INTERVAL_MS = 1000;
376
+ /** The backstop above the per-slug cap: a fleet larger than the panel could serve anyway. */
377
+ export declare const ORG_EVENT_ORG_CEILING_PER_SECOND = 50;
378
+ /** Roughly 25 screens of scrollback. */
379
+ export declare const ORG_EVENT_BUFFER_SIZE = 200;
380
+ /** An org's buffer is dropped after this long without an event, so memory follows active orgs rather than all of them. */
381
+ export declare const ORG_EVENT_BUFFER_IDLE_MS = 3600000;
382
+ /** A log line, not a payload: a datapoint value is `unknown` and a LaserScan is megabytes. */
383
+ export declare const ORG_EVENT_DETAIL_MAX_BYTES = 4096;
384
+ /**
385
+ * `'alert'` — a transition of a datapoint alert (`ok ⇄ firing`, spec
386
+ * `2026-08-28-alerts-and-datapoint-modal-design` D2). A firing event carries
387
+ * the alert's own `severity`; a resolved event is always `info` — resolving
388
+ * is good news regardless of how bad the firing was.
389
+ *
390
+ * `'datapoint'` — since FL-001, **no producer emits this kind**: the
391
+ * datapoint producer was made a deliberate no-op (Task 5/6, this stream's own
392
+ * per-slug sampling made it redundant with what the datapoint history route
393
+ * already serves). The member stays in the enum rather than being removed,
394
+ * because a reader may still hold a pre-deploy frame of this kind sitting in
395
+ * a buffer (a reconnect replay, a client that hasn't refreshed) and must be
396
+ * able to parse it rather than fail closed on an old, valid value. Same shape
397
+ * as the correction on `ORG_EVENT_SAMPLE_INTERVAL_MS`'s comment just above:
398
+ * name what the wire no longer does instead of leaving a value the cloud can
399
+ * never send undocumented.
400
+ */
401
+ export declare const orgEventKind: z.ZodEnum<{
402
+ datapoint: "datapoint";
403
+ bridge: "bridge";
404
+ job: "job";
405
+ health: "health";
406
+ audit: "audit";
407
+ alert: "alert";
408
+ }>;
409
+ export type OrgEventKind = z.infer<typeof orgEventKind>;
410
+ /**
411
+ * Assigned by the **producer**, never derived by the reader. The console's
412
+ * `errors` filter cuts across all five kinds, and only the source knows whether
413
+ * an `auth_failed` is bad. A reader guessing from `detail` guesses differently
414
+ * for each source.
415
+ */
416
+ export declare const orgEventSeverity: z.ZodEnum<{
417
+ error: "error";
418
+ warning: "warning";
419
+ info: "info";
420
+ }>;
421
+ export type OrgEventSeverity = z.infer<typeof orgEventSeverity>;
422
+ export declare const orgEvent: z.ZodObject<{
423
+ type: z.ZodLiteral<"org_event">;
424
+ seq: z.ZodNumber;
425
+ at: z.ZodISODateTime;
426
+ kind: z.ZodEnum<{
427
+ datapoint: "datapoint";
428
+ bridge: "bridge";
429
+ job: "job";
430
+ health: "health";
431
+ audit: "audit";
432
+ alert: "alert";
433
+ }>;
434
+ severity: z.ZodEnum<{
435
+ error: "error";
436
+ warning: "warning";
437
+ info: "info";
438
+ }>;
439
+ robot_id: z.ZodNullable<z.ZodUUID>;
440
+ subject: z.ZodString;
441
+ detail: z.ZodNullable<z.ZodUnknown>;
442
+ }, z.core.$strict>;
443
+ export type OrgEvent = z.infer<typeof orgEvent>;
444
+ /** Sent by a developer's socket to start the stream. Answered by `orgEventReplay`, then live `orgEvent`s. */
445
+ export declare const orgEventSubscribe: z.ZodObject<{
446
+ type: z.ZodLiteral<"org_event_subscribe">;
447
+ }, z.core.$strict>;
448
+ export type OrgEventSubscribe = z.infer<typeof orgEventSubscribe>;
449
+ export declare const orgEventUnsubscribe: z.ZodObject<{
450
+ type: z.ZodLiteral<"org_event_unsubscribe">;
451
+ }, z.core.$strict>;
452
+ export type OrgEventUnsubscribe = z.infer<typeof orgEventUnsubscribe>;
453
+ /**
454
+ * What the cloud still remembers, oldest first, sent once before the live
455
+ * stream starts — so the panel is filled on arrival rather than blank until
456
+ * something happens. A blank panel is indistinguishable from a broken one.
457
+ */
458
+ export declare const orgEventReplay: z.ZodObject<{
459
+ type: z.ZodLiteral<"org_event_replay">;
460
+ events: z.ZodArray<z.ZodObject<{
461
+ type: z.ZodLiteral<"org_event">;
462
+ seq: z.ZodNumber;
463
+ at: z.ZodISODateTime;
464
+ kind: z.ZodEnum<{
465
+ datapoint: "datapoint";
466
+ bridge: "bridge";
467
+ job: "job";
468
+ health: "health";
469
+ audit: "audit";
470
+ alert: "alert";
471
+ }>;
472
+ severity: z.ZodEnum<{
473
+ error: "error";
474
+ warning: "warning";
475
+ info: "info";
476
+ }>;
477
+ robot_id: z.ZodNullable<z.ZodUUID>;
478
+ subject: z.ZodString;
479
+ detail: z.ZodNullable<z.ZodUnknown>;
480
+ }, z.core.$strict>>;
481
+ complete: z.ZodBoolean;
482
+ }, z.core.$strict>;
483
+ export type OrgEventReplay = z.infer<typeof orgEventReplay>;
484
+ /**
485
+ * Events this socket will never see. Two causes, reported alike: the cloud
486
+ * sampled them away, or this socket's send buffer was too far behind. Both mean
487
+ * *there was more than you are being shown*.
488
+ */
489
+ export declare const orgEventDropped: z.ZodObject<{
490
+ type: z.ZodLiteral<"org_event_dropped">;
491
+ since_ms: z.ZodNumber;
492
+ dropped: z.ZodNumber;
493
+ }, z.core.$strict>;
494
+ export type OrgEventDropped = z.infer<typeof orgEventDropped>;