lua-cli 3.5.0-beta.1 → 3.5.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 (427) hide show
  1. package/dist/api/agent.api.service.d.ts +1 -0
  2. package/dist/api/agent.api.service.d.ts.map +1 -0
  3. package/dist/api/auth.api.service.d.ts +1 -0
  4. package/dist/api/auth.api.service.d.ts.map +1 -0
  5. package/dist/api/backup.api.service.d.ts +10 -12
  6. package/dist/api/backup.api.service.d.ts.map +1 -0
  7. package/dist/api/backup.api.service.js +11 -11
  8. package/dist/api/backup.api.service.js.map +1 -1
  9. package/dist/api/basket.api.service.d.ts +1 -0
  10. package/dist/api/basket.api.service.d.ts.map +1 -0
  11. package/dist/api/cdn.api.service.d.ts +1 -0
  12. package/dist/api/cdn.api.service.d.ts.map +1 -0
  13. package/dist/api/cdn.api.service.js.map +1 -1
  14. package/dist/api/chat.api.service.d.ts +1 -0
  15. package/dist/api/chat.api.service.d.ts.map +1 -0
  16. package/dist/api/credentials.d.ts +1 -0
  17. package/dist/api/credentials.d.ts.map +1 -0
  18. package/dist/api/custom.data.api.service.d.ts +1 -0
  19. package/dist/api/custom.data.api.service.d.ts.map +1 -0
  20. package/dist/api/developer.api.service.d.ts +1 -0
  21. package/dist/api/developer.api.service.d.ts.map +1 -0
  22. package/dist/api/http.client.d.ts +1 -0
  23. package/dist/api/http.client.d.ts.map +1 -0
  24. package/dist/api/http.client.js +5 -1
  25. package/dist/api/http.client.js.map +1 -1
  26. package/dist/api/job.api.service.d.ts +1 -0
  27. package/dist/api/job.api.service.d.ts.map +1 -0
  28. package/dist/api/lazy-instances.d.ts +1 -0
  29. package/dist/api/lazy-instances.d.ts.map +1 -0
  30. package/dist/api/logs.api.service.d.ts +1 -0
  31. package/dist/api/logs.api.service.d.ts.map +1 -0
  32. package/dist/api/marketplace.api.service.d.ts +1 -0
  33. package/dist/api/marketplace.api.service.d.ts.map +1 -0
  34. package/dist/api/order.api.service.d.ts +1 -0
  35. package/dist/api/order.api.service.d.ts.map +1 -0
  36. package/dist/api/persona.api.service.d.ts +1 -0
  37. package/dist/api/persona.api.service.d.ts.map +1 -0
  38. package/dist/api/postprocessor.api.service.d.ts +1 -0
  39. package/dist/api/postprocessor.api.service.d.ts.map +1 -0
  40. package/dist/api/preprocessor.api.service.d.ts +1 -0
  41. package/dist/api/preprocessor.api.service.d.ts.map +1 -0
  42. package/dist/api/products.api.service.d.ts +1 -0
  43. package/dist/api/products.api.service.d.ts.map +1 -0
  44. package/dist/api/resource.api.service.d.ts +1 -0
  45. package/dist/api/resource.api.service.d.ts.map +1 -0
  46. package/dist/api/skills.api.service.d.ts +1 -0
  47. package/dist/api/skills.api.service.d.ts.map +1 -0
  48. package/dist/api/tool.api.service.d.ts +1 -0
  49. package/dist/api/tool.api.service.d.ts.map +1 -0
  50. package/dist/api/unifiedto.api.service.d.ts +31 -2
  51. package/dist/api/unifiedto.api.service.d.ts.map +1 -0
  52. package/dist/api/unifiedto.api.service.js +17 -2
  53. package/dist/api/unifiedto.api.service.js.map +1 -1
  54. package/dist/api/user.data.api.service.d.ts +1 -0
  55. package/dist/api/user.data.api.service.d.ts.map +1 -0
  56. package/dist/api/webhook.api.service.d.ts +1 -0
  57. package/dist/api/webhook.api.service.d.ts.map +1 -0
  58. package/dist/api/whatsapp-templates.api.service.d.ts +1 -0
  59. package/dist/api/whatsapp-templates.api.service.d.ts.map +1 -0
  60. package/dist/api-exports.d.ts +1 -0
  61. package/dist/api-exports.d.ts.map +1 -0
  62. package/dist/cli/command-definitions.d.ts +1 -0
  63. package/dist/cli/command-definitions.d.ts.map +1 -0
  64. package/dist/cli/command-definitions.js +9 -1
  65. package/dist/cli/command-definitions.js.map +1 -1
  66. package/dist/commands/admin.d.ts +1 -0
  67. package/dist/commands/admin.d.ts.map +1 -0
  68. package/dist/commands/agents.d.ts +1 -0
  69. package/dist/commands/agents.d.ts.map +1 -0
  70. package/dist/commands/apiKey.d.ts +1 -0
  71. package/dist/commands/apiKey.d.ts.map +1 -0
  72. package/dist/commands/channels.d.ts +1 -0
  73. package/dist/commands/channels.d.ts.map +1 -0
  74. package/dist/commands/channels.js +65 -34
  75. package/dist/commands/channels.js.map +1 -1
  76. package/dist/commands/chat.d.ts +1 -0
  77. package/dist/commands/chat.d.ts.map +1 -0
  78. package/dist/commands/chatClear.d.ts +1 -0
  79. package/dist/commands/chatClear.d.ts.map +1 -0
  80. package/dist/commands/compile.d.ts +1 -1
  81. package/dist/commands/compile.d.ts.map +1 -0
  82. package/dist/commands/compile.js +14 -10
  83. package/dist/commands/compile.js.map +1 -1
  84. package/dist/commands/completion.d.ts +1 -0
  85. package/dist/commands/completion.d.ts.map +1 -0
  86. package/dist/commands/configure.d.ts +1 -0
  87. package/dist/commands/configure.d.ts.map +1 -0
  88. package/dist/commands/deploy.d.ts +1 -0
  89. package/dist/commands/deploy.d.ts.map +1 -0
  90. package/dist/commands/destroy.d.ts +1 -0
  91. package/dist/commands/destroy.d.ts.map +1 -0
  92. package/dist/commands/dev.d.ts +1 -0
  93. package/dist/commands/dev.d.ts.map +1 -0
  94. package/dist/commands/docs.d.ts +1 -0
  95. package/dist/commands/docs.d.ts.map +1 -0
  96. package/dist/commands/env.d.ts +1 -0
  97. package/dist/commands/env.d.ts.map +1 -0
  98. package/dist/commands/evals.d.ts +1 -0
  99. package/dist/commands/evals.d.ts.map +1 -0
  100. package/dist/commands/features.d.ts +1 -0
  101. package/dist/commands/features.d.ts.map +1 -0
  102. package/dist/commands/index.d.ts +2 -0
  103. package/dist/commands/index.d.ts.map +1 -0
  104. package/dist/commands/index.js +1 -0
  105. package/dist/commands/index.js.map +1 -1
  106. package/dist/commands/init.d.ts +1 -0
  107. package/dist/commands/init.d.ts.map +1 -0
  108. package/dist/commands/integrations.d.ts +1 -0
  109. package/dist/commands/integrations.d.ts.map +1 -0
  110. package/dist/commands/integrations.js +112 -251
  111. package/dist/commands/integrations.js.map +1 -1
  112. package/dist/commands/jobs.d.ts +1 -0
  113. package/dist/commands/jobs.d.ts.map +1 -0
  114. package/dist/commands/logs.d.ts +1 -0
  115. package/dist/commands/logs.d.ts.map +1 -0
  116. package/dist/commands/marketplace.d.ts +1 -0
  117. package/dist/commands/marketplace.d.ts.map +1 -0
  118. package/dist/commands/mcp.d.ts +1 -0
  119. package/dist/commands/mcp.d.ts.map +1 -0
  120. package/dist/commands/persona.d.ts +1 -0
  121. package/dist/commands/persona.d.ts.map +1 -0
  122. package/dist/commands/postprocessors.d.ts +1 -0
  123. package/dist/commands/postprocessors.d.ts.map +1 -0
  124. package/dist/commands/preprocessors.d.ts +1 -0
  125. package/dist/commands/preprocessors.d.ts.map +1 -0
  126. package/dist/commands/production.d.ts +1 -0
  127. package/dist/commands/production.d.ts.map +1 -0
  128. package/dist/commands/push.d.ts +1 -0
  129. package/dist/commands/push.d.ts.map +1 -0
  130. package/dist/commands/push.js +79 -6
  131. package/dist/commands/push.js.map +1 -1
  132. package/dist/commands/pushBackup.d.ts +4 -2
  133. package/dist/commands/pushBackup.d.ts.map +1 -0
  134. package/dist/commands/pushBackup.js +11 -20
  135. package/dist/commands/pushBackup.js.map +1 -1
  136. package/dist/commands/resources.d.ts +1 -0
  137. package/dist/commands/resources.d.ts.map +1 -0
  138. package/dist/commands/skills.d.ts +1 -0
  139. package/dist/commands/skills.d.ts.map +1 -0
  140. package/dist/commands/sync.d.ts +1 -0
  141. package/dist/commands/sync.d.ts.map +1 -0
  142. package/dist/commands/sync.js +9 -5
  143. package/dist/commands/sync.js.map +1 -1
  144. package/dist/commands/test.d.ts +1 -0
  145. package/dist/commands/test.d.ts.map +1 -0
  146. package/dist/commands/update.d.ts +14 -0
  147. package/dist/commands/update.d.ts.map +1 -0
  148. package/dist/commands/update.js +81 -0
  149. package/dist/commands/update.js.map +1 -0
  150. package/dist/commands/webhooks.d.ts +1 -0
  151. package/dist/commands/webhooks.d.ts.map +1 -0
  152. package/dist/compiler/agent-traverser.d.ts +2 -0
  153. package/dist/compiler/agent-traverser.d.ts.map +1 -0
  154. package/dist/compiler/agent-traverser.js +11 -4
  155. package/dist/compiler/agent-traverser.js.map +1 -1
  156. package/dist/compiler/bundler.d.ts +2 -1
  157. package/dist/compiler/bundler.d.ts.map +1 -0
  158. package/dist/compiler/bundler.js +2 -1
  159. package/dist/compiler/bundler.js.map +1 -1
  160. package/dist/compiler/compiler.d.ts +1 -0
  161. package/dist/compiler/compiler.d.ts.map +1 -0
  162. package/dist/compiler/compiler.js +3 -2
  163. package/dist/compiler/compiler.js.map +1 -1
  164. package/dist/compiler/index.d.ts +2 -1
  165. package/dist/compiler/index.d.ts.map +1 -0
  166. package/dist/compiler/index.js +1 -1
  167. package/dist/compiler/index.js.map +1 -1
  168. package/dist/compiler/plugins/base.d.ts +22 -1
  169. package/dist/compiler/plugins/base.d.ts.map +1 -0
  170. package/dist/compiler/plugins/base.js +37 -1
  171. package/dist/compiler/plugins/base.js.map +1 -1
  172. package/dist/compiler/plugins/job.plugin.d.ts +1 -0
  173. package/dist/compiler/plugins/job.plugin.d.ts.map +1 -0
  174. package/dist/compiler/plugins/job.plugin.js +19 -67
  175. package/dist/compiler/plugins/job.plugin.js.map +1 -1
  176. package/dist/compiler/plugins/mcp-server.plugin.d.ts +1 -8
  177. package/dist/compiler/plugins/mcp-server.plugin.d.ts.map +1 -0
  178. package/dist/compiler/plugins/mcp-server.plugin.js +25 -58
  179. package/dist/compiler/plugins/mcp-server.plugin.js.map +1 -1
  180. package/dist/compiler/plugins/postprocessor.plugin.d.ts +1 -0
  181. package/dist/compiler/plugins/postprocessor.plugin.d.ts.map +1 -0
  182. package/dist/compiler/plugins/postprocessor.plugin.js +1 -10
  183. package/dist/compiler/plugins/postprocessor.plugin.js.map +1 -1
  184. package/dist/compiler/plugins/preprocessor.plugin.d.ts +1 -0
  185. package/dist/compiler/plugins/preprocessor.plugin.d.ts.map +1 -0
  186. package/dist/compiler/plugins/preprocessor.plugin.js +4 -17
  187. package/dist/compiler/plugins/preprocessor.plugin.js.map +1 -1
  188. package/dist/compiler/plugins/processor-base.d.ts +1 -0
  189. package/dist/compiler/plugins/processor-base.d.ts.map +1 -0
  190. package/dist/compiler/plugins/processor-base.js +2 -9
  191. package/dist/compiler/plugins/processor-base.js.map +1 -1
  192. package/dist/compiler/plugins/registry.d.ts +1 -0
  193. package/dist/compiler/plugins/registry.d.ts.map +1 -0
  194. package/dist/compiler/plugins/skill.plugin.d.ts +1 -0
  195. package/dist/compiler/plugins/skill.plugin.d.ts.map +1 -0
  196. package/dist/compiler/plugins/skill.plugin.js +37 -32
  197. package/dist/compiler/plugins/skill.plugin.js.map +1 -1
  198. package/dist/compiler/plugins/tool.plugin.d.ts +2 -0
  199. package/dist/compiler/plugins/tool.plugin.d.ts.map +1 -0
  200. package/dist/compiler/plugins/tool.plugin.js +9 -30
  201. package/dist/compiler/plugins/tool.plugin.js.map +1 -1
  202. package/dist/compiler/plugins/webhook.plugin.d.ts +1 -0
  203. package/dist/compiler/plugins/webhook.plugin.d.ts.map +1 -0
  204. package/dist/compiler/plugins/webhook.plugin.js +11 -23
  205. package/dist/compiler/plugins/webhook.plugin.js.map +1 -1
  206. package/dist/compiler/source-writer.d.ts +1 -0
  207. package/dist/compiler/source-writer.d.ts.map +1 -0
  208. package/dist/compiler/types.d.ts +6 -0
  209. package/dist/compiler/types.d.ts.map +1 -0
  210. package/dist/compiler/types.js +7 -0
  211. package/dist/compiler/types.js.map +1 -1
  212. package/dist/compiler/utils/ast-helpers.d.ts +70 -17
  213. package/dist/compiler/utils/ast-helpers.d.ts.map +1 -0
  214. package/dist/compiler/utils/ast-helpers.js +250 -61
  215. package/dist/compiler/utils/ast-helpers.js.map +1 -1
  216. package/dist/compiler/utils/common.d.ts +1 -0
  217. package/dist/compiler/utils/common.d.ts.map +1 -0
  218. package/dist/compiler/utils/file-discovery.d.ts +1 -0
  219. package/dist/compiler/utils/file-discovery.d.ts.map +1 -0
  220. package/dist/compiler/utils/path-resolver.d.ts +1 -0
  221. package/dist/compiler/utils/path-resolver.d.ts.map +1 -0
  222. package/dist/compiler/utils/schema-converter.d.ts +1 -0
  223. package/dist/compiler/utils/schema-converter.d.ts.map +1 -0
  224. package/dist/config/compile.constants.d.ts +27 -0
  225. package/dist/config/compile.constants.d.ts.map +1 -0
  226. package/dist/config/compile.constants.js +44 -0
  227. package/dist/config/compile.constants.js.map +1 -1
  228. package/dist/config/constants.d.ts +1 -0
  229. package/dist/config/constants.d.ts.map +1 -0
  230. package/dist/config/dev.constants.d.ts +1 -0
  231. package/dist/config/dev.constants.d.ts.map +1 -0
  232. package/dist/errors/auth.error.d.ts +1 -0
  233. package/dist/errors/auth.error.d.ts.map +1 -0
  234. package/dist/errors/index.d.ts +1 -0
  235. package/dist/errors/index.d.ts.map +1 -0
  236. package/dist/index.d.ts +1 -0
  237. package/dist/index.d.ts.map +1 -0
  238. package/dist/index.js +22 -20
  239. package/dist/index.js.map +1 -1
  240. package/dist/instances/basket.instance.d.ts +1 -0
  241. package/dist/instances/basket.instance.d.ts.map +1 -0
  242. package/dist/instances/data.entry.instance.d.ts +1 -0
  243. package/dist/instances/data.entry.instance.d.ts.map +1 -0
  244. package/dist/instances/job.instance.d.ts +1 -0
  245. package/dist/instances/job.instance.d.ts.map +1 -0
  246. package/dist/instances/order.instance.d.ts +1 -0
  247. package/dist/instances/order.instance.d.ts.map +1 -0
  248. package/dist/instances/product.instance.d.ts +1 -0
  249. package/dist/instances/product.instance.d.ts.map +1 -0
  250. package/dist/instances/product.pagination.instance.d.ts +1 -0
  251. package/dist/instances/product.pagination.instance.d.ts.map +1 -0
  252. package/dist/instances/product.search.instance.d.ts +1 -0
  253. package/dist/instances/product.search.instance.d.ts.map +1 -0
  254. package/dist/instances/user.instance.d.ts +1 -0
  255. package/dist/instances/user.instance.d.ts.map +1 -0
  256. package/dist/interfaces/admin.d.ts +1 -0
  257. package/dist/interfaces/admin.d.ts.map +1 -0
  258. package/dist/interfaces/agent.d.ts +20 -5
  259. package/dist/interfaces/agent.d.ts.map +1 -0
  260. package/dist/interfaces/backup.d.ts +1 -25
  261. package/dist/interfaces/backup.d.ts.map +1 -0
  262. package/dist/interfaces/baskets.d.ts +1 -0
  263. package/dist/interfaces/baskets.d.ts.map +1 -0
  264. package/dist/interfaces/cdn.d.ts +1 -0
  265. package/dist/interfaces/cdn.d.ts.map +1 -0
  266. package/dist/interfaces/chat.d.ts +1 -0
  267. package/dist/interfaces/chat.d.ts.map +1 -0
  268. package/dist/interfaces/common.d.ts +1 -0
  269. package/dist/interfaces/common.d.ts.map +1 -0
  270. package/dist/interfaces/custom.data.d.ts +1 -0
  271. package/dist/interfaces/custom.data.d.ts.map +1 -0
  272. package/dist/interfaces/deploy.d.ts +1 -0
  273. package/dist/interfaces/deploy.d.ts.map +1 -0
  274. package/dist/interfaces/dev.d.ts +1 -0
  275. package/dist/interfaces/dev.d.ts.map +1 -0
  276. package/dist/interfaces/index.d.ts +1 -0
  277. package/dist/interfaces/index.d.ts.map +1 -0
  278. package/dist/interfaces/init.d.ts +1 -0
  279. package/dist/interfaces/init.d.ts.map +1 -0
  280. package/dist/interfaces/jobs.d.ts +1 -0
  281. package/dist/interfaces/jobs.d.ts.map +1 -0
  282. package/dist/interfaces/logs.d.ts +1 -0
  283. package/dist/interfaces/logs.d.ts.map +1 -0
  284. package/dist/interfaces/lua.d.ts +1 -0
  285. package/dist/interfaces/lua.d.ts.map +1 -0
  286. package/dist/interfaces/marketplace.d.ts +1 -0
  287. package/dist/interfaces/marketplace.d.ts.map +1 -0
  288. package/dist/interfaces/mcp.d.ts +1 -0
  289. package/dist/interfaces/mcp.d.ts.map +1 -0
  290. package/dist/interfaces/message.d.ts +1 -0
  291. package/dist/interfaces/message.d.ts.map +1 -0
  292. package/dist/interfaces/orders.d.ts +1 -0
  293. package/dist/interfaces/orders.d.ts.map +1 -0
  294. package/dist/interfaces/persona.d.ts +1 -0
  295. package/dist/interfaces/persona.d.ts.map +1 -0
  296. package/dist/interfaces/postprocessors.d.ts +1 -0
  297. package/dist/interfaces/postprocessors.d.ts.map +1 -0
  298. package/dist/interfaces/preprocessors.d.ts +1 -0
  299. package/dist/interfaces/preprocessors.d.ts.map +1 -0
  300. package/dist/interfaces/product.d.ts +1 -0
  301. package/dist/interfaces/product.d.ts.map +1 -0
  302. package/dist/interfaces/push.d.ts +1 -0
  303. package/dist/interfaces/push.d.ts.map +1 -0
  304. package/dist/interfaces/skills.d.ts +1 -0
  305. package/dist/interfaces/skills.d.ts.map +1 -0
  306. package/dist/interfaces/test.d.ts +1 -0
  307. package/dist/interfaces/test.d.ts.map +1 -0
  308. package/dist/interfaces/unifiedto.d.ts +27 -0
  309. package/dist/interfaces/unifiedto.d.ts.map +1 -0
  310. package/dist/interfaces/user.d.ts +1 -0
  311. package/dist/interfaces/user.d.ts.map +1 -0
  312. package/dist/interfaces/webhooks.d.ts +1 -0
  313. package/dist/interfaces/webhooks.d.ts.map +1 -0
  314. package/dist/interfaces/whatsapp-templates.d.ts +1 -0
  315. package/dist/interfaces/whatsapp-templates.d.ts.map +1 -0
  316. package/dist/primitives/base.handler.d.ts +46 -6
  317. package/dist/primitives/base.handler.d.ts.map +1 -0
  318. package/dist/primitives/base.handler.js +121 -17
  319. package/dist/primitives/base.handler.js.map +1 -1
  320. package/dist/primitives/index.d.ts +5 -5
  321. package/dist/primitives/index.d.ts.map +1 -0
  322. package/dist/primitives/index.js +7 -17
  323. package/dist/primitives/index.js.map +1 -1
  324. package/dist/primitives/job.handler.d.ts +1 -5
  325. package/dist/primitives/job.handler.d.ts.map +1 -0
  326. package/dist/primitives/job.handler.js +1 -15
  327. package/dist/primitives/job.handler.js.map +1 -1
  328. package/dist/primitives/mcp-server.handler.d.ts +2 -1
  329. package/dist/primitives/mcp-server.handler.d.ts.map +1 -0
  330. package/dist/primitives/mcp-server.handler.js +15 -6
  331. package/dist/primitives/mcp-server.handler.js.map +1 -1
  332. package/dist/primitives/postprocessor.handler.d.ts +1 -11
  333. package/dist/primitives/postprocessor.handler.d.ts.map +1 -0
  334. package/dist/primitives/postprocessor.handler.js +1 -24
  335. package/dist/primitives/postprocessor.handler.js.map +1 -1
  336. package/dist/primitives/preprocessor.handler.d.ts +1 -11
  337. package/dist/primitives/preprocessor.handler.d.ts.map +1 -0
  338. package/dist/primitives/preprocessor.handler.js +1 -24
  339. package/dist/primitives/preprocessor.handler.js.map +1 -1
  340. package/dist/primitives/skill.handler.d.ts +4 -1
  341. package/dist/primitives/skill.handler.d.ts.map +1 -0
  342. package/dist/primitives/skill.handler.js +10 -29
  343. package/dist/primitives/skill.handler.js.map +1 -1
  344. package/dist/primitives/types.d.ts +19 -0
  345. package/dist/primitives/types.d.ts.map +1 -0
  346. package/dist/primitives/types.js.map +1 -1
  347. package/dist/primitives/webhook.handler.d.ts +1 -5
  348. package/dist/primitives/webhook.handler.d.ts.map +1 -0
  349. package/dist/primitives/webhook.handler.js +1 -15
  350. package/dist/primitives/webhook.handler.js.map +1 -1
  351. package/dist/services/auth.d.ts +1 -0
  352. package/dist/services/auth.d.ts.map +1 -0
  353. package/dist/services/sandbox.service.d.ts +1 -0
  354. package/dist/services/sandbox.service.d.ts.map +1 -0
  355. package/dist/types/api-contracts.d.ts +1 -0
  356. package/dist/types/api-contracts.d.ts.map +1 -0
  357. package/dist/types/index.d.ts +2 -1
  358. package/dist/types/index.d.ts.map +1 -0
  359. package/dist/types/skill.d.ts +1 -0
  360. package/dist/types/skill.d.ts.map +1 -0
  361. package/dist/types/tool-validation.d.ts +1 -0
  362. package/dist/types/tool-validation.d.ts.map +1 -0
  363. package/dist/types/yaml.types.d.ts +1 -0
  364. package/dist/types/yaml.types.d.ts.map +1 -0
  365. package/dist/utils/artifact-loader.d.ts +1 -0
  366. package/dist/utils/artifact-loader.d.ts.map +1 -0
  367. package/dist/utils/auth-flows.d.ts +1 -0
  368. package/dist/utils/auth-flows.d.ts.map +1 -0
  369. package/dist/utils/backup-helpers.d.ts +10 -7
  370. package/dist/utils/backup-helpers.d.ts.map +1 -0
  371. package/dist/utils/backup-helpers.js +54 -22
  372. package/dist/utils/backup-helpers.js.map +1 -1
  373. package/dist/utils/cli.d.ts +3 -1
  374. package/dist/utils/cli.d.ts.map +1 -0
  375. package/dist/utils/cli.js +45 -5
  376. package/dist/utils/cli.js.map +1 -1
  377. package/dist/utils/command-utils.d.ts +13 -10
  378. package/dist/utils/command-utils.d.ts.map +1 -0
  379. package/dist/utils/command-utils.js +19 -17
  380. package/dist/utils/command-utils.js.map +1 -1
  381. package/dist/utils/deploy-helpers.d.ts +1 -0
  382. package/dist/utils/deploy-helpers.d.ts.map +1 -0
  383. package/dist/utils/dev-api.d.ts +1 -0
  384. package/dist/utils/dev-api.d.ts.map +1 -0
  385. package/dist/utils/dev-server.d.ts +1 -0
  386. package/dist/utils/dev-server.d.ts.map +1 -0
  387. package/dist/utils/dev-watcher.d.ts +1 -0
  388. package/dist/utils/dev-watcher.d.ts.map +1 -0
  389. package/dist/utils/env-loader.utils.d.ts +1 -0
  390. package/dist/utils/env-loader.utils.d.ts.map +1 -0
  391. package/dist/utils/files.d.ts +11 -0
  392. package/dist/utils/files.d.ts.map +1 -0
  393. package/dist/utils/files.js +34 -0
  394. package/dist/utils/files.js.map +1 -1
  395. package/dist/utils/init-agent.d.ts +1 -0
  396. package/dist/utils/init-agent.d.ts.map +1 -0
  397. package/dist/utils/init-helpers.d.ts +1 -0
  398. package/dist/utils/init-helpers.d.ts.map +1 -0
  399. package/dist/utils/init-prompts.d.ts +1 -0
  400. package/dist/utils/init-prompts.d.ts.map +1 -0
  401. package/dist/utils/prompt-handler.d.ts +1 -0
  402. package/dist/utils/prompt-handler.d.ts.map +1 -0
  403. package/dist/utils/sandbox-storage.d.ts +1 -0
  404. package/dist/utils/sandbox-storage.d.ts.map +1 -0
  405. package/dist/utils/sandbox.d.ts +1 -0
  406. package/dist/utils/sandbox.d.ts.map +1 -0
  407. package/dist/utils/sandbox.js +3 -20
  408. package/dist/utils/sandbox.js.map +1 -1
  409. package/dist/utils/semver.d.ts +1 -0
  410. package/dist/utils/semver.d.ts.map +1 -0
  411. package/dist/utils/sync-display.d.ts +1 -0
  412. package/dist/utils/sync-display.d.ts.map +1 -0
  413. package/dist/utils/sync-fetch.d.ts +1 -0
  414. package/dist/utils/sync-fetch.d.ts.map +1 -0
  415. package/dist/utils/sync-helpers.d.ts +1 -0
  416. package/dist/utils/sync-helpers.d.ts.map +1 -0
  417. package/dist/utils/version-check.d.ts +37 -0
  418. package/dist/utils/version-check.d.ts.map +1 -0
  419. package/dist/utils/version-check.js +120 -0
  420. package/dist/utils/version-check.js.map +1 -0
  421. package/dist/web/app.css +401 -2172
  422. package/dist/web/app.js +105 -93
  423. package/docs/README.md +3 -3
  424. package/package.json +13 -11
  425. package/template/.gitignore +21 -0
  426. package/template/package.json +1 -1
  427. package/template/package-lock.json +0 -7895
@@ -15,3 +15,4 @@
15
15
  * 5. MCP server is automatically created to expose tools to the agent
16
16
  */
17
17
  export declare function integrationsCommand(action?: string, subaction?: string, cmdObj?: any): Promise<void>;
18
+ //# sourceMappingURL=integrations.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"integrations.d.ts","sourceRoot":"","sources":["../../src/commands/integrations.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAyMH,wBAAsB,mBAAmB,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CA8B1G"}
@@ -27,20 +27,19 @@ import { fetchServersCore, activateServerCore, deactivateServerCore, } from './m
27
27
  // ─────────────────────────────────────────────────────────────────────────────
28
28
  // Configuration
29
29
  // ─────────────────────────────────────────────────────────────────────────────
30
- const UNIFIED_MCP_BASE_URL = 'https://mcp-api.unified.to/mcp';
31
30
  const CALLBACK_PORT = 19837; // Random high port for OAuth callback
32
31
  const CALLBACK_URL = `http://localhost:${CALLBACK_PORT}/callback`;
33
- // Webhook trigger configuration
32
+ // Webhook trigger configuration (AGENT_WEBHOOK_URL still used for display/info commands)
34
33
  const AGENT_WEBHOOK_URL = `${BASE_URLS.API}/webhook/unifiedto/data`;
35
- const DEFAULT_VIRTUAL_WEBHOOK_INTERVAL = 60; // minutes
34
+ const DEFAULT_VIRTUAL_WEBHOOK_INTERVAL = 1; // minutes (paid Unified.to plan)
36
35
  // ─────────────────────────────────────────────────────────────────────────────
37
36
  // Integration API Functions (via Lua API)
38
37
  // ─────────────────────────────────────────────────────────────────────────────
39
38
  /**
40
39
  * Fetches available (activated) integrations via Lua API
41
40
  */
42
- async function fetchAvailableIntegrations(unifiedToApi) {
43
- const result = await unifiedToApi.getAvailableIntegrations();
41
+ async function fetchAvailableIntegrations(unifiedToApi, agentId) {
42
+ const result = await unifiedToApi.getAvailableIntegrations(agentId);
44
43
  if (!result.success || !result.data) {
45
44
  throw new Error(`Failed to fetch integrations: ${result.error?.message || 'Unknown error'}`);
46
45
  }
@@ -68,26 +67,31 @@ function startCallbackServer(timeoutMs = 300000) {
68
67
  if (reqUrl.pathname === '/callback') {
69
68
  const connectionId = reqUrl.searchParams.get('id');
70
69
  const error = reqUrl.searchParams.get('error');
70
+ const logId = reqUrl.searchParams.get('log_id');
71
71
  const integrationType = reqUrl.searchParams.get('type');
72
72
  resolved = true;
73
73
  if (error) {
74
- // Send error page
74
+ // Unified.to redirects to failure_redirect with ?error=<oauth_error>&log_id=<trace_id>
75
+ const logIdHtml = logId
76
+ ? `<p style="color: #888; font-size: 0.85em;">Log ID: <code>${logId}</code></p>`
77
+ : '';
75
78
  res.writeHead(200, { 'Content-Type': 'text/html' });
76
79
  res.end(`
77
80
  <!DOCTYPE html>
78
81
  <html>
79
82
  <head><title>Connection Failed</title></head>
80
83
  <body style="font-family: system-ui; display: flex; justify-content: center; align-items: center; height: 100vh; margin: 0; background: #1a1a2e;">
81
- <div style="text-align: center; color: white;">
82
- <h1 style="color: #ff6b6b;">āŒ Connection Failed</h1>
84
+ <div style="text-align: center; color: white; max-width: 500px; padding: 0 20px;">
85
+ <h1 style="color: #ff6b6b;">Connection Failed</h1>
83
86
  <p style="color: #ccc;">Error: ${error}</p>
87
+ ${logIdHtml}
84
88
  <p style="color: #888;">You can close this window and try again.</p>
85
89
  </div>
86
90
  </body>
87
91
  </html>
88
92
  `);
89
93
  server.close();
90
- resolve({ success: false, error });
94
+ resolve({ success: false, error, logId: logId || undefined });
91
95
  }
92
96
  else if (connectionId) {
93
97
  // Send success page
@@ -137,7 +141,7 @@ function startCallbackServer(timeoutMs = 300000) {
137
141
  export async function integrationsCommand(action, subaction, cmdObj) {
138
142
  return withErrorHandling(async () => {
139
143
  // Initialize command (validates config + auth)
140
- const { agentId, apiKey, userData } = await initializeCommand({ showProgress: false });
144
+ const { agentId, apiKey, userData } = await initializeCommand({ showProgress: false, validateAuth: true });
141
145
  const userId = userData?.admin?.userId;
142
146
  if (!userId) {
143
147
  console.error("āŒ Failed to get user ID from authentication.");
@@ -456,32 +460,18 @@ async function showIntegrationInfo(context, integrationType, jsonOutput = false)
456
460
  // Connect Flow
457
461
  // ─────────────────────────────────────────────────────────────────────────────
458
462
  async function connectIntegrationFlow(context, options = {}) {
459
- // Step 1: Fetch available integrations and existing connections
463
+ // Step 1: Fetch available integrations (API excludes already-connected types)
460
464
  writeProgress("šŸ”„ Fetching integrations...");
461
- let integrations;
462
- let existingConnections = [];
465
+ let availableIntegrations;
463
466
  try {
464
- const [integrationsResult, connectionsResult] = await Promise.all([
465
- fetchAvailableIntegrations(context.unifiedToApi),
466
- context.unifiedToApi.getConnections(context.agentId)
467
- ]);
468
- integrations = integrationsResult;
469
- existingConnections = connectionsResult.success ? connectionsResult.data || [] : [];
467
+ availableIntegrations = await fetchAvailableIntegrations(context.unifiedToApi, context.agentId);
470
468
  }
471
469
  catch (error) {
472
470
  writeError(`āŒ Failed to fetch integrations: ${error.message}`);
473
471
  return;
474
472
  }
475
- if (integrations.length === 0) {
476
- writeError("āŒ No integrations available.");
477
- console.log("šŸ’” Contact support to enable integrations for your workspace.\n");
478
- return;
479
- }
480
- // Filter out integrations that already have a connection (1 connection per integration type)
481
- const connectedTypes = new Set(existingConnections.map(c => c.integrationType));
482
- const availableIntegrations = integrations.filter(i => !connectedTypes.has(i.value));
483
473
  if (availableIntegrations.length === 0) {
484
- writeInfo("All available integrations are already connected.");
474
+ writeInfo("All available integrations are already connected (or none are enabled).");
485
475
  console.log("šŸ’” Use 'lua integrations update' to change scopes on an existing connection.\n");
486
476
  return;
487
477
  }
@@ -489,17 +479,15 @@ async function connectIntegrationFlow(context, options = {}) {
489
479
  // Step 2: Select integration (with search/filter support)
490
480
  let selectedIntegration;
491
481
  if (options.integration) {
492
- // Check if already connected
493
- if (connectedTypes.has(options.integration)) {
494
- console.error(`āŒ Integration "${options.integration}" is already connected.`);
495
- console.log("šŸ’” Use 'lua integrations update --integration " + options.integration + "' to change scopes.\n");
496
- throw new Error("Integration");
497
- }
498
482
  selectedIntegration = availableIntegrations.find(i => i.value === options.integration);
499
483
  if (!selectedIntegration) {
500
- console.error(`āŒ Integration "${options.integration}" not found or not available.`);
501
- console.log('\nAvailable integrations to connect:');
502
- availableIntegrations.forEach(i => console.log(` - ${i.value} (${i.name})`));
484
+ // Not in available list — either already connected or doesn't exist
485
+ console.error(`āŒ Integration "${options.integration}" not found or already connected.`);
486
+ console.log("šŸ’” If already connected, use 'lua integrations update --integration " + options.integration + "' to change scopes.");
487
+ if (availableIntegrations.length > 0) {
488
+ console.log('\nAvailable integrations to connect:');
489
+ availableIntegrations.forEach(i => console.log(` - ${i.value} (${i.name})`));
490
+ }
503
491
  throw new Error("Integration");
504
492
  }
505
493
  }
@@ -522,16 +510,8 @@ async function connectIntegrationFlow(context, options = {}) {
522
510
  i.value.toLowerCase().includes(searchLower) ||
523
511
  i.categories.some(c => c.toLowerCase().includes(searchLower)));
524
512
  if (filteredIntegrations.length === 0) {
525
- // Check if the search matches an already-connected integration
526
- const matchingConnected = existingConnections.filter(c => c.integrationType.toLowerCase().includes(searchLower) ||
527
- (c.integrationName && c.integrationName.toLowerCase().includes(searchLower)));
528
- if (matchingConnected.length > 0) {
529
- const connectedName = matchingConnected[0].integrationName || matchingConnected[0].integrationType;
530
- writeInfo(`"${connectedName}" is already connected.`);
531
- console.log(`šŸ’” Use 'lua integrations update' to change scopes.\n`);
532
- return;
533
- }
534
- writeInfo(`No integrations found matching "${searchAnswer.searchTerm}"`);
513
+ writeInfo(`No available integrations found matching "${searchAnswer.searchTerm}"`);
514
+ console.log(`šŸ’” If the integration is already connected, use 'lua integrations update' to change scopes.`);
535
515
  // Offer to browse all
536
516
  const browseAnswer = await safePrompt([
537
517
  {
@@ -858,7 +838,7 @@ async function connectIntegrationFlow(context, options = {}) {
858
838
  });
859
839
  const authUrlResult = await context.unifiedToApi.getAuthUrl(selectedIntegration.value, {
860
840
  successRedirect: CALLBACK_URL,
861
- failureRedirect: `${CALLBACK_URL}?error=auth_failed`,
841
+ failureRedirect: CALLBACK_URL,
862
842
  scopes: authMethod === 'oauth' ? selectedScopes : undefined,
863
843
  state,
864
844
  externalXref, // Contains both agentId and userId as JSON
@@ -867,36 +847,19 @@ async function connectIntegrationFlow(context, options = {}) {
867
847
  writeError(`āŒ Failed to get authorization URL: ${authUrlResult.error?.message || 'Unknown error'}`);
868
848
  return;
869
849
  }
850
+ // Auth URL is already resolved by the API (redirect wrappers followed server-side)
870
851
  const authUrl = authUrlResult.data.authUrl;
871
- // Step 4: Pre-fetch the auth URL to handle redirects
872
- let finalAuthUrl = authUrl;
873
- try {
874
- const response = await fetch(authUrl);
875
- const responseText = await response.text();
876
- if (responseText.includes('test.html?redirect=')) {
877
- const urlMatch = responseText.match(/redirect=([^&\s]+)/);
878
- if (urlMatch) {
879
- finalAuthUrl = decodeURIComponent(urlMatch[1]);
880
- }
881
- }
882
- else if (responseText.startsWith('https://')) {
883
- finalAuthUrl = responseText.trim();
884
- }
885
- }
886
- catch (error) {
887
- // Use original auth URL if pre-fetch fails
888
- }
889
- // Step 5: Start callback server and open browser
852
+ // Step 4: Start callback server and open browser
890
853
  console.log("\n" + "─".repeat(60));
891
854
  console.log("🌐 Starting OAuth authorization flow...");
892
855
  console.log("─".repeat(60));
893
856
  console.log(`\nIntegration: ${selectedIntegration.name}`);
894
- console.log(`\nšŸ“‹ Authorization URL (copy if browser doesn't open):\n ${finalAuthUrl}\n`);
857
+ console.log(`\nšŸ“‹ Authorization URL (copy if browser doesn't open):\n ${authUrl}\n`);
895
858
  // Start the callback server
896
859
  const callbackPromise = startCallbackServer(300000); // 5 minute timeout
897
860
  // Auto-open browser
898
861
  try {
899
- await open(finalAuthUrl);
862
+ await open(authUrl);
900
863
  writeInfo("🌐 Browser opened - please complete the authorization");
901
864
  }
902
865
  catch (error) {
@@ -917,93 +880,48 @@ async function connectIntegrationFlow(context, options = {}) {
917
880
  }
918
881
  else {
919
882
  writeError(`\nāŒ Authorization failed: ${result.error || 'Unknown error'}`);
883
+ if (result.logId) {
884
+ console.log(` Log ID: ${result.logId}`);
885
+ }
886
+ // Report auth failure for observability (fire and forget)
887
+ context.unifiedToApi.reportAuthFailure({
888
+ integrationType: selectedIntegration.value,
889
+ error: result.error || 'Unknown OAuth failure',
890
+ logId: result.logId,
891
+ agentId: context.agentId,
892
+ source: 'cli',
893
+ }).catch(() => { });
920
894
  console.log("šŸ’” Please try again with 'lua integrations connect'\n");
921
895
  }
922
896
  }
923
897
  /**
924
- * Finalizes a new connection by setting up the MCP server and creating webhooks
925
- * The MCP server enables the agent to use tools from this connection
926
- * Webhooks enable the agent to be triggered by events from the connection
898
+ * Finalizes a new connection by calling the API to atomically set up MCP server and webhooks
899
+ * The API handles: MCP URL construction, upsert, activation, and webhook creation
927
900
  */
928
901
  async function finalizeConnection(context, integration, connectionId, scopes, hideSensitive = true, webhookConfig = { triggers: [], webhookUrl: '', isCustomWebhook: false }) {
929
902
  writeProgress(`šŸ”„ Setting up ${integration.name} connection...`);
930
- // Build MCP URL
931
- let mcpUrl = `${UNIFIED_MCP_BASE_URL}?connection=${connectionId}`;
932
- if (hideSensitive) {
933
- mcpUrl += '&hide_sensitive=true';
934
- }
935
- if (scopes.length > 0) {
936
- mcpUrl += `&permissions=${scopes.join(',')}`;
937
- }
938
- // Always defer tools to reduce initial tool loading overhead with LLMs
939
- mcpUrl += '&defer_tools=true';
940
- // Use simple integration type as name (e.g., 'discord', 'linear')
941
- // This makes tool names cleaner: discord_create_message vs unified-discord-abc123_create_message
942
- const serverName = integration.value;
943
- const mcpServerData = {
944
- name: serverName,
945
- transport: 'streamable-http',
946
- url: mcpUrl,
947
- source: 'unifiedto', // Flag for runtime auth injection
948
- timeout: 30000,
949
- };
950
- // ─────────────────────────────────────────────────────────────────────────
951
- // Step 1: Set up MCP Server (for tools)
952
- // ─────────────────────────────────────────────────────────────────────────
953
- let mcpSetupSuccess = false;
954
- let isActive = false;
955
- let mcpError = null;
956
- try {
957
- writeProgress(`šŸ”„ Setting up MCP server...`);
958
- const result = await context.developerApi.createMCPServer(mcpServerData);
959
- if (result.success && result.data) {
960
- // Auto-activate the MCP server so the agent can use the connection immediately
961
- const activateResult = await context.developerApi.activateMCPServer(result.data.id);
962
- isActive = activateResult.success && activateResult.data?.active === true;
963
- mcpSetupSuccess = true;
964
- }
965
- else {
966
- mcpError = result.error?.message || 'Unknown error';
967
- }
968
- }
969
- catch (error) {
970
- mcpError = error.message || 'Unknown error';
971
- }
972
- // ─────────────────────────────────────────────────────────────────────────
973
- // Step 2: Set up Webhook Triggers (for event-driven agent wake-up)
974
- // ─────────────────────────────────────────────────────────────────────────
975
- const createdWebhooks = [];
976
- const failedWebhooks = [];
977
- if (webhookConfig.triggers.length > 0) {
978
- writeProgress(`šŸ”„ Setting up ${webhookConfig.triggers.length} trigger(s)...`);
979
- for (const trigger of webhookConfig.triggers) {
980
- try {
981
- // Use per-trigger hookUrl/interval if available, otherwise fall back to defaults
982
- const hookUrl = trigger.hookUrl || webhookConfig.webhookUrl || AGENT_WEBHOOK_URL;
983
- const interval = trigger.interval ?? (trigger.webhookType === 'virtual' ? DEFAULT_VIRTUAL_WEBHOOK_INTERVAL : undefined);
984
- const webhookResult = await context.unifiedToApi.createWebhookSubscription(context.agentId, {
985
- connectionId,
986
- objectType: trigger.objectType,
987
- event: trigger.event,
988
- hookUrl,
989
- interval,
990
- });
991
- if (webhookResult.success && webhookResult.data) {
992
- createdWebhooks.push(webhookResult.data);
993
- }
994
- else {
995
- const errorMsg = webhookResult.error?.message || 'Unknown error';
996
- failedWebhooks.push(`${trigger.objectType}.${trigger.event}: ${errorMsg}`);
997
- }
998
- }
999
- catch (error) {
1000
- const errorMsg = error?.message || 'Unknown error';
1001
- failedWebhooks.push(`${trigger.objectType}.${trigger.event}: ${errorMsg}`);
1002
- }
1003
- }
903
+ // Build trigger params for the API (include per-trigger hookUrl/interval if set)
904
+ const triggers = webhookConfig.triggers.map(t => ({
905
+ objectType: t.objectType,
906
+ event: t.event,
907
+ hookUrl: t.hookUrl || (webhookConfig.isCustomWebhook ? webhookConfig.webhookUrl : undefined),
908
+ interval: t.interval,
909
+ }));
910
+ // Single API call replaces: MCP URL build + upsert + activate + N webhook creates
911
+ const result = await context.unifiedToApi.finalizeConnection(context.agentId, {
912
+ connectionId,
913
+ integrationType: integration.value,
914
+ scopes: scopes.length > 0 ? scopes : undefined,
915
+ hideSensitive,
916
+ triggers: triggers.length > 0 ? triggers : undefined,
917
+ });
918
+ if (!result.success || !result.data) {
919
+ writeError(`āŒ Failed to finalize connection: ${result.error?.message || 'Unknown error'}`);
920
+ return;
1004
921
  }
922
+ const { mcpServer, webhooks, failedWebhooks } = result.data;
1005
923
  // ─────────────────────────────────────────────────────────────────────────
1006
- // Step 3: Display Results
924
+ // Display Results
1007
925
  // ─────────────────────────────────────────────────────────────────────────
1008
926
  console.log("\n" + "─".repeat(60));
1009
927
  console.log("šŸŽ‰ Connection Established!");
@@ -1012,15 +930,9 @@ async function finalizeConnection(context, integration, connectionId, scopes, hi
1012
930
  console.log(` Connection ID: ${connectionId}`);
1013
931
  // MCP Server status
1014
932
  console.log(`\n šŸ“¦ MCP Server (Tools):`);
1015
- if (mcpSetupSuccess) {
1016
- console.log(` Status: ${isActive ? '🟢 Active' : '🟔 Pending activation'}`);
1017
- console.log(` Name: ${serverName}`);
1018
- console.log(` Hide Sensitive: ${hideSensitive ? 'āœ… Yes' : 'āŒ No'}`);
1019
- }
1020
- else {
1021
- console.log(` Status: āŒ Failed`);
1022
- console.log(` Error: ${mcpError}`);
1023
- }
933
+ console.log(` Status: ${mcpServer.active ? '🟢 Active' : '🟔 Pending activation'}`);
934
+ console.log(` Name: ${mcpServer.name}`);
935
+ console.log(` Hide Sensitive: ${hideSensitive ? 'āœ… Yes' : 'āŒ No'}`);
1024
936
  // Show requested scopes with friendly labels
1025
937
  if (scopes.length > 0) {
1026
938
  console.log(`\n šŸ”‘ Permissions (${scopes.length}):`);
@@ -1038,58 +950,38 @@ async function finalizeConnection(context, integration, connectionId, scopes, hi
1038
950
  console.log(`\n šŸ”‘ Permissions: Default`);
1039
951
  }
1040
952
  // Webhook/Triggers status
1041
- if (webhookConfig.triggers.length > 0) {
1042
- console.log(`\n ⚔ Triggers (${createdWebhooks.length}/${webhookConfig.triggers.length}):`);
1043
- // Compute actual URLs being used (per-trigger hookUrl or default)
1044
- const actualUrls = webhookConfig.triggers.map(t => t.hookUrl || webhookConfig.webhookUrl || AGENT_WEBHOOK_URL);
1045
- const uniqueUrls = [...new Set(actualUrls)];
1046
- const allAgentTriggers = uniqueUrls.every(url => url === AGENT_WEBHOOK_URL);
1047
- if (allAgentTriggers) {
1048
- console.log(` Mode: Agent wake-up`);
1049
- }
1050
- else if (uniqueUrls.length === 1) {
953
+ if (triggers.length > 0) {
954
+ console.log(`\n ⚔ Triggers (${webhooks.length}/${triggers.length}):`);
955
+ if (webhookConfig.isCustomWebhook) {
1051
956
  console.log(` Mode: Custom webhook`);
1052
- console.log(` URL: ${uniqueUrls[0]}`);
1053
957
  }
1054
958
  else {
1055
- console.log(` Mode: Mixed (per-trigger URLs)`);
1056
- }
1057
- if (createdWebhooks.length > 0) {
1058
- createdWebhooks.forEach(wh => {
1059
- const trigger = webhookConfig.triggers.find(t => t.objectType === wh.objectType && t.event === wh.event);
1060
- const desc = trigger?.friendlyDescription || `${wh.objectType}.${wh.event}`;
1061
- console.log(` āœ“ ${desc}`);
1062
- });
959
+ console.log(` Mode: Agent wake-up`);
1063
960
  }
1064
- if (failedWebhooks.length > 0) {
1065
- failedWebhooks.forEach(t => console.log(` āœ— ${t}`));
961
+ webhooks.forEach(wh => {
962
+ const trigger = webhookConfig.triggers.find(t => t.objectType === wh.objectType && t.event === wh.event);
963
+ const desc = trigger?.friendlyDescription || `${wh.objectType}.${wh.event}`;
964
+ console.log(` āœ“ ${desc}`);
965
+ });
966
+ if (failedWebhooks && failedWebhooks.length > 0) {
967
+ failedWebhooks.forEach(t => console.log(` āœ— ${t.objectType}.${t.event}: ${t.error}`));
1066
968
  }
1067
969
  }
1068
970
  // Summary message
1069
971
  console.log("\n" + "─".repeat(60));
1070
972
  const capabilities = [];
1071
- if (mcpSetupSuccess && isActive) {
973
+ if (mcpServer.active) {
1072
974
  capabilities.push('tools via MCP');
1073
975
  }
1074
- if (createdWebhooks.length > 0) {
1075
- // Check if any triggers use custom URLs
1076
- const hasCustomUrls = webhookConfig.triggers.some(t => {
1077
- const url = t.hookUrl || webhookConfig.webhookUrl || AGENT_WEBHOOK_URL;
1078
- return url !== AGENT_WEBHOOK_URL;
1079
- });
1080
- if (hasCustomUrls) {
1081
- capabilities.push('webhooks to custom URL');
1082
- }
1083
- else {
1084
- capabilities.push('event-driven triggers');
1085
- }
976
+ if (webhooks.length > 0) {
977
+ capabilities.push(webhookConfig.isCustomWebhook ? 'webhooks to custom URL' : 'event-driven triggers');
1086
978
  }
1087
979
  if (capabilities.length > 0) {
1088
980
  console.log(`āœ… ${integration.name} connected! Your agent now has: ${capabilities.join(', ')}`);
1089
981
  }
1090
- else if (mcpSetupSuccess && !isActive) {
982
+ else if (!mcpServer.active) {
1091
983
  console.log(`āš ļø Connection created but MCP server pending activation.`);
1092
- console.log(` Run: lua mcp activate --server-name ${serverName}`);
984
+ console.log(` Run: lua mcp activate --server-name ${mcpServer.name}`);
1093
985
  }
1094
986
  else {
1095
987
  console.log(`āš ļø Connection created but setup incomplete. Check errors above.`);
@@ -1099,22 +991,9 @@ async function finalizeConnection(context, integration, connectionId, scopes, hi
1099
991
  async function listConnections(context) {
1100
992
  writeProgress("šŸ”„ Loading connections...");
1101
993
  try {
1102
- // Fetch both connections and MCP servers (MCP status is secondary info)
1103
- const [connectionsResult, serversResult] = await Promise.all([
1104
- context.unifiedToApi.getConnections(context.agentId),
1105
- context.developerApi.getMCPServers()
1106
- ]);
994
+ // API now returns connections enriched with MCP server info
995
+ const connectionsResult = await context.unifiedToApi.getConnections(context.agentId);
1107
996
  const connections = connectionsResult.success ? connectionsResult.data || [] : [];
1108
- const servers = serversResult.success ? serversResult.data || [] : [];
1109
- const unifiedServers = servers.filter(s => s.source === 'unifiedto');
1110
- // Map connection IDs to MCP servers to check tool availability
1111
- const serverByConnectionId = new Map();
1112
- for (const server of unifiedServers) {
1113
- const connectionMatch = server.url?.match(/connection=([a-f0-9]+)/i);
1114
- if (connectionMatch) {
1115
- serverByConnectionId.set(connectionMatch[1], server);
1116
- }
1117
- }
1118
997
  console.log("\n" + "=".repeat(60));
1119
998
  console.log("šŸ”— Connected Integrations");
1120
999
  console.log("=".repeat(60) + "\n");
@@ -1124,8 +1003,7 @@ async function listConnections(context) {
1124
1003
  return;
1125
1004
  }
1126
1005
  for (const connection of connections) {
1127
- const linkedServer = serverByConnectionId.get(connection.id);
1128
- const toolsAvailable = linkedServer?.active === true;
1006
+ const toolsAvailable = connection.mcpServer?.active === true;
1129
1007
  // Status based on connection health + tool availability
1130
1008
  let statusIcon = '⚪';
1131
1009
  let statusText = 'Inactive';
@@ -1148,8 +1026,8 @@ async function listConnections(context) {
1148
1026
  console.log(`${statusIcon} ${connection.integrationName || connection.integrationType}`);
1149
1027
  console.log(` Connection: ${connection.id}`);
1150
1028
  console.log(` Status: ${statusText}`);
1151
- if (linkedServer) {
1152
- console.log(` MCP Server: ${linkedServer.name} (${linkedServer.active ? 'active' : 'inactive'})`);
1029
+ if (connection.mcpServer) {
1030
+ console.log(` MCP Server: ${connection.mcpServer.name} (${connection.mcpServer.active ? 'active' : 'inactive'})`);
1153
1031
  }
1154
1032
  console.log(` Connected: ${new Date(connection.createdAt).toLocaleDateString()}`);
1155
1033
  console.log();
@@ -1164,15 +1042,7 @@ async function listConnections(context) {
1164
1042
  async function disconnectIntegration(context, connectionId) {
1165
1043
  writeProgress(`šŸ”„ Disconnecting... (please wait, do not close this window)`);
1166
1044
  try {
1167
- // Clean up associated MCP server (internal implementation detail)
1168
- const mcpServers = await context.developerApi.getMCPServers();
1169
- if (mcpServers.success && mcpServers.data) {
1170
- const associatedServer = mcpServers.data.find(s => s.source === 'unifiedto' && s.url?.includes(`connection=${connectionId}`));
1171
- if (associatedServer) {
1172
- await context.developerApi.deleteMCPServer(associatedServer.id);
1173
- }
1174
- }
1175
- // Delete the connection (also deletes webhook subscriptions)
1045
+ // Delete the connection (API handles MCP server + webhook cleanup)
1176
1046
  const deleteResult = await context.unifiedToApi.deleteConnection(connectionId, context.agentId);
1177
1047
  if (deleteResult.success) {
1178
1048
  writeSuccess(`āœ… Integration disconnected successfully!`);
@@ -1410,15 +1280,7 @@ async function updateConnectionFlow(context, options = {}) {
1410
1280
  // Step 7: Delete the old connection (silently)
1411
1281
  writeProgress(`šŸ”„ Updating ${selectedIntegration.name}...`);
1412
1282
  try {
1413
- // Clean up old MCP server
1414
- const mcpServers = await context.developerApi.getMCPServers();
1415
- if (mcpServers.success && mcpServers.data) {
1416
- const associatedServer = mcpServers.data.find(s => s.source === 'unifiedto' && s.url?.includes(`connection=${selectedConnection.id}`));
1417
- if (associatedServer) {
1418
- await context.developerApi.deleteMCPServer(associatedServer.id);
1419
- }
1420
- }
1421
- // Delete old connection (this also deletes associated webhooks in Unified.to)
1283
+ // Delete old connection (API handles MCP server + webhook cleanup)
1422
1284
  await context.unifiedToApi.deleteConnection(selectedConnection.id, context.agentId);
1423
1285
  }
1424
1286
  catch (error) {
@@ -1438,7 +1300,7 @@ async function updateConnectionFlow(context, options = {}) {
1438
1300
  });
1439
1301
  const authUrlResult = await context.unifiedToApi.getAuthUrl(selectedIntegration.value, {
1440
1302
  successRedirect: CALLBACK_URL,
1441
- failureRedirect: `${CALLBACK_URL}?error=auth_failed`,
1303
+ failureRedirect: CALLBACK_URL,
1442
1304
  scopes: selectedScopes,
1443
1305
  state,
1444
1306
  externalXref,
@@ -1447,33 +1309,16 @@ async function updateConnectionFlow(context, options = {}) {
1447
1309
  writeError(`āŒ Failed to get authorization URL: ${authUrlResult.error?.message || 'Unknown error'}`);
1448
1310
  return;
1449
1311
  }
1312
+ // Auth URL is already resolved by the API (redirect wrappers followed server-side)
1450
1313
  const authUrl = authUrlResult.data.authUrl;
1451
- // Pre-fetch to handle redirects
1452
- let finalAuthUrl = authUrl;
1453
- try {
1454
- const response = await fetch(authUrl);
1455
- const responseText = await response.text();
1456
- if (responseText.includes('test.html?redirect=')) {
1457
- const urlMatch = responseText.match(/redirect=([^&\s]+)/);
1458
- if (urlMatch) {
1459
- finalAuthUrl = decodeURIComponent(urlMatch[1]);
1460
- }
1461
- }
1462
- else if (responseText.startsWith('https://')) {
1463
- finalAuthUrl = responseText.trim();
1464
- }
1465
- }
1466
- catch (error) {
1467
- // Use original auth URL if pre-fetch fails
1468
- }
1469
1314
  // Step 9: Open browser and wait for callback
1470
1315
  console.log("\n" + "─".repeat(60));
1471
1316
  console.log("🌐 Re-authorizing with new scopes...");
1472
1317
  console.log("─".repeat(60));
1473
- console.log(`\nšŸ“‹ Authorization URL (copy if browser doesn't open):\n ${finalAuthUrl}\n`);
1318
+ console.log(`\nšŸ“‹ Authorization URL (copy if browser doesn't open):\n ${authUrl}\n`);
1474
1319
  const callbackPromise = startCallbackServer(300000);
1475
1320
  try {
1476
- await open(finalAuthUrl);
1321
+ await open(authUrl);
1477
1322
  writeInfo("🌐 Browser opened - please complete the authorization");
1478
1323
  }
1479
1324
  catch (error) {
@@ -1520,6 +1365,17 @@ async function updateConnectionFlow(context, options = {}) {
1520
1365
  }
1521
1366
  else {
1522
1367
  writeError(`\nāŒ Authorization failed: ${result.error || 'Unknown error'}`);
1368
+ if (result.logId) {
1369
+ console.log(` Log ID: ${result.logId}`);
1370
+ }
1371
+ // Report auth failure for observability (fire and forget)
1372
+ context.unifiedToApi.reportAuthFailure({
1373
+ integrationType: selectedIntegration.value,
1374
+ error: result.error || 'Unknown OAuth failure',
1375
+ logId: result.logId,
1376
+ agentId: context.agentId,
1377
+ source: 'cli',
1378
+ }).catch(() => { });
1523
1379
  console.log("šŸ’” The old connection was removed. Please reconnect with 'lua integrations connect'\n");
1524
1380
  }
1525
1381
  }
@@ -1906,6 +1762,11 @@ async function webhooksCreateFlow(context, options) {
1906
1762
  // Step 6: Get interval for virtual webhooks
1907
1763
  let interval;
1908
1764
  const intervalOptions = [
1765
+ { name: '1 minute', value: 1 },
1766
+ { name: '5 minutes', value: 5 },
1767
+ { name: '10 minutes', value: 10 },
1768
+ { name: '15 minutes', value: 15 },
1769
+ { name: '30 minutes', value: 30 },
1909
1770
  { name: '1 hour', value: 60 },
1910
1771
  { name: '2 hours', value: 120 },
1911
1772
  { name: '4 hours', value: 240 },
@@ -1925,7 +1786,7 @@ async function webhooksCreateFlow(context, options) {
1925
1786
  name: 'interval',
1926
1787
  message: 'Select polling interval:',
1927
1788
  choices: intervalOptions,
1928
- default: 60,
1789
+ default: 1,
1929
1790
  }
1930
1791
  ]);
1931
1792
  if (!intervalAnswer)