@cavi-ai/api-client 0.1.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 (665) hide show
  1. package/ARCHITECTURE.md +12 -0
  2. package/CHANGELOG.md +80 -0
  3. package/CONTRIBUTING.md +158 -0
  4. package/LICENSE +21 -0
  5. package/README.md +618 -0
  6. package/SECURITY.md +48 -0
  7. package/dist/contracts/index.d.ts +5 -0
  8. package/dist/contracts/index.d.ts.map +1 -0
  9. package/dist/contracts/index.js +4 -0
  10. package/dist/contracts/paths.d.ts +154 -0
  11. package/dist/contracts/paths.d.ts.map +1 -0
  12. package/dist/contracts/paths.js +89 -0
  13. package/dist/contracts/resolve.d.ts +7 -0
  14. package/dist/contracts/resolve.d.ts.map +1 -0
  15. package/dist/contracts/resolve.js +22 -0
  16. package/dist/contracts/surfaces.d.ts +13 -0
  17. package/dist/contracts/surfaces.d.ts.map +1 -0
  18. package/dist/contracts/surfaces.js +332 -0
  19. package/dist/contracts/team-manifest.d.ts +200 -0
  20. package/dist/contracts/team-manifest.d.ts.map +1 -0
  21. package/dist/contracts/team-manifest.js +951 -0
  22. package/dist/core/data/guards.d.ts +6 -0
  23. package/dist/core/data/guards.d.ts.map +1 -0
  24. package/dist/core/data/guards.js +22 -0
  25. package/dist/core/data/index.d.ts +2 -0
  26. package/dist/core/data/index.d.ts.map +1 -0
  27. package/dist/core/data/index.js +1 -0
  28. package/dist/core/env/config.d.ts +40 -0
  29. package/dist/core/env/config.d.ts.map +1 -0
  30. package/dist/core/env/config.js +44 -0
  31. package/dist/core/env/index.d.ts +3 -0
  32. package/dist/core/env/index.d.ts.map +1 -0
  33. package/dist/core/env/index.js +2 -0
  34. package/dist/core/env/repo-root.d.ts +11 -0
  35. package/dist/core/env/repo-root.d.ts.map +1 -0
  36. package/dist/core/env/repo-root.js +36 -0
  37. package/dist/core/gateway/agent/commands.d.ts +93 -0
  38. package/dist/core/gateway/agent/commands.d.ts.map +1 -0
  39. package/dist/core/gateway/agent/commands.js +351 -0
  40. package/dist/core/gateway/agent/config.d.ts +158 -0
  41. package/dist/core/gateway/agent/config.d.ts.map +1 -0
  42. package/dist/core/gateway/agent/config.js +536 -0
  43. package/dist/core/gateway/agent/index.d.ts +4 -0
  44. package/dist/core/gateway/agent/index.d.ts.map +1 -0
  45. package/dist/core/gateway/agent/index.js +3 -0
  46. package/dist/core/gateway/agent/voice-config.d.ts +20 -0
  47. package/dist/core/gateway/agent/voice-config.d.ts.map +1 -0
  48. package/dist/core/gateway/agent/voice-config.js +65 -0
  49. package/dist/core/gateway/client/capabilities.d.ts +28 -0
  50. package/dist/core/gateway/client/capabilities.d.ts.map +1 -0
  51. package/dist/core/gateway/client/capabilities.js +288 -0
  52. package/dist/core/gateway/client/client.d.ts +106 -0
  53. package/dist/core/gateway/client/client.d.ts.map +1 -0
  54. package/dist/core/gateway/client/client.js +41 -0
  55. package/dist/core/gateway/client/error-details.d.ts +17 -0
  56. package/dist/core/gateway/client/error-details.d.ts.map +1 -0
  57. package/dist/core/gateway/client/error-details.js +50 -0
  58. package/dist/core/gateway/client/fetch.d.ts +24 -0
  59. package/dist/core/gateway/client/fetch.d.ts.map +1 -0
  60. package/dist/core/gateway/client/fetch.js +98 -0
  61. package/dist/core/gateway/client/index.d.ts +6 -0
  62. package/dist/core/gateway/client/index.d.ts.map +1 -0
  63. package/dist/core/gateway/client/index.js +5 -0
  64. package/dist/core/gateway/client/runtime-targets.d.ts +11 -0
  65. package/dist/core/gateway/client/runtime-targets.d.ts.map +1 -0
  66. package/dist/core/gateway/client/runtime-targets.js +86 -0
  67. package/dist/core/gateway/envelope/envelope.d.ts +25 -0
  68. package/dist/core/gateway/envelope/envelope.d.ts.map +1 -0
  69. package/dist/core/gateway/envelope/envelope.js +141 -0
  70. package/dist/core/gateway/envelope/index.d.ts +3 -0
  71. package/dist/core/gateway/envelope/index.d.ts.map +1 -0
  72. package/dist/core/gateway/envelope/index.js +1 -0
  73. package/dist/core/gateway/envelope/types.d.ts +32 -0
  74. package/dist/core/gateway/envelope/types.d.ts.map +1 -0
  75. package/dist/core/gateway/envelope/types.js +1 -0
  76. package/dist/core/gateway/index.d.ts +11 -0
  77. package/dist/core/gateway/index.d.ts.map +1 -0
  78. package/dist/core/gateway/index.js +10 -0
  79. package/dist/core/gateway/jobs.d.ts +44 -0
  80. package/dist/core/gateway/jobs.d.ts.map +1 -0
  81. package/dist/core/gateway/jobs.js +104 -0
  82. package/dist/core/gateway/portal/config-patch.d.ts +42 -0
  83. package/dist/core/gateway/portal/config-patch.d.ts.map +1 -0
  84. package/dist/core/gateway/portal/config-patch.js +99 -0
  85. package/dist/core/gateway/portal/index.d.ts +2 -0
  86. package/dist/core/gateway/portal/index.d.ts.map +1 -0
  87. package/dist/core/gateway/portal/index.js +1 -0
  88. package/dist/core/gateway/providers/factory.d.ts +18 -0
  89. package/dist/core/gateway/providers/factory.d.ts.map +1 -0
  90. package/dist/core/gateway/providers/factory.js +40 -0
  91. package/dist/core/gateway/providers/index.d.ts +5 -0
  92. package/dist/core/gateway/providers/index.d.ts.map +1 -0
  93. package/dist/core/gateway/providers/index.js +4 -0
  94. package/dist/core/gateway/providers/normalize.d.ts +2 -0
  95. package/dist/core/gateway/providers/normalize.d.ts.map +1 -0
  96. package/dist/core/gateway/providers/normalize.js +6 -0
  97. package/dist/core/gateway/providers/registry.d.ts +5 -0
  98. package/dist/core/gateway/providers/registry.d.ts.map +1 -0
  99. package/dist/core/gateway/providers/registry.js +76 -0
  100. package/dist/core/gateway/providers/types.d.ts +42 -0
  101. package/dist/core/gateway/providers/types.d.ts.map +1 -0
  102. package/dist/core/gateway/providers/types.js +4 -0
  103. package/dist/core/gateway/resources/index.d.ts +3 -0
  104. package/dist/core/gateway/resources/index.d.ts.map +1 -0
  105. package/dist/core/gateway/resources/index.js +2 -0
  106. package/dist/core/gateway/resources/media.d.ts +165 -0
  107. package/dist/core/gateway/resources/media.d.ts.map +1 -0
  108. package/dist/core/gateway/resources/media.js +170 -0
  109. package/dist/core/gateway/resources/wiki.d.ts +136 -0
  110. package/dist/core/gateway/resources/wiki.d.ts.map +1 -0
  111. package/dist/core/gateway/resources/wiki.js +72 -0
  112. package/dist/core/gateway/rpc/client.d.ts +150 -0
  113. package/dist/core/gateway/rpc/client.d.ts.map +1 -0
  114. package/dist/core/gateway/rpc/client.js +675 -0
  115. package/dist/core/gateway/rpc/device-crypto.d.ts +19 -0
  116. package/dist/core/gateway/rpc/device-crypto.d.ts.map +1 -0
  117. package/dist/core/gateway/rpc/device-crypto.js +75 -0
  118. package/dist/core/gateway/rpc/device-store.d.ts +8 -0
  119. package/dist/core/gateway/rpc/device-store.d.ts.map +1 -0
  120. package/dist/core/gateway/rpc/device-store.js +113 -0
  121. package/dist/core/gateway/rpc/error.d.ts +5 -0
  122. package/dist/core/gateway/rpc/error.d.ts.map +1 -0
  123. package/dist/core/gateway/rpc/error.js +9 -0
  124. package/dist/core/gateway/rpc/index.d.ts +6 -0
  125. package/dist/core/gateway/rpc/index.d.ts.map +1 -0
  126. package/dist/core/gateway/rpc/index.js +5 -0
  127. package/dist/core/gateway/rpc/preauth-handshake.d.ts +39 -0
  128. package/dist/core/gateway/rpc/preauth-handshake.d.ts.map +1 -0
  129. package/dist/core/gateway/rpc/preauth-handshake.js +58 -0
  130. package/dist/core/gateway/run/contracts.d.ts +126 -0
  131. package/dist/core/gateway/run/contracts.d.ts.map +1 -0
  132. package/dist/core/gateway/run/contracts.js +23 -0
  133. package/dist/core/gateway/run/event-stream.d.ts +106 -0
  134. package/dist/core/gateway/run/event-stream.d.ts.map +1 -0
  135. package/dist/core/gateway/run/event-stream.js +264 -0
  136. package/dist/core/gateway/run/index.d.ts +5 -0
  137. package/dist/core/gateway/run/index.d.ts.map +1 -0
  138. package/dist/core/gateway/run/index.js +4 -0
  139. package/dist/core/gateway/run/sse-run-event-provider.d.ts +55 -0
  140. package/dist/core/gateway/run/sse-run-event-provider.d.ts.map +1 -0
  141. package/dist/core/gateway/run/sse-run-event-provider.js +394 -0
  142. package/dist/core/gateway/run/stream-failure.d.ts +11 -0
  143. package/dist/core/gateway/run/stream-failure.d.ts.map +1 -0
  144. package/dist/core/gateway/run/stream-failure.js +101 -0
  145. package/dist/core/gateway/snapshots/cache.d.ts +7 -0
  146. package/dist/core/gateway/snapshots/cache.d.ts.map +1 -0
  147. package/dist/core/gateway/snapshots/cache.js +13 -0
  148. package/dist/core/gateway/snapshots/contracts.d.ts +279 -0
  149. package/dist/core/gateway/snapshots/contracts.d.ts.map +1 -0
  150. package/dist/core/gateway/snapshots/contracts.js +1 -0
  151. package/dist/core/gateway/snapshots/index.d.ts +7 -0
  152. package/dist/core/gateway/snapshots/index.d.ts.map +1 -0
  153. package/dist/core/gateway/snapshots/index.js +6 -0
  154. package/dist/core/gateway/snapshots/loaders.d.ts +76 -0
  155. package/dist/core/gateway/snapshots/loaders.d.ts.map +1 -0
  156. package/dist/core/gateway/snapshots/loaders.js +515 -0
  157. package/dist/core/gateway/snapshots/session-loaders.d.ts +116 -0
  158. package/dist/core/gateway/snapshots/session-loaders.d.ts.map +1 -0
  159. package/dist/core/gateway/snapshots/session-loaders.js +310 -0
  160. package/dist/core/gateway/snapshots/system-loaders.d.ts +16 -0
  161. package/dist/core/gateway/snapshots/system-loaders.d.ts.map +1 -0
  162. package/dist/core/gateway/snapshots/system-loaders.js +61 -0
  163. package/dist/core/gateway/snapshots/transforms.d.ts +38 -0
  164. package/dist/core/gateway/snapshots/transforms.d.ts.map +1 -0
  165. package/dist/core/gateway/snapshots/transforms.js +328 -0
  166. package/dist/core/http/client-id.d.ts +6 -0
  167. package/dist/core/http/client-id.d.ts.map +1 -0
  168. package/dist/core/http/client-id.js +29 -0
  169. package/dist/core/http/client.d.ts +25 -0
  170. package/dist/core/http/client.d.ts.map +1 -0
  171. package/dist/core/http/client.js +234 -0
  172. package/dist/core/http/contracts.d.ts +3 -0
  173. package/dist/core/http/contracts.d.ts.map +1 -0
  174. package/dist/core/http/contracts.js +5 -0
  175. package/dist/core/http/errors.d.ts +17 -0
  176. package/dist/core/http/errors.d.ts.map +1 -0
  177. package/dist/core/http/errors.js +16 -0
  178. package/dist/core/http/gateway-error.d.ts +15 -0
  179. package/dist/core/http/gateway-error.d.ts.map +1 -0
  180. package/dist/core/http/gateway-error.js +15 -0
  181. package/dist/core/http/index.d.ts +10 -0
  182. package/dist/core/http/index.d.ts.map +1 -0
  183. package/dist/core/http/index.js +9 -0
  184. package/dist/core/http/json-client.d.ts +17 -0
  185. package/dist/core/http/json-client.d.ts.map +1 -0
  186. package/dist/core/http/json-client.js +62 -0
  187. package/dist/core/http/raw-client.d.ts +16 -0
  188. package/dist/core/http/raw-client.d.ts.map +1 -0
  189. package/dist/core/http/raw-client.js +36 -0
  190. package/dist/core/http/redaction.d.ts +20 -0
  191. package/dist/core/http/redaction.d.ts.map +1 -0
  192. package/dist/core/http/redaction.js +58 -0
  193. package/dist/core/http/types.d.ts +44 -0
  194. package/dist/core/http/types.d.ts.map +1 -0
  195. package/dist/core/http/types.js +3 -0
  196. package/dist/core/runtime/index.d.ts +2 -0
  197. package/dist/core/runtime/index.d.ts.map +1 -0
  198. package/dist/core/runtime/index.js +1 -0
  199. package/dist/core/runtime/paths.d.ts +5 -0
  200. package/dist/core/runtime/paths.d.ts.map +1 -0
  201. package/dist/core/runtime/paths.js +29 -0
  202. package/dist/core/sse/index.d.ts +2 -0
  203. package/dist/core/sse/index.d.ts.map +1 -0
  204. package/dist/core/sse/index.js +1 -0
  205. package/dist/core/sse/stream.d.ts +17 -0
  206. package/dist/core/sse/stream.d.ts.map +1 -0
  207. package/dist/core/sse/stream.js +106 -0
  208. package/dist/core/ws/close.d.ts +11 -0
  209. package/dist/core/ws/close.d.ts.map +1 -0
  210. package/dist/core/ws/close.js +34 -0
  211. package/dist/core/ws/gateway-websocket.d.ts +2 -0
  212. package/dist/core/ws/gateway-websocket.d.ts.map +1 -0
  213. package/dist/core/ws/gateway-websocket.js +1 -0
  214. package/dist/core/ws/index.d.ts +4 -0
  215. package/dist/core/ws/index.d.ts.map +1 -0
  216. package/dist/core/ws/index.js +3 -0
  217. package/dist/core/ws/targets.d.ts +21 -0
  218. package/dist/core/ws/targets.d.ts.map +1 -0
  219. package/dist/core/ws/targets.js +61 -0
  220. package/dist/extensions/cavi/adapters/cavi-control-adapters/gateway-ws-loaders.d.ts +21 -0
  221. package/dist/extensions/cavi/adapters/cavi-control-adapters/gateway-ws-loaders.d.ts.map +1 -0
  222. package/dist/extensions/cavi/adapters/cavi-control-adapters/gateway-ws-loaders.js +22 -0
  223. package/dist/extensions/cavi/adapters/cavi-control-adapters/gateway-ws-snapshot-loaders.d.ts +30 -0
  224. package/dist/extensions/cavi/adapters/cavi-control-adapters/gateway-ws-snapshot-loaders.d.ts.map +1 -0
  225. package/dist/extensions/cavi/adapters/cavi-control-adapters/gateway-ws-snapshot-loaders.js +72 -0
  226. package/dist/extensions/cavi/adapters/cavi-control-adapters/library-live.d.ts +4 -0
  227. package/dist/extensions/cavi/adapters/cavi-control-adapters/library-live.d.ts.map +1 -0
  228. package/dist/extensions/cavi/adapters/cavi-control-adapters/library-live.js +66 -0
  229. package/dist/extensions/cavi/adapters/cavi-control-adapters/operator-control-live.d.ts +7 -0
  230. package/dist/extensions/cavi/adapters/cavi-control-adapters/operator-control-live.d.ts.map +1 -0
  231. package/dist/extensions/cavi/adapters/cavi-control-adapters/operator-control-live.js +318 -0
  232. package/dist/extensions/cavi/adapters/create-cavi-control-adapters.d.ts +88 -0
  233. package/dist/extensions/cavi/adapters/create-cavi-control-adapters.d.ts.map +1 -0
  234. package/dist/extensions/cavi/adapters/create-cavi-control-adapters.js +172 -0
  235. package/dist/extensions/cavi/client.d.ts +72 -0
  236. package/dist/extensions/cavi/client.d.ts.map +1 -0
  237. package/dist/extensions/cavi/client.js +19 -0
  238. package/dist/extensions/cavi/contracts/index.d.ts +6 -0
  239. package/dist/extensions/cavi/contracts/index.d.ts.map +1 -0
  240. package/dist/extensions/cavi/contracts/index.js +5 -0
  241. package/dist/extensions/cavi/contracts/mobile.d.ts +441 -0
  242. package/dist/extensions/cavi/contracts/mobile.d.ts.map +1 -0
  243. package/dist/extensions/cavi/contracts/mobile.js +467 -0
  244. package/dist/extensions/cavi/contracts/paths.d.ts +121 -0
  245. package/dist/extensions/cavi/contracts/paths.d.ts.map +1 -0
  246. package/dist/extensions/cavi/contracts/paths.js +197 -0
  247. package/dist/extensions/cavi/contracts/portals.d.ts +78 -0
  248. package/dist/extensions/cavi/contracts/portals.d.ts.map +1 -0
  249. package/dist/extensions/cavi/contracts/portals.js +70 -0
  250. package/dist/extensions/cavi/contracts/resolve.d.ts +3 -0
  251. package/dist/extensions/cavi/contracts/resolve.d.ts.map +1 -0
  252. package/dist/extensions/cavi/contracts/resolve.js +4 -0
  253. package/dist/extensions/cavi/contracts/surfaces.d.ts +5 -0
  254. package/dist/extensions/cavi/contracts/surfaces.d.ts.map +1 -0
  255. package/dist/extensions/cavi/contracts/surfaces.js +551 -0
  256. package/dist/extensions/cavi/discourse/contracts.d.ts +5 -0
  257. package/dist/extensions/cavi/discourse/contracts.d.ts.map +1 -0
  258. package/dist/extensions/cavi/discourse/contracts.js +7 -0
  259. package/dist/extensions/cavi/discourse/fallback.d.ts +3 -0
  260. package/dist/extensions/cavi/discourse/fallback.d.ts.map +1 -0
  261. package/dist/extensions/cavi/discourse/fallback.js +364 -0
  262. package/dist/extensions/cavi/discourse/live.d.ts +5 -0
  263. package/dist/extensions/cavi/discourse/live.d.ts.map +1 -0
  264. package/dist/extensions/cavi/discourse/live.js +22 -0
  265. package/dist/extensions/cavi/discourse/normalize-helpers.d.ts +11 -0
  266. package/dist/extensions/cavi/discourse/normalize-helpers.d.ts.map +1 -0
  267. package/dist/extensions/cavi/discourse/normalize-helpers.js +155 -0
  268. package/dist/extensions/cavi/discourse/normalize.d.ts +4 -0
  269. package/dist/extensions/cavi/discourse/normalize.d.ts.map +1 -0
  270. package/dist/extensions/cavi/discourse/normalize.js +287 -0
  271. package/dist/extensions/cavi/domain/discourse.d.ts +161 -0
  272. package/dist/extensions/cavi/domain/discourse.d.ts.map +1 -0
  273. package/dist/extensions/cavi/domain/discourse.js +1 -0
  274. package/dist/extensions/cavi/domain/index.d.ts +6 -0
  275. package/dist/extensions/cavi/domain/index.d.ts.map +1 -0
  276. package/dist/extensions/cavi/domain/index.js +5 -0
  277. package/dist/extensions/cavi/domain/library.d.ts +80 -0
  278. package/dist/extensions/cavi/domain/library.d.ts.map +1 -0
  279. package/dist/extensions/cavi/domain/library.js +2 -0
  280. package/dist/extensions/cavi/domain/observability.d.ts +34 -0
  281. package/dist/extensions/cavi/domain/observability.d.ts.map +1 -0
  282. package/dist/extensions/cavi/domain/observability.js +1 -0
  283. package/dist/extensions/cavi/domain/operator.d.ts +420 -0
  284. package/dist/extensions/cavi/domain/operator.d.ts.map +1 -0
  285. package/dist/extensions/cavi/domain/operator.js +1 -0
  286. package/dist/extensions/cavi/domain/project-board.d.ts +96 -0
  287. package/dist/extensions/cavi/domain/project-board.d.ts.map +1 -0
  288. package/dist/extensions/cavi/domain/project-board.js +1 -0
  289. package/dist/extensions/cavi/fallbacks/provider.d.ts +13 -0
  290. package/dist/extensions/cavi/fallbacks/provider.d.ts.map +1 -0
  291. package/dist/extensions/cavi/fallbacks/provider.js +23 -0
  292. package/dist/extensions/cavi/fallbacks/snapshots/agent-memory.d.ts +3 -0
  293. package/dist/extensions/cavi/fallbacks/snapshots/agent-memory.d.ts.map +1 -0
  294. package/dist/extensions/cavi/fallbacks/snapshots/agent-memory.js +6 -0
  295. package/dist/extensions/cavi/fallbacks/snapshots/cost-history.d.ts +3 -0
  296. package/dist/extensions/cavi/fallbacks/snapshots/cost-history.d.ts.map +1 -0
  297. package/dist/extensions/cavi/fallbacks/snapshots/cost-history.js +73 -0
  298. package/dist/extensions/cavi/fallbacks/snapshots/incidents.d.ts +3 -0
  299. package/dist/extensions/cavi/fallbacks/snapshots/incidents.d.ts.map +1 -0
  300. package/dist/extensions/cavi/fallbacks/snapshots/incidents.js +50 -0
  301. package/dist/extensions/cavi/fallbacks/snapshots/index.d.ts +10 -0
  302. package/dist/extensions/cavi/fallbacks/snapshots/index.d.ts.map +1 -0
  303. package/dist/extensions/cavi/fallbacks/snapshots/index.js +9 -0
  304. package/dist/extensions/cavi/fallbacks/snapshots/library.d.ts +3 -0
  305. package/dist/extensions/cavi/fallbacks/snapshots/library.d.ts.map +1 -0
  306. package/dist/extensions/cavi/fallbacks/snapshots/library.js +110 -0
  307. package/dist/extensions/cavi/fallbacks/snapshots/operator-control/defaults.d.ts +8 -0
  308. package/dist/extensions/cavi/fallbacks/snapshots/operator-control/defaults.d.ts.map +1 -0
  309. package/dist/extensions/cavi/fallbacks/snapshots/operator-control/defaults.js +29 -0
  310. package/dist/extensions/cavi/fallbacks/snapshots/operator-control/index.d.ts +4 -0
  311. package/dist/extensions/cavi/fallbacks/snapshots/operator-control/index.d.ts.map +1 -0
  312. package/dist/extensions/cavi/fallbacks/snapshots/operator-control/index.js +3 -0
  313. package/dist/extensions/cavi/fallbacks/snapshots/operator-control/snapshot-memory.d.ts +3 -0
  314. package/dist/extensions/cavi/fallbacks/snapshots/operator-control/snapshot-memory.d.ts.map +1 -0
  315. package/dist/extensions/cavi/fallbacks/snapshots/operator-control/snapshot-memory.js +63 -0
  316. package/dist/extensions/cavi/fallbacks/snapshots/operator-control/snapshot-registry-detail.d.ts +3 -0
  317. package/dist/extensions/cavi/fallbacks/snapshots/operator-control/snapshot-registry-detail.d.ts.map +1 -0
  318. package/dist/extensions/cavi/fallbacks/snapshots/operator-control/snapshot-registry-detail.js +716 -0
  319. package/dist/extensions/cavi/fallbacks/snapshots/operator-control/snapshot-section-status.d.ts +3 -0
  320. package/dist/extensions/cavi/fallbacks/snapshots/operator-control/snapshot-section-status.d.ts.map +1 -0
  321. package/dist/extensions/cavi/fallbacks/snapshots/operator-control/snapshot-section-status.js +38 -0
  322. package/dist/extensions/cavi/fallbacks/snapshots/operator-control/snapshot-status.d.ts +3 -0
  323. package/dist/extensions/cavi/fallbacks/snapshots/operator-control/snapshot-status.d.ts.map +1 -0
  324. package/dist/extensions/cavi/fallbacks/snapshots/operator-control/snapshot-status.js +84 -0
  325. package/dist/extensions/cavi/fallbacks/snapshots/operator-control/snapshot-tasks.d.ts +3 -0
  326. package/dist/extensions/cavi/fallbacks/snapshots/operator-control/snapshot-tasks.d.ts.map +1 -0
  327. package/dist/extensions/cavi/fallbacks/snapshots/operator-control/snapshot-tasks.js +111 -0
  328. package/dist/extensions/cavi/fallbacks/snapshots/operator-control/snapshot-worker-ready.d.ts +3 -0
  329. package/dist/extensions/cavi/fallbacks/snapshots/operator-control/snapshot-worker-ready.d.ts.map +1 -0
  330. package/dist/extensions/cavi/fallbacks/snapshots/operator-control/snapshot-worker-ready.js +16 -0
  331. package/dist/extensions/cavi/fallbacks/snapshots/operator-control/snapshot-worker-tasks.d.ts +3 -0
  332. package/dist/extensions/cavi/fallbacks/snapshots/operator-control/snapshot-worker-tasks.d.ts.map +1 -0
  333. package/dist/extensions/cavi/fallbacks/snapshots/operator-control/snapshot-worker-tasks.js +43 -0
  334. package/dist/extensions/cavi/fallbacks/snapshots/operator-control/snapshot.d.ts +3 -0
  335. package/dist/extensions/cavi/fallbacks/snapshots/operator-control/snapshot.d.ts.map +1 -0
  336. package/dist/extensions/cavi/fallbacks/snapshots/operator-control/snapshot.js +16 -0
  337. package/dist/extensions/cavi/fallbacks/snapshots/operator-control/transports.d.ts +4 -0
  338. package/dist/extensions/cavi/fallbacks/snapshots/operator-control/transports.d.ts.map +1 -0
  339. package/dist/extensions/cavi/fallbacks/snapshots/operator-control/transports.js +65 -0
  340. package/dist/extensions/cavi/fallbacks/snapshots/overview.d.ts +3 -0
  341. package/dist/extensions/cavi/fallbacks/snapshots/overview.d.ts.map +1 -0
  342. package/dist/extensions/cavi/fallbacks/snapshots/overview.js +40 -0
  343. package/dist/extensions/cavi/fallbacks/snapshots/routing.d.ts +3 -0
  344. package/dist/extensions/cavi/fallbacks/snapshots/routing.d.ts.map +1 -0
  345. package/dist/extensions/cavi/fallbacks/snapshots/routing.js +36 -0
  346. package/dist/extensions/cavi/fallbacks/snapshots/runs.d.ts +4 -0
  347. package/dist/extensions/cavi/fallbacks/snapshots/runs.d.ts.map +1 -0
  348. package/dist/extensions/cavi/fallbacks/snapshots/runs.js +133 -0
  349. package/dist/extensions/cavi/fallbacks/snapshots/shared.d.ts +2 -0
  350. package/dist/extensions/cavi/fallbacks/snapshots/shared.d.ts.map +1 -0
  351. package/dist/extensions/cavi/fallbacks/snapshots/shared.js +1 -0
  352. package/dist/extensions/cavi/index.d.ts +27 -0
  353. package/dist/extensions/cavi/index.d.ts.map +1 -0
  354. package/dist/extensions/cavi/index.js +26 -0
  355. package/dist/extensions/cavi/library/api.d.ts +18 -0
  356. package/dist/extensions/cavi/library/api.d.ts.map +1 -0
  357. package/dist/extensions/cavi/library/api.js +67 -0
  358. package/dist/extensions/cavi/library/client.d.ts +51 -0
  359. package/dist/extensions/cavi/library/client.d.ts.map +1 -0
  360. package/dist/extensions/cavi/library/client.js +23 -0
  361. package/dist/extensions/cavi/library/clip.d.ts +93 -0
  362. package/dist/extensions/cavi/library/clip.d.ts.map +1 -0
  363. package/dist/extensions/cavi/library/clip.js +272 -0
  364. package/dist/extensions/cavi/operator-control/constants.d.ts +4 -0
  365. package/dist/extensions/cavi/operator-control/constants.d.ts.map +1 -0
  366. package/dist/extensions/cavi/operator-control/constants.js +3 -0
  367. package/dist/extensions/cavi/operator-control/defaults.d.ts +11 -0
  368. package/dist/extensions/cavi/operator-control/defaults.d.ts.map +1 -0
  369. package/dist/extensions/cavi/operator-control/defaults.js +243 -0
  370. package/dist/extensions/cavi/operator-control/load-section.d.ts +24 -0
  371. package/dist/extensions/cavi/operator-control/load-section.d.ts.map +1 -0
  372. package/dist/extensions/cavi/operator-control/load-section.js +46 -0
  373. package/dist/extensions/cavi/portal/client.d.ts +16 -0
  374. package/dist/extensions/cavi/portal/client.d.ts.map +1 -0
  375. package/dist/extensions/cavi/portal/client.js +38 -0
  376. package/dist/extensions/cavi/portal/tts.d.ts +69 -0
  377. package/dist/extensions/cavi/portal/tts.d.ts.map +1 -0
  378. package/dist/extensions/cavi/portal/tts.js +116 -0
  379. package/dist/extensions/cavi/project-board/constants.d.ts +68 -0
  380. package/dist/extensions/cavi/project-board/constants.d.ts.map +1 -0
  381. package/dist/extensions/cavi/project-board/constants.js +9 -0
  382. package/dist/extensions/cavi/project-board/fallback.d.ts +3 -0
  383. package/dist/extensions/cavi/project-board/fallback.d.ts.map +1 -0
  384. package/dist/extensions/cavi/project-board/fallback.js +127 -0
  385. package/dist/extensions/cavi/project-board/live.d.ts +16 -0
  386. package/dist/extensions/cavi/project-board/live.d.ts.map +1 -0
  387. package/dist/extensions/cavi/project-board/live.js +86 -0
  388. package/dist/extensions/cavi/project-board/mutations.d.ts +43 -0
  389. package/dist/extensions/cavi/project-board/mutations.d.ts.map +1 -0
  390. package/dist/extensions/cavi/project-board/mutations.js +210 -0
  391. package/dist/extensions/cavi/project-board/normalize.d.ts +23 -0
  392. package/dist/extensions/cavi/project-board/normalize.d.ts.map +1 -0
  393. package/dist/extensions/cavi/project-board/normalize.js +410 -0
  394. package/dist/extensions/cavi/project-board/trace-id.d.ts +2 -0
  395. package/dist/extensions/cavi/project-board/trace-id.d.ts.map +1 -0
  396. package/dist/extensions/cavi/project-board/trace-id.js +7 -0
  397. package/dist/extensions/cavi/registry/canonical-team-registry.d.ts +41 -0
  398. package/dist/extensions/cavi/registry/canonical-team-registry.d.ts.map +1 -0
  399. package/dist/extensions/cavi/registry/canonical-team-registry.js +102 -0
  400. package/dist/extensions/cavi/registry/portal-library-registry.d.ts +6 -0
  401. package/dist/extensions/cavi/registry/portal-library-registry.d.ts.map +1 -0
  402. package/dist/extensions/cavi/registry/portal-library-registry.js +17 -0
  403. package/dist/extensions/cavi/registry/session-keys.d.ts +16 -0
  404. package/dist/extensions/cavi/registry/session-keys.d.ts.map +1 -0
  405. package/dist/extensions/cavi/registry/session-keys.js +68 -0
  406. package/dist/extensions/cavi/registry/team-registry-config.d.ts +6 -0
  407. package/dist/extensions/cavi/registry/team-registry-config.d.ts.map +1 -0
  408. package/dist/extensions/cavi/registry/team-registry-config.js +23 -0
  409. package/dist/extensions/cavi/registry/team-registry.d.ts +49 -0
  410. package/dist/extensions/cavi/registry/team-registry.d.ts.map +1 -0
  411. package/dist/extensions/cavi/registry/team-registry.js +290 -0
  412. package/dist/extensions/cavi/runtime/env-config.d.ts +35 -0
  413. package/dist/extensions/cavi/runtime/env-config.d.ts.map +1 -0
  414. package/dist/extensions/cavi/runtime/env-config.js +74 -0
  415. package/dist/extensions/cavi/runtime/paths.d.ts +11 -0
  416. package/dist/extensions/cavi/runtime/paths.d.ts.map +1 -0
  417. package/dist/extensions/cavi/runtime/paths.js +43 -0
  418. package/dist/extensions/cavi/runtime/standalone-mode.d.ts +3 -0
  419. package/dist/extensions/cavi/runtime/standalone-mode.d.ts.map +1 -0
  420. package/dist/extensions/cavi/runtime/standalone-mode.js +15 -0
  421. package/dist/index.d.ts +70 -0
  422. package/dist/index.d.ts.map +1 -0
  423. package/dist/index.js +75 -0
  424. package/dist/providers/hermes/agent-config.d.ts +36 -0
  425. package/dist/providers/hermes/agent-config.d.ts.map +1 -0
  426. package/dist/providers/hermes/agent-config.js +242 -0
  427. package/dist/providers/hermes/chat-run.d.ts +106 -0
  428. package/dist/providers/hermes/chat-run.d.ts.map +1 -0
  429. package/dist/providers/hermes/chat-run.js +221 -0
  430. package/dist/providers/hermes/client.d.ts +13 -0
  431. package/dist/providers/hermes/client.d.ts.map +1 -0
  432. package/dist/providers/hermes/client.js +6 -0
  433. package/dist/providers/hermes/env-config.d.ts +18 -0
  434. package/dist/providers/hermes/env-config.d.ts.map +1 -0
  435. package/dist/providers/hermes/env-config.js +38 -0
  436. package/dist/providers/hermes/index.d.ts +12 -0
  437. package/dist/providers/hermes/index.d.ts.map +1 -0
  438. package/dist/providers/hermes/index.js +11 -0
  439. package/dist/providers/hermes/media.d.ts +6 -0
  440. package/dist/providers/hermes/media.d.ts.map +1 -0
  441. package/dist/providers/hermes/media.js +10 -0
  442. package/dist/providers/hermes/provider-module.d.ts +3 -0
  443. package/dist/providers/hermes/provider-module.d.ts.map +1 -0
  444. package/dist/providers/hermes/provider-module.js +22 -0
  445. package/dist/providers/hermes/sse-run-event-provider.d.ts +24 -0
  446. package/dist/providers/hermes/sse-run-event-provider.d.ts.map +1 -0
  447. package/dist/providers/hermes/sse-run-event-provider.js +32 -0
  448. package/dist/providers/hermes/team-registry-config.d.ts +3 -0
  449. package/dist/providers/hermes/team-registry-config.d.ts.map +1 -0
  450. package/dist/providers/hermes/team-registry-config.js +1 -0
  451. package/dist/providers/hermes/team-registry.d.ts +3 -0
  452. package/dist/providers/hermes/team-registry.d.ts.map +1 -0
  453. package/dist/providers/hermes/team-registry.js +5 -0
  454. package/dist/providers/hermes/websocket.d.ts +6 -0
  455. package/dist/providers/hermes/websocket.d.ts.map +1 -0
  456. package/dist/providers/hermes/websocket.js +6 -0
  457. package/dist/providers/hermes/wiki.d.ts +6 -0
  458. package/dist/providers/hermes/wiki.d.ts.map +1 -0
  459. package/dist/providers/hermes/wiki.js +10 -0
  460. package/dist/providers/openclaw/agent-config.d.ts +6 -0
  461. package/dist/providers/openclaw/agent-config.d.ts.map +1 -0
  462. package/dist/providers/openclaw/agent-config.js +10 -0
  463. package/dist/providers/openclaw/client.d.ts +13 -0
  464. package/dist/providers/openclaw/client.d.ts.map +1 -0
  465. package/dist/providers/openclaw/client.js +6 -0
  466. package/dist/providers/openclaw/index.d.ts +10 -0
  467. package/dist/providers/openclaw/index.d.ts.map +1 -0
  468. package/dist/providers/openclaw/index.js +9 -0
  469. package/dist/providers/openclaw/media.d.ts +6 -0
  470. package/dist/providers/openclaw/media.d.ts.map +1 -0
  471. package/dist/providers/openclaw/media.js +10 -0
  472. package/dist/providers/openclaw/provider-module.d.ts +3 -0
  473. package/dist/providers/openclaw/provider-module.d.ts.map +1 -0
  474. package/dist/providers/openclaw/provider-module.js +16 -0
  475. package/dist/providers/openclaw/sse-run-event-provider.d.ts +6 -0
  476. package/dist/providers/openclaw/sse-run-event-provider.d.ts.map +1 -0
  477. package/dist/providers/openclaw/sse-run-event-provider.js +10 -0
  478. package/dist/providers/openclaw/team-registry-config.d.ts +3 -0
  479. package/dist/providers/openclaw/team-registry-config.d.ts.map +1 -0
  480. package/dist/providers/openclaw/team-registry-config.js +1 -0
  481. package/dist/providers/openclaw/team-registry.d.ts +3 -0
  482. package/dist/providers/openclaw/team-registry.d.ts.map +1 -0
  483. package/dist/providers/openclaw/team-registry.js +5 -0
  484. package/dist/providers/openclaw/websocket.d.ts +6 -0
  485. package/dist/providers/openclaw/websocket.d.ts.map +1 -0
  486. package/dist/providers/openclaw/websocket.js +28 -0
  487. package/dist/providers/openclaw/wiki.d.ts +6 -0
  488. package/dist/providers/openclaw/wiki.d.ts.map +1 -0
  489. package/dist/providers/openclaw/wiki.js +10 -0
  490. package/dist/react/gateway-provider.d.ts +142 -0
  491. package/dist/react/gateway-provider.d.ts.map +1 -0
  492. package/dist/react/gateway-provider.js +569 -0
  493. package/dist/react/index.d.ts +2 -0
  494. package/dist/react/index.d.ts.map +1 -0
  495. package/dist/react/index.js +1 -0
  496. package/docs/assets/api-client-hero.svg +73 -0
  497. package/docs/cavi-team-manifest.example.ts +219 -0
  498. package/docs/team-manifest.consumer.template.ts +248 -0
  499. package/docs/team-manifest.md +252 -0
  500. package/package.json +152 -0
  501. package/src/contracts/index.ts +4 -0
  502. package/src/contracts/paths.ts +126 -0
  503. package/src/contracts/resolve.ts +42 -0
  504. package/src/contracts/surfaces.ts +366 -0
  505. package/src/contracts/team-manifest.ts +1402 -0
  506. package/src/core/data/guards.ts +26 -0
  507. package/src/core/data/index.ts +1 -0
  508. package/src/core/env/config.ts +97 -0
  509. package/src/core/env/index.ts +2 -0
  510. package/src/core/env/repo-root.ts +59 -0
  511. package/src/core/gateway/README.md +35 -0
  512. package/src/core/gateway/agent/commands.ts +482 -0
  513. package/src/core/gateway/agent/config.ts +786 -0
  514. package/src/core/gateway/agent/index.ts +3 -0
  515. package/src/core/gateway/agent/voice-config.ts +91 -0
  516. package/src/core/gateway/client/capabilities.ts +385 -0
  517. package/src/core/gateway/client/client.ts +137 -0
  518. package/src/core/gateway/client/error-details.ts +74 -0
  519. package/src/core/gateway/client/fetch.ts +180 -0
  520. package/src/core/gateway/client/index.ts +5 -0
  521. package/src/core/gateway/client/runtime-targets.ts +132 -0
  522. package/src/core/gateway/envelope/envelope.ts +204 -0
  523. package/src/core/gateway/envelope/index.ts +2 -0
  524. package/src/core/gateway/envelope/types.ts +48 -0
  525. package/src/core/gateway/index.ts +10 -0
  526. package/src/core/gateway/jobs.ts +178 -0
  527. package/src/core/gateway/portal/config-patch.ts +136 -0
  528. package/src/core/gateway/portal/index.ts +1 -0
  529. package/src/core/gateway/providers/factory.ts +77 -0
  530. package/src/core/gateway/providers/index.ts +4 -0
  531. package/src/core/gateway/providers/normalize.ts +7 -0
  532. package/src/core/gateway/providers/registry.ts +96 -0
  533. package/src/core/gateway/providers/types.ts +73 -0
  534. package/src/core/gateway/resources/index.ts +2 -0
  535. package/src/core/gateway/resources/media.ts +474 -0
  536. package/src/core/gateway/resources/wiki.ts +301 -0
  537. package/src/core/gateway/rpc/client.ts +1067 -0
  538. package/src/core/gateway/rpc/device-crypto.ts +101 -0
  539. package/src/core/gateway/rpc/device-store.ts +147 -0
  540. package/src/core/gateway/rpc/error.ts +11 -0
  541. package/src/core/gateway/rpc/index.ts +5 -0
  542. package/src/core/gateway/rpc/preauth-handshake.ts +99 -0
  543. package/src/core/gateway/run/contracts.ts +155 -0
  544. package/src/core/gateway/run/event-stream.ts +373 -0
  545. package/src/core/gateway/run/index.ts +4 -0
  546. package/src/core/gateway/run/sse-run-event-provider.ts +513 -0
  547. package/src/core/gateway/run/stream-failure.ts +135 -0
  548. package/src/core/gateway/snapshots/cache.ts +22 -0
  549. package/src/core/gateway/snapshots/contracts.ts +293 -0
  550. package/src/core/gateway/snapshots/index.ts +6 -0
  551. package/src/core/gateway/snapshots/loaders.ts +738 -0
  552. package/src/core/gateway/snapshots/session-loaders.ts +534 -0
  553. package/src/core/gateway/snapshots/system-loaders.ts +93 -0
  554. package/src/core/gateway/snapshots/transforms.ts +508 -0
  555. package/src/core/http/client-id.ts +40 -0
  556. package/src/core/http/client.ts +271 -0
  557. package/src/core/http/contracts.ts +9 -0
  558. package/src/core/http/errors.ts +26 -0
  559. package/src/core/http/gateway-error.ts +38 -0
  560. package/src/core/http/index.ts +9 -0
  561. package/src/core/http/json-client.ts +90 -0
  562. package/src/core/http/raw-client.ts +57 -0
  563. package/src/core/http/redaction.ts +78 -0
  564. package/src/core/http/types.ts +59 -0
  565. package/src/core/runtime/index.ts +1 -0
  566. package/src/core/runtime/paths.ts +44 -0
  567. package/src/core/sse/index.ts +1 -0
  568. package/src/core/sse/stream.ts +118 -0
  569. package/src/core/ws/close.ts +51 -0
  570. package/src/core/ws/gateway-websocket.ts +8 -0
  571. package/src/core/ws/index.ts +3 -0
  572. package/src/core/ws/targets.ts +74 -0
  573. package/src/extensions/README.md +16 -0
  574. package/src/extensions/cavi/adapters/cavi-control-adapters/gateway-ws-loaders.ts +33 -0
  575. package/src/extensions/cavi/adapters/cavi-control-adapters/gateway-ws-snapshot-loaders.ts +152 -0
  576. package/src/extensions/cavi/adapters/cavi-control-adapters/library-live.ts +120 -0
  577. package/src/extensions/cavi/adapters/cavi-control-adapters/operator-control-live.ts +422 -0
  578. package/src/extensions/cavi/adapters/create-cavi-control-adapters.ts +350 -0
  579. package/src/extensions/cavi/client.ts +25 -0
  580. package/src/extensions/cavi/contracts/index.ts +5 -0
  581. package/src/extensions/cavi/contracts/mobile.ts +528 -0
  582. package/src/extensions/cavi/contracts/paths.ts +242 -0
  583. package/src/extensions/cavi/contracts/portals.ts +165 -0
  584. package/src/extensions/cavi/contracts/resolve.ts +6 -0
  585. package/src/extensions/cavi/contracts/surfaces.ts +567 -0
  586. package/src/extensions/cavi/discourse/contracts.ts +9 -0
  587. package/src/extensions/cavi/discourse/fallback.ts +387 -0
  588. package/src/extensions/cavi/discourse/live.ts +36 -0
  589. package/src/extensions/cavi/discourse/normalize-helpers.ts +202 -0
  590. package/src/extensions/cavi/discourse/normalize.ts +415 -0
  591. package/src/extensions/cavi/domain/discourse.ts +209 -0
  592. package/src/extensions/cavi/domain/index.ts +5 -0
  593. package/src/extensions/cavi/domain/library.ts +96 -0
  594. package/src/extensions/cavi/domain/observability.ts +36 -0
  595. package/src/extensions/cavi/domain/operator.ts +486 -0
  596. package/src/extensions/cavi/domain/project-board.ts +107 -0
  597. package/src/extensions/cavi/fallbacks/provider.ts +57 -0
  598. package/src/extensions/cavi/fallbacks/snapshots/agent-memory.ts +8 -0
  599. package/src/extensions/cavi/fallbacks/snapshots/cost-history.ts +101 -0
  600. package/src/extensions/cavi/fallbacks/snapshots/incidents.ts +56 -0
  601. package/src/extensions/cavi/fallbacks/snapshots/index.ts +9 -0
  602. package/src/extensions/cavi/fallbacks/snapshots/library.ts +112 -0
  603. package/src/extensions/cavi/fallbacks/snapshots/operator-control/defaults.ts +57 -0
  604. package/src/extensions/cavi/fallbacks/snapshots/operator-control/index.ts +3 -0
  605. package/src/extensions/cavi/fallbacks/snapshots/operator-control/snapshot-memory.ts +65 -0
  606. package/src/extensions/cavi/fallbacks/snapshots/operator-control/snapshot-registry-detail.ts +735 -0
  607. package/src/extensions/cavi/fallbacks/snapshots/operator-control/snapshot-section-status.ts +41 -0
  608. package/src/extensions/cavi/fallbacks/snapshots/operator-control/snapshot-status.ts +87 -0
  609. package/src/extensions/cavi/fallbacks/snapshots/operator-control/snapshot-tasks.ts +113 -0
  610. package/src/extensions/cavi/fallbacks/snapshots/operator-control/snapshot-worker-ready.ts +19 -0
  611. package/src/extensions/cavi/fallbacks/snapshots/operator-control/snapshot-worker-tasks.ts +46 -0
  612. package/src/extensions/cavi/fallbacks/snapshots/operator-control/snapshot.ts +18 -0
  613. package/src/extensions/cavi/fallbacks/snapshots/operator-control/transports.ts +81 -0
  614. package/src/extensions/cavi/fallbacks/snapshots/overview.ts +42 -0
  615. package/src/extensions/cavi/fallbacks/snapshots/routing.ts +38 -0
  616. package/src/extensions/cavi/fallbacks/snapshots/runs.ts +141 -0
  617. package/src/extensions/cavi/fallbacks/snapshots/shared.ts +1 -0
  618. package/src/extensions/cavi/index.ts +52 -0
  619. package/src/extensions/cavi/library/api.ts +120 -0
  620. package/src/extensions/cavi/library/client.ts +54 -0
  621. package/src/extensions/cavi/library/clip.ts +389 -0
  622. package/src/extensions/cavi/operator-control/constants.ts +3 -0
  623. package/src/extensions/cavi/operator-control/defaults.ts +254 -0
  624. package/src/extensions/cavi/operator-control/load-section.ts +92 -0
  625. package/src/extensions/cavi/portal/client.ts +63 -0
  626. package/src/extensions/cavi/portal/tts.ts +213 -0
  627. package/src/extensions/cavi/project-board/constants.ts +84 -0
  628. package/src/extensions/cavi/project-board/fallback.ts +129 -0
  629. package/src/extensions/cavi/project-board/live.ts +121 -0
  630. package/src/extensions/cavi/project-board/mutations.ts +306 -0
  631. package/src/extensions/cavi/project-board/normalize.ts +552 -0
  632. package/src/extensions/cavi/project-board/trace-id.ts +9 -0
  633. package/src/extensions/cavi/registry/canonical-team-registry.ts +193 -0
  634. package/src/extensions/cavi/registry/portal-library-registry.ts +24 -0
  635. package/src/extensions/cavi/registry/session-keys.ts +92 -0
  636. package/src/extensions/cavi/registry/team-registry-config.ts +36 -0
  637. package/src/extensions/cavi/registry/team-registry.ts +414 -0
  638. package/src/extensions/cavi/runtime/env-config.ts +114 -0
  639. package/src/extensions/cavi/runtime/paths.ts +82 -0
  640. package/src/extensions/cavi/runtime/standalone-mode.ts +28 -0
  641. package/src/index.ts +576 -0
  642. package/src/providers/hermes/agent-config.ts +322 -0
  643. package/src/providers/hermes/chat-run.ts +340 -0
  644. package/src/providers/hermes/client.ts +21 -0
  645. package/src/providers/hermes/env-config.ts +58 -0
  646. package/src/providers/hermes/index.ts +11 -0
  647. package/src/providers/hermes/media.ts +12 -0
  648. package/src/providers/hermes/provider-module.ts +26 -0
  649. package/src/providers/hermes/sse-run-event-provider.ts +47 -0
  650. package/src/providers/hermes/team-registry-config.ts +2 -0
  651. package/src/providers/hermes/team-registry.ts +12 -0
  652. package/src/providers/hermes/websocket.ts +16 -0
  653. package/src/providers/hermes/wiki.ts +12 -0
  654. package/src/providers/openclaw/agent-config.ts +12 -0
  655. package/src/providers/openclaw/client.ts +21 -0
  656. package/src/providers/openclaw/index.ts +9 -0
  657. package/src/providers/openclaw/media.ts +12 -0
  658. package/src/providers/openclaw/provider-module.ts +20 -0
  659. package/src/providers/openclaw/sse-run-event-provider.ts +16 -0
  660. package/src/providers/openclaw/team-registry-config.ts +2 -0
  661. package/src/providers/openclaw/team-registry.ts +12 -0
  662. package/src/providers/openclaw/websocket.ts +56 -0
  663. package/src/providers/openclaw/wiki.ts +12 -0
  664. package/src/react/gateway-provider.tsx +835 -0
  665. package/src/react/index.ts +1 -0
package/README.md ADDED
@@ -0,0 +1,618 @@
1
+ # @cavi-ai/api-client
2
+
3
+ **One gateway-agnostic TypeScript client for agent runtimes.** HTTP, WebSocket RPC, SSE, media, wiki, team routing, React hooks, and CAVI control adapters behind one clean package boundary.
4
+
5
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE)
6
+ [![CI](https://github.com/sasan1200/cavi-api-client/actions/workflows/ci.yml/badge.svg)](https://github.com/sasan1200/cavi-api-client/actions/workflows/ci.yml)
7
+ ![Node](https://img.shields.io/badge/node-%3E%3D20-brightgreen)
8
+ ![Types](https://img.shields.io/badge/types-included-blue)
9
+ ![ESM](https://img.shields.io/badge/module-ESM-blueviolet)
10
+
11
+ <p align="center">
12
+ <img src="docs/assets/api-client-hero.svg" alt="@cavi-ai/api-client gateway-agnostic architecture diagram" width="100%">
13
+ </p>
14
+
15
+ ```sh
16
+ npm install @cavi-ai/api-client
17
+ ```
18
+
19
+ > Prefer to import it as `@cavi/api-client`? Alias it on install — the import path is then yours, no code changes needed:
20
+ >
21
+ > ```sh
22
+ > npm install @cavi/api-client@npm:@cavi-ai/api-client
23
+ > # or: pnpm add @cavi/api-client@npm:@cavi-ai/api-client
24
+ > ```
25
+
26
+ ---
27
+
28
+ ## The Shape
29
+
30
+ If you build frontends against agent runtimes, you have probably lived this:
31
+
32
+ You start with one gateway. You write a `fetch` wrapper for it: bearer auth, a base URL, JSON parsing, error handling. Then you need streaming, so you write an SSE parser. Then a WebSocket RPC client for live data. You define route strings. You add fallback data so the dashboard does not explode when the backend hiccups.
33
+
34
+ Then another harness shows up: a different gateway, slightly different routes, a different run-stream shape. Copying the whole thing creates two auth wrappers, two run-stream parsers, two sets of path constants, two fallback strategies, drifting in two repos. A third runtime makes it three. Mobile makes it six.
35
+
36
+ Every surface re-solves the same plumbing, slightly differently, and the differences are exactly the bugs.
37
+
38
+ **`@cavi-ai/api-client` is the shared contract for that boundary.** It is the bridge layer between agent harnesses and the workspaces, UIs, and gateways that consume them:
39
+
40
+ - **One client interface**, gateway-agnostic at the core. HTTP REST and WebSocket RPC live behind the same shapes.
41
+ - **Thin provider adapters** (Hermes, OpenClaw, or your own) that override only what is actually different: headers, endpoint maps, default surfaces. The transport, RPC protocol, retry semantics, and trace behavior are written once.
42
+ - **Path contracts** so route strings live in exactly one place, never scattered through clients and components.
43
+ - **A declarative team manifest** so team / member / workspace / action routing is data your app supplies at runtime, not constants baked into the package.
44
+ - **Graceful degradation as a contract** — when a backend fails, loaders return a typed `DataEnvelope` with fallback data and a structured `contractGap` instead of throwing, so a flaky gateway degrades a panel instead of taking down the page.
45
+
46
+ The goal is simple: **you spend your time on the workflows you want, not the plumbing you don't.** Adding a new provider or a new feature should be additive — a small module, not a fork.
47
+
48
+ ---
49
+
50
+ ## What you get
51
+
52
+ | You need… | Use… |
53
+ | --- | --- |
54
+ | Authenticated JSON HTTP with timeouts, tracing, typed errors | `BaseHttpApiClient`, `JsonHttpApiClient`, `HttpApiError` |
55
+ | Agent runs + capabilities, gateway-agnostic | `GatewayApiClient`, `createGatewayApiClient` |
56
+ | Live data over WebSocket RPC | `GatewayRpcClient`, `createGatewayWebSocketClient` |
57
+ | Streaming run events (SSE) | `GatewaySseRunEventProvider`, `createGatewaySseRunEventProvider` |
58
+ | Generated audio / images / video / music / TTS | `GatewayMediaApiClient`, `createGatewayMediaClient` |
59
+ | Obsidian/QMD wiki vault ops | `GatewayWikiApiClient`, `createGatewayWikiClient` |
60
+ | Slash-command / mention UI from `/v1/capabilities` | `extractGatewayCommandCatalog`, `buildAgentSlashShortcuts` |
61
+ | React context + hooks for a live gateway client | `GatewayClientProvider`, `useGatewayClient`, `useGatewayEvents` |
62
+ | Dashboard loaders with HTTP + WS + mock fallback | `createCaviControlAdapters` |
63
+ | Route strings in one owned place | `CAVI_CONTROL_API_ENDPOINTS`, `GATEWAY_API_ENDPOINTS`, `resolvePath` |
64
+ | Runtime-supplied team / workspace / action routing | `normalizeTeamManifest`, `resolvePath`, `resolveTeamWorkspaceApiPath` |
65
+ | Register a new gateway provider without forking | `createGatewayProviderRegistry`, `GatewayProviderModule` |
66
+
67
+ Full export catalog is in [Reference](#reference) below.
68
+
69
+ ---
70
+
71
+ ## Runtime
72
+
73
+ - Pure **ESM** package, ships compiled `dist/` with type declarations.
74
+ - Requires **Node.js `>=20`** (or any modern runtime with `fetch`, `WebSocket`).
75
+ - **Zero runtime dependencies.** React is an *optional* peer dependency — only the `@cavi-ai/api-client/react` entry needs it.
76
+ - Uses the platform `fetch` by default. Pass `fetchImpl` when a runtime needs an explicit implementation.
77
+
78
+ The package exposes **subpath exports** so you import only the slice you need:
79
+ `@cavi-ai/api-client` (root), `./core/http`, `./core/data`, `./core/runtime`, `./core/sse`, `./core/ws`, `./core/gateway`, `./core/env`, `./contracts`, `./extensions/cavi`, `./providers/hermes`, `./providers/openclaw`, `./react`.
80
+
81
+ ---
82
+
83
+ ## 30-second quickstart
84
+
85
+ ```ts
86
+ import {
87
+ createGatewayApiClient,
88
+ CaviControlApiClient,
89
+ HttpApiError,
90
+ OPENCLAW_PROVIDER_MODULE,
91
+ } from "@cavi-ai/api-client";
92
+
93
+ const auth = {
94
+ bearerToken: process.env.GATEWAY_API_AUTH_TOKEN,
95
+ clientId: "my-dashboard",
96
+ };
97
+
98
+ // Pick a provider; the returned client is the same gateway-agnostic shape.
99
+ const gateway = createGatewayApiClient(
100
+ { baseUrl: "https://gateway.example.com", auth },
101
+ { provider: "openclaw", providerModules: [OPENCLAW_PROVIDER_MODULE] },
102
+ );
103
+
104
+ const run = await gateway.startRun({
105
+ input: "Summarize the latest operator state.",
106
+ session_id: "operator-dashboard",
107
+ });
108
+
109
+ // Domain-shaped HTTP for CAVI Control surfaces.
110
+ const cavi = new CaviControlApiClient({
111
+ baseUrl: "https://control.example.com",
112
+ auth,
113
+ });
114
+
115
+ try {
116
+ const snapshot = await cavi.getOperatorSnapshot();
117
+ console.log(snapshot);
118
+ } catch (error) {
119
+ if (error instanceof HttpApiError) {
120
+ console.error(error.status, error.path, error.body);
121
+ }
122
+ }
123
+ ```
124
+
125
+ That is the whole mental model: **pick a provider, get a client, call methods.** Everything below is detail you reach for when you need it.
126
+
127
+ ---
128
+
129
+ ## Core concepts
130
+
131
+ ### One model, provider overrides
132
+
133
+ HTTP REST (`BaseHttpApiClient`) and WebSocket RPC (`GatewayRpcClient`) are the only two things that touch the network. Both stay **gateway-agnostic** in `core/`. `createGatewayApiClient(opts, { provider | env | providerModules })` returns the right implementation:
134
+
135
+ - Provider kind `gateway` is the core fallback. Hermes/OpenClaw are provider modules exported from `./providers/hermes` and `./providers/openclaw`.
136
+ - Resolution order: explicit `provider` → `CAVI_GATEWAY_PROVIDER` → `GATEWAY_PROVIDER` → default `gateway`.
137
+ - `Gateway*` names are canonical. `Hermes*` / `OpenClaw*` names are provider-specific exports for consumers that want an implementation directly.
138
+
139
+ Universal concepts (agent runs, run-stream events) live in `core`; product code re-exports them and adds only its own aggregates. Nothing duplicates a core type.
140
+
141
+ ### Graceful degradation is a contract
142
+
143
+ `withFallback()` (in `core/gateway/envelope/index.ts`) wraps adapter loads. On transport/backend failure it returns a `DataEnvelope` with `source: "mock"` and a structured `contractGap` instead of throwing — so a flaky gateway degrades one panel rather than crashing the page. **401/403 and `unknown`-classified errors still throw.** New loaders route through `withFallback` / `withMutationResult` with a mock and an expected-contract summary.
144
+
145
+ ### Paths are owned, never scattered
146
+
147
+ Every API route literal lives in a `*paths.ts` file. Global gateway/team/kanban routes live in `src/contracts/paths.ts`; CAVI extension routes live in `src/extensions/cavi/contracts/paths.ts`. Global surface keys live in `src/contracts/surfaces.ts`; CAVI extension surface keys live in `src/extensions/cavi/contracts/surfaces.ts`. A hardening test fails the build if a route string leaks anywhere else.
148
+
149
+ ### Layered architecture
150
+
151
+ Strict, one-directional dependency flow — lower layers never import upward:
152
+
153
+ ```text
154
+ core → contracts
155
+ core/contracts → extensions/cavi
156
+ core/contracts → providers/hermes | providers/openclaw | react
157
+ ```
158
+
159
+ - **`core/`** — gateway-agnostic foundation (`http`, `data`, `env`, `runtime`, `sse`, `ws`, `gateway`). No product knowledge.
160
+ - **`contracts/`** — global path & surface contracts, the agnostic team manifest.
161
+ - **`extensions/cavi/`** — CAVI-specific clients, extension contracts, adapters, domain DTOs, registry wrappers.
162
+ - **`core/gateway/providers/`** — provider plugin interface, registry, normalization, and generic factories.
163
+ - **`providers/hermes` / `providers/openclaw`** — built-in provider implementations and modules.
164
+ - **`react/`** — context/hooks over the gateway client.
165
+
166
+ Gateway internals are organized by owner folder (`client/`, `agent/`, `run/`,
167
+ `rpc/`, `snapshots/`, `resources/`, `envelope/`, `portal/`). The published
168
+ `./core/gateway` subpath is backed by one canonical `src/core/gateway/index.ts`
169
+ that exports those owner folders. Package source and new contributions should
170
+ import from the owner folder directly or from the canonical aggregate.
171
+
172
+ The boundary rules are intentionally boring:
173
+
174
+ - `core/**` contains shared data, env, gateway, HTTP, runtime, SSE, and WebSocket behavior. It must not import from `extensions/cavi/**`, concrete `providers/**`, `react/**`, or app-specific modules.
175
+ - `contracts/**` contains global route, surface, and agnostic team-manifest contracts. It must not import from extensions or providers.
176
+ - `extensions/cavi/**` may import from core and contracts. It owns CAVI clients, extension contracts, adapters, domain DTOs, registry wrappers, and production fallback snapshots.
177
+ - `providers/hermes/**` and `providers/openclaw/**` may import from core and contracts. Provider-specific cookies, source paths, endpoint maps, and WebUI payload adapters stay there.
178
+ - `core/gateway/providers/**` owns provider module types, provider normalization, the registry, and generic factories. Built-in providers are ordinary modules passed through that boundary.
179
+ - `react/**` may import from `core/gateway/**` and React only. The root package does not re-export React hooks so non-React consumers do not pull React into their graph.
180
+ - Test fixtures live under `src/__tests__/fixtures/**`; production modules must not depend on them.
181
+
182
+ Shared implementation belongs in core before an extension uses it. CAVI may wrap core behavior for product fallbacks, but it should not duplicate HTTP clients, JSON request helpers, query builders, gateway errors, data guards, envelope contracts, runtime base-path helpers, RPC protocol code, SSE parsing, WebSocket target handling, run-event parsing, media interfaces, wiki interfaces, resolver composition, or static team registry defaults.
183
+
184
+ Extension code should stay product-shaped: Project Board in `extensions/cavi/project-board/**`, operator control in `extensions/cavi/operator-control/**`, portals in `extensions/cavi/portal/**`, library code in `extensions/cavi/library/**`, registry adapters in `extensions/cavi/registry/**`, and extension contracts in `extensions/cavi/contracts/**`.
185
+
186
+ ---
187
+
188
+ ## Adding a gateway provider
189
+
190
+ This is the part the package is built for. A new gateway is a **module you register at the factory boundary** — you do not edit this package or fork it. The provider plugin surface lives at `@cavi-ai/api-client/core/gateway`.
191
+
192
+ ```ts
193
+ import {
194
+ GatewayApiClient,
195
+ createGatewayApiClient,
196
+ createGatewayProviderRegistry,
197
+ } from "@cavi-ai/api-client";
198
+ import { type GatewayProviderModule } from "@cavi-ai/api-client/core/gateway";
199
+
200
+ const acmeProvider: GatewayProviderModule = {
201
+ kind: "acme",
202
+ aliases: ["acme-gateway"],
203
+ createApiClient: (options) => new GatewayApiClient(options, "acme-api"),
204
+ };
205
+
206
+ const registry = createGatewayProviderRegistry({
207
+ modules: [acmeProvider],
208
+ });
209
+
210
+ const gateway = createGatewayApiClient(
211
+ { baseUrl: "https://acme.example.com", auth },
212
+ { provider: "acme-gateway", registry },
213
+ );
214
+ ```
215
+
216
+ Provider keys are normalized (trimmed, lowercased); `generic` is an alias for `gateway`. Duplicate keys throw by default; pass `{ allowOverrides: true }` only for an intentional override. Built-in providers are explicit modules, not hidden registry state.
217
+
218
+ A provider module may customize headers, endpoint maps, factories, or defaults. It should **not** fork the parser, the RPC protocol, retry semantics, or trace behavior — those are written once in `core`. The same module shape carries the media, wiki, agent-config, SSE, and WebSocket factories; implement only the `create*` factories your gateway actually needs, and missing factories fall back to the generic gateway implementation. See [`CONTRIBUTING.md`](CONTRIBUTING.md) for the full provider-author checklist.
219
+
220
+ ---
221
+
222
+ ## Reference
223
+
224
+ ### Environment configuration
225
+
226
+ `resolveHttpApiConfigFromEnv` gives consistent defaults and app-client aliases:
227
+
228
+ ```ts
229
+ import {
230
+ CaviControlApiClient,
231
+ LibraryApiClient,
232
+ resolveHttpApiConfigFromEnv,
233
+ } from "@cavi-ai/api-client";
234
+
235
+ const config = resolveHttpApiConfigFromEnv(process.env);
236
+
237
+ const cavi = new CaviControlApiClient({
238
+ baseUrl: config.cavi.baseUrl,
239
+ auth: { bearerToken: config.cavi.authToken, clientId: config.cavi.clientId },
240
+ });
241
+ ```
242
+
243
+ Canonical environment keys:
244
+
245
+ - `CAVI_API_BASE_URL`, `CAVI_API_AUTH_TOKEN`, `CAVI_API_CLIENT_ID`
246
+ - `GATEWAY_API_BASE_URL`, `GATEWAY_API_AUTH_TOKEN`, `GATEWAY_API_CLIENT_ID`
247
+ - `LIBRARY_API_BASE_URL`, `LIBRARY_API_AUTH_TOKEN`, `LIBRARY_API_CLIENT_ID`
248
+
249
+ Alias keys for Expo and Vite clients are supported by default; pass `{ includeAliases: false }` to disable. Hermes-specific keys are available through `resolveHermesHttpApiConfigFromEnv` from the Hermes provider exports.
250
+
251
+ ### Requests, headers, and errors
252
+
253
+ All HTTP clients share the same request behavior:
254
+
255
+ - `Accept: application/json` is always sent.
256
+ - `Authorization: Bearer <token>` is sent when `auth.bearerToken` is present.
257
+ - `X-Portal-Client-Id` defaults to `cavi-api-client` unless `auth.clientId` is provided.
258
+ - `Idempotency-Key` is sent when a request receives an `idempotencyKey`.
259
+ - Request bodies are JSON-encoded with `Content-Type: application/json`.
260
+ - Non-2xx responses throw `HttpApiError` with `path`, `url`, `method`, `status`, and the raw response `body`.
261
+ - Network failures, aborts, and invalid JSON are also surfaced as `HttpApiError`.
262
+
263
+ ```ts
264
+ import { CAVI_CONTROL_API_ENDPOINTS, HttpApiError } from "@cavi-ai/api-client";
265
+
266
+ try {
267
+ await cavi.postJson(
268
+ CAVI_CONTROL_API_ENDPOINTS.operator.tasks,
269
+ { title: "Review" },
270
+ "task-1",
271
+ );
272
+ } catch (error) {
273
+ if (error instanceof HttpApiError) {
274
+ console.error(error.status, error.path, error.body);
275
+ }
276
+ }
277
+ ```
278
+
279
+ Pass `onTrace` to observe request timing without changing behavior:
280
+
281
+ ```ts
282
+ const client = new CaviControlApiClient({
283
+ baseUrl: "https://control.example.com",
284
+ onTrace: (t) => console.debug(t.method, t.path, t.status, t.durationMs),
285
+ });
286
+ ```
287
+
288
+ ### Gateway providers
289
+
290
+ ```ts
291
+ import {
292
+ createGatewayApiClient,
293
+ resolveGatewayProviderKind,
294
+ } from "@cavi-ai/api-client";
295
+
296
+ const provider = resolveGatewayProviderKind({
297
+ provider: settings.gatewayProvider,
298
+ env: process.env,
299
+ });
300
+
301
+ const gateway = createGatewayApiClient(config.gateway, { provider });
302
+ ```
303
+
304
+ Gateway slash commands are part of the `/v1/capabilities` contract (which may expose `commands`, `slashCommands`, or `slash_commands`). Normalize the catalog instead of hardcoding command lists:
305
+
306
+ ```ts
307
+ import {
308
+ buildAgentSlashShortcuts,
309
+ extractGatewayCommandCatalog,
310
+ } from "@cavi-ai/api-client";
311
+
312
+ const capabilities = await gateway.getCapabilities();
313
+ const coreCommands = extractGatewayCommandCatalog(capabilities);
314
+ const shortcuts = buildAgentSlashShortcuts(activeAgent, { coreCommands });
315
+ ```
316
+
317
+ ### Gateway transports
318
+
319
+ HTTP, run-event SSE, and WebSocket/RPC share one shape: `core` owns the base transport and gateway contracts; providers add thin adapters for headers, endpoint maps, or default surfaces.
320
+
321
+ Core ownership is split by protocol: `core/http/**` owns base HTTP clients and errors, `core/gateway/client/**` owns gateway HTTP resources, `core/sse/**` owns generic SSE parsing, `core/gateway/run/**` owns run-event contracts and polling fallback, `core/gateway/rpc/**` owns JSON-RPC auth and request flow, `core/ws/**` owns generic WebSocket target/close handling, and `core/gateway/agent/**` owns provider-neutral agent config parsing. Provider modules add only required routing/session headers, endpoint maps, and payload adapters.
322
+
323
+ ```ts
324
+ import {
325
+ createGatewaySseRunEventProvider,
326
+ createGatewayWebSocketClient,
327
+ } from "@cavi-ai/api-client";
328
+
329
+ const sse = createGatewaySseRunEventProvider(
330
+ {
331
+ httpBase: config.gateway.baseUrl,
332
+ authToken: config.gateway.authToken,
333
+ clientId: config.gateway.clientId,
334
+ sessionKey: session.id, // required by the Hermes adapter
335
+ },
336
+ { provider },
337
+ );
338
+
339
+ const ws = createGatewayWebSocketClient(
340
+ target.wsUrl,
341
+ config.gateway.authToken,
342
+ { clientId: config.gateway.clientId },
343
+ { provider },
344
+ );
345
+ ```
346
+
347
+ ### Gateway media
348
+
349
+ ```ts
350
+ import { createGatewayApiClient, createGatewayMediaClient } from "@cavi-ai/api-client";
351
+
352
+ const gateway = createGatewayApiClient(
353
+ { baseUrl: config.gateway.baseUrl, auth },
354
+ { provider },
355
+ );
356
+ const media = createGatewayMediaClient(
357
+ { baseUrl: config.gateway.baseUrl, auth },
358
+ { provider },
359
+ );
360
+
361
+ const providers = await media.listMediaProviders("audio");
362
+ const music = await media.generateMusic({
363
+ input: "lofi loop for a research dashboard",
364
+ format: "mp3",
365
+ options: { bpm: 90 },
366
+ });
367
+ const image = await media.generateImage({
368
+ input: "cover art for a research dashboard",
369
+ format: "png",
370
+ });
371
+ const voice = await media.generateTextToSpeech({
372
+ text: "The dashboard summary is ready.",
373
+ voiceId: "host-voice",
374
+ format: "mp3",
375
+ });
376
+
377
+ const finished = await media.waitForMediaJob("music", music.jobId ?? music.id!);
378
+ const assets = await media.listMediaAssets({ kind: "image" });
379
+ const imageBytes = await media.getImageAsset(assets.assets[0]!.id!);
380
+ const imageMetadata = await media.getMediaAssetMetadata(assets.assets[0]!.id!);
381
+ ```
382
+
383
+ Implemented by the generic gateway client plus `HermesMediaApiClient` and `OpenClawMediaApiClient`; routing stays behind `createGatewayMediaClient`. For provider-aware UI, normalize `/v1/capabilities` and optional media provider inventories:
384
+
385
+ ```ts
386
+ import {
387
+ gatewaySupportsMediaKind,
388
+ gatewaySupportsTextToSpeech,
389
+ normalizeGatewayFeatureCapabilities,
390
+ } from "@cavi-ai/api-client";
391
+
392
+ const features = normalizeGatewayFeatureCapabilities({
393
+ capabilities: await gateway.getCapabilities(),
394
+ mediaProviders: await media.listMediaProviders(),
395
+ });
396
+
397
+ if (gatewaySupportsMediaKind(features, "image")) {
398
+ // show image controls
399
+ }
400
+ if (gatewaySupportsTextToSpeech(features)) {
401
+ // show voice controls
402
+ }
403
+ ```
404
+
405
+ ### Gateway wiki
406
+
407
+ ```ts
408
+ import { createGatewayWikiClient } from "@cavi-ai/api-client";
409
+
410
+ const wiki = createGatewayWikiClient(
411
+ { baseUrl: config.gateway.baseUrl, auth },
412
+ { provider },
413
+ );
414
+
415
+ const vaults = await wiki.listWikiVaults();
416
+ const tree = await wiki.getWikiTree("research");
417
+ const page = await wiki.readWikiPage("research", "index.qmd");
418
+
419
+ await wiki.ingestWiki("research", {
420
+ path: "drafts/market-note.qmd",
421
+ content: "# Market note",
422
+ format: "qmd",
423
+ });
424
+ ```
425
+
426
+ Use `GatewayWikiApiClient` or `createGatewayWikiClient` for wiki work so vault routing stays behind the gateway contract.
427
+
428
+ ### Gateway RPC and React
429
+
430
+ ```tsx
431
+ import {
432
+ GatewayClientProvider,
433
+ useGatewayClientContext,
434
+ } from "@cavi-ai/api-client/react";
435
+
436
+ export function AppShell() {
437
+ return (
438
+ <GatewayClientProvider
439
+ gatewayBaseUrl="https://gateway.example.com"
440
+ authToken={token}
441
+ clientId="portal-client"
442
+ requestedScopes={["operator.read"]}
443
+ autoReconnect
444
+ >
445
+ <OperatorPanel />
446
+ </GatewayClientProvider>
447
+ );
448
+ }
449
+
450
+ function OperatorPanel() {
451
+ const { client, state, connect } = useGatewayClientContext();
452
+
453
+ async function refresh() {
454
+ await connect();
455
+ const payload = await client?.request("sessions.list", { limit: 20 });
456
+ console.log(payload, state);
457
+ }
458
+
459
+ return <button onClick={refresh}>Refresh</button>;
460
+ }
461
+ ```
462
+
463
+ Also exported: `useGatewayClient`, `useGatewayRpc`, `useGatewayEvents`, `useGatewayConnectionState`, `useGatewayEventStream`. React must be available in the application runtime.
464
+ Use `gatewayClientOverrides` on the React hooks/provider for lower-level RPC knobs such as protocol range, default scopes, pre-auth env keys, request timeout, and concurrency.
465
+
466
+ ### UI data adapters
467
+
468
+ `createCaviControlAdapters` builds dashboard loaders that combine gateway WebSocket RPC with HTTP fallbacks:
469
+
470
+ ```ts
471
+ import { createCaviControlAdapters } from "@cavi-ai/api-client";
472
+
473
+ const adapters = createCaviControlAdapters({
474
+ gatewayBaseUrl: "https://gateway.example.com",
475
+ apiBaseUrl: "https://control.example.com",
476
+ authToken: token,
477
+ client: gatewayRpcClient,
478
+ fallbackMode: "empty",
479
+ });
480
+
481
+ const overview = await adapters.loadOverview();
482
+ const operator = await adapters.loadOperatorControl();
483
+ ```
484
+
485
+ Pass `client: null` when only HTTP loaders are available. `fallbackMode` defaults to `"empty"` so public consumers get neutral fallback data. Use `"demo"` for generic demo snapshots, `createCaviControlAdapterFallbackProvider()` for CAVI-specific overrides, custom `snapshotFallbacks` / `caviFallbacks` for your app, or `"none"` to let snapshot failures propagate.
486
+
487
+ CAVI adapters are composition layers over core gateway contracts. Gateway WebSocket-backed control surfaces use the shared session loader and snapshot assembly helpers, then inject CAVI-specific fallbacks for operator control, Project Board, Discourse, cost history, and library loading.
488
+
489
+ ### Team registry and manifest
490
+
491
+ Team and portal registry data is **runtime configuration** — the package ships the interface and normalizers, but `TEAM_REGISTRY_CONFIG` starts empty. Apps populate it after loading their gateway/plugin config; registry-dependent APIs fail loudly when config is missing.
492
+
493
+ ```ts
494
+ import {
495
+ configureTeamRegistryConfig,
496
+ createOpenClawTeamRegistry,
497
+ type TeamRegistryConfig,
498
+ } from "@cavi-ai/api-client";
499
+
500
+ const registryConfig: TeamRegistryConfig = await loadRegistryConfigOnAppStart();
501
+ configureTeamRegistryConfig(registryConfig);
502
+
503
+ const registry = createOpenClawTeamRegistry(registryConfig);
504
+ const team = registry.getPortalTeam("research");
505
+ ```
506
+
507
+ For dynamic frontends, prefer the **team manifest** — you own team/member entries; the package owns the contract, normalization, generated route grammar, workspace-path whitelisting, and action override resolution:
508
+
509
+ ```ts
510
+ import {
511
+ configureTeamRegistryConfig,
512
+ normalizeTeamManifest,
513
+ resolvePath,
514
+ resolveTeamWorkspaceApiPath,
515
+ findTeamManifestTeam,
516
+ type TeamManifest,
517
+ } from "@cavi-ai/api-client";
518
+
519
+ const manifest = normalizeTeamManifest({
520
+ version: 1,
521
+ teams: [
522
+ {
523
+ id: "research",
524
+ identity: { displayName: "Research", slug: "research", code: "RND" },
525
+ workspace: {
526
+ rootPath: "/teams/research/workspace-research",
527
+ paths: ["research/complete", { key: "media.images", path: "media/images" }],
528
+ },
529
+ actions: [
530
+ {
531
+ id: "summarize",
532
+ input: { mode: "json", params: [{ key: "documentId", type: "string", required: true }] },
533
+ output: { mode: "json", contentType: "application/json" },
534
+ },
535
+ ],
536
+ members: [{ id: "scout", capabilities: ["research.complete"] }],
537
+ },
538
+ ],
539
+ } satisfies TeamManifest);
540
+
541
+ configureTeamRegistryConfig({ provider: "gateway", manifest });
542
+
543
+ resolvePath("team.kanban", "canonical", { teamId: "research" });
544
+ // /api/teams/research/kanban
545
+
546
+ const team = findTeamManifestTeam(manifest, "research");
547
+ resolveTeamWorkspaceApiPath(team!, "media.images", { memberId: "scout" });
548
+ // /api/teams/research/agents/scout/workspace/media/images
549
+ ```
550
+
551
+ The workspace resolver accepts only paths declared in `workspace.paths`, so custom folders need no new endpoint constants. Team/member/action IDs are validated as single path segments, workspace entries reject traversal, and ambiguous registry lookup keys fail during registry creation. Gateway route bindings are declarative manifest entries resolved through `resolveGatewayRouteBinding`. New team-shaped CAVI paths should use the `team.*` contracts first; Project Board, Martina, Machine, Front Door, and portal-memory routes stay in the CAVI extension. See [`docs/team-manifest.md`](docs/team-manifest.md), [`docs/team-manifest.consumer.template.ts`](docs/team-manifest.consumer.template.ts), and [`docs/cavi-team-manifest.example.ts`](docs/cavi-team-manifest.example.ts) for the CAVI plugin-owned example.
552
+
553
+ ### Path contracts
554
+
555
+ Route literals belong in path-owner files (`src/contracts/paths.ts`, `src/extensions/cavi/contracts/paths.ts`) and surface-owner files (`src/contracts/surfaces.ts`, `src/extensions/cavi/contracts/surfaces.ts`). Core contracts own global gateway/team routes only; extension routes stay in the extension. Extensions append their surface map over the core resolver with `createSurfacePathResolver`, so `resolvePath` remains core-only and `resolveCaviPath` can resolve both core and CAVI extension keys. Use exported constants, resolvers, or helpers — never recreate route strings.
556
+
557
+ ```ts
558
+ import {
559
+ CAVI_CONTROL_API_ENDPOINTS,
560
+ GATEWAY_API_ENDPOINTS,
561
+ appendCaviApiPath,
562
+ resolveCaviPath,
563
+ resolvePath,
564
+ } from "@cavi-ai/api-client";
565
+
566
+ const taskPath = CAVI_CONTROL_API_ENDPOINTS.operator.task("task/a b");
567
+ const runPath = GATEWAY_API_ENDPOINTS.run("run/1");
568
+ const healthPath = resolvePath("gateway.health", "canonical");
569
+ const dashboardPath = resolveCaviPath("portal.dashboard", "canonical", { portal: "research" });
570
+ const portalAssetPath = appendCaviApiPath("/api/plugins/portal/research", "assets/logo.png");
571
+ ```
572
+
573
+ Dynamic extension paths append validated relative suffixes to extension-owned base paths. Use `appendHttpQuery` for query strings instead of passing queries through path append helpers.
574
+
575
+ Canonical surface routes are API-first (`/api/plugins/<surface>/...`). Consumers should use exported constants, `resolvePath`, `resolveCaviPath`, and path helpers instead of assembling route strings.
576
+
577
+ ### Repo root resolution
578
+
579
+ Filesystem integrations never assume a checkout layout — pass an explicit `repoRoot` or resolve `REPO_ROOT`:
580
+
581
+ ```ts
582
+ import { requireRepoRoot } from "@cavi-ai/api-client";
583
+
584
+ const repoRoot = requireRepoRoot({ repoRoot: options.repoRoot, env: process.env });
585
+ ```
586
+
587
+ Resolution order: explicit `repoRoot` → `env.REPO_ROOT` → explicit `globalRepoRoot` → `globalThis.__CAVI_REPO_ROOT__` → `process.env.REPO_ROOT`.
588
+
589
+ ---
590
+
591
+ ## Development
592
+
593
+ ```sh
594
+ pnpm install # install dev dependencies and wire Husky hooks
595
+ pnpm test # vitest run — guardrails + behavior (the only test command)
596
+ pnpm run coverage # vitest run --coverage — coverage report
597
+ pnpm run build # tsc → dist/ (run before publishing or linking)
598
+ pnpm pack --dry-run # validates the published tarball; prepack runs the build
599
+ pnpm run verify # tests + build + markdown lint + pack dry-run
600
+ pnpm run clean # rm -rf dist
601
+ pnpm exec tsc --noEmit # typecheck only (strict mode is the lint gate)
602
+ ```
603
+
604
+ There is no separate linter — `tsc` under `strict` is the type gate. ESM throughout: relative imports use the `.js` extension on `.ts` sources (`moduleResolution: "Bundler"`). Husky runs `pnpm test` on commit and `pnpm run verify` before push.
605
+
606
+ The **hardening tests** in [`src/__tests__/package-hardening.test.ts`](src/__tests__/package-hardening.test.ts) are the enforced package-boundary contract — they fail the build on forbidden imports, stray route literals, layout drift, baked-in registry data, and package-output drift. Treat them as the source of truth over prose, and update them only when the boundary intentionally changes.
607
+
608
+ ## Contributing
609
+
610
+ Contributions — especially new gateway providers and features — are welcome. Start with [`CONTRIBUTING.md`](CONTRIBUTING.md) for the dev workflow, the provider-author checklist, and the boundary rules. Architecture and dependency direction are documented above in this README.
611
+
612
+ ## Security
613
+
614
+ To report a vulnerability, see [`SECURITY.md`](SECURITY.md). Please do not open public issues for security reports.
615
+
616
+ ## License
617
+
618
+ [MIT](LICENSE) © sasan1200
package/SECURITY.md ADDED
@@ -0,0 +1,48 @@
1
+ # Security Policy
2
+
3
+ ## Supported versions
4
+
5
+ `@cavi-ai/api-client` follows semantic versioning. While the package is pre-1.0,
6
+ security fixes are released against the latest published `0.x` line.
7
+
8
+ | Version | Supported |
9
+ | ------- | ------------------ |
10
+ | 0.1.x | :white_check_mark: |
11
+ | < 0.1 | :x: |
12
+
13
+ ## Reporting a vulnerability
14
+
15
+ **Please do not open a public GitHub issue for security vulnerabilities.**
16
+
17
+ Report privately through one of:
18
+
19
+ - GitHub's [private vulnerability reporting](https://github.com/sasan1200/cavi-api-client/security/advisories/new)
20
+ (preferred), or
21
+ - email to <sasan.sotoodehfar@gmail.com> with `SECURITY` in the subject.
22
+
23
+ Please include:
24
+
25
+ - a description of the issue and its impact,
26
+ - steps to reproduce (a minimal example or PoC if possible),
27
+ - affected version(s),
28
+ - any suggested remediation.
29
+
30
+ You can expect an initial acknowledgement within a few business days. Once the
31
+ issue is confirmed and a fix is prepared, a patched release will be published and
32
+ the reporter credited (unless anonymity is requested).
33
+
34
+ ## Scope notes
35
+
36
+ This package is a client library with **no runtime dependencies**. A few areas are
37
+ particularly relevant to security reports:
38
+
39
+ - **Credential handling.** Bearer tokens and client IDs are passed through to
40
+ request headers. Trace output is redacted (`redactSensitiveValue`,
41
+ `redactPreviewText`); report any path where a token, secret, or sensitive value
42
+ could leak into logs, traces, or errors.
43
+ - **Transport.** The HTTP client and WebSocket RPC client are the only
44
+ network-touching code. Report TLS/origin/auth-handshake concerns here.
45
+ - **Untrusted gateway responses.** The client parses gateway/HTTP payloads; report
46
+ parsing paths that could be abused by a malicious or compromised gateway.
47
+
48
+ Thank you for helping keep the project and its users safe.
@@ -0,0 +1,5 @@
1
+ export * from "./paths.js";
2
+ export * from "./surfaces.js";
3
+ export * from "./resolve.js";
4
+ export * from "./team-manifest.js";
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/contracts/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,oBAAoB,CAAC"}
@@ -0,0 +1,4 @@
1
+ export * from "./paths.js";
2
+ export * from "./surfaces.js";
3
+ export * from "./resolve.js";
4
+ export * from "./team-manifest.js";