@lobu/gateway 2.8.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 (533) hide show
  1. package/dist/api/index.d.ts +2 -0
  2. package/dist/api/index.d.ts.map +1 -0
  3. package/dist/api/index.js +6 -0
  4. package/dist/api/index.js.map +1 -0
  5. package/dist/api/platform.d.ts +92 -0
  6. package/dist/api/platform.d.ts.map +1 -0
  7. package/dist/api/platform.js +236 -0
  8. package/dist/api/platform.js.map +1 -0
  9. package/dist/api/response-renderer.d.ts +44 -0
  10. package/dist/api/response-renderer.d.ts.map +1 -0
  11. package/dist/api/response-renderer.js +123 -0
  12. package/dist/api/response-renderer.js.map +1 -0
  13. package/dist/auth/agent-metadata-store.d.ts +64 -0
  14. package/dist/auth/agent-metadata-store.d.ts.map +1 -0
  15. package/dist/auth/agent-metadata-store.js +115 -0
  16. package/dist/auth/agent-metadata-store.js.map +1 -0
  17. package/dist/auth/api-auth-middleware.d.ts +19 -0
  18. package/dist/auth/api-auth-middleware.d.ts.map +1 -0
  19. package/dist/auth/api-auth-middleware.js +61 -0
  20. package/dist/auth/api-auth-middleware.js.map +1 -0
  21. package/dist/auth/api-key-provider-module.d.ts +60 -0
  22. package/dist/auth/api-key-provider-module.d.ts.map +1 -0
  23. package/dist/auth/api-key-provider-module.js +148 -0
  24. package/dist/auth/api-key-provider-module.js.map +1 -0
  25. package/dist/auth/base-provider-module.d.ts +70 -0
  26. package/dist/auth/base-provider-module.d.ts.map +1 -0
  27. package/dist/auth/base-provider-module.js +118 -0
  28. package/dist/auth/base-provider-module.js.map +1 -0
  29. package/dist/auth/chatgpt/chatgpt-oauth-module.d.ts +34 -0
  30. package/dist/auth/chatgpt/chatgpt-oauth-module.d.ts.map +1 -0
  31. package/dist/auth/chatgpt/chatgpt-oauth-module.js +136 -0
  32. package/dist/auth/chatgpt/chatgpt-oauth-module.js.map +1 -0
  33. package/dist/auth/chatgpt/device-code-client.d.ts +40 -0
  34. package/dist/auth/chatgpt/device-code-client.d.ts.map +1 -0
  35. package/dist/auth/chatgpt/device-code-client.js +165 -0
  36. package/dist/auth/chatgpt/device-code-client.js.map +1 -0
  37. package/dist/auth/chatgpt/index.d.ts +2 -0
  38. package/dist/auth/chatgpt/index.d.ts.map +1 -0
  39. package/dist/auth/chatgpt/index.js +6 -0
  40. package/dist/auth/chatgpt/index.js.map +1 -0
  41. package/dist/auth/claude/oauth-module.d.ts +29 -0
  42. package/dist/auth/claude/oauth-module.d.ts.map +1 -0
  43. package/dist/auth/claude/oauth-module.js +201 -0
  44. package/dist/auth/claude/oauth-module.js.map +1 -0
  45. package/dist/auth/cli/token-service.d.ts +35 -0
  46. package/dist/auth/cli/token-service.d.ts.map +1 -0
  47. package/dist/auth/cli/token-service.js +171 -0
  48. package/dist/auth/cli/token-service.js.map +1 -0
  49. package/dist/auth/external/client.d.ts +65 -0
  50. package/dist/auth/external/client.d.ts.map +1 -0
  51. package/dist/auth/external/client.js +348 -0
  52. package/dist/auth/external/client.js.map +1 -0
  53. package/dist/auth/external/device-code-client.d.ts +41 -0
  54. package/dist/auth/external/device-code-client.d.ts.map +1 -0
  55. package/dist/auth/external/device-code-client.js +128 -0
  56. package/dist/auth/external/device-code-client.js.map +1 -0
  57. package/dist/auth/mcp/config-service.d.ts +70 -0
  58. package/dist/auth/mcp/config-service.d.ts.map +1 -0
  59. package/dist/auth/mcp/config-service.js +269 -0
  60. package/dist/auth/mcp/config-service.js.map +1 -0
  61. package/dist/auth/mcp/proxy.d.ts +68 -0
  62. package/dist/auth/mcp/proxy.d.ts.map +1 -0
  63. package/dist/auth/mcp/proxy.js +783 -0
  64. package/dist/auth/mcp/proxy.js.map +1 -0
  65. package/dist/auth/mcp/string-substitution.d.ts +11 -0
  66. package/dist/auth/mcp/string-substitution.d.ts.map +1 -0
  67. package/dist/auth/mcp/string-substitution.js +21 -0
  68. package/dist/auth/mcp/string-substitution.js.map +1 -0
  69. package/dist/auth/mcp/tool-cache.d.ts +26 -0
  70. package/dist/auth/mcp/tool-cache.d.ts.map +1 -0
  71. package/dist/auth/mcp/tool-cache.js +58 -0
  72. package/dist/auth/mcp/tool-cache.js.map +1 -0
  73. package/dist/auth/oauth/base-client.d.ts +54 -0
  74. package/dist/auth/oauth/base-client.d.ts.map +1 -0
  75. package/dist/auth/oauth/base-client.js +191 -0
  76. package/dist/auth/oauth/base-client.js.map +1 -0
  77. package/dist/auth/oauth/client.d.ts +35 -0
  78. package/dist/auth/oauth/client.d.ts.map +1 -0
  79. package/dist/auth/oauth/client.js +96 -0
  80. package/dist/auth/oauth/client.js.map +1 -0
  81. package/dist/auth/oauth/credentials.d.ts +8 -0
  82. package/dist/auth/oauth/credentials.d.ts.map +1 -0
  83. package/dist/auth/oauth/credentials.js +3 -0
  84. package/dist/auth/oauth/credentials.js.map +1 -0
  85. package/dist/auth/oauth/providers.d.ts +44 -0
  86. package/dist/auth/oauth/providers.d.ts.map +1 -0
  87. package/dist/auth/oauth/providers.js +37 -0
  88. package/dist/auth/oauth/providers.js.map +1 -0
  89. package/dist/auth/oauth/state-store.d.ts +62 -0
  90. package/dist/auth/oauth/state-store.d.ts.map +1 -0
  91. package/dist/auth/oauth/state-store.js +84 -0
  92. package/dist/auth/oauth/state-store.js.map +1 -0
  93. package/dist/auth/oauth-templates.d.ts +15 -0
  94. package/dist/auth/oauth-templates.d.ts.map +1 -0
  95. package/dist/auth/oauth-templates.js +161 -0
  96. package/dist/auth/oauth-templates.js.map +1 -0
  97. package/dist/auth/provider-catalog.d.ts +52 -0
  98. package/dist/auth/provider-catalog.d.ts.map +1 -0
  99. package/dist/auth/provider-catalog.js +155 -0
  100. package/dist/auth/provider-catalog.js.map +1 -0
  101. package/dist/auth/provider-model-options.d.ts +3 -0
  102. package/dist/auth/provider-model-options.d.ts.map +1 -0
  103. package/dist/auth/provider-model-options.js +29 -0
  104. package/dist/auth/provider-model-options.js.map +1 -0
  105. package/dist/auth/settings/agent-settings-store.d.ts +112 -0
  106. package/dist/auth/settings/agent-settings-store.d.ts.map +1 -0
  107. package/dist/auth/settings/agent-settings-store.js +376 -0
  108. package/dist/auth/settings/agent-settings-store.js.map +1 -0
  109. package/dist/auth/settings/auth-profiles-manager.d.ts +26 -0
  110. package/dist/auth/settings/auth-profiles-manager.d.ts.map +1 -0
  111. package/dist/auth/settings/auth-profiles-manager.js +146 -0
  112. package/dist/auth/settings/auth-profiles-manager.js.map +1 -0
  113. package/dist/auth/settings/index.d.ts +4 -0
  114. package/dist/auth/settings/index.d.ts.map +1 -0
  115. package/dist/auth/settings/index.js +9 -0
  116. package/dist/auth/settings/index.js.map +1 -0
  117. package/dist/auth/settings/model-preference-store.d.ts +25 -0
  118. package/dist/auth/settings/model-preference-store.d.ts.map +1 -0
  119. package/dist/auth/settings/model-preference-store.js +50 -0
  120. package/dist/auth/settings/model-preference-store.js.map +1 -0
  121. package/dist/auth/settings/model-selection.d.ts +11 -0
  122. package/dist/auth/settings/model-selection.d.ts.map +1 -0
  123. package/dist/auth/settings/model-selection.js +83 -0
  124. package/dist/auth/settings/model-selection.js.map +1 -0
  125. package/dist/auth/settings/resolved-settings-view.d.ts +45 -0
  126. package/dist/auth/settings/resolved-settings-view.d.ts.map +1 -0
  127. package/dist/auth/settings/resolved-settings-view.js +152 -0
  128. package/dist/auth/settings/resolved-settings-view.js.map +1 -0
  129. package/dist/auth/settings/template-utils.d.ts +3 -0
  130. package/dist/auth/settings/template-utils.d.ts.map +1 -0
  131. package/dist/auth/settings/template-utils.js +43 -0
  132. package/dist/auth/settings/template-utils.js.map +1 -0
  133. package/dist/auth/settings/token-service.d.ts +86 -0
  134. package/dist/auth/settings/token-service.d.ts.map +1 -0
  135. package/dist/auth/settings/token-service.js +3 -0
  136. package/dist/auth/settings/token-service.js.map +1 -0
  137. package/dist/auth/system-env-store.d.ts +26 -0
  138. package/dist/auth/system-env-store.d.ts.map +1 -0
  139. package/dist/auth/system-env-store.js +92 -0
  140. package/dist/auth/system-env-store.js.map +1 -0
  141. package/dist/auth/user-agents-store.d.ts +31 -0
  142. package/dist/auth/user-agents-store.d.ts.map +1 -0
  143. package/dist/auth/user-agents-store.js +54 -0
  144. package/dist/auth/user-agents-store.js.map +1 -0
  145. package/dist/channels/binding-service.d.ts +69 -0
  146. package/dist/channels/binding-service.d.ts.map +1 -0
  147. package/dist/channels/binding-service.js +144 -0
  148. package/dist/channels/binding-service.js.map +1 -0
  149. package/dist/channels/index.d.ts +2 -0
  150. package/dist/channels/index.d.ts.map +1 -0
  151. package/dist/channels/index.js +6 -0
  152. package/dist/channels/index.js.map +1 -0
  153. package/dist/cli/gateway.d.ts +31 -0
  154. package/dist/cli/gateway.d.ts.map +1 -0
  155. package/dist/cli/gateway.js +1062 -0
  156. package/dist/cli/gateway.js.map +1 -0
  157. package/dist/cli/index.d.ts +3 -0
  158. package/dist/cli/index.d.ts.map +1 -0
  159. package/dist/cli/index.js +56 -0
  160. package/dist/cli/index.js.map +1 -0
  161. package/dist/commands/built-in-commands.d.ts +10 -0
  162. package/dist/commands/built-in-commands.d.ts.map +1 -0
  163. package/dist/commands/built-in-commands.js +63 -0
  164. package/dist/commands/built-in-commands.js.map +1 -0
  165. package/dist/commands/command-dispatcher.d.ts +25 -0
  166. package/dist/commands/command-dispatcher.d.ts.map +1 -0
  167. package/dist/commands/command-dispatcher.js +50 -0
  168. package/dist/commands/command-dispatcher.js.map +1 -0
  169. package/dist/commands/command-reply-adapters.d.ts +3 -0
  170. package/dist/commands/command-reply-adapters.d.ts.map +1 -0
  171. package/dist/commands/command-reply-adapters.js +60 -0
  172. package/dist/commands/command-reply-adapters.js.map +1 -0
  173. package/dist/config/file-loader.d.ts +23 -0
  174. package/dist/config/file-loader.d.ts.map +1 -0
  175. package/dist/config/file-loader.js +495 -0
  176. package/dist/config/file-loader.js.map +1 -0
  177. package/dist/config/index.d.ts +96 -0
  178. package/dist/config/index.d.ts.map +1 -0
  179. package/dist/config/index.js +357 -0
  180. package/dist/config/index.js.map +1 -0
  181. package/dist/config/network-allowlist.d.ts +18 -0
  182. package/dist/config/network-allowlist.d.ts.map +1 -0
  183. package/dist/config/network-allowlist.js +60 -0
  184. package/dist/config/network-allowlist.js.map +1 -0
  185. package/dist/connections/chat-instance-manager.d.ts +107 -0
  186. package/dist/connections/chat-instance-manager.d.ts.map +1 -0
  187. package/dist/connections/chat-instance-manager.js +886 -0
  188. package/dist/connections/chat-instance-manager.js.map +1 -0
  189. package/dist/connections/chat-response-bridge.d.ts +31 -0
  190. package/dist/connections/chat-response-bridge.d.ts.map +1 -0
  191. package/dist/connections/chat-response-bridge.js +465 -0
  192. package/dist/connections/chat-response-bridge.js.map +1 -0
  193. package/dist/connections/index.d.ts +4 -0
  194. package/dist/connections/index.d.ts.map +1 -0
  195. package/dist/connections/index.js +8 -0
  196. package/dist/connections/index.js.map +1 -0
  197. package/dist/connections/interaction-bridge.d.ts +7 -0
  198. package/dist/connections/interaction-bridge.d.ts.map +1 -0
  199. package/dist/connections/interaction-bridge.js +593 -0
  200. package/dist/connections/interaction-bridge.js.map +1 -0
  201. package/dist/connections/message-handler-bridge.d.ts +21 -0
  202. package/dist/connections/message-handler-bridge.d.ts.map +1 -0
  203. package/dist/connections/message-handler-bridge.js +314 -0
  204. package/dist/connections/message-handler-bridge.js.map +1 -0
  205. package/dist/connections/platform-auth-methods.d.ts +5 -0
  206. package/dist/connections/platform-auth-methods.d.ts.map +1 -0
  207. package/dist/connections/platform-auth-methods.js +13 -0
  208. package/dist/connections/platform-auth-methods.js.map +1 -0
  209. package/dist/connections/types.d.ts +52 -0
  210. package/dist/connections/types.d.ts.map +1 -0
  211. package/dist/connections/types.js +20 -0
  212. package/dist/connections/types.js.map +1 -0
  213. package/dist/gateway/connection-manager.d.ts +87 -0
  214. package/dist/gateway/connection-manager.d.ts.map +1 -0
  215. package/dist/gateway/connection-manager.js +216 -0
  216. package/dist/gateway/connection-manager.js.map +1 -0
  217. package/dist/gateway/index.d.ts +71 -0
  218. package/dist/gateway/index.d.ts.map +1 -0
  219. package/dist/gateway/index.js +509 -0
  220. package/dist/gateway/index.js.map +1 -0
  221. package/dist/gateway/job-router.d.ts +60 -0
  222. package/dist/gateway/job-router.d.ts.map +1 -0
  223. package/dist/gateway/job-router.js +148 -0
  224. package/dist/gateway/job-router.js.map +1 -0
  225. package/dist/gateway-main.d.ts +81 -0
  226. package/dist/gateway-main.d.ts.map +1 -0
  227. package/dist/gateway-main.js +143 -0
  228. package/dist/gateway-main.js.map +1 -0
  229. package/dist/index.d.ts +16 -0
  230. package/dist/index.d.ts.map +1 -0
  231. package/dist/index.js +64 -0
  232. package/dist/index.js.map +1 -0
  233. package/dist/infrastructure/queue/index.d.ts +8 -0
  234. package/dist/infrastructure/queue/index.d.ts.map +1 -0
  235. package/dist/infrastructure/queue/index.js +12 -0
  236. package/dist/infrastructure/queue/index.js.map +1 -0
  237. package/dist/infrastructure/queue/queue-producer.d.ts +68 -0
  238. package/dist/infrastructure/queue/queue-producer.d.ts.map +1 -0
  239. package/dist/infrastructure/queue/queue-producer.js +72 -0
  240. package/dist/infrastructure/queue/queue-producer.js.map +1 -0
  241. package/dist/infrastructure/queue/redis-queue.d.ts +45 -0
  242. package/dist/infrastructure/queue/redis-queue.d.ts.map +1 -0
  243. package/dist/infrastructure/queue/redis-queue.js +273 -0
  244. package/dist/infrastructure/queue/redis-queue.js.map +1 -0
  245. package/dist/infrastructure/queue/types.d.ts +107 -0
  246. package/dist/infrastructure/queue/types.d.ts.map +1 -0
  247. package/dist/infrastructure/queue/types.js +7 -0
  248. package/dist/infrastructure/queue/types.js.map +1 -0
  249. package/dist/infrastructure/redis/system-message-limiter.d.ts +35 -0
  250. package/dist/infrastructure/redis/system-message-limiter.d.ts.map +1 -0
  251. package/dist/infrastructure/redis/system-message-limiter.js +61 -0
  252. package/dist/infrastructure/redis/system-message-limiter.js.map +1 -0
  253. package/dist/interactions/config-request-store.d.ts +41 -0
  254. package/dist/interactions/config-request-store.d.ts.map +1 -0
  255. package/dist/interactions/config-request-store.js +103 -0
  256. package/dist/interactions/config-request-store.js.map +1 -0
  257. package/dist/interactions.d.ts +134 -0
  258. package/dist/interactions.d.ts.map +1 -0
  259. package/dist/interactions.js +175 -0
  260. package/dist/interactions.js.map +1 -0
  261. package/dist/lobu.d.ts +78 -0
  262. package/dist/lobu.d.ts.map +1 -0
  263. package/dist/lobu.js +248 -0
  264. package/dist/lobu.js.map +1 -0
  265. package/dist/metrics/prometheus.d.ts +6 -0
  266. package/dist/metrics/prometheus.d.ts.map +1 -0
  267. package/dist/metrics/prometheus.js +78 -0
  268. package/dist/metrics/prometheus.js.map +1 -0
  269. package/dist/modules/module-system.d.ts +82 -0
  270. package/dist/modules/module-system.d.ts.map +1 -0
  271. package/dist/modules/module-system.js +53 -0
  272. package/dist/modules/module-system.js.map +1 -0
  273. package/dist/orchestration/base-deployment-manager.d.ts +173 -0
  274. package/dist/orchestration/base-deployment-manager.d.ts.map +1 -0
  275. package/dist/orchestration/base-deployment-manager.js +553 -0
  276. package/dist/orchestration/base-deployment-manager.js.map +1 -0
  277. package/dist/orchestration/deployment-utils.d.ts +25 -0
  278. package/dist/orchestration/deployment-utils.d.ts.map +1 -0
  279. package/dist/orchestration/deployment-utils.js +65 -0
  280. package/dist/orchestration/deployment-utils.js.map +1 -0
  281. package/dist/orchestration/impl/docker-deployment.d.ts +43 -0
  282. package/dist/orchestration/impl/docker-deployment.d.ts.map +1 -0
  283. package/dist/orchestration/impl/docker-deployment.js +480 -0
  284. package/dist/orchestration/impl/docker-deployment.js.map +1 -0
  285. package/dist/orchestration/impl/embedded-deployment.d.ts +16 -0
  286. package/dist/orchestration/impl/embedded-deployment.d.ts.map +1 -0
  287. package/dist/orchestration/impl/embedded-deployment.js +195 -0
  288. package/dist/orchestration/impl/embedded-deployment.js.map +1 -0
  289. package/dist/orchestration/impl/index.d.ts +8 -0
  290. package/dist/orchestration/impl/index.d.ts.map +1 -0
  291. package/dist/orchestration/impl/index.js +14 -0
  292. package/dist/orchestration/impl/index.js.map +1 -0
  293. package/dist/orchestration/impl/k8s/deployment.d.ts +204 -0
  294. package/dist/orchestration/impl/k8s/deployment.d.ts.map +1 -0
  295. package/dist/orchestration/impl/k8s/deployment.js +620 -0
  296. package/dist/orchestration/impl/k8s/deployment.js.map +1 -0
  297. package/dist/orchestration/impl/k8s/helpers.d.ts +34 -0
  298. package/dist/orchestration/impl/k8s/helpers.d.ts.map +1 -0
  299. package/dist/orchestration/impl/k8s/helpers.js +377 -0
  300. package/dist/orchestration/impl/k8s/helpers.js.map +1 -0
  301. package/dist/orchestration/impl/k8s/index.d.ts +2 -0
  302. package/dist/orchestration/impl/k8s/index.d.ts.map +1 -0
  303. package/dist/orchestration/impl/k8s/index.js +6 -0
  304. package/dist/orchestration/impl/k8s/index.js.map +1 -0
  305. package/dist/orchestration/index.d.ts +53 -0
  306. package/dist/orchestration/index.d.ts.map +1 -0
  307. package/dist/orchestration/index.js +257 -0
  308. package/dist/orchestration/index.js.map +1 -0
  309. package/dist/orchestration/message-consumer.d.ts +49 -0
  310. package/dist/orchestration/message-consumer.d.ts.map +1 -0
  311. package/dist/orchestration/message-consumer.js +406 -0
  312. package/dist/orchestration/message-consumer.js.map +1 -0
  313. package/dist/orchestration/scheduled-wakeup.d.ts +110 -0
  314. package/dist/orchestration/scheduled-wakeup.d.ts.map +1 -0
  315. package/dist/orchestration/scheduled-wakeup.js +500 -0
  316. package/dist/orchestration/scheduled-wakeup.js.map +1 -0
  317. package/dist/permissions/approval-policy.d.ts +28 -0
  318. package/dist/permissions/approval-policy.d.ts.map +1 -0
  319. package/dist/permissions/approval-policy.js +33 -0
  320. package/dist/permissions/approval-policy.js.map +1 -0
  321. package/dist/permissions/grant-store.d.ts +52 -0
  322. package/dist/permissions/grant-store.d.ts.map +1 -0
  323. package/dist/permissions/grant-store.js +192 -0
  324. package/dist/permissions/grant-store.js.map +1 -0
  325. package/dist/platform/file-handler.d.ts +51 -0
  326. package/dist/platform/file-handler.d.ts.map +1 -0
  327. package/dist/platform/file-handler.js +6 -0
  328. package/dist/platform/file-handler.js.map +1 -0
  329. package/dist/platform/link-buttons.d.ts +21 -0
  330. package/dist/platform/link-buttons.d.ts.map +1 -0
  331. package/dist/platform/link-buttons.js +43 -0
  332. package/dist/platform/link-buttons.js.map +1 -0
  333. package/dist/platform/renderer-utils.d.ts +10 -0
  334. package/dist/platform/renderer-utils.d.ts.map +1 -0
  335. package/dist/platform/renderer-utils.js +42 -0
  336. package/dist/platform/renderer-utils.js.map +1 -0
  337. package/dist/platform/response-renderer.d.ts +66 -0
  338. package/dist/platform/response-renderer.d.ts.map +1 -0
  339. package/dist/platform/response-renderer.js +8 -0
  340. package/dist/platform/response-renderer.js.map +1 -0
  341. package/dist/platform/unified-thread-consumer.d.ts +41 -0
  342. package/dist/platform/unified-thread-consumer.d.ts.map +1 -0
  343. package/dist/platform/unified-thread-consumer.js +143 -0
  344. package/dist/platform/unified-thread-consumer.js.map +1 -0
  345. package/dist/platform.d.ts +255 -0
  346. package/dist/platform.d.ts.map +1 -0
  347. package/dist/platform.js +40 -0
  348. package/dist/platform.js.map +1 -0
  349. package/dist/proxy/http-proxy.d.ts +32 -0
  350. package/dist/proxy/http-proxy.d.ts.map +1 -0
  351. package/dist/proxy/http-proxy.js +636 -0
  352. package/dist/proxy/http-proxy.js.map +1 -0
  353. package/dist/proxy/proxy-manager.d.ts +13 -0
  354. package/dist/proxy/proxy-manager.d.ts.map +1 -0
  355. package/dist/proxy/proxy-manager.js +68 -0
  356. package/dist/proxy/proxy-manager.js.map +1 -0
  357. package/dist/proxy/secret-proxy.d.ts +78 -0
  358. package/dist/proxy/secret-proxy.d.ts.map +1 -0
  359. package/dist/proxy/secret-proxy.js +309 -0
  360. package/dist/proxy/secret-proxy.js.map +1 -0
  361. package/dist/proxy/token-refresh-job.d.ts +29 -0
  362. package/dist/proxy/token-refresh-job.d.ts.map +1 -0
  363. package/dist/proxy/token-refresh-job.js +104 -0
  364. package/dist/proxy/token-refresh-job.js.map +1 -0
  365. package/dist/routes/internal/audio.d.ts +14 -0
  366. package/dist/routes/internal/audio.d.ts.map +1 -0
  367. package/dist/routes/internal/audio.js +118 -0
  368. package/dist/routes/internal/audio.js.map +1 -0
  369. package/dist/routes/internal/device-auth.d.ts +42 -0
  370. package/dist/routes/internal/device-auth.d.ts.map +1 -0
  371. package/dist/routes/internal/device-auth.js +397 -0
  372. package/dist/routes/internal/device-auth.js.map +1 -0
  373. package/dist/routes/internal/files.d.ts +9 -0
  374. package/dist/routes/internal/files.d.ts.map +1 -0
  375. package/dist/routes/internal/files.js +175 -0
  376. package/dist/routes/internal/files.js.map +1 -0
  377. package/dist/routes/internal/history.d.ts +9 -0
  378. package/dist/routes/internal/history.d.ts.map +1 -0
  379. package/dist/routes/internal/history.js +55 -0
  380. package/dist/routes/internal/history.js.map +1 -0
  381. package/dist/routes/internal/images.d.ts +10 -0
  382. package/dist/routes/internal/images.d.ts.map +1 -0
  383. package/dist/routes/internal/images.js +101 -0
  384. package/dist/routes/internal/images.js.map +1 -0
  385. package/dist/routes/internal/interactions.d.ts +9 -0
  386. package/dist/routes/internal/interactions.d.ts.map +1 -0
  387. package/dist/routes/internal/interactions.js +53 -0
  388. package/dist/routes/internal/interactions.js.map +1 -0
  389. package/dist/routes/internal/middleware.d.ts +7 -0
  390. package/dist/routes/internal/middleware.d.ts.map +1 -0
  391. package/dist/routes/internal/middleware.js +24 -0
  392. package/dist/routes/internal/middleware.js.map +1 -0
  393. package/dist/routes/internal/schedule.d.ts +14 -0
  394. package/dist/routes/internal/schedule.d.ts.map +1 -0
  395. package/dist/routes/internal/schedule.js +169 -0
  396. package/dist/routes/internal/schedule.js.map +1 -0
  397. package/dist/routes/internal/types.d.ts +22 -0
  398. package/dist/routes/internal/types.d.ts.map +1 -0
  399. package/dist/routes/internal/types.js +6 -0
  400. package/dist/routes/internal/types.js.map +1 -0
  401. package/dist/routes/openapi-auto.d.ts +8 -0
  402. package/dist/routes/openapi-auto.d.ts.map +1 -0
  403. package/dist/routes/openapi-auto.js +196 -0
  404. package/dist/routes/openapi-auto.js.map +1 -0
  405. package/dist/routes/public/agent-access.d.ts +11 -0
  406. package/dist/routes/public/agent-access.d.ts.map +1 -0
  407. package/dist/routes/public/agent-access.js +11 -0
  408. package/dist/routes/public/agent-access.js.map +1 -0
  409. package/dist/routes/public/agent-config.d.ts +42 -0
  410. package/dist/routes/public/agent-config.d.ts.map +1 -0
  411. package/dist/routes/public/agent-config.js +415 -0
  412. package/dist/routes/public/agent-config.js.map +1 -0
  413. package/dist/routes/public/agent-history.d.ts +17 -0
  414. package/dist/routes/public/agent-history.d.ts.map +1 -0
  415. package/dist/routes/public/agent-history.js +335 -0
  416. package/dist/routes/public/agent-history.js.map +1 -0
  417. package/dist/routes/public/agent-schedules.d.ts +18 -0
  418. package/dist/routes/public/agent-schedules.d.ts.map +1 -0
  419. package/dist/routes/public/agent-schedules.js +242 -0
  420. package/dist/routes/public/agent-schedules.js.map +1 -0
  421. package/dist/routes/public/agent.d.ts +23 -0
  422. package/dist/routes/public/agent.d.ts.map +1 -0
  423. package/dist/routes/public/agent.js +864 -0
  424. package/dist/routes/public/agent.js.map +1 -0
  425. package/dist/routes/public/agents.d.ts +22 -0
  426. package/dist/routes/public/agents.d.ts.map +1 -0
  427. package/dist/routes/public/agents.js +257 -0
  428. package/dist/routes/public/agents.js.map +1 -0
  429. package/dist/routes/public/channels.d.ts +23 -0
  430. package/dist/routes/public/channels.d.ts.map +1 -0
  431. package/dist/routes/public/channels.js +131 -0
  432. package/dist/routes/public/channels.js.map +1 -0
  433. package/dist/routes/public/cli-auth.d.ts +12 -0
  434. package/dist/routes/public/cli-auth.d.ts.map +1 -0
  435. package/dist/routes/public/cli-auth.js +552 -0
  436. package/dist/routes/public/cli-auth.js.map +1 -0
  437. package/dist/routes/public/connections.d.ts +20 -0
  438. package/dist/routes/public/connections.d.ts.map +1 -0
  439. package/dist/routes/public/connections.js +464 -0
  440. package/dist/routes/public/connections.js.map +1 -0
  441. package/dist/routes/public/landing.d.ts +3 -0
  442. package/dist/routes/public/landing.d.ts.map +1 -0
  443. package/dist/routes/public/landing.js +17 -0
  444. package/dist/routes/public/landing.js.map +1 -0
  445. package/dist/routes/public/oauth.d.ts +24 -0
  446. package/dist/routes/public/oauth.d.ts.map +1 -0
  447. package/dist/routes/public/oauth.js +108 -0
  448. package/dist/routes/public/oauth.js.map +1 -0
  449. package/dist/routes/public/settings-auth.d.ts +28 -0
  450. package/dist/routes/public/settings-auth.d.ts.map +1 -0
  451. package/dist/routes/public/settings-auth.js +90 -0
  452. package/dist/routes/public/settings-auth.js.map +1 -0
  453. package/dist/routes/public/slack.d.ts +4 -0
  454. package/dist/routes/public/slack.d.ts.map +1 -0
  455. package/dist/routes/public/slack.js +119 -0
  456. package/dist/routes/public/slack.js.map +1 -0
  457. package/dist/routes/shared/agent-ownership.d.ts +15 -0
  458. package/dist/routes/shared/agent-ownership.d.ts.map +1 -0
  459. package/dist/routes/shared/agent-ownership.js +61 -0
  460. package/dist/routes/shared/agent-ownership.js.map +1 -0
  461. package/dist/routes/shared/token-verifier.d.ts +21 -0
  462. package/dist/routes/shared/token-verifier.d.ts.map +1 -0
  463. package/dist/routes/shared/token-verifier.js +25 -0
  464. package/dist/routes/shared/token-verifier.js.map +1 -0
  465. package/dist/services/core-services.d.ts +133 -0
  466. package/dist/services/core-services.d.ts.map +1 -0
  467. package/dist/services/core-services.js +728 -0
  468. package/dist/services/core-services.js.map +1 -0
  469. package/dist/services/image-generation-service.d.ts +38 -0
  470. package/dist/services/image-generation-service.d.ts.map +1 -0
  471. package/dist/services/image-generation-service.js +167 -0
  472. package/dist/services/image-generation-service.js.map +1 -0
  473. package/dist/services/instruction-service.d.ts +41 -0
  474. package/dist/services/instruction-service.d.ts.map +1 -0
  475. package/dist/services/instruction-service.js +252 -0
  476. package/dist/services/instruction-service.js.map +1 -0
  477. package/dist/services/mcp-registry.d.ts +31 -0
  478. package/dist/services/mcp-registry.d.ts.map +1 -0
  479. package/dist/services/mcp-registry.js +69 -0
  480. package/dist/services/mcp-registry.js.map +1 -0
  481. package/dist/services/platform-helpers.d.ts +47 -0
  482. package/dist/services/platform-helpers.d.ts.map +1 -0
  483. package/dist/services/platform-helpers.js +200 -0
  484. package/dist/services/platform-helpers.js.map +1 -0
  485. package/dist/services/session-manager.d.ts +72 -0
  486. package/dist/services/session-manager.d.ts.map +1 -0
  487. package/dist/services/session-manager.js +199 -0
  488. package/dist/services/session-manager.js.map +1 -0
  489. package/dist/services/settings-resolver.d.ts +25 -0
  490. package/dist/services/settings-resolver.d.ts.map +1 -0
  491. package/dist/services/settings-resolver.js +55 -0
  492. package/dist/services/settings-resolver.js.map +1 -0
  493. package/dist/services/system-config-resolver.d.ts +25 -0
  494. package/dist/services/system-config-resolver.d.ts.map +1 -0
  495. package/dist/services/system-config-resolver.js +73 -0
  496. package/dist/services/system-config-resolver.js.map +1 -0
  497. package/dist/services/system-skills-service.d.ts +38 -0
  498. package/dist/services/system-skills-service.d.ts.map +1 -0
  499. package/dist/services/system-skills-service.js +186 -0
  500. package/dist/services/system-skills-service.js.map +1 -0
  501. package/dist/services/transcription-service.d.ts +91 -0
  502. package/dist/services/transcription-service.d.ts.map +1 -0
  503. package/dist/services/transcription-service.js +465 -0
  504. package/dist/services/transcription-service.js.map +1 -0
  505. package/dist/session.d.ts +75 -0
  506. package/dist/session.d.ts.map +1 -0
  507. package/dist/session.js +19 -0
  508. package/dist/session.js.map +1 -0
  509. package/dist/spaces/index.d.ts +2 -0
  510. package/dist/spaces/index.d.ts.map +1 -0
  511. package/dist/spaces/index.js +18 -0
  512. package/dist/spaces/index.js.map +1 -0
  513. package/dist/spaces/space-resolver.d.ts +10 -0
  514. package/dist/spaces/space-resolver.d.ts.map +1 -0
  515. package/dist/spaces/space-resolver.js +17 -0
  516. package/dist/spaces/space-resolver.js.map +1 -0
  517. package/dist/stores/in-memory-agent-store.d.ts +57 -0
  518. package/dist/stores/in-memory-agent-store.d.ts.map +1 -0
  519. package/dist/stores/in-memory-agent-store.js +304 -0
  520. package/dist/stores/in-memory-agent-store.js.map +1 -0
  521. package/dist/stores/redis-agent-store.d.ts +57 -0
  522. package/dist/stores/redis-agent-store.d.ts.map +1 -0
  523. package/dist/stores/redis-agent-store.js +163 -0
  524. package/dist/stores/redis-agent-store.js.map +1 -0
  525. package/dist/utils/public-url.d.ts +6 -0
  526. package/dist/utils/public-url.d.ts.map +1 -0
  527. package/dist/utils/public-url.js +33 -0
  528. package/dist/utils/public-url.js.map +1 -0
  529. package/dist/utils/rate-limiter.d.ts +32 -0
  530. package/dist/utils/rate-limiter.d.ts.map +1 -0
  531. package/dist/utils/rate-limiter.js +56 -0
  532. package/dist/utils/rate-limiter.js.map +1 -0
  533. package/package.json +63 -0
@@ -0,0 +1,864 @@
1
+ "use strict";
2
+ var __rest = (this && this.__rest) || function (s, e) {
3
+ var t = {};
4
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
5
+ t[p] = s[p];
6
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
7
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
8
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
9
+ t[p[i]] = s[p[i]];
10
+ }
11
+ return t;
12
+ };
13
+ Object.defineProperty(exports, "__esModule", { value: true });
14
+ exports.broadcastToAgent = broadcastToAgent;
15
+ exports.createAgentApi = createAgentApi;
16
+ const node_crypto_1 = require("node:crypto");
17
+ const zod_openapi_1 = require("@hono/zod-openapi");
18
+ const core_1 = require("@lobu/core");
19
+ const streaming_1 = require("hono/streaming");
20
+ const zod_1 = require("zod");
21
+ const api_auth_middleware_1 = require("../../auth/api-auth-middleware");
22
+ const module_system_1 = require("../../modules/module-system");
23
+ const platform_helpers_1 = require("../../services/platform-helpers");
24
+ const logger = (0, core_1.createLogger)("agent-api");
25
+ // =============================================================================
26
+ // Constants
27
+ // =============================================================================
28
+ const MAX_CONNECTIONS_PER_AGENT = 5;
29
+ const MAX_TOTAL_CONNECTIONS = 1000;
30
+ // SSE connection tracking
31
+ const sseConnections = new Map();
32
+ // =============================================================================
33
+ // Zod Schemas
34
+ // =============================================================================
35
+ const NetworkConfigSchema = zod_1.z.object({
36
+ allowedDomains: zod_1.z.array(zod_1.z.string()).optional(),
37
+ deniedDomains: zod_1.z.array(zod_1.z.string()).optional(),
38
+ });
39
+ const McpServerConfigSchema = zod_1.z.object({
40
+ url: zod_1.z.string().optional(),
41
+ type: zod_1.z.enum(["sse", "stdio"]).optional(),
42
+ command: zod_1.z.string().optional(),
43
+ args: zod_1.z.array(zod_1.z.string()).optional(),
44
+ env: zod_1.z.record(zod_1.z.string(), zod_1.z.string()).optional(),
45
+ headers: zod_1.z.record(zod_1.z.string(), zod_1.z.string()).optional(),
46
+ description: zod_1.z.string().optional(),
47
+ });
48
+ const NixConfigSchema = zod_1.z.object({
49
+ flakeUrl: zod_1.z.string().optional(),
50
+ packages: zod_1.z.array(zod_1.z.string()).optional(),
51
+ });
52
+ const CreateAgentRequestSchema = zod_1.z.object({
53
+ provider: zod_1.z.string().default("claude").optional(),
54
+ model: zod_1.z.string().optional(),
55
+ agentId: zod_1.z.string().min(1).optional(),
56
+ userId: zod_1.z.string().min(1).optional(),
57
+ thread: zod_1.z.string().optional(),
58
+ forceNew: zod_1.z.boolean().optional(),
59
+ dryRun: zod_1.z.boolean().optional(),
60
+ networkConfig: NetworkConfigSchema.optional(),
61
+ mcpServers: zod_1.z.record(zod_1.z.string(), McpServerConfigSchema).optional(),
62
+ nix: NixConfigSchema.optional(),
63
+ });
64
+ const CreateAgentResponseSchema = zod_1.z.object({
65
+ success: zod_1.z.boolean(),
66
+ agentId: zod_1.z.string(),
67
+ token: zod_1.z.string(),
68
+ expiresAt: zod_1.z.number(),
69
+ sseUrl: zod_1.z.string(),
70
+ messagesUrl: zod_1.z.string(),
71
+ });
72
+ const SlackRoutingInfoSchema = zod_1.z.object({
73
+ channel: zod_1.z.string().describe("Slack channel ID"),
74
+ thread: zod_1.z.string().optional().describe("Thread timestamp for replies"),
75
+ team: zod_1.z.string().optional().describe("Slack team ID"),
76
+ });
77
+ const SendMessageRequestSchema = zod_1.z
78
+ .object({
79
+ content: zod_1.z.string().optional().describe("Message content"),
80
+ message: zod_1.z
81
+ .string()
82
+ .optional()
83
+ .describe("Message content (alias for content)"),
84
+ messageId: zod_1.z.string().optional(),
85
+ platform: zod_1.z
86
+ .string()
87
+ .optional()
88
+ .describe("Target platform (api, slack, telegram)"),
89
+ slack: SlackRoutingInfoSchema.optional().describe("Slack-specific routing info (required when platform=slack)"),
90
+ })
91
+ .passthrough();
92
+ const SendMessageResponseSchema = zod_1.z.object({
93
+ success: zod_1.z.boolean(),
94
+ messageId: zod_1.z.string(),
95
+ agentId: zod_1.z.string().optional(),
96
+ jobId: zod_1.z.string().optional(),
97
+ eventsUrl: zod_1.z.string().optional(),
98
+ queued: zod_1.z.boolean(),
99
+ traceparent: zod_1.z.string().optional(),
100
+ });
101
+ const AgentStatusResponseSchema = zod_1.z.object({
102
+ success: zod_1.z.boolean(),
103
+ agent: zod_1.z.object({
104
+ agentId: zod_1.z.string(),
105
+ userId: zod_1.z.string(),
106
+ status: zod_1.z.string(),
107
+ createdAt: zod_1.z.number(),
108
+ lastActivity: zod_1.z.number(),
109
+ hasActiveConnection: zod_1.z.boolean(),
110
+ }),
111
+ });
112
+ const ErrorResponseSchema = zod_1.z.object({
113
+ success: zod_1.z.boolean(),
114
+ error: zod_1.z.string(),
115
+ details: zod_1.z.string().optional(),
116
+ });
117
+ const SuccessResponseSchema = zod_1.z.object({
118
+ success: zod_1.z.boolean(),
119
+ message: zod_1.z.string().optional(),
120
+ agentId: zod_1.z.string().optional(),
121
+ });
122
+ // Path parameters
123
+ const AgentIdParamSchema = zod_1.z.object({
124
+ agentId: zod_1.z.string(),
125
+ });
126
+ // =============================================================================
127
+ // Validation Helpers
128
+ // =============================================================================
129
+ function validateDomainPattern(pattern) {
130
+ if (!pattern || typeof pattern !== "string") {
131
+ return "Domain pattern must be a non-empty string";
132
+ }
133
+ const trimmed = pattern.trim().toLowerCase();
134
+ if (trimmed === "*")
135
+ return "Bare wildcard '*' is not allowed";
136
+ if (trimmed.includes("://"))
137
+ return `Domain pattern cannot contain protocol: ${pattern}`;
138
+ if (trimmed.includes("/"))
139
+ return `Domain pattern cannot contain path: ${pattern}`;
140
+ if (trimmed.includes(":") && !trimmed.includes("[")) {
141
+ return `Domain pattern cannot contain port: ${pattern}`;
142
+ }
143
+ if (trimmed.startsWith("*.") || trimmed.startsWith(".")) {
144
+ const domain = trimmed.startsWith("*.")
145
+ ? trimmed.substring(2)
146
+ : trimmed.substring(1);
147
+ if (!domain.includes(".")) {
148
+ return `Wildcard pattern too broad: ${pattern}`;
149
+ }
150
+ }
151
+ else if (!trimmed.includes(".")) {
152
+ return `Invalid domain pattern: ${pattern}`;
153
+ }
154
+ return null;
155
+ }
156
+ function validateNetworkConfig(config) {
157
+ for (const domains of [config.allowedDomains, config.deniedDomains]) {
158
+ if (domains) {
159
+ for (const domain of domains) {
160
+ const error = validateDomainPattern(domain);
161
+ if (error)
162
+ return error;
163
+ }
164
+ }
165
+ }
166
+ return null;
167
+ }
168
+ function validateMcpServerConfig(id, config) {
169
+ var _a;
170
+ if (!config.url && !config.command) {
171
+ return `MCP ${id}: must specify either 'url' or 'command'`;
172
+ }
173
+ if (config.url &&
174
+ !config.url.startsWith("http://") &&
175
+ !config.url.startsWith("https://")) {
176
+ return `MCP ${id}: url must be http:// or https://`;
177
+ }
178
+ if (config.command) {
179
+ const dangerousCommands = [
180
+ "rm",
181
+ "sudo",
182
+ "curl",
183
+ "wget",
184
+ "sh",
185
+ "bash",
186
+ "zsh",
187
+ "kill",
188
+ ];
189
+ const baseCommand = ((_a = config.command.split("/").pop()) === null || _a === void 0 ? void 0 : _a.split(" ")[0]) || "";
190
+ if (dangerousCommands.includes(baseCommand)) {
191
+ return `MCP ${id}: command '${baseCommand}' is not allowed`;
192
+ }
193
+ }
194
+ return null;
195
+ }
196
+ function validateMcpConfig(mcpServers) {
197
+ for (const [id, config] of Object.entries(mcpServers)) {
198
+ if (!/^[a-zA-Z0-9_-]+$/.test(id)) {
199
+ return `MCP ID '${id}' is invalid`;
200
+ }
201
+ const error = validateMcpServerConfig(id, config);
202
+ if (error)
203
+ return error;
204
+ }
205
+ return null;
206
+ }
207
+ // =============================================================================
208
+ // Broadcast Functions (exported for use by other modules)
209
+ // =============================================================================
210
+ function broadcastToAgent(agentId, event, data) {
211
+ const connections = sseConnections.get(agentId);
212
+ if (!connections || connections.size === 0)
213
+ return;
214
+ const deadConnections = new Set();
215
+ for (const res of connections) {
216
+ try {
217
+ if (res.closed || res.destroyed || res.writableEnded) {
218
+ deadConnections.add(res);
219
+ continue;
220
+ }
221
+ if (typeof res.writeSSE === "function") {
222
+ res.writeSSE({ event, data: JSON.stringify(data) });
223
+ }
224
+ else if (typeof res.write === "function") {
225
+ const message = `event: ${event}\ndata: ${JSON.stringify(data)}\n\n`;
226
+ res.write(message);
227
+ }
228
+ }
229
+ catch (_a) {
230
+ deadConnections.add(res);
231
+ }
232
+ }
233
+ for (const deadRes of deadConnections) {
234
+ connections.delete(deadRes);
235
+ }
236
+ if (connections.size === 0) {
237
+ sseConnections.delete(agentId);
238
+ }
239
+ }
240
+ // =============================================================================
241
+ // OpenAPI Route Definitions
242
+ // =============================================================================
243
+ const createAgentRoute = (0, zod_openapi_1.createRoute)({
244
+ method: "post",
245
+ path: "/api/v1/agents",
246
+ tags: ["Agents"],
247
+ summary: "Create a new agent",
248
+ security: [{ bearerAuth: [] }],
249
+ description: "Creates a new agent session and returns authentication credentials",
250
+ request: {
251
+ body: {
252
+ content: { "application/json": { schema: CreateAgentRequestSchema } },
253
+ },
254
+ },
255
+ responses: {
256
+ 201: {
257
+ description: "Agent created",
258
+ content: { "application/json": { schema: CreateAgentResponseSchema } },
259
+ },
260
+ 400: {
261
+ description: "Invalid request",
262
+ content: { "application/json": { schema: ErrorResponseSchema } },
263
+ },
264
+ 401: {
265
+ description: "Unauthorized",
266
+ content: { "application/json": { schema: ErrorResponseSchema } },
267
+ },
268
+ },
269
+ });
270
+ const getAgentRoute = (0, zod_openapi_1.createRoute)({
271
+ method: "get",
272
+ path: "/api/v1/agents/{agentId}",
273
+ tags: ["Agents"],
274
+ summary: "Get agent status",
275
+ security: [{ bearerAuth: [] }],
276
+ request: { params: AgentIdParamSchema },
277
+ responses: {
278
+ 200: {
279
+ description: "Agent status",
280
+ content: { "application/json": { schema: AgentStatusResponseSchema } },
281
+ },
282
+ 401: {
283
+ description: "Unauthorized",
284
+ content: { "application/json": { schema: ErrorResponseSchema } },
285
+ },
286
+ 404: {
287
+ description: "Not found",
288
+ content: { "application/json": { schema: ErrorResponseSchema } },
289
+ },
290
+ },
291
+ });
292
+ const deleteAgentRoute = (0, zod_openapi_1.createRoute)({
293
+ method: "delete",
294
+ path: "/api/v1/agents/{agentId}",
295
+ tags: ["Agents"],
296
+ summary: "Delete an agent",
297
+ security: [{ bearerAuth: [] }],
298
+ request: { params: AgentIdParamSchema },
299
+ responses: {
300
+ 200: {
301
+ description: "Agent deleted",
302
+ content: { "application/json": { schema: SuccessResponseSchema } },
303
+ },
304
+ 401: {
305
+ description: "Unauthorized",
306
+ content: { "application/json": { schema: ErrorResponseSchema } },
307
+ },
308
+ 404: {
309
+ description: "Not found",
310
+ content: { "application/json": { schema: ErrorResponseSchema } },
311
+ },
312
+ },
313
+ });
314
+ const getAgentEventsRoute = (0, zod_openapi_1.createRoute)({
315
+ method: "get",
316
+ path: "/api/v1/agents/{agentId}/events",
317
+ tags: ["Messages"],
318
+ summary: "Subscribe to agent events (SSE)",
319
+ description: "Server-Sent Events stream for real-time agent updates",
320
+ security: [{ bearerAuth: [] }],
321
+ request: { params: AgentIdParamSchema },
322
+ responses: {
323
+ 200: {
324
+ description: "SSE stream",
325
+ content: { "text/event-stream": { schema: zod_1.z.string() } },
326
+ },
327
+ 401: {
328
+ description: "Unauthorized",
329
+ content: { "application/json": { schema: ErrorResponseSchema } },
330
+ },
331
+ 429: {
332
+ description: "Too many connections",
333
+ content: { "application/json": { schema: ErrorResponseSchema } },
334
+ },
335
+ },
336
+ });
337
+ const sendMessageRoute = (0, zod_openapi_1.createRoute)({
338
+ method: "post",
339
+ path: "/api/v1/agents/{agentId}/messages",
340
+ tags: ["Messages"],
341
+ summary: "Send a message to the agent",
342
+ description: "Send a message to an agent. Supports JSON body or multipart form data for file uploads. " +
343
+ "When platform is specified, the message is routed through the platform adapter.",
344
+ security: [{ bearerAuth: [] }],
345
+ request: {
346
+ params: AgentIdParamSchema,
347
+ body: {
348
+ content: {
349
+ "application/json": { schema: SendMessageRequestSchema },
350
+ },
351
+ },
352
+ },
353
+ responses: {
354
+ 200: {
355
+ description: "Message queued",
356
+ content: { "application/json": { schema: SendMessageResponseSchema } },
357
+ },
358
+ 400: {
359
+ description: "Invalid request",
360
+ content: { "application/json": { schema: ErrorResponseSchema } },
361
+ },
362
+ 401: {
363
+ description: "Unauthorized",
364
+ content: { "application/json": { schema: ErrorResponseSchema } },
365
+ },
366
+ 403: {
367
+ description: "Forbidden - worker tokens cannot route to platforms",
368
+ content: { "application/json": { schema: ErrorResponseSchema } },
369
+ },
370
+ 404: {
371
+ description: "Agent not found",
372
+ content: { "application/json": { schema: ErrorResponseSchema } },
373
+ },
374
+ },
375
+ });
376
+ function createAgentApi(configOrQueue, sessionManager, publicGatewayUrl) {
377
+ const config = configOrQueue instanceof Object && "queueProducer" in configOrQueue
378
+ ? configOrQueue
379
+ : {
380
+ queueProducer: configOrQueue,
381
+ sessionManager: sessionManager,
382
+ publicGatewayUrl: publicGatewayUrl,
383
+ };
384
+ const { queueProducer, adminPassword, cliTokenService, agentSettingsStore, agentConfigStore, platformRegistry, } = config;
385
+ const sessMgr = config.sessionManager;
386
+ const pubUrl = config.publicGatewayUrl;
387
+ const app = new zod_openapi_1.OpenAPIHono();
388
+ // Unified auth middleware for all agent API routes
389
+ app.use("/api/v1/agents/*", (0, api_auth_middleware_1.createApiAuthMiddleware)({
390
+ adminPassword,
391
+ cliTokenService,
392
+ externalAuthClient: config.externalAuthClient,
393
+ allowSettingsSession: true,
394
+ }));
395
+ // =============================================================================
396
+ // Route Handlers
397
+ // =============================================================================
398
+ // POST /api/v1/agents - Create agent
399
+ app.openapi(createAgentRoute, async (c) => {
400
+ var _a, _b;
401
+ const body = c.req.valid("json");
402
+ const { provider = "claude", model, agentId: requestedAgentId, userId: requestedUserId, thread, forceNew, dryRun, networkConfig, mcpServers, nix: nixConfig, } = body;
403
+ // Validate provider
404
+ if (provider && !["claude"].includes(provider)) {
405
+ return c.json({ success: false, error: "Invalid provider. Supported: claude" }, 400);
406
+ }
407
+ // Validate network config
408
+ if (networkConfig) {
409
+ const error = validateNetworkConfig(networkConfig);
410
+ if (error)
411
+ return c.json({ success: false, error }, 400);
412
+ }
413
+ // Validate MCP config
414
+ if (mcpServers) {
415
+ const error = validateMcpConfig(mcpServers);
416
+ if (error)
417
+ return c.json({ success: false, error }, 400);
418
+ }
419
+ const isEphemeral = !(requestedAgentId === null || requestedAgentId === void 0 ? void 0 : requestedAgentId.trim());
420
+ const agentId = (requestedAgentId === null || requestedAgentId === void 0 ? void 0 : requestedAgentId.trim()) || (0, node_crypto_1.randomUUID)();
421
+ // For ephemeral agents, auto-provision settings so the worker gets provider config
422
+ if (isEphemeral && agentSettingsStore) {
423
+ // Try system-key providers first (env var based API keys)
424
+ const providerModules = (0, module_system_1.getModelProviderModules)();
425
+ const systemProviders = providerModules
426
+ .filter((m) => m.hasSystemKey())
427
+ .map((m) => ({
428
+ providerId: m.providerId,
429
+ installedAt: Date.now(),
430
+ }));
431
+ if (systemProviders.length > 0) {
432
+ // Also inherit pluginsConfig from template agent if available
433
+ const templateId = agentConfigStore
434
+ ? await (0, core_1.findTemplateAgentId)(agentConfigStore)
435
+ : await agentSettingsStore.findTemplateAgentId();
436
+ const templateSettings = templateId
437
+ ? await ((_a = agentConfigStore === null || agentConfigStore === void 0 ? void 0 : agentConfigStore.getSettings(templateId)) !== null && _a !== void 0 ? _a : agentSettingsStore.getSettings(templateId))
438
+ : null;
439
+ await agentSettingsStore.saveSettings(agentId, {
440
+ installedProviders: systemProviders,
441
+ pluginsConfig: templateSettings === null || templateSettings === void 0 ? void 0 : templateSettings.pluginsConfig,
442
+ });
443
+ logger.info(`Ephemeral agent ${agentId}: provisioned system providers [${systemProviders.map((p) => p.providerId).join(", ")}]`);
444
+ }
445
+ else {
446
+ // Fall back to using an existing agent as template (inherits its providers)
447
+ const templateId = agentConfigStore
448
+ ? await (0, core_1.findTemplateAgentId)(agentConfigStore)
449
+ : await agentSettingsStore.findTemplateAgentId();
450
+ if (templateId) {
451
+ const templateSettings = await ((_b = agentConfigStore === null || agentConfigStore === void 0 ? void 0 : agentConfigStore.getSettings(templateId)) !== null && _b !== void 0 ? _b : agentSettingsStore.getSettings(templateId));
452
+ await agentSettingsStore.saveSettings(agentId, {
453
+ templateAgentId: templateId,
454
+ pluginsConfig: templateSettings === null || templateSettings === void 0 ? void 0 : templateSettings.pluginsConfig,
455
+ });
456
+ logger.info(`Ephemeral agent ${agentId}: using template ${templateId}`);
457
+ }
458
+ }
459
+ }
460
+ const userId = requestedUserId || agentId;
461
+ // Build composite conversationId for user-specific sessions
462
+ // Uses _ separator (colons not allowed in BullMQ custom IDs)
463
+ const conversationId = thread
464
+ ? `${agentId}_${userId}_${thread}`
465
+ : `${agentId}_${userId}`;
466
+ const channelId = `api_${userId}`;
467
+ const deploymentName = `api-${agentId.slice(0, 8)}`;
468
+ // Try to resume existing session (unless forceNew is requested)
469
+ if (!forceNew) {
470
+ const existing = await sessMgr.getSession(conversationId);
471
+ if (existing) {
472
+ // Reuse existing session — touch lastActivity and return existing token
473
+ await sessMgr.touchSession(conversationId);
474
+ const token = (0, core_1.generateWorkerToken)(agentId, conversationId, deploymentName, {
475
+ channelId,
476
+ agentId,
477
+ platform: "api",
478
+ sessionKey: userId,
479
+ });
480
+ const expiresAt = Date.now() + api_auth_middleware_1.TOKEN_EXPIRATION_MS;
481
+ const baseUrl = pubUrl || "http://localhost:8080";
482
+ logger.info(`Resumed API session: ${conversationId} (agent=${agentId})`);
483
+ return c.json({
484
+ success: true,
485
+ agentId: conversationId,
486
+ token,
487
+ expiresAt,
488
+ sseUrl: `${baseUrl}/api/v1/agents/${conversationId}/events`,
489
+ messagesUrl: `${baseUrl}/api/v1/agents/${conversationId}/messages`,
490
+ }, 201);
491
+ }
492
+ }
493
+ const token = (0, core_1.generateWorkerToken)(agentId, conversationId, deploymentName, {
494
+ channelId,
495
+ agentId,
496
+ platform: "api",
497
+ sessionKey: userId,
498
+ });
499
+ const expiresAt = Date.now() + api_auth_middleware_1.TOKEN_EXPIRATION_MS;
500
+ const session = {
501
+ conversationId,
502
+ channelId,
503
+ userId,
504
+ threadCreator: userId,
505
+ lastActivity: Date.now(),
506
+ createdAt: Date.now(),
507
+ status: "created",
508
+ provider,
509
+ model,
510
+ networkConfig: networkConfig,
511
+ mcpConfig: mcpServers
512
+ ? { mcpServers: mcpServers }
513
+ : undefined,
514
+ nixConfig,
515
+ agentId,
516
+ dryRun: dryRun || false,
517
+ };
518
+ await sessMgr.setSession(session);
519
+ logger.info(`Created API agent: ${conversationId} (agent=${agentId})`);
520
+ const baseUrl = pubUrl || "http://localhost:8080";
521
+ return c.json({
522
+ success: true,
523
+ agentId: conversationId,
524
+ token,
525
+ expiresAt,
526
+ sseUrl: `${baseUrl}/api/v1/agents/${conversationId}/events`,
527
+ messagesUrl: `${baseUrl}/api/v1/agents/${conversationId}/messages`,
528
+ }, 201);
529
+ });
530
+ // GET /api/v1/agents/:agentId - Get status
531
+ app.openapi(getAgentRoute, async (c) => {
532
+ var _a, _b;
533
+ const { agentId: sessionKey } = c.req.valid("param");
534
+ const session = await sessMgr.getSession(sessionKey);
535
+ if (!session) {
536
+ return c.json({ success: false, error: "Agent not found" }, 404);
537
+ }
538
+ const hasActiveConnection = sseConnections.has(sessionKey) &&
539
+ ((_b = (_a = sseConnections.get(sessionKey)) === null || _a === void 0 ? void 0 : _a.size) !== null && _b !== void 0 ? _b : 0) > 0;
540
+ return c.json({
541
+ success: true,
542
+ agent: {
543
+ agentId: session.conversationId,
544
+ userId: session.userId,
545
+ status: session.status || "active",
546
+ createdAt: session.createdAt,
547
+ lastActivity: session.lastActivity,
548
+ hasActiveConnection,
549
+ },
550
+ });
551
+ });
552
+ // DELETE /api/v1/agents/:agentId
553
+ app.openapi(deleteAgentRoute, async (c) => {
554
+ var _a, _b;
555
+ const { agentId: sessionKey } = c.req.valid("param");
556
+ const connections = sseConnections.get(sessionKey);
557
+ if (connections) {
558
+ for (const connection of connections) {
559
+ try {
560
+ if (typeof connection.writeSSE === "function") {
561
+ connection.writeSSE({
562
+ event: "closed",
563
+ data: JSON.stringify({ reason: "agent_deleted" }),
564
+ });
565
+ }
566
+ else if (typeof connection.write === "function") {
567
+ connection.write(`event: closed\ndata: ${JSON.stringify({ reason: "agent_deleted" })}\n\n`);
568
+ }
569
+ (_a = connection.close) === null || _a === void 0 ? void 0 : _a.call(connection);
570
+ (_b = connection.end) === null || _b === void 0 ? void 0 : _b.call(connection);
571
+ }
572
+ catch (_c) {
573
+ // Ignore
574
+ }
575
+ }
576
+ sseConnections.delete(sessionKey);
577
+ }
578
+ // Get real agentId from session before deleting
579
+ const session = await sessMgr.getSession(sessionKey);
580
+ const realAgentId = (session === null || session === void 0 ? void 0 : session.agentId) || sessionKey;
581
+ await sessMgr.deleteSession(sessionKey);
582
+ // Clean up ephemeral agent settings
583
+ if (agentSettingsStore) {
584
+ await agentSettingsStore.deleteSettings(realAgentId).catch(() => {
585
+ /* best-effort cleanup */
586
+ });
587
+ }
588
+ logger.info(`Deleted agent ${sessionKey}`);
589
+ return c.json({
590
+ success: true,
591
+ message: "Agent deleted",
592
+ agentId: sessionKey,
593
+ });
594
+ });
595
+ // GET /api/v1/agents/:agentId/events - SSE stream
596
+ app.openapi(getAgentEventsRoute, async (c) => {
597
+ const { agentId: sessionKey } = c.req.valid("param");
598
+ const session = await sessMgr.getSession(sessionKey);
599
+ if (!session) {
600
+ return c.json({ success: false, error: "Agent not found" }, 404);
601
+ }
602
+ // Check connection limits
603
+ const totalConnections = Array.from(sseConnections.values()).reduce((acc, set) => acc + set.size, 0);
604
+ if (totalConnections >= MAX_TOTAL_CONNECTIONS) {
605
+ return c.json({ success: false, error: "Server connection limit reached" }, 429);
606
+ }
607
+ // Use conversationId as the SSE connection key (matches broadcastToAgent calls)
608
+ const sseKey = session.conversationId;
609
+ if (!sseConnections.has(sseKey)) {
610
+ sseConnections.set(sseKey, new Set());
611
+ }
612
+ const agentConnections = sseConnections.get(sseKey);
613
+ if (agentConnections.size >= MAX_CONNECTIONS_PER_AGENT) {
614
+ return c.json({
615
+ success: false,
616
+ error: `Maximum ${MAX_CONNECTIONS_PER_AGENT} connections`,
617
+ }, 429);
618
+ }
619
+ // Return SSE stream
620
+ return (0, streaming_1.streamSSE)(c, async (stream) => {
621
+ agentConnections.add(stream);
622
+ await stream.writeSSE({
623
+ event: "connected",
624
+ data: JSON.stringify({
625
+ agentId: session.agentId || sessionKey,
626
+ timestamp: Date.now(),
627
+ }),
628
+ });
629
+ const heartbeatInterval = setInterval(async () => {
630
+ try {
631
+ await stream.writeSSE({
632
+ event: "ping",
633
+ data: JSON.stringify({ timestamp: Date.now() }),
634
+ });
635
+ }
636
+ catch (_a) {
637
+ clearInterval(heartbeatInterval);
638
+ }
639
+ }, 30000);
640
+ stream.onAbort(() => {
641
+ clearInterval(heartbeatInterval);
642
+ agentConnections.delete(stream);
643
+ if (agentConnections.size === 0) {
644
+ sseConnections.delete(sseKey);
645
+ }
646
+ logger.info(`SSE connection closed for session ${sseKey}`);
647
+ });
648
+ while (true) {
649
+ await stream.sleep(1000);
650
+ }
651
+ });
652
+ });
653
+ // POST /api/v1/agents/:agentId/messages - Send message
654
+ // Supports two paths:
655
+ // 1. Direct API (no platform field): requires pre-created session, enqueues directly
656
+ // 2. Platform-routed (platform field present): delegates to platform adapter
657
+ app.openapi(sendMessageRoute, async (c) => {
658
+ const { agentId } = c.req.valid("param");
659
+ // Parse body — multipart for file uploads, JSON otherwise
660
+ const contentType = c.req.header("content-type") || "";
661
+ let body;
662
+ let files;
663
+ if (contentType.includes("multipart/form-data")) {
664
+ const formData = await c.req.formData();
665
+ body = {
666
+ content: formData.get("content"),
667
+ message: formData.get("message"),
668
+ messageId: formData.get("messageId"),
669
+ platform: formData.get("platform"),
670
+ };
671
+ // Extract nested platform routing from form fields
672
+ const slackChannel = formData.get("slack.channel");
673
+ if (slackChannel) {
674
+ body.slack = {
675
+ channel: slackChannel,
676
+ thread: formData.get("slack.thread"),
677
+ team: formData.get("slack.team"),
678
+ };
679
+ }
680
+ const whatsappChat = formData.get("whatsapp.chat");
681
+ if (whatsappChat) {
682
+ body.whatsapp = { chat: whatsappChat };
683
+ }
684
+ const telegramChatId = formData.get("telegram.chatId");
685
+ if (telegramChatId) {
686
+ body.telegram = { chatId: telegramChatId };
687
+ }
688
+ // Extract files with size validation
689
+ const MAX_FILE_SIZE = 50 * 1024 * 1024;
690
+ const MAX_TOTAL_SIZE = 100 * 1024 * 1024;
691
+ const MAX_FILE_COUNT = 10;
692
+ const fileEntries = formData.getAll("files");
693
+ if (fileEntries.length > MAX_FILE_COUNT) {
694
+ return c.json({
695
+ success: false,
696
+ error: `Too many files: ${fileEntries.length} (max ${MAX_FILE_COUNT})`,
697
+ }, 400);
698
+ }
699
+ if (fileEntries.length > 0) {
700
+ const fileResults = [];
701
+ let totalSize = 0;
702
+ for (const entry of fileEntries) {
703
+ if (entry instanceof File) {
704
+ if (entry.size > MAX_FILE_SIZE) {
705
+ return c.json({
706
+ success: false,
707
+ error: `File "${entry.name}" exceeds maximum size of ${MAX_FILE_SIZE / 1024 / 1024}MB`,
708
+ }, 400);
709
+ }
710
+ totalSize += entry.size;
711
+ if (totalSize > MAX_TOTAL_SIZE) {
712
+ return c.json({
713
+ success: false,
714
+ error: `Total upload size exceeds maximum of ${MAX_TOTAL_SIZE / 1024 / 1024}MB`,
715
+ }, 400);
716
+ }
717
+ const arrayBuffer = await entry.arrayBuffer();
718
+ fileResults.push({
719
+ buffer: Buffer.from(arrayBuffer),
720
+ filename: entry.name,
721
+ });
722
+ }
723
+ }
724
+ if (fileResults.length > 0)
725
+ files = fileResults;
726
+ }
727
+ }
728
+ else {
729
+ body = c.req.valid("json");
730
+ }
731
+ const messageContent = body.content || body.message;
732
+ const messageId = body.messageId || (0, node_crypto_1.randomUUID)();
733
+ if (!messageContent || typeof messageContent !== "string") {
734
+ return c.json({ success: false, error: "content is required" }, 400);
735
+ }
736
+ const platform = body.platform;
737
+ // ── Platform-routed path ──────────────────────────────────────────────────
738
+ // When platform is specified, delegate to the platform adapter which handles
739
+ // session creation, routing, and file delivery.
740
+ if (platform) {
741
+ // Worker tokens cannot route to user-facing platform connections
742
+ const authHeader = c.req.header("Authorization");
743
+ const rawToken = (authHeader === null || authHeader === void 0 ? void 0 : authHeader.startsWith("Bearer "))
744
+ ? authHeader.substring(7)
745
+ : "";
746
+ if ((0, core_1.verifyWorkerToken)(rawToken)) {
747
+ return c.json({ success: false, error: "Worker tokens cannot route to platforms" }, 403);
748
+ }
749
+ if (!platformRegistry) {
750
+ return c.json({ success: false, error: "Platform routing not available" }, 501);
751
+ }
752
+ const adapter = platformRegistry.get(platform);
753
+ if (!adapter) {
754
+ return c.json({
755
+ success: false,
756
+ error: `Platform "${platform}" not found`,
757
+ details: `Available: ${platformRegistry.getAvailablePlatforms().join(", ")}`,
758
+ }, 404);
759
+ }
760
+ if (!adapter.sendMessage) {
761
+ return c.json({
762
+ success: false,
763
+ error: `Platform "${platform}" does not support sendMessage`,
764
+ }, 501);
765
+ }
766
+ // Extract platform-specific routing info
767
+ let channelId = agentId;
768
+ let conversationId = platform === "api" ? agentId : undefined;
769
+ let teamId = "api";
770
+ if (adapter.extractRoutingInfo) {
771
+ const routingInfo = adapter.extractRoutingInfo(body);
772
+ if (routingInfo) {
773
+ channelId = routingInfo.channelId;
774
+ conversationId = routingInfo.conversationId || conversationId;
775
+ teamId = routingInfo.teamId || "api";
776
+ }
777
+ else if (platform !== "api") {
778
+ return c.json({
779
+ success: false,
780
+ error: `Platform-specific routing info required for ${platform}`,
781
+ }, 400);
782
+ }
783
+ }
784
+ logger.info(`Sending message via ${platform}: agentId=${agentId}, channelId=${channelId}${(files === null || files === void 0 ? void 0 : files.length) ? `, files=${files.length}` : ""}`);
785
+ try {
786
+ const result = await adapter.sendMessage(rawToken, messageContent, {
787
+ agentId,
788
+ channelId,
789
+ conversationId,
790
+ teamId,
791
+ files,
792
+ });
793
+ return c.json({
794
+ success: true,
795
+ agentId,
796
+ messageId: result.messageId,
797
+ eventsUrl: result.eventsUrl,
798
+ queued: result.queued || false,
799
+ });
800
+ }
801
+ catch (error) {
802
+ logger.error("Failed to send platform message", { error });
803
+ return c.json({ success: false, error: "Internal server error" }, 500);
804
+ }
805
+ }
806
+ // ── Direct API path ───────────────────────────────────────────────────────
807
+ // No platform field: use existing session-based direct enqueue
808
+ const session = await sessMgr.getSession(agentId);
809
+ if (!session) {
810
+ return c.json({ success: false, error: "Agent not found" }, 404);
811
+ }
812
+ await sessMgr.touchSession(agentId);
813
+ const realAgentId = session.agentId || agentId;
814
+ const { span: rootSpan, traceparent } = (0, core_1.createRootSpan)("message_received", {
815
+ "lobu.agent_id": realAgentId,
816
+ "lobu.message_id": messageId,
817
+ });
818
+ try {
819
+ const channelId = session.channelId || `api_${session.userId}`;
820
+ const baseOptions = {
821
+ provider: session.provider || "claude",
822
+ model: session.model,
823
+ };
824
+ const agentOptions = await (0, platform_helpers_1.resolveAgentOptions)(realAgentId, baseOptions, agentSettingsStore);
825
+ const { networkConfig: settingsNetwork, mcpServers: settingsMcpServers } = agentOptions, remainingOptions = __rest(agentOptions, ["networkConfig", "mcpServers"]);
826
+ const jobId = await queueProducer.enqueueMessage({
827
+ userId: session.userId,
828
+ conversationId: session.conversationId || agentId,
829
+ messageId,
830
+ channelId,
831
+ teamId: "api",
832
+ agentId: realAgentId,
833
+ botId: "lobu-api",
834
+ platform: "api",
835
+ messageText: messageContent,
836
+ platformMetadata: {
837
+ agentId: realAgentId,
838
+ source: "direct-api",
839
+ traceparent: traceparent || undefined,
840
+ dryRun: session.dryRun || false,
841
+ },
842
+ agentOptions: remainingOptions,
843
+ networkConfig: session.networkConfig || settingsNetwork,
844
+ mcpConfig: session.mcpConfig ||
845
+ (settingsMcpServers ? { mcpServers: settingsMcpServers } : undefined),
846
+ });
847
+ rootSpan === null || rootSpan === void 0 ? void 0 : rootSpan.end();
848
+ return c.json({
849
+ success: true,
850
+ messageId,
851
+ jobId,
852
+ queued: true,
853
+ traceparent: traceparent || undefined,
854
+ });
855
+ }
856
+ catch (error) {
857
+ rootSpan === null || rootSpan === void 0 ? void 0 : rootSpan.end();
858
+ throw error;
859
+ }
860
+ });
861
+ logger.debug("Hono Agent API routes registered");
862
+ return app;
863
+ }
864
+ //# sourceMappingURL=agent.js.map