@tai42/api-client 16.0.0 → 16.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (370) hide show
  1. package/dist/client/agents-client.d.ts +26 -0
  2. package/dist/client/agents-client.d.ts.map +1 -0
  3. package/dist/client/agents-client.js +19 -0
  4. package/dist/client/agents-client.js.map +1 -0
  5. package/dist/client/auth-client.d.ts +205 -0
  6. package/dist/client/auth-client.d.ts.map +1 -0
  7. package/dist/client/auth-client.js +59 -0
  8. package/dist/client/auth-client.js.map +1 -0
  9. package/dist/client/backend-client.d.ts +39 -0
  10. package/dist/client/backend-client.d.ts.map +1 -0
  11. package/dist/client/backend-client.js +22 -0
  12. package/dist/client/backend-client.js.map +1 -0
  13. package/dist/client/backup-client.d.ts +56 -0
  14. package/dist/client/backup-client.d.ts.map +1 -0
  15. package/dist/client/backup-client.js +12 -0
  16. package/dist/client/backup-client.js.map +1 -0
  17. package/dist/client/capabilities-client.d.ts +35 -0
  18. package/dist/client/capabilities-client.d.ts.map +1 -0
  19. package/dist/client/capabilities-client.js +19 -0
  20. package/dist/client/capabilities-client.js.map +1 -0
  21. package/dist/client/channels-client.d.ts +7 -0
  22. package/dist/client/channels-client.d.ts.map +1 -0
  23. package/dist/client/channels-client.js +10 -0
  24. package/dist/client/channels-client.js.map +1 -0
  25. package/dist/client/config-client.d.ts +59 -0
  26. package/dist/client/config-client.d.ts.map +1 -0
  27. package/dist/client/config-client.js +18 -0
  28. package/dist/client/config-client.js.map +1 -0
  29. package/dist/client/connectors-client.d.ts +225 -0
  30. package/dist/client/connectors-client.d.ts.map +1 -0
  31. package/dist/client/connectors-client.js +31 -0
  32. package/dist/client/connectors-client.js.map +1 -0
  33. package/dist/client/conversations-client.d.ts +399 -0
  34. package/dist/client/conversations-client.d.ts.map +1 -0
  35. package/dist/client/conversations-client.js +120 -0
  36. package/dist/client/conversations-client.js.map +1 -0
  37. package/dist/client/hooks-client.d.ts +113 -0
  38. package/dist/client/hooks-client.d.ts.map +1 -0
  39. package/dist/client/hooks-client.js +25 -0
  40. package/dist/client/hooks-client.js.map +1 -0
  41. package/dist/{client.d.ts → client/index.d.ts} +2235 -2666
  42. package/dist/client/index.d.ts.map +1 -0
  43. package/dist/client/index.js +79 -0
  44. package/dist/client/index.js.map +1 -0
  45. package/dist/client/interactions-client.d.ts +52 -0
  46. package/dist/client/interactions-client.d.ts.map +1 -0
  47. package/dist/client/interactions-client.js +84 -0
  48. package/dist/client/interactions-client.js.map +1 -0
  49. package/dist/client/login-client.d.ts +56 -0
  50. package/dist/client/login-client.d.ts.map +1 -0
  51. package/dist/client/login-client.js +103 -0
  52. package/dist/client/login-client.js.map +1 -0
  53. package/dist/client/manifest-client.d.ts +354 -0
  54. package/dist/client/manifest-client.d.ts.map +1 -0
  55. package/dist/client/manifest-client.js +76 -0
  56. package/dist/client/manifest-client.js.map +1 -0
  57. package/dist/client/marketplace-client.d.ts +274 -0
  58. package/dist/client/marketplace-client.d.ts.map +1 -0
  59. package/dist/client/marketplace-client.js +46 -0
  60. package/dist/client/marketplace-client.js.map +1 -0
  61. package/dist/client/mcp-config-schema-client.d.ts +5 -0
  62. package/dist/client/mcp-config-schema-client.d.ts.map +1 -0
  63. package/dist/client/mcp-config-schema-client.js +9 -0
  64. package/dist/client/mcp-config-schema-client.js.map +1 -0
  65. package/dist/client/notifications-client.d.ts +27 -0
  66. package/dist/client/notifications-client.d.ts.map +1 -0
  67. package/dist/client/notifications-client.js +11 -0
  68. package/dist/client/notifications-client.js.map +1 -0
  69. package/dist/client/observability-client.d.ts +103 -0
  70. package/dist/client/observability-client.d.ts.map +1 -0
  71. package/dist/client/observability-client.js +43 -0
  72. package/dist/client/observability-client.js.map +1 -0
  73. package/dist/client/plugins-client.d.ts +17 -0
  74. package/dist/client/plugins-client.d.ts.map +1 -0
  75. package/dist/client/plugins-client.js +9 -0
  76. package/dist/client/plugins-client.js.map +1 -0
  77. package/dist/client/policy-client.d.ts +37 -0
  78. package/dist/client/policy-client.d.ts.map +1 -0
  79. package/dist/client/policy-client.js +26 -0
  80. package/dist/client/policy-client.js.map +1 -0
  81. package/dist/client/presets-client.d.ts +335 -0
  82. package/dist/client/presets-client.d.ts.map +1 -0
  83. package/dist/client/presets-client.js +38 -0
  84. package/dist/client/presets-client.js.map +1 -0
  85. package/dist/client/profiles-client.d.ts +102 -0
  86. package/dist/client/profiles-client.d.ts.map +1 -0
  87. package/dist/client/profiles-client.js +37 -0
  88. package/dist/client/profiles-client.js.map +1 -0
  89. package/dist/client/schedules-client.d.ts +28 -0
  90. package/dist/client/schedules-client.d.ts.map +1 -0
  91. package/dist/client/schedules-client.js +13 -0
  92. package/dist/client/schedules-client.js.map +1 -0
  93. package/dist/client/settings-schema-client.d.ts +23 -0
  94. package/dist/client/settings-schema-client.d.ts.map +1 -0
  95. package/dist/client/settings-schema-client.js +9 -0
  96. package/dist/client/settings-schema-client.js.map +1 -0
  97. package/dist/client/states-client.d.ts +471 -0
  98. package/dist/client/states-client.d.ts.map +1 -0
  99. package/dist/client/states-client.js +144 -0
  100. package/dist/client/states-client.js.map +1 -0
  101. package/dist/client/storage-client.d.ts +40 -0
  102. package/dist/client/storage-client.d.ts.map +1 -0
  103. package/dist/client/storage-client.js +43 -0
  104. package/dist/client/storage-client.js.map +1 -0
  105. package/dist/client/sub-mcp-client.d.ts +17 -0
  106. package/dist/client/sub-mcp-client.d.ts.map +1 -0
  107. package/dist/client/sub-mcp-client.js +14 -0
  108. package/dist/client/sub-mcp-client.js.map +1 -0
  109. package/dist/client/system-client.d.ts +11 -0
  110. package/dist/client/system-client.d.ts.map +1 -0
  111. package/dist/client/system-client.js +13 -0
  112. package/dist/client/system-client.js.map +1 -0
  113. package/dist/client/templates-client.d.ts +29 -0
  114. package/dist/client/templates-client.d.ts.map +1 -0
  115. package/dist/client/templates-client.js +21 -0
  116. package/dist/client/templates-client.js.map +1 -0
  117. package/dist/client/tool-extensions-client.d.ts +54 -0
  118. package/dist/client/tool-extensions-client.d.ts.map +1 -0
  119. package/dist/client/tool-extensions-client.js +21 -0
  120. package/dist/client/tool-extensions-client.js.map +1 -0
  121. package/dist/client/tool-meta-client.d.ts +69 -0
  122. package/dist/client/tool-meta-client.d.ts.map +1 -0
  123. package/dist/client/tool-meta-client.js +38 -0
  124. package/dist/client/tool-meta-client.js.map +1 -0
  125. package/dist/client/tools-client.d.ts +83 -0
  126. package/dist/client/tools-client.d.ts.map +1 -0
  127. package/dist/client/tools-client.js +38 -0
  128. package/dist/client/tools-client.js.map +1 -0
  129. package/dist/client/transport.d.ts +13 -0
  130. package/dist/client/transport.d.ts.map +1 -0
  131. package/dist/client/transport.js +10 -0
  132. package/dist/client/transport.js.map +1 -0
  133. package/dist/client/trigger-links-client.d.ts +44 -0
  134. package/dist/client/trigger-links-client.d.ts.map +1 -0
  135. package/dist/client/trigger-links-client.js +30 -0
  136. package/dist/client/trigger-links-client.js.map +1 -0
  137. package/dist/client/web-entry-gate-client.d.ts +34 -0
  138. package/dist/client/web-entry-gate-client.d.ts.map +1 -0
  139. package/dist/client/web-entry-gate-client.js +25 -0
  140. package/dist/client/web-entry-gate-client.js.map +1 -0
  141. package/dist/http.d.ts.map +1 -1
  142. package/dist/http.js +33 -17
  143. package/dist/http.js.map +1 -1
  144. package/dist/schemas/api-keys.d.ts +34 -0
  145. package/dist/schemas/api-keys.d.ts.map +1 -0
  146. package/dist/schemas/api-keys.js +22 -0
  147. package/dist/schemas/api-keys.js.map +1 -0
  148. package/dist/schemas/auth-routes.d.ts +78 -0
  149. package/dist/schemas/auth-routes.d.ts.map +1 -0
  150. package/dist/schemas/auth-routes.js +42 -0
  151. package/dist/schemas/auth-routes.js.map +1 -0
  152. package/dist/schemas/backup.d.ts +78 -0
  153. package/dist/schemas/backup.d.ts.map +1 -0
  154. package/dist/schemas/backup.js +33 -0
  155. package/dist/schemas/backup.js.map +1 -0
  156. package/dist/schemas/capabilities.d.ts +99 -0
  157. package/dist/schemas/capabilities.d.ts.map +1 -0
  158. package/dist/schemas/capabilities.js +74 -0
  159. package/dist/schemas/capabilities.js.map +1 -0
  160. package/dist/schemas/channels.d.ts +7 -0
  161. package/dist/schemas/channels.d.ts.map +1 -0
  162. package/dist/schemas/channels.js +9 -0
  163. package/dist/schemas/channels.js.map +1 -0
  164. package/dist/schemas/config.d.ts +17 -0
  165. package/dist/schemas/config.d.ts.map +1 -0
  166. package/dist/schemas/config.js +17 -0
  167. package/dist/schemas/config.js.map +1 -0
  168. package/dist/schemas/connectors.d.ts +383 -0
  169. package/dist/schemas/connectors.d.ts.map +1 -0
  170. package/dist/schemas/connectors.js +122 -0
  171. package/dist/schemas/connectors.js.map +1 -0
  172. package/dist/schemas/conversations.d.ts +600 -0
  173. package/dist/schemas/conversations.d.ts.map +1 -0
  174. package/dist/schemas/conversations.js +208 -0
  175. package/dist/schemas/conversations.js.map +1 -0
  176. package/dist/schemas/extensions.d.ts +44 -0
  177. package/dist/schemas/extensions.d.ts.map +1 -0
  178. package/dist/schemas/extensions.js +29 -0
  179. package/dist/schemas/extensions.js.map +1 -0
  180. package/dist/schemas/fleet.d.ts +271 -0
  181. package/dist/schemas/fleet.d.ts.map +1 -0
  182. package/dist/schemas/fleet.js +132 -0
  183. package/dist/schemas/fleet.js.map +1 -0
  184. package/dist/schemas/hooks.d.ts +120 -0
  185. package/dist/schemas/hooks.d.ts.map +1 -0
  186. package/dist/schemas/hooks.js +44 -0
  187. package/dist/schemas/hooks.js.map +1 -0
  188. package/dist/schemas/index.d.ts +38 -0
  189. package/dist/schemas/index.d.ts.map +1 -0
  190. package/dist/schemas/index.js +38 -0
  191. package/dist/schemas/index.js.map +1 -0
  192. package/dist/schemas/interactions.d.ts +156 -0
  193. package/dist/schemas/interactions.d.ts.map +1 -0
  194. package/dist/schemas/interactions.js +124 -0
  195. package/dist/schemas/interactions.js.map +1 -0
  196. package/dist/schemas/login.d.ts +86 -0
  197. package/dist/schemas/login.d.ts.map +1 -0
  198. package/dist/schemas/login.js +54 -0
  199. package/dist/schemas/login.js.map +1 -0
  200. package/dist/schemas/manifest-mcp.d.ts +125 -0
  201. package/dist/schemas/manifest-mcp.d.ts.map +1 -0
  202. package/dist/schemas/manifest-mcp.js +61 -0
  203. package/dist/schemas/manifest-mcp.js.map +1 -0
  204. package/dist/schemas/marketplace.d.ts +708 -0
  205. package/dist/schemas/marketplace.d.ts.map +1 -0
  206. package/dist/schemas/marketplace.js +387 -0
  207. package/dist/schemas/marketplace.js.map +1 -0
  208. package/dist/schemas/notifications.d.ts +61 -0
  209. package/dist/schemas/notifications.d.ts.map +1 -0
  210. package/dist/schemas/notifications.js +38 -0
  211. package/dist/schemas/notifications.js.map +1 -0
  212. package/dist/schemas/observability.d.ts +114 -0
  213. package/dist/schemas/observability.d.ts.map +1 -0
  214. package/dist/schemas/observability.js +74 -0
  215. package/dist/schemas/observability.js.map +1 -0
  216. package/dist/schemas/policy.d.ts +58 -0
  217. package/dist/schemas/policy.d.ts.map +1 -0
  218. package/dist/schemas/policy.js +32 -0
  219. package/dist/schemas/policy.js.map +1 -0
  220. package/dist/schemas/presets.d.ts +258 -0
  221. package/dist/schemas/presets.d.ts.map +1 -0
  222. package/dist/schemas/presets.js +95 -0
  223. package/dist/schemas/presets.js.map +1 -0
  224. package/dist/schemas/profiles.d.ts +180 -0
  225. package/dist/schemas/profiles.d.ts.map +1 -0
  226. package/dist/schemas/profiles.js +100 -0
  227. package/dist/schemas/profiles.js.map +1 -0
  228. package/dist/schemas/roles.d.ts +125 -0
  229. package/dist/schemas/roles.d.ts.map +1 -0
  230. package/dist/schemas/roles.js +46 -0
  231. package/dist/schemas/roles.js.map +1 -0
  232. package/dist/schemas/schedules.d.ts +25 -0
  233. package/dist/schemas/schedules.d.ts.map +1 -0
  234. package/dist/schemas/schedules.js +24 -0
  235. package/dist/schemas/schedules.js.map +1 -0
  236. package/dist/schemas/served.d.ts +626 -0
  237. package/dist/schemas/served.d.ts.map +1 -0
  238. package/dist/schemas/served.js +28 -0
  239. package/dist/schemas/served.js.map +1 -0
  240. package/dist/schemas/settings-schema.d.ts +23 -0
  241. package/dist/schemas/settings-schema.d.ts.map +1 -0
  242. package/dist/schemas/settings-schema.js +25 -0
  243. package/dist/schemas/settings-schema.js.map +1 -0
  244. package/dist/schemas/shared.d.ts +20 -0
  245. package/dist/schemas/shared.d.ts.map +1 -0
  246. package/dist/schemas/shared.js +20 -0
  247. package/dist/schemas/shared.js.map +1 -0
  248. package/dist/schemas/states.d.ts +499 -0
  249. package/dist/schemas/states.d.ts.map +1 -0
  250. package/dist/schemas/states.js +220 -0
  251. package/dist/schemas/states.js.map +1 -0
  252. package/dist/schemas/storage.d.ts +37 -0
  253. package/dist/schemas/storage.d.ts.map +1 -0
  254. package/dist/schemas/storage.js +24 -0
  255. package/dist/schemas/storage.js.map +1 -0
  256. package/dist/schemas/studio-plugins.d.ts +30 -0
  257. package/dist/schemas/studio-plugins.d.ts.map +1 -0
  258. package/dist/schemas/studio-plugins.js +20 -0
  259. package/dist/schemas/studio-plugins.js.map +1 -0
  260. package/dist/schemas/sub-mcp.d.ts +29 -0
  261. package/dist/schemas/sub-mcp.d.ts.map +1 -0
  262. package/dist/schemas/sub-mcp.js +22 -0
  263. package/dist/schemas/sub-mcp.js.map +1 -0
  264. package/dist/schemas/system-kinds.d.ts +122 -0
  265. package/dist/schemas/system-kinds.d.ts.map +1 -0
  266. package/dist/schemas/system-kinds.js +40 -0
  267. package/dist/schemas/system-kinds.js.map +1 -0
  268. package/dist/schemas/templates.d.ts +26 -0
  269. package/dist/schemas/templates.d.ts.map +1 -0
  270. package/dist/schemas/templates.js +11 -0
  271. package/dist/schemas/templates.js.map +1 -0
  272. package/dist/schemas/tool-meta.d.ts +64 -0
  273. package/dist/schemas/tool-meta.d.ts.map +1 -0
  274. package/dist/schemas/tool-meta.js +44 -0
  275. package/dist/schemas/tool-meta.js.map +1 -0
  276. package/dist/schemas/tools.d.ts +62 -0
  277. package/dist/schemas/tools.d.ts.map +1 -0
  278. package/dist/schemas/tools.js +53 -0
  279. package/dist/schemas/tools.js.map +1 -0
  280. package/dist/schemas/trigger-links.d.ts +71 -0
  281. package/dist/schemas/trigger-links.d.ts.map +1 -0
  282. package/dist/schemas/trigger-links.js +46 -0
  283. package/dist/schemas/trigger-links.js.map +1 -0
  284. package/dist/schemas/web-entry.d.ts +45 -0
  285. package/dist/schemas/web-entry.d.ts.map +1 -0
  286. package/dist/schemas/web-entry.js +36 -0
  287. package/dist/schemas/web-entry.js.map +1 -0
  288. package/dist/tool-runs.d.ts +4 -4
  289. package/package.json +1 -1
  290. package/src/client/agents-client.ts +23 -0
  291. package/src/client/auth-client.ts +144 -0
  292. package/src/client/backend-client.ts +25 -0
  293. package/src/client/backup-client.ts +16 -0
  294. package/src/client/capabilities-client.ts +22 -0
  295. package/src/client/channels-client.ts +11 -0
  296. package/src/client/config-client.ts +21 -0
  297. package/src/client/connectors-client.ts +52 -0
  298. package/src/client/conversations-client.ts +240 -0
  299. package/src/client/hooks-client.ts +44 -0
  300. package/src/client/index.ts +122 -0
  301. package/src/client/interactions-client.ts +89 -0
  302. package/src/client/login-client.ts +109 -0
  303. package/src/client/manifest-client.ts +118 -0
  304. package/src/client/marketplace-client.ts +122 -0
  305. package/src/client/mcp-config-schema-client.ts +11 -0
  306. package/src/client/notifications-client.ts +13 -0
  307. package/src/client/observability-client.ts +82 -0
  308. package/src/client/plugins-client.ts +11 -0
  309. package/src/client/policy-client.ts +41 -0
  310. package/src/client/presets-client.ts +124 -0
  311. package/src/client/profiles-client.ts +51 -0
  312. package/src/client/schedules-client.ts +22 -0
  313. package/src/client/settings-schema-client.ts +11 -0
  314. package/src/client/states-client.ts +292 -0
  315. package/src/client/storage-client.ts +63 -0
  316. package/src/client/sub-mcp-client.ts +17 -0
  317. package/src/client/system-client.ts +16 -0
  318. package/src/client/templates-client.ts +28 -0
  319. package/src/client/tool-extensions-client.ts +24 -0
  320. package/src/client/tool-meta-client.ts +65 -0
  321. package/src/client/tools-client.ts +66 -0
  322. package/src/client/transport.ts +18 -0
  323. package/src/client/trigger-links-client.ts +51 -0
  324. package/src/client/web-entry-gate-client.ts +45 -0
  325. package/src/http.ts +48 -24
  326. package/src/schemas/api-keys.ts +26 -0
  327. package/src/schemas/auth-routes.ts +48 -0
  328. package/src/schemas/backup.ts +42 -0
  329. package/src/schemas/capabilities.ts +87 -0
  330. package/src/schemas/channels.ts +11 -0
  331. package/src/schemas/config.ts +17 -0
  332. package/src/schemas/connectors.ts +138 -0
  333. package/src/schemas/conversations.ts +256 -0
  334. package/src/schemas/extensions.ts +34 -0
  335. package/src/schemas/fleet.ts +153 -0
  336. package/src/schemas/hooks.ts +56 -0
  337. package/src/schemas/index.ts +37 -0
  338. package/src/schemas/interactions.ts +146 -0
  339. package/src/schemas/login.ts +62 -0
  340. package/src/schemas/manifest-mcp.ts +69 -0
  341. package/src/schemas/marketplace.ts +447 -0
  342. package/src/schemas/notifications.ts +42 -0
  343. package/src/schemas/observability.ts +86 -0
  344. package/src/schemas/policy.ts +37 -0
  345. package/src/schemas/presets.ts +113 -0
  346. package/src/schemas/profiles.ts +119 -0
  347. package/src/schemas/roles.ts +57 -0
  348. package/src/schemas/schedules.ts +27 -0
  349. package/src/schemas/served.ts +49 -0
  350. package/src/schemas/settings-schema.ts +31 -0
  351. package/src/schemas/shared.ts +21 -0
  352. package/src/schemas/states.ts +272 -0
  353. package/src/schemas/storage.ts +31 -0
  354. package/src/schemas/studio-plugins.ts +21 -0
  355. package/src/schemas/sub-mcp.ts +24 -0
  356. package/src/schemas/system-kinds.ts +46 -0
  357. package/src/schemas/templates.ts +11 -0
  358. package/src/schemas/tool-meta.ts +51 -0
  359. package/src/schemas/tools.ts +61 -0
  360. package/src/schemas/trigger-links.ts +54 -0
  361. package/src/schemas/web-entry.ts +46 -0
  362. package/dist/client.d.ts.map +0 -1
  363. package/dist/client.js +0 -920
  364. package/dist/client.js.map +0 -1
  365. package/dist/schemas.d.ts +0 -5172
  366. package/dist/schemas.d.ts.map +0 -1
  367. package/dist/schemas.js +0 -2268
  368. package/dist/schemas.js.map +0 -1
  369. package/src/client.ts +0 -1771
  370. package/src/schemas.ts +0 -2760
@@ -0,0 +1,146 @@
1
+ /** Interaction question, answer and media response schemas. */
2
+ import { z } from 'zod';
3
+ import { pageWindow } from './shared';
4
+
5
+ // Shapes match the skeleton's interactions SSE contract: the SSE
6
+ // `interaction.add` frame carries the question and its answer format; the answer
7
+ // door returns { interaction_id, status }. `answered` is not a wire field — it
8
+ // is a client-side flag the stream hook flips on an `interaction.answered` event.
9
+
10
+ export const answerFormat = z.enum(['text', 'confirm', 'select', 'form', 'external']);
11
+ export type AnswerFormat = z.infer<typeof answerFormat>;
12
+
13
+ /** The kind of a question's display-only media item: a remote/inline image, or a link. */
14
+ export const mediaKind = z.enum(['image', 'link']);
15
+ export type MediaKind = z.infer<typeof mediaKind>;
16
+
17
+ /**
18
+ * One item of a question's display-only media. Applied PER ITEM by the renderer
19
+ * (never as a strict array on the frame): the frame's `media` field is a loose
20
+ * `z.array(z.unknown())`, and the renderer `safeParse`s each item with this schema
21
+ * so one malformed/hostile item is a loud per-item notice, not a whole-frame parse
22
+ * failure that would silently vanish an answerable question.
23
+ *
24
+ * `caption` is `.nullish()` (absent OR `null` both parse to a caption-less item):
25
+ * a caption-less item may arrive with the key omitted OR with an explicit `null`, so
26
+ * `.optional()` here would false-fail the explicit `null` and render a good image as
27
+ * malformed. `url` and `kind` are the only load-bearing fields; the image
28
+ * src scheme gate and the link neutralization are enforced by the renderer.
29
+ */
30
+ export const interactionMediaItem = z.object({
31
+ kind: mediaKind,
32
+ url: z.string(),
33
+ caption: z.string().nullish(),
34
+ });
35
+ export type InteractionMediaItem = z.infer<typeof interactionMediaItem>;
36
+
37
+ /**
38
+ * One per-send choice for a `form` property whose schema is a string (or array of
39
+ * strings). `value` is what the answer carries; `label` (absent OR null both parse
40
+ * to no label) is the human text shown in its place. A send may replace a property's
41
+ * `enum` this way for one ask without republishing the form. Applied per property by
42
+ * the form preview (safeParsed), so a malformed entry is a loud notice, never silent.
43
+ */
44
+ export const formOption = z.object({
45
+ value: z.string(),
46
+ label: z.string().nullish(),
47
+ });
48
+ export type FormOption = z.infer<typeof formOption>;
49
+
50
+ /**
51
+ * Per-send `form` data: `values` prefills top-level properties (keyed by property
52
+ * name), `options` supplies per-send choice lists (keyed by property name). Both
53
+ * default to empty. The form preview safeParses this off `format_payload.data`, so a
54
+ * malformed block is a loud notice rather than a whole-frame parse failure.
55
+ */
56
+ export const formData = z.object({
57
+ values: z.record(z.string(), z.unknown()).default({}),
58
+ options: z.record(z.string(), z.array(formOption)).default({}),
59
+ });
60
+ export type FormData = z.infer<typeof formData>;
61
+
62
+ /**
63
+ * One page of a stepped `form`: a `title` and the ordered top-level property names it
64
+ * groups. `format_payload.pages` is the ordered list of these; absent = one page. The
65
+ * form preview safeParses the list, so a malformed page is a loud notice, never silent.
66
+ */
67
+ export const formPage = z.object({
68
+ title: z.string(),
69
+ fields: z.array(z.string()),
70
+ });
71
+ export type FormPage = z.infer<typeof formPage>;
72
+
73
+ /** The `form` pages list (`format_payload.pages`), safeParsed as a whole by the preview. */
74
+ export const formPages = z.array(formPage);
75
+ export type FormPages = z.infer<typeof formPages>;
76
+
77
+ export const interaction = z.object({
78
+ interaction_id: z.string(),
79
+ group_id: z.string(),
80
+ question: z.string().default(''),
81
+ answer_format: answerFormat,
82
+ // Format-specific payload: select options, form JSON schema (with optional per-send
83
+ // `data` and `pages`), external url. The wire sends `null` for formats that carry
84
+ // none (text/confirm); it is normalized to `{}` so consumers always see an object.
85
+ format_payload: z
86
+ .record(z.string(), z.unknown())
87
+ .nullish()
88
+ .transform((value) => value ?? {}),
89
+ created_at: z.string(),
90
+ timeout_at: z.string(),
91
+ // Whether the answer body is sensitive and never persisted server-side. Rides
92
+ // every add frame; an absent value (older frame) normalizes to false.
93
+ sensitive: z.boolean().default(false),
94
+ // True only for an external question answered by a signed server-to-server
95
+ // callback (never by a human); the frame never carries the verifier object.
96
+ // Absent/undefined for every other question.
97
+ server_verified: z.boolean().optional(),
98
+ // Name of the channel plugin the question was also delivered through (e.g.
99
+ // "telegram"); absent when the question lives only in this inbox.
100
+ channel: z.string().optional(),
101
+ // Interaction attribution, each additive and absent when unset. `recipient` is
102
+ // the channel delivery address the question went to; `origin` is the run id of
103
+ // the background tool run that asked; `audience` is the user_id the question is
104
+ // addressed to. Display/binding data only, never an authorization axis; a
105
+ // present non-string is malformed.
106
+ recipient: z.string().optional(),
107
+ origin: z.string().optional(),
108
+ audience: z.string().optional(),
109
+ // Display-only media shown WITH the question (images and/or links). Absent when
110
+ // the question carries none. Deliberately LOOSE (`z.array(z.unknown())`): each
111
+ // item is `safeParse`d per item by the renderer against `interactionMediaItem`,
112
+ // so one malformed/hostile item can never fail the whole frame parse and hide an
113
+ // answerable question. A present non-array value is still malformed.
114
+ media: z.array(z.unknown()).optional(),
115
+ });
116
+ export type Interaction = z.infer<typeof interaction>;
117
+
118
+ /** The answer door's response — the blocked caller was woken. */
119
+ export const interactionAnswered = z.object({
120
+ interaction_id: z.string(),
121
+ status: z.string(),
122
+ });
123
+ export type InteractionAnswered = z.infer<typeof interactionAnswered>;
124
+
125
+ /**
126
+ * The cancel door's response — a pending ask was WITHDRAWN without an answer (the
127
+ * asking flow does not resume). `status` is `"cancelled"`; the shape mirrors the
128
+ * answer door's terminal reply, but the door is distinct so it carries its own
129
+ * schema.
130
+ */
131
+ export const interactionCancelled = z.object({
132
+ interaction_id: z.string(),
133
+ status: z.string(),
134
+ });
135
+ export type InteractionCancelled = z.infer<typeof interactionCancelled>;
136
+
137
+ /**
138
+ * A page of pending interactions from `GET /api/interactions?page=&pageSize=`. Each
139
+ * item is the same record the stream's `interaction.add` frame carries. The pending
140
+ * set is the paged base the tail-only stream applies live deltas over.
141
+ */
142
+ export const interactionsPage = z.object({
143
+ items: z.array(interaction),
144
+ ...pageWindow,
145
+ });
146
+ export type InteractionsPage = z.infer<typeof interactionsPage>;
@@ -0,0 +1,62 @@
1
+ /** Public login-method aggregator and login-result schemas. */
2
+ import { z } from 'zod';
3
+
4
+ /**
5
+ * One field of a `form` login method. `secret` fields render as password
6
+ * inputs; `autocomplete` passes through to the input (e.g. "email",
7
+ * "current-password", "new-password").
8
+ */
9
+ export const loginFormField = z.object({
10
+ name: z.string().min(1),
11
+ label: z.string().min(1),
12
+ secret: z.boolean(),
13
+ autocomplete: z.string().optional(),
14
+ });
15
+
16
+ /**
17
+ * The two — and only two — login-method shapes. Discriminated on `shape`; an
18
+ * unknown shape fails validation loudly (contract drift, not a soft skip).
19
+ * Optional fields are `.optional()` (absent), never `.nullable()`: the server
20
+ * serializes with `exclude_none`, so an absent field is OMITTED, never `null`.
21
+ */
22
+ export const loginMethod = z.discriminatedUnion('shape', [
23
+ z.object({
24
+ shape: z.literal('form'),
25
+ id: z.string().min(1),
26
+ title: z.string().min(1),
27
+ purpose: z.enum(['login', 'bootstrap', 'invite']).default('login'),
28
+ fields: z.array(loginFormField).min(1),
29
+ submit_path: z.string().min(1),
30
+ }),
31
+ z.object({
32
+ shape: z.literal('button'),
33
+ id: z.string().min(1),
34
+ label: z.string().min(1),
35
+ icon: z.string().optional(),
36
+ href: z.string().min(1),
37
+ }),
38
+ ]);
39
+
40
+ /**
41
+ * `GET /api/login/methods` (PUBLIC). `bootstrap: true` ⇒ the deployment has zero
42
+ * accounts and `methods` contains the owner-creation form. Non-strict — the
43
+ * skeleton may grow additive fields.
44
+ */
45
+ export const loginMethods = z.object({
46
+ methods: z.array(loginMethod),
47
+ bootstrap: z.boolean(),
48
+ });
49
+
50
+ /**
51
+ * A successful login/exchange: the minted session token (opaque, `tai-sess-`
52
+ * prefixed — the client treats it as an opaque string) + its user.
53
+ */
54
+ export const loginResult = z.object({
55
+ token: z.string().min(1),
56
+ user_id: z.string().min(1),
57
+ });
58
+
59
+ export type LoginFormField = z.infer<typeof loginFormField>;
60
+ export type LoginMethod = z.infer<typeof loginMethod>;
61
+ export type LoginMethods = z.infer<typeof loginMethods>;
62
+ export type LoginResult = z.infer<typeof loginResult>;
@@ -0,0 +1,69 @@
1
+ /** Live-manifest MCP section, env-ref and config-reload schemas. */
2
+ import { z } from 'zod';
3
+ import { fleetReportFanout } from './fleet';
4
+
5
+ /**
6
+ * The back-reference a connector writes onto a manifest MCP entry to mark it
7
+ * connector-owned: the connection and the provider sub-service that own it.
8
+ * Hand-authored entries carry no `managed` marker.
9
+ */
10
+ export const connectorRef = z.object({
11
+ connection_id: z.string(),
12
+ provider_id: z.string(),
13
+ sub_service: z.string(),
14
+ });
15
+ export type ConnectorRef = z.infer<typeof connectorRef>;
16
+
17
+ /**
18
+ * One entry of the live manifest's MCP section. Only the `managed` provenance
19
+ * marker is typed — the connect/disconnect flows write it server-side to point a
20
+ * connector-owned entry back at its connection, and the editor renders such
21
+ * entries read-only. `.nullish()` because a hand-authored entry carries `null`
22
+ * (present) or omits the key. Every other field (title, config, extensions) rides
23
+ * through `.loose()` unmodeled so the config editor keeps editing the whole
24
+ * entry — narrowing it to a typed subset would silently strip the fields it saves.
25
+ */
26
+ export const manifestMcpEntry = z
27
+ .object({
28
+ managed: connectorRef.nullish(),
29
+ })
30
+ .loose();
31
+ export type ManifestMcpEntry = z.infer<typeof manifestMcpEntry>;
32
+
33
+ export const manifestView = z.object({
34
+ mcp: z.array(manifestMcpEntry),
35
+ user_tools: z.array(z.string()),
36
+ });
37
+
38
+ /**
39
+ * One `!ENV ${VAR[:default]}` marker the manifest's MCP section carries
40
+ * (`GET /api/manifest/mcp-env-refs`) — NAMES and BOOLEANS only, NEVER values.
41
+ * `pointer` is the RFC 6901 json-pointer of the leaf (`/mcp/<i>/config/...`);
42
+ * `has_default` is whether the marker carries a `:default`; `set` is whether the
43
+ * var resolves in the EFFECTIVE env (the resolution truth the install-time
44
+ * dangling refusal reads), so a var supplied by the deployment shows green, never
45
+ * a false red. The checklist derives from THIS alone — no env value is ever fetched.
46
+ */
47
+ export const mcpEnvRef = z.object({
48
+ var: z.string(),
49
+ pointer: z.string(),
50
+ has_default: z.boolean(),
51
+ set: z.boolean(),
52
+ });
53
+ export type McpEnvRef = z.infer<typeof mcpEnvRef>;
54
+ export const mcpEnvRefs = z.array(mcpEnvRef);
55
+ export type McpEnvRefs = z.infer<typeof mcpEnvRefs>;
56
+ /**
57
+ * The apply result every config-writer mutation returns (`POST /api/mcp-config`,
58
+ * `POST /api/config/env`): the serving worker's local reload result (`status` +
59
+ * `env_keys`) plus the mode-wrapped fleet fan-out of the reload it broadcast. The
60
+ * `fanout` is parsed EXPLICITLY so the shared fleet-report handler can surface a
61
+ * failed propagation — zod's unknown-key stripping would otherwise hide it. A drift
62
+ * throws `ApiSchemaError`.
63
+ */
64
+ export const reloadConfigResult = z.object({
65
+ status: z.string(),
66
+ env_keys: z.number(),
67
+ fanout: fleetReportFanout,
68
+ });
69
+ export type ReloadConfigResult = z.infer<typeof reloadConfigResult>;