@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
@@ -0,0 +1,26 @@
1
+ export function isRecord(value: unknown): value is Record<string, unknown> {
2
+ return Boolean(value) && typeof value === "object";
3
+ }
4
+
5
+ export function asString(value: unknown): string | null {
6
+ return typeof value === "string" && value.trim().length > 0
7
+ ? value.trim()
8
+ : null;
9
+ }
10
+
11
+ export function asNumber(value: unknown): number | null {
12
+ return typeof value === "number" && Number.isFinite(value) ? value : null;
13
+ }
14
+
15
+ export function asStringArray(value: unknown): string[] {
16
+ if (!Array.isArray(value)) {
17
+ return [];
18
+ }
19
+ return value
20
+ .map((entry) => asString(entry))
21
+ .filter((entry): entry is string => Boolean(entry));
22
+ }
23
+
24
+ export function asBoolean(value: unknown): boolean | null {
25
+ return typeof value === "boolean" ? value : null;
26
+ }
@@ -0,0 +1 @@
1
+ export * from "./guards.js";
@@ -0,0 +1,97 @@
1
+ // Gateway-agnostic env resolution primitive. Core knows how to read a single
2
+ // HTTP surface's config from an env bag with primary keys + ordered aliases +
3
+ // caller-supplied fallbacks. It deliberately knows NOTHING about any specific
4
+ // domain, provider, or surface/env-var name or default — those live in the
5
+ // owning layer (extensions/cavi, providers/*) which composes this primitive.
6
+
7
+ export type HttpApiEnvSource = Record<string, string | undefined>;
8
+
9
+ export type HttpApiSurfaceConfig = {
10
+ baseUrl: string;
11
+ authToken: string | null;
12
+ clientId: string;
13
+ };
14
+
15
+ /** Primary env-var names for one HTTP surface. */
16
+ export type HttpSurfaceEnvKeys = {
17
+ baseUrl: string;
18
+ authToken: string;
19
+ clientId: string;
20
+ };
21
+
22
+ /** Fallback env-var names checked (in order) when the primary key is unset. */
23
+ export type HttpSurfaceEnvAliases = {
24
+ baseUrl?: readonly string[];
25
+ authToken?: readonly string[];
26
+ clientId?: readonly string[];
27
+ };
28
+
29
+ /** Last-resort values used when neither the primary nor any alias env var is set. */
30
+ export type HttpSurfaceEnvFallback = {
31
+ baseUrl: string;
32
+ authToken?: string | null;
33
+ clientId: string;
34
+ };
35
+
36
+ export type HttpSurfaceEnvSpec = {
37
+ keys: HttpSurfaceEnvKeys;
38
+ aliases?: HttpSurfaceEnvAliases;
39
+ fallback: HttpSurfaceEnvFallback;
40
+ };
41
+
42
+ export type ResolveHttpSurfaceConfigOptions = {
43
+ defaults?: Partial<HttpApiSurfaceConfig>;
44
+ trimValues?: boolean;
45
+ includeAliases?: boolean;
46
+ };
47
+
48
+ function clean(value: string | undefined, trim: boolean): string | undefined {
49
+ if (value === undefined) return undefined;
50
+ const cleaned = trim ? value.trim() : value;
51
+ return cleaned || undefined;
52
+ }
53
+
54
+ function firstEnvValue(
55
+ env: HttpApiEnvSource,
56
+ primary: string,
57
+ aliases: readonly string[],
58
+ trim: boolean,
59
+ includeAliases: boolean,
60
+ ): string | undefined {
61
+ const primaryValue = clean(env[primary], trim);
62
+ if (primaryValue !== undefined) return primaryValue;
63
+ if (!includeAliases) return undefined;
64
+ for (const alias of aliases) {
65
+ const value = clean(env[alias], trim);
66
+ if (value !== undefined) return value;
67
+ }
68
+ return undefined;
69
+ }
70
+
71
+ function cleanToken(value: string | undefined): string | null {
72
+ return value || null;
73
+ }
74
+
75
+ /**
76
+ * Resolve a single HTTP surface's config from an env bag.
77
+ * Precedence per field: primary key → aliases → caller `defaults` → spec `fallback`.
78
+ */
79
+ export function resolveHttpSurfaceConfigFromEnv(
80
+ env: HttpApiEnvSource,
81
+ spec: HttpSurfaceEnvSpec,
82
+ options: ResolveHttpSurfaceConfigOptions = {},
83
+ ): HttpApiSurfaceConfig {
84
+ const trim = options.trimValues ?? true;
85
+ const includeAliases = options.includeAliases ?? true;
86
+ const defaults = options.defaults;
87
+
88
+ const baseUrl = firstEnvValue(env, spec.keys.baseUrl, spec.aliases?.baseUrl ?? [], trim, includeAliases);
89
+ const authToken = firstEnvValue(env, spec.keys.authToken, spec.aliases?.authToken ?? [], trim, includeAliases);
90
+ const clientId = firstEnvValue(env, spec.keys.clientId, spec.aliases?.clientId ?? [], trim, includeAliases);
91
+
92
+ return {
93
+ baseUrl: baseUrl ?? defaults?.baseUrl ?? spec.fallback.baseUrl,
94
+ authToken: cleanToken(authToken) ?? defaults?.authToken ?? spec.fallback.authToken ?? null,
95
+ clientId: clientId ?? defaults?.clientId ?? spec.fallback.clientId,
96
+ };
97
+ }
@@ -0,0 +1,2 @@
1
+ export * from "./config.js";
2
+ export * from "./repo-root.js";
@@ -0,0 +1,59 @@
1
+ export const REPO_ROOT_ENV_KEY = "REPO_ROOT" as const;
2
+ export const GLOBAL_REPO_ROOT_KEY = "__CAVI_REPO_ROOT__" as const;
3
+
4
+ export type RepoRootEnv = Record<string, string | undefined>;
5
+
6
+ export type ResolveRepoRootOptions = {
7
+ repoRoot?: string | null;
8
+ env?: RepoRootEnv;
9
+ globalRepoRoot?: string | null;
10
+ };
11
+
12
+ declare const process:
13
+ | {
14
+ env?: RepoRootEnv;
15
+ }
16
+ | undefined;
17
+
18
+ type RepoRootGlobal = typeof globalThis & {
19
+ [GLOBAL_REPO_ROOT_KEY]?: string | null;
20
+ };
21
+
22
+ function cleanRepoRoot(value: string | null | undefined): string | null {
23
+ const trimmed = value?.trim();
24
+ return trimmed ? trimmed.replace(/\/+$/, "") : null;
25
+ }
26
+
27
+ function readProcessEnv(): RepoRootEnv {
28
+ try {
29
+ return typeof process !== "undefined" && process.env ? process.env : {};
30
+ } catch {
31
+ return {};
32
+ }
33
+ }
34
+
35
+ function readGlobalRepoRoot(): string | null {
36
+ try {
37
+ return cleanRepoRoot((globalThis as RepoRootGlobal)[GLOBAL_REPO_ROOT_KEY]);
38
+ } catch {
39
+ return null;
40
+ }
41
+ }
42
+
43
+ export function resolveRepoRoot(options: ResolveRepoRootOptions = {}): string | null {
44
+ return (
45
+ cleanRepoRoot(options.repoRoot) ??
46
+ cleanRepoRoot(options.env?.[REPO_ROOT_ENV_KEY]) ??
47
+ cleanRepoRoot(options.globalRepoRoot) ??
48
+ readGlobalRepoRoot() ??
49
+ cleanRepoRoot(readProcessEnv()[REPO_ROOT_ENV_KEY])
50
+ );
51
+ }
52
+
53
+ export function requireRepoRoot(options: ResolveRepoRootOptions = {}): string {
54
+ const repoRoot = resolveRepoRoot(options);
55
+ if (!repoRoot) {
56
+ throw new Error("Missing REPO_ROOT for @cavi-ai/api-client filesystem integration");
57
+ }
58
+ return repoRoot;
59
+ }
@@ -0,0 +1,35 @@
1
+ # Gateway Core
2
+
3
+ This folder owns provider-neutral gateway contracts and shared runtime behavior.
4
+ Provider-specific implementations belong in `src/providers/**`; product-specific
5
+ composition belongs in `src/extensions/cavi/**`.
6
+
7
+ ## Folder Map
8
+
9
+ - `client/` owns HTTP-facing gateway client helpers.
10
+ - `agent/` owns agent capabilities, config, and voice config.
11
+ - `run/` owns run contracts, run-event streams, SSE, and stream failures.
12
+ - `rpc/` owns WebSocket RPC, device auth, and preauth handshakes.
13
+ - `snapshots/` owns session/system loaders, snapshot loaders, TTL cache helpers,
14
+ and snapshot transforms.
15
+ - `resources/` owns gateway resource clients such as media and wiki.
16
+ - `envelope/` owns data envelopes, fallback gaps, and mutation result helpers.
17
+ - `portal/` owns portal-specific gateway bridge helpers.
18
+ - `providers/` owns the provider plugin interface, registry, normalization, and
19
+ generic factory dispatch. It must not import concrete provider implementations.
20
+
21
+ Old flat gateway files are not active source. New implementation and
22
+ package-owned imports must use a canonical folder owner or the single
23
+ `index.ts` aggregate.
24
+
25
+ ## Rules
26
+
27
+ - Do not import concrete `src/providers/**`, `src/extensions/cavi/**`, or `src/react/**`.
28
+ - Do not add provider names, provider cookies, provider filesystem paths, or
29
+ provider WebUI compatibility here.
30
+ - Do not add API route literals outside `src/contracts/paths.ts` or
31
+ `src/contracts/surfaces.ts`.
32
+ - Keep public exports stable through the root package export, supported package
33
+ subpaths, and this folder's single canonical `index.ts`.
34
+ - Do not reintroduce root flat shim files or provider-resolution modules in this
35
+ folder.
@@ -0,0 +1,482 @@
1
+ /**
2
+ * Gateway-agnostic chat slash-command + mention parsing.
3
+ *
4
+ * The authoritative command catalog is owned by the gateway and surfaced on the
5
+ * capabilities snapshot (`capabilities.commands`). Use {@link extractGatewayCommandCatalog}
6
+ * to read it and pass the result as the `coreCommands` option so built-ins stay
7
+ * dynamic rather than manually maintained. {@link FALLBACK_CORE_SLASH_COMMANDS}
8
+ * is an offline-only safety net used when the gateway snapshot is unavailable.
9
+ */
10
+
11
+ export type AgentCommandShortcut = {
12
+ id: string;
13
+ label: string;
14
+ insert: string;
15
+ description?: string;
16
+ };
17
+
18
+ export type AgentMentionSuggestion = {
19
+ id: string;
20
+ label: string;
21
+ insert: string;
22
+ };
23
+
24
+ export type AgentCommandSource = {
25
+ id?: string | null;
26
+ name?: string | null;
27
+ commands?: unknown;
28
+ slashCommands?: unknown;
29
+ slash_commands?: unknown;
30
+ commandRegistry?: unknown;
31
+ command_registry?: unknown;
32
+ routing?: unknown;
33
+ config?: unknown;
34
+ snapshot?: unknown;
35
+ orchestration?: unknown;
36
+ triggers?: readonly unknown[] | null;
37
+ };
38
+
39
+ export type AgentCommandSurface = {
40
+ slashShortcuts: AgentCommandShortcut[];
41
+ mentionChips: AgentMentionSuggestion[];
42
+ };
43
+
44
+ /** Shape of a single entry in the gateway capabilities `commands` catalog. */
45
+ export type GatewayCommandSpec = {
46
+ command?: string;
47
+ name?: string;
48
+ id?: string;
49
+ insert?: string;
50
+ template?: string;
51
+ description?: string;
52
+ summary?: string;
53
+ help?: string;
54
+ category?: string;
55
+ aliases?: readonly string[];
56
+ params?: readonly Record<string, unknown>[];
57
+ arguments?: readonly Record<string, unknown>[];
58
+ examples?: readonly string[];
59
+ enabled?: boolean;
60
+ source?: string;
61
+ scope?: string;
62
+ metadata?: Record<string, unknown>;
63
+ };
64
+
65
+ export type GatewayCommandCatalog =
66
+ | readonly (GatewayCommandSpec | string)[]
67
+ | {
68
+ commands?: unknown;
69
+ slashCommands?: unknown;
70
+ slash_commands?: unknown;
71
+ core?: unknown;
72
+ agent?: unknown;
73
+ teams?: unknown;
74
+ };
75
+
76
+ export type GatewayCommandCapabilities = {
77
+ commands?: GatewayCommandCatalog;
78
+ slashCommands?: GatewayCommandCatalog;
79
+ slash_commands?: GatewayCommandCatalog;
80
+ commandCatalog?: GatewayCommandCatalog;
81
+ command_catalog?: GatewayCommandCatalog;
82
+ };
83
+
84
+ /**
85
+ * Offline-only fallback for the gateway built-in slash commands. The live
86
+ * catalog comes from {@link extractGatewayCommandCatalog}; this is only used
87
+ * when the capabilities snapshot has not been fetched yet.
88
+ */
89
+ export const FALLBACK_CORE_SLASH_COMMANDS: readonly AgentCommandShortcut[] = [
90
+ { id: "help", label: "/help", insert: "/help", description: "Short help summary from the gateway" },
91
+ { id: "commands", label: "/commands", insert: "/commands", description: "Live command catalog for this session" },
92
+ { id: "agent", label: "/agent", insert: "/agent ", description: "Show or switch the active agent" },
93
+ { id: "session", label: "/session", insert: "/session", description: "Show the current session binding" },
94
+ { id: "status", label: "/status", insert: "/status", description: "Gateway, runtime, and provider usage status" },
95
+ { id: "tools", label: "/tools", insert: "/tools", description: "Tools the active agent can use right now" },
96
+ { id: "new", label: "/new", insert: "/new", description: "Start a new session (alias: /reset)" },
97
+ { id: "stop", label: "/stop", insert: "/stop", description: "Abort the current run" },
98
+ { id: "model", label: "/model", insert: "/model", description: "Show or set the active model" },
99
+ { id: "think", label: "/think", insert: "/think ", description: "Set thinking level (e.g. low|medium|high)" },
100
+ { id: "verbose", label: "/verbose", insert: "/verbose ", description: "Toggle verbose output (on|off|full)" },
101
+ { id: "queue", label: "/queue", insert: "/queue ", description: "Manage queue behavior (steer|interrupt|...)" },
102
+ { id: "skill", label: "/skill", insert: "/skill ", description: "Run a skill by name" },
103
+ { id: "focus", label: "/focus", insert: "/focus ", description: "Bind this thread to an agent target" },
104
+ { id: "unfocus", label: "/unfocus", insert: "/unfocus", description: "Remove the current thread binding" },
105
+ { id: "whoami", label: "/whoami", insert: "/whoami", description: "Show your sender id" },
106
+ ];
107
+
108
+ function cleanString(value: unknown): string {
109
+ return typeof value === "string" ? value.trim() : "";
110
+ }
111
+
112
+ function cleanInsertString(value: unknown): string {
113
+ return typeof value === "string" ? value.trimStart() : "";
114
+ }
115
+
116
+ function isRecord(value: unknown): value is Record<string, unknown> {
117
+ return Boolean(value) && typeof value === "object" && !Array.isArray(value);
118
+ }
119
+
120
+ function stableSlug(value: string): string {
121
+ return value
122
+ .toLowerCase()
123
+ .replace(/[^a-z0-9]+/gu, "_")
124
+ .replace(/^_+|_+$/gu, "")
125
+ .slice(0, 72) || "command";
126
+ }
127
+
128
+ function commandHead(value: string): string {
129
+ return value.split(/\s+/u)[0] ?? value;
130
+ }
131
+
132
+ function agentLabel(agent: AgentCommandSource | null | undefined): string {
133
+ return cleanString(agent?.name) || cleanString(agent?.id) || "agent";
134
+ }
135
+
136
+ function firstString(
137
+ record: Record<string, unknown>,
138
+ keys: readonly string[],
139
+ ): string {
140
+ for (const key of keys) {
141
+ const value = cleanString(record[key]);
142
+ if (value) return value;
143
+ }
144
+ return "";
145
+ }
146
+
147
+ function firstInsertString(
148
+ record: Record<string, unknown>,
149
+ keys: readonly string[],
150
+ ): string {
151
+ for (const key of keys) {
152
+ const value = cleanInsertString(record[key]);
153
+ if (value.trim()) return value;
154
+ }
155
+ return "";
156
+ }
157
+
158
+ function normalizeSlashTrigger(
159
+ agent: AgentCommandSource | null | undefined,
160
+ raw: unknown,
161
+ ): AgentCommandShortcut | null {
162
+ const trigger = cleanString(raw);
163
+ if (!trigger.startsWith("/")) return null;
164
+ const label = commandHead(trigger);
165
+ if (label.length <= 1) return null;
166
+ const suffix = trigger.slice(label.length).trim();
167
+ const agentId = cleanString(agent?.id) || agentLabel(agent);
168
+ return {
169
+ id: `agent_${stableSlug(agentId)}_${stableSlug(trigger)}`,
170
+ label,
171
+ insert: trigger.endsWith(" ") ? trigger : suffix ? trigger : label,
172
+ description: suffix
173
+ ? `${agentLabel(agent)} preset: ${suffix}`
174
+ : `${agentLabel(agent)} command`,
175
+ };
176
+ }
177
+
178
+ const COMMAND_VALUE_KEYS = [
179
+ "command",
180
+ "cmd",
181
+ "slashCommand",
182
+ "slash_command",
183
+ "insert",
184
+ "template",
185
+ "prefill",
186
+ "value",
187
+ "name",
188
+ "id",
189
+ ] as const;
190
+
191
+ const COMMAND_DESCRIPTION_KEYS = [
192
+ "description",
193
+ "summary",
194
+ "help",
195
+ "hint",
196
+ "label",
197
+ ] as const;
198
+
199
+ const COMMAND_SOURCE_KEYS = [
200
+ "commands",
201
+ "slashCommands",
202
+ "slash_commands",
203
+ "commandRegistry",
204
+ "command_registry",
205
+ "command",
206
+ "cmd",
207
+ "slashCommand",
208
+ "slash_command",
209
+ "commandModifier",
210
+ "command_modifier",
211
+ ] as const;
212
+
213
+ const COMMAND_SECTION_KEYS = [
214
+ "routing",
215
+ "config",
216
+ "snapshot",
217
+ "orchestration",
218
+ "metadata",
219
+ "profile",
220
+ ] as const;
221
+
222
+ const MENTION_SOURCE_KEYS = [
223
+ "triggers",
224
+ "mentions",
225
+ "mentionTriggers",
226
+ "mention_triggers",
227
+ "aliases",
228
+ "keywords",
229
+ ] as const;
230
+
231
+ function normalizeSlashCommandEntry(
232
+ agent: AgentCommandSource | null | undefined,
233
+ raw: unknown,
234
+ ): AgentCommandShortcut | null {
235
+ if (typeof raw === "string") {
236
+ return normalizeSlashTrigger(agent, raw);
237
+ }
238
+ if (!isRecord(raw)) {
239
+ return null;
240
+ }
241
+ const insertCandidate = firstInsertString(raw, ["insert", "template", "prefill"]);
242
+ const commandCandidate = firstString(raw, COMMAND_VALUE_KEYS);
243
+ const command =
244
+ insertCandidate.startsWith("/")
245
+ ? insertCandidate
246
+ : commandCandidate.startsWith("/")
247
+ ? commandCandidate
248
+ : "";
249
+ const shortcut = normalizeSlashTrigger(agent, command);
250
+ if (!shortcut) return null;
251
+
252
+ const description = firstString(raw, COMMAND_DESCRIPTION_KEYS);
253
+ if (!description || description.startsWith("/")) {
254
+ return shortcut;
255
+ }
256
+ return {
257
+ ...shortcut,
258
+ description,
259
+ };
260
+ }
261
+
262
+ function collectCommandEntries(value: unknown, out: unknown[]): void {
263
+ if (value == null) return;
264
+ if (Array.isArray(value)) {
265
+ for (const entry of value) collectCommandEntries(entry, out);
266
+ return;
267
+ }
268
+ if (!isRecord(value)) {
269
+ out.push(value);
270
+ return;
271
+ }
272
+ if (COMMAND_VALUE_KEYS.some((key) => cleanString(value[key]))) {
273
+ out.push(value);
274
+ return;
275
+ }
276
+ for (const entry of Object.values(value)) {
277
+ collectCommandEntries(entry, out);
278
+ }
279
+ }
280
+
281
+ function collectCapabilityCommandEntries(value: unknown, out: unknown[]): void {
282
+ if (value == null) return;
283
+ if (Array.isArray(value)) {
284
+ for (const entry of value) {
285
+ collectCapabilityCommandEntries(entry, out);
286
+ }
287
+ return;
288
+ }
289
+ if (!isRecord(value)) {
290
+ out.push(value);
291
+ return;
292
+ }
293
+ if (COMMAND_VALUE_KEYS.some((key) => cleanString(value[key]))) {
294
+ out.push(value);
295
+ return;
296
+ }
297
+ for (const key of [
298
+ "commands",
299
+ "slashCommands",
300
+ "slash_commands",
301
+ "core",
302
+ "agent",
303
+ "teams",
304
+ ] as const) {
305
+ collectCapabilityCommandEntries(value[key], out);
306
+ }
307
+ }
308
+
309
+ function collectCommandSections(value: unknown, out: unknown[], depth = 0): void {
310
+ if (!isRecord(value) || depth > 3) return;
311
+ for (const key of COMMAND_SOURCE_KEYS) {
312
+ collectCommandEntries(value[key], out);
313
+ }
314
+ for (const key of COMMAND_SECTION_KEYS) {
315
+ collectCommandSections(value[key], out, depth + 1);
316
+ }
317
+ }
318
+
319
+ function collectSlashCommandEntries(
320
+ agent: AgentCommandSource | null | undefined,
321
+ ): unknown[] {
322
+ const out: unknown[] = [];
323
+ collectCommandEntries(agent?.triggers, out);
324
+ collectCommandSections(agent, out);
325
+
326
+ const agentId = cleanString(agent?.id);
327
+ if (agentId) {
328
+ const label = agentLabel(agent);
329
+ out.push(
330
+ {
331
+ command: `/agent ${agentId}`,
332
+ description: `Switch command context to ${label}`,
333
+ },
334
+ {
335
+ command: `/focus ${agentId}`,
336
+ description: `Bind this thread to ${label}`,
337
+ },
338
+ );
339
+ }
340
+
341
+ return out;
342
+ }
343
+
344
+ function collectMentionEntries(
345
+ agent: AgentCommandSource | null | undefined,
346
+ ): unknown[] {
347
+ const out: unknown[] = [];
348
+ if (!isRecord(agent)) {
349
+ return out;
350
+ }
351
+ const record = agent as Record<string, unknown>;
352
+ for (const key of MENTION_SOURCE_KEYS) {
353
+ collectCommandEntries(record[key], out);
354
+ }
355
+ return out;
356
+ }
357
+
358
+ function normalizeMentionTrigger(
359
+ agent: AgentCommandSource | null | undefined,
360
+ raw: unknown,
361
+ ): AgentMentionSuggestion | null {
362
+ const trigger = cleanString(raw);
363
+ if (!trigger || trigger.startsWith("/")) return null;
364
+ const agentId = cleanString(agent?.id) || agentLabel(agent);
365
+ return {
366
+ id: `mention_${stableSlug(agentId)}_${stableSlug(trigger)}`,
367
+ label: trigger,
368
+ insert: trigger.endsWith(" ") ? trigger : `${trigger} `,
369
+ };
370
+ }
371
+
372
+ function pushUniqueShortcut(
373
+ out: AgentCommandShortcut[],
374
+ seen: Set<string>,
375
+ shortcut: AgentCommandShortcut,
376
+ ): void {
377
+ const key = `${shortcut.label.toLowerCase()}${shortcut.insert.toLowerCase()}`;
378
+ if (seen.has(key)) return;
379
+ seen.add(key);
380
+ out.push(shortcut);
381
+ }
382
+
383
+ function pushUniqueMention(
384
+ out: AgentMentionSuggestion[],
385
+ seen: Set<string>,
386
+ chip: AgentMentionSuggestion,
387
+ ): void {
388
+ const key = chip.insert.trim().toLowerCase();
389
+ if (!key || seen.has(key)) return;
390
+ seen.add(key);
391
+ out.push(chip);
392
+ }
393
+
394
+ /**
395
+ * Read the gateway built-in command catalog from a capabilities snapshot
396
+ * (`capabilities.commands`). Returns an empty list when the gateway has not
397
+ * surfaced a catalog yet, so callers can decide whether to fall back.
398
+ */
399
+ export function extractGatewayCommandCatalog(capabilities: unknown): AgentCommandShortcut[] {
400
+ if (!isRecord(capabilities)) return [];
401
+ const entries: unknown[] = [];
402
+ for (const key of [
403
+ "commands",
404
+ "slashCommands",
405
+ "slash_commands",
406
+ "commandCatalog",
407
+ "command_catalog",
408
+ "features",
409
+ ] as const) {
410
+ collectCapabilityCommandEntries(capabilities[key], entries);
411
+ }
412
+ if (entries.length === 0) return [];
413
+ const seen = new Set<string>();
414
+ const out: AgentCommandShortcut[] = [];
415
+ for (const entry of entries) {
416
+ const command =
417
+ typeof entry === "string"
418
+ ? cleanString(entry)
419
+ : isRecord(entry)
420
+ ? firstInsertString(entry, ["command", "name", "id", "insert", "template", "prefill"])
421
+ : "";
422
+ const insert = command.startsWith("/") ? command : command ? `/${command}` : "";
423
+ if (!insert) continue;
424
+ const label = commandHead(insert);
425
+ if (label.length <= 1) continue;
426
+ const description = isRecord(entry)
427
+ ? firstString(entry, COMMAND_DESCRIPTION_KEYS)
428
+ : "";
429
+ const shortcut: AgentCommandShortcut = {
430
+ id: `core_${stableSlug(insert)}`,
431
+ label,
432
+ insert,
433
+ ...(description && !description.startsWith("/") ? { description } : {}),
434
+ };
435
+ pushUniqueShortcut(out, seen, shortcut);
436
+ }
437
+ return out;
438
+ }
439
+
440
+ export type BuildAgentSlashShortcutsOptions = {
441
+ /** Gateway built-ins (from {@link extractGatewayCommandCatalog}); defaults to the offline fallback. */
442
+ coreCommands?: readonly AgentCommandShortcut[];
443
+ };
444
+
445
+ export function buildAgentSlashShortcuts(
446
+ agent: AgentCommandSource | null | undefined,
447
+ options: BuildAgentSlashShortcutsOptions = {},
448
+ ): AgentCommandShortcut[] {
449
+ const core = options.coreCommands ?? FALLBACK_CORE_SLASH_COMMANDS;
450
+ const seen = new Set<string>();
451
+ const out: AgentCommandShortcut[] = [];
452
+ for (const shortcut of core) {
453
+ pushUniqueShortcut(out, seen, shortcut);
454
+ }
455
+ for (const entry of collectSlashCommandEntries(agent)) {
456
+ const shortcut = normalizeSlashCommandEntry(agent, entry);
457
+ if (shortcut) pushUniqueShortcut(out, seen, shortcut);
458
+ }
459
+ return out;
460
+ }
461
+
462
+ export function buildAgentMentionChips(
463
+ agent: AgentCommandSource | null | undefined,
464
+ ): AgentMentionSuggestion[] {
465
+ const seen = new Set<string>();
466
+ const out: AgentMentionSuggestion[] = [];
467
+ for (const trigger of collectMentionEntries(agent)) {
468
+ const chip = normalizeMentionTrigger(agent, trigger);
469
+ if (chip) pushUniqueMention(out, seen, chip);
470
+ }
471
+ return out;
472
+ }
473
+
474
+ export function buildAgentCommandSurface(
475
+ agent: AgentCommandSource | null | undefined,
476
+ options: BuildAgentSlashShortcutsOptions = {},
477
+ ): AgentCommandSurface {
478
+ return {
479
+ slashShortcuts: buildAgentSlashShortcuts(agent, options),
480
+ mentionChips: buildAgentMentionChips(agent),
481
+ };
482
+ }