@arbium/enterprise-agent-connect 0.0.0-stage → 0.1.2-dev.9022f22

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 (322) hide show
  1. package/LICENSE +202 -0
  2. package/README.md +269 -2
  3. package/dist/connectors/dell-techdirect/connector.json +39 -0
  4. package/dist/connectors/dell-techdirect/index.d.ts +8 -0
  5. package/dist/connectors/dell-techdirect/index.js +7 -0
  6. package/dist/connectors/dell-techdirect/index.js.map +1 -0
  7. package/dist/connectors/dell-techdirect/tools.d.ts +2 -0
  8. package/dist/connectors/dell-techdirect/tools.js +49 -0
  9. package/dist/connectors/dell-techdirect/tools.js.map +1 -0
  10. package/dist/connectors/dell-techdirect/vendor.d.ts +6 -0
  11. package/dist/connectors/dell-techdirect/vendor.js +57 -0
  12. package/dist/connectors/dell-techdirect/vendor.js.map +1 -0
  13. package/dist/connectors/dynamics-365/connector.json +228 -0
  14. package/dist/connectors/dynamics-365/index.d.ts +8 -0
  15. package/dist/connectors/dynamics-365/index.js +10 -0
  16. package/dist/connectors/dynamics-365/index.js.map +1 -0
  17. package/dist/connectors/dynamics-365/tools.d.ts +35 -0
  18. package/dist/connectors/dynamics-365/tools.js +806 -0
  19. package/dist/connectors/dynamics-365/tools.js.map +1 -0
  20. package/dist/connectors/dynamics-365/vendor.d.ts +9 -0
  21. package/dist/connectors/dynamics-365/vendor.js +110 -0
  22. package/dist/connectors/dynamics-365/vendor.js.map +1 -0
  23. package/dist/connectors/entra/connector.json +85 -0
  24. package/dist/connectors/entra/index.d.ts +2 -0
  25. package/dist/connectors/entra/index.js +4 -0
  26. package/dist/connectors/entra/index.js.map +1 -0
  27. package/dist/connectors/entra/tools.d.ts +14 -0
  28. package/dist/connectors/entra/tools.js +262 -0
  29. package/dist/connectors/entra/tools.js.map +1 -0
  30. package/dist/connectors/fedex/connector.json +118 -0
  31. package/dist/connectors/fedex/index.d.ts +8 -0
  32. package/dist/connectors/fedex/index.js +7 -0
  33. package/dist/connectors/fedex/index.js.map +1 -0
  34. package/dist/connectors/fedex/tools.d.ts +3 -0
  35. package/dist/connectors/fedex/tools.js +152 -0
  36. package/dist/connectors/fedex/tools.js.map +1 -0
  37. package/dist/connectors/fedex/vendor.d.ts +7 -0
  38. package/dist/connectors/fedex/vendor.js +98 -0
  39. package/dist/connectors/fedex/vendor.js.map +1 -0
  40. package/dist/connectors/gong/connector.json +127 -0
  41. package/dist/connectors/gong/index.d.ts +8 -0
  42. package/dist/connectors/gong/index.js +7 -0
  43. package/dist/connectors/gong/index.js.map +1 -0
  44. package/dist/connectors/gong/tools.d.ts +8 -0
  45. package/dist/connectors/gong/tools.js +424 -0
  46. package/dist/connectors/gong/tools.js.map +1 -0
  47. package/dist/connectors/gong/vendor.d.ts +4 -0
  48. package/dist/connectors/gong/vendor.js +89 -0
  49. package/dist/connectors/gong/vendor.js.map +1 -0
  50. package/dist/connectors/http/index.d.ts +34 -0
  51. package/dist/connectors/http/index.js +325 -0
  52. package/dist/connectors/http/index.js.map +1 -0
  53. package/dist/connectors/intune/connector.json +106 -0
  54. package/dist/connectors/intune/index.d.ts +2 -0
  55. package/dist/connectors/intune/index.js +4 -0
  56. package/dist/connectors/intune/index.js.map +1 -0
  57. package/dist/connectors/intune/tools.d.ts +12 -0
  58. package/dist/connectors/intune/tools.js +416 -0
  59. package/dist/connectors/intune/tools.js.map +1 -0
  60. package/dist/connectors/jamf/connector.json +182 -0
  61. package/dist/connectors/jamf/index.d.ts +8 -0
  62. package/dist/connectors/jamf/index.js +7 -0
  63. package/dist/connectors/jamf/index.js.map +1 -0
  64. package/dist/connectors/jamf/tools.d.ts +7 -0
  65. package/dist/connectors/jamf/tools.js +659 -0
  66. package/dist/connectors/jamf/tools.js.map +1 -0
  67. package/dist/connectors/jamf/vendor.d.ts +5 -0
  68. package/dist/connectors/jamf/vendor.js +70 -0
  69. package/dist/connectors/jamf/vendor.js.map +1 -0
  70. package/dist/connectors/jira/connector.json +272 -0
  71. package/dist/connectors/jira/index.d.ts +8 -0
  72. package/dist/connectors/jira/index.js +7 -0
  73. package/dist/connectors/jira/index.js.map +1 -0
  74. package/dist/connectors/jira/jql.d.ts +4 -0
  75. package/dist/connectors/jira/jql.js +67 -0
  76. package/dist/connectors/jira/jql.js.map +1 -0
  77. package/dist/connectors/jira/tools.d.ts +3 -0
  78. package/dist/connectors/jira/tools.js +464 -0
  79. package/dist/connectors/jira/tools.js.map +1 -0
  80. package/dist/connectors/jira/vendor.d.ts +3 -0
  81. package/dist/connectors/jira/vendor.js +100 -0
  82. package/dist/connectors/jira/vendor.js.map +1 -0
  83. package/dist/connectors/microsoft/client.d.ts +66 -0
  84. package/dist/connectors/microsoft/client.js +452 -0
  85. package/dist/connectors/microsoft/client.js.map +1 -0
  86. package/dist/connectors/microsoft/provider.json +118 -0
  87. package/dist/connectors/netsuite/connector.json +317 -0
  88. package/dist/connectors/netsuite/index.d.ts +8 -0
  89. package/dist/connectors/netsuite/index.js +7 -0
  90. package/dist/connectors/netsuite/index.js.map +1 -0
  91. package/dist/connectors/netsuite/tools.d.ts +24 -0
  92. package/dist/connectors/netsuite/tools.js +447 -0
  93. package/dist/connectors/netsuite/tools.js.map +1 -0
  94. package/dist/connectors/netsuite/vendor.d.ts +26 -0
  95. package/dist/connectors/netsuite/vendor.js +247 -0
  96. package/dist/connectors/netsuite/vendor.js.map +1 -0
  97. package/dist/connectors/odata/index.d.ts +33 -0
  98. package/dist/connectors/odata/index.js +460 -0
  99. package/dist/connectors/odata/index.js.map +1 -0
  100. package/dist/connectors/okta/connector.json +194 -0
  101. package/dist/connectors/okta/index.d.ts +8 -0
  102. package/dist/connectors/okta/index.js +7 -0
  103. package/dist/connectors/okta/index.js.map +1 -0
  104. package/dist/connectors/okta/tools.d.ts +6 -0
  105. package/dist/connectors/okta/tools.js +429 -0
  106. package/dist/connectors/okta/tools.js.map +1 -0
  107. package/dist/connectors/okta/vendor.d.ts +14 -0
  108. package/dist/connectors/okta/vendor.js +204 -0
  109. package/dist/connectors/okta/vendor.js.map +1 -0
  110. package/dist/connectors/outlook-calendar/connector.json +136 -0
  111. package/dist/connectors/outlook-calendar/index.d.ts +2 -0
  112. package/dist/connectors/outlook-calendar/index.js +4 -0
  113. package/dist/connectors/outlook-calendar/index.js.map +1 -0
  114. package/dist/connectors/outlook-calendar/tools.d.ts +65 -0
  115. package/dist/connectors/outlook-calendar/tools.js +398 -0
  116. package/dist/connectors/outlook-calendar/tools.js.map +1 -0
  117. package/dist/connectors/outlook-mail/connector.json +154 -0
  118. package/dist/connectors/outlook-mail/index.d.ts +2 -0
  119. package/dist/connectors/outlook-mail/index.js +4 -0
  120. package/dist/connectors/outlook-mail/index.js.map +1 -0
  121. package/dist/connectors/outlook-mail/tools.d.ts +8 -0
  122. package/dist/connectors/outlook-mail/tools.js +236 -0
  123. package/dist/connectors/outlook-mail/tools.js.map +1 -0
  124. package/dist/connectors/salesforce/connector.json +122 -0
  125. package/dist/connectors/salesforce/index.d.ts +8 -0
  126. package/dist/connectors/salesforce/index.js +7 -0
  127. package/dist/connectors/salesforce/index.js.map +1 -0
  128. package/dist/connectors/salesforce/soql.d.ts +3 -0
  129. package/dist/connectors/salesforce/soql.js +60 -0
  130. package/dist/connectors/salesforce/soql.js.map +1 -0
  131. package/dist/connectors/salesforce/tools.d.ts +9 -0
  132. package/dist/connectors/salesforce/tools.js +234 -0
  133. package/dist/connectors/salesforce/tools.js.map +1 -0
  134. package/dist/connectors/salesforce/vendor.d.ts +3 -0
  135. package/dist/connectors/salesforce/vendor.js +113 -0
  136. package/dist/connectors/salesforce/vendor.js.map +1 -0
  137. package/dist/connectors/sap-s4hana/connector.json +264 -0
  138. package/dist/connectors/sap-s4hana/index.d.ts +8 -0
  139. package/dist/connectors/sap-s4hana/index.js +7 -0
  140. package/dist/connectors/sap-s4hana/index.js.map +1 -0
  141. package/dist/connectors/sap-s4hana/tools.d.ts +4 -0
  142. package/dist/connectors/sap-s4hana/tools.js +761 -0
  143. package/dist/connectors/sap-s4hana/tools.js.map +1 -0
  144. package/dist/connectors/sap-s4hana/vendor.d.ts +5 -0
  145. package/dist/connectors/sap-s4hana/vendor.js +176 -0
  146. package/dist/connectors/sap-s4hana/vendor.js.map +1 -0
  147. package/dist/connectors/servicenow/connector.json +228 -0
  148. package/dist/connectors/servicenow/index.d.ts +8 -0
  149. package/dist/connectors/servicenow/index.js +7 -0
  150. package/dist/connectors/servicenow/index.js.map +1 -0
  151. package/dist/connectors/servicenow/tools.d.ts +4 -0
  152. package/dist/connectors/servicenow/tools.js +884 -0
  153. package/dist/connectors/servicenow/tools.js.map +1 -0
  154. package/dist/connectors/servicenow/vendor.d.ts +3 -0
  155. package/dist/connectors/servicenow/vendor.js +106 -0
  156. package/dist/connectors/servicenow/vendor.js.map +1 -0
  157. package/dist/connectors/sharepoint-files/connector.json +194 -0
  158. package/dist/connectors/sharepoint-files/excel.d.ts +16 -0
  159. package/dist/connectors/sharepoint-files/excel.js +300 -0
  160. package/dist/connectors/sharepoint-files/excel.js.map +1 -0
  161. package/dist/connectors/sharepoint-files/index.d.ts +8 -0
  162. package/dist/connectors/sharepoint-files/index.js +12 -0
  163. package/dist/connectors/sharepoint-files/index.js.map +1 -0
  164. package/dist/connectors/sharepoint-files/tools.d.ts +52 -0
  165. package/dist/connectors/sharepoint-files/tools.js +365 -0
  166. package/dist/connectors/sharepoint-files/tools.js.map +1 -0
  167. package/dist/connectors/sharepoint-files/vendor.d.ts +11 -0
  168. package/dist/connectors/sharepoint-files/vendor.js +167 -0
  169. package/dist/connectors/sharepoint-files/vendor.js.map +1 -0
  170. package/dist/connectors/slack/connector.json +148 -0
  171. package/dist/connectors/slack/index.d.ts +8 -0
  172. package/dist/connectors/slack/index.js +7 -0
  173. package/dist/connectors/slack/index.js.map +1 -0
  174. package/dist/connectors/slack/tools.d.ts +3 -0
  175. package/dist/connectors/slack/tools.js +355 -0
  176. package/dist/connectors/slack/tools.js.map +1 -0
  177. package/dist/connectors/slack/vendor.d.ts +17 -0
  178. package/dist/connectors/slack/vendor.js +189 -0
  179. package/dist/connectors/slack/vendor.js.map +1 -0
  180. package/dist/connectors/soap/index.d.ts +16 -0
  181. package/dist/connectors/soap/index.js +248 -0
  182. package/dist/connectors/soap/index.js.map +1 -0
  183. package/dist/connectors/soap/xml.d.ts +12 -0
  184. package/dist/connectors/soap/xml.js +126 -0
  185. package/dist/connectors/soap/xml.js.map +1 -0
  186. package/dist/connectors/sql/engines.d.ts +58 -0
  187. package/dist/connectors/sql/engines.js +292 -0
  188. package/dist/connectors/sql/engines.js.map +1 -0
  189. package/dist/connectors/sql/index.d.ts +16 -0
  190. package/dist/connectors/sql/index.js +214 -0
  191. package/dist/connectors/sql/index.js.map +1 -0
  192. package/dist/connectors/teams/connector.json +298 -0
  193. package/dist/connectors/teams/index.d.ts +2 -0
  194. package/dist/connectors/teams/index.js +5 -0
  195. package/dist/connectors/teams/index.js.map +1 -0
  196. package/dist/connectors/teams/tools.d.ts +7 -0
  197. package/dist/connectors/teams/tools.js +392 -0
  198. package/dist/connectors/teams/tools.js.map +1 -0
  199. package/dist/connectors/workday/connector.json +188 -0
  200. package/dist/connectors/workday/index.d.ts +8 -0
  201. package/dist/connectors/workday/index.js +7 -0
  202. package/dist/connectors/workday/index.js.map +1 -0
  203. package/dist/connectors/workday/tools.d.ts +33 -0
  204. package/dist/connectors/workday/tools.js +410 -0
  205. package/dist/connectors/workday/tools.js.map +1 -0
  206. package/dist/connectors/workday/vendor.d.ts +18 -0
  207. package/dist/connectors/workday/vendor.js +199 -0
  208. package/dist/connectors/workday/vendor.js.map +1 -0
  209. package/dist/packages/connector-kit/src/branding.d.ts +57 -0
  210. package/dist/packages/connector-kit/src/branding.js +102 -0
  211. package/dist/packages/connector-kit/src/branding.js.map +1 -0
  212. package/dist/packages/connector-kit/src/certificate.d.ts +19 -0
  213. package/dist/packages/connector-kit/src/certificate.js +84 -0
  214. package/dist/packages/connector-kit/src/certificate.js.map +1 -0
  215. package/dist/packages/connector-kit/src/common.d.ts +36 -0
  216. package/dist/packages/connector-kit/src/common.js +110 -0
  217. package/dist/packages/connector-kit/src/common.js.map +1 -0
  218. package/dist/packages/connector-kit/src/connector.d.ts +1356 -0
  219. package/dist/packages/connector-kit/src/connector.js +1073 -0
  220. package/dist/packages/connector-kit/src/connector.js.map +1 -0
  221. package/dist/packages/connector-kit/src/fetch.d.ts +6 -0
  222. package/dist/packages/connector-kit/src/fetch.js +44 -0
  223. package/dist/packages/connector-kit/src/fetch.js.map +1 -0
  224. package/dist/packages/connector-kit/src/index.d.ts +5 -0
  225. package/dist/packages/connector-kit/src/index.js +6 -0
  226. package/dist/packages/connector-kit/src/index.js.map +1 -0
  227. package/dist/packages/connector-kit/src/oauth.d.ts +15 -0
  228. package/dist/packages/connector-kit/src/oauth.js +98 -0
  229. package/dist/packages/connector-kit/src/oauth.js.map +1 -0
  230. package/dist/packages/connector-kit/src/types.d.ts +87 -0
  231. package/dist/packages/connector-kit/src/types.js +20 -0
  232. package/dist/packages/connector-kit/src/types.js.map +1 -0
  233. package/dist/packages/server/migrations/0001_tables.sql +268 -0
  234. package/dist/packages/server/migrations/0002_organizations.sql +72 -0
  235. package/dist/packages/server/migrations/0003_drop_unused.sql +3 -0
  236. package/dist/packages/server/migrations/0004_trigger_runners.sql +15 -0
  237. package/dist/packages/server/migrations/0005_run_runner.sql +3 -0
  238. package/dist/packages/server/migrations/0006_approvals.sql +36 -0
  239. package/dist/packages/server/migrations/0007_app_events.sql +110 -0
  240. package/dist/packages/server/migrations/rollback/to-legacy.sql +90 -0
  241. package/dist/packages/server/src/api.d.ts +3730 -0
  242. package/dist/packages/server/src/api.js +820 -0
  243. package/dist/packages/server/src/api.js.map +1 -0
  244. package/dist/packages/server/src/app.d.ts +23 -0
  245. package/dist/packages/server/src/app.js +467 -0
  246. package/dist/packages/server/src/app.js.map +1 -0
  247. package/dist/packages/server/src/builtin.d.ts +5 -0
  248. package/dist/packages/server/src/builtin.js +42 -0
  249. package/dist/packages/server/src/builtin.js.map +1 -0
  250. package/dist/packages/server/src/consent.d.ts +27 -0
  251. package/dist/packages/server/src/consent.js +36 -0
  252. package/dist/packages/server/src/consent.js.map +1 -0
  253. package/dist/packages/server/src/events/admin.d.ts +156 -0
  254. package/dist/packages/server/src/events/admin.js +255 -0
  255. package/dist/packages/server/src/events/admin.js.map +1 -0
  256. package/dist/packages/server/src/events/deliver.d.ts +43 -0
  257. package/dist/packages/server/src/events/deliver.js +129 -0
  258. package/dist/packages/server/src/events/deliver.js.map +1 -0
  259. package/dist/packages/server/src/events/runtime.d.ts +28 -0
  260. package/dist/packages/server/src/events/runtime.js +400 -0
  261. package/dist/packages/server/src/events/runtime.js.map +1 -0
  262. package/dist/packages/server/src/events/store.d.ts +172 -0
  263. package/dist/packages/server/src/events/store.js +275 -0
  264. package/dist/packages/server/src/events/store.js.map +1 -0
  265. package/dist/packages/server/src/index.d.ts +40 -0
  266. package/dist/packages/server/src/index.js +186 -0
  267. package/dist/packages/server/src/index.js.map +1 -0
  268. package/dist/packages/server/src/migrate.d.ts +11 -0
  269. package/dist/packages/server/src/migrate.js +134 -0
  270. package/dist/packages/server/src/migrate.js.map +1 -0
  271. package/dist/packages/server/src/openapi.d.ts +4 -0
  272. package/dist/packages/server/src/openapi.js +101 -0
  273. package/dist/packages/server/src/openapi.js.map +1 -0
  274. package/dist/packages/server/src/queue.d.ts +10 -0
  275. package/dist/packages/server/src/queue.js +45 -0
  276. package/dist/packages/server/src/queue.js.map +1 -0
  277. package/dist/packages/server/src/secrets.d.ts +19 -0
  278. package/dist/packages/server/src/secrets.js +76 -0
  279. package/dist/packages/server/src/secrets.js.map +1 -0
  280. package/dist/packages/server/src/server.d.ts +1 -0
  281. package/dist/packages/server/src/server.js +82 -0
  282. package/dist/packages/server/src/server.js.map +1 -0
  283. package/dist/packages/server/src/service.d.ts +767 -0
  284. package/dist/packages/server/src/service.js +924 -0
  285. package/dist/packages/server/src/service.js.map +1 -0
  286. package/dist/packages/server/src/store.d.ts +157 -0
  287. package/dist/packages/server/src/store.js +415 -0
  288. package/dist/packages/server/src/store.js.map +1 -0
  289. package/dist/packages/server/src/teams/activity.d.ts +123 -0
  290. package/dist/packages/server/src/teams/activity.js +188 -0
  291. package/dist/packages/server/src/teams/activity.js.map +1 -0
  292. package/dist/packages/server/src/teams/admin.d.ts +335 -0
  293. package/dist/packages/server/src/teams/admin.js +699 -0
  294. package/dist/packages/server/src/teams/admin.js.map +1 -0
  295. package/dist/packages/server/src/teams/approval.d.ts +57 -0
  296. package/dist/packages/server/src/teams/approval.js +118 -0
  297. package/dist/packages/server/src/teams/approval.js.map +1 -0
  298. package/dist/packages/server/src/teams/bot.d.ts +25 -0
  299. package/dist/packages/server/src/teams/bot.js +124 -0
  300. package/dist/packages/server/src/teams/bot.js.map +1 -0
  301. package/dist/packages/server/src/teams/claude.d.ts +46 -0
  302. package/dist/packages/server/src/teams/claude.js +165 -0
  303. package/dist/packages/server/src/teams/claude.js.map +1 -0
  304. package/dist/packages/server/src/teams/jwt.d.ts +17 -0
  305. package/dist/packages/server/src/teams/jwt.js +121 -0
  306. package/dist/packages/server/src/teams/jwt.js.map +1 -0
  307. package/dist/packages/server/src/teams/package.d.ts +79 -0
  308. package/dist/packages/server/src/teams/package.js +319 -0
  309. package/dist/packages/server/src/teams/package.js.map +1 -0
  310. package/dist/packages/server/src/teams/provision.d.ts +84 -0
  311. package/dist/packages/server/src/teams/provision.js +505 -0
  312. package/dist/packages/server/src/teams/provision.js.map +1 -0
  313. package/dist/packages/server/src/teams/runner.d.ts +80 -0
  314. package/dist/packages/server/src/teams/runner.js +187 -0
  315. package/dist/packages/server/src/teams/runner.js.map +1 -0
  316. package/dist/packages/server/src/teams/runtime.d.ts +91 -0
  317. package/dist/packages/server/src/teams/runtime.js +679 -0
  318. package/dist/packages/server/src/teams/runtime.js.map +1 -0
  319. package/dist/packages/server/src/teams/store.d.ts +233 -0
  320. package/dist/packages/server/src/teams/store.js +507 -0
  321. package/dist/packages/server/src/teams/store.js.map +1 -0
  322. package/package.json +68 -4
@@ -0,0 +1,268 @@
1
+ -- The service's tables, as ChainDB's migration 20261023200000 made them in public (so an
2
+ -- install adopted from there and a fresh one end up identical; 0002 renames them). Apps an
3
+ -- organization connected once for its agents, the agents (API keys) allowed to use them, what
4
+ -- each agent may do in each app, a record of every call, and Microsoft Teams bots for agents.
5
+ -- Only the service reads and writes these: RLS is forced. Run with search_path set to the
6
+ -- service's schema.
7
+
8
+ -- An agent authenticates with a key only it holds; we keep its SHA-256. last_used_at is
9
+ -- stamped with every audit row, so listing keys does not aggregate the log.
10
+ create table agent_connect_agents (
11
+ id uuid primary key default gen_random_uuid(),
12
+ organization_id uuid not null,
13
+ name text not null check (length(name) between 1 and 200),
14
+ key_hash text not null unique check (key_hash ~ '^[0-9a-f]{64}$'),
15
+ status text not null check (status in ('active', 'disabled')),
16
+ created_by text,
17
+ created_at timestamptz not null default now(),
18
+ last_used_at timestamptz,
19
+ unique (organization_id, name)
20
+ );
21
+
22
+ -- One sign-in per organization shared by several apps (Microsoft), and the organization's
23
+ -- Claude API key (provider 'anthropic'). The credential is AES-256-GCM sealed by the service
24
+ -- under credential_scope; credential_key_id names the key that sealed it.
25
+ create table agent_connect_providers (
26
+ id uuid primary key default gen_random_uuid(),
27
+ organization_id uuid not null,
28
+ provider text not null check (provider ~ '^[a-z0-9-]+$'),
29
+ status text not null check (status in ('pending', 'connected', 'needs_reconnect')),
30
+ config jsonb not null default '{}'::jsonb,
31
+ credential bytea not null,
32
+ credential_key_id text not null,
33
+ credential_scope text not null,
34
+ account_label text,
35
+ connected_by text,
36
+ connected_at timestamptz not null default now(),
37
+ checked_at timestamptz not null default now(),
38
+ unique (organization_id, provider)
39
+ );
40
+
41
+ -- The service's shared app reaches any tenant that approved it, so one tenant binds to one
42
+ -- organization. A customer's own app reaches only its own tenant.
43
+ create unique index agent_connect_providers_one_org_per_tenant
44
+ on agent_connect_providers (provider, (config->>'tenantId'))
45
+ where config->>'auth' = 'arbium_app';
46
+
47
+ -- One row per connected app: capabilities is the most any agent may do there; config holds
48
+ -- non-secret values. An app signs in with its own sealed credential or through a provider
49
+ -- row, never both. access_ceiling is unused (nullable, never written).
50
+ create table agent_connect_connections (
51
+ id uuid primary key default gen_random_uuid(),
52
+ organization_id uuid not null,
53
+ connector_id text not null check (connector_id ~ '^[a-z0-9-]+$'),
54
+ access_ceiling text,
55
+ config jsonb not null default '{}'::jsonb,
56
+ credential bytea,
57
+ credential_key_id text,
58
+ status text not null check (status in ('connected', 'needs_reconnect')),
59
+ account_label text,
60
+ connected_by text,
61
+ connected_at timestamptz not null default now(),
62
+ checked_at timestamptz not null default now(),
63
+ capabilities text[] not null,
64
+ provider_id uuid references agent_connect_providers(id) on delete cascade,
65
+ unique (organization_id, connector_id),
66
+ constraint agent_connect_connections_one_credential
67
+ check ((provider_id is null) = (credential is not null and credential_key_id is not null))
68
+ );
69
+
70
+ -- Each agent's ticked capabilities per app (the effective set is these within the
71
+ -- connection's), plus value limits such as {"projects": ["KAN"]}. access_level is unused.
72
+ create table agent_connect_grants (
73
+ agent_id uuid not null references agent_connect_agents(id) on delete cascade,
74
+ connector_id text not null check (connector_id ~ '^[a-z0-9-]+$'),
75
+ access_level text,
76
+ limits jsonb not null default '{}'::jsonb check (jsonb_typeof(limits) = 'object'),
77
+ updated_at timestamptz not null default now(),
78
+ capabilities text[] not null,
79
+ primary key (agent_id, connector_id)
80
+ );
81
+
82
+ -- Vendors only see the shared connection, so this is the record of which agent did what. Rows
83
+ -- keep the agent's name after the agent is removed; admin changes have no agent.
84
+ create table agent_connect_audit (
85
+ id bigint generated always as identity primary key,
86
+ at timestamptz not null default now(),
87
+ organization_id uuid not null,
88
+ agent_id uuid references agent_connect_agents(id) on delete set null,
89
+ connector_id text not null,
90
+ tool text not null,
91
+ target text,
92
+ decision text not null check (decision in ('allowed', 'denied', 'failed')),
93
+ reason text,
94
+ vendor_status integer,
95
+ agent_name text
96
+ );
97
+ create index agent_connect_audit_org_at on agent_connect_audit (organization_id, at desc);
98
+
99
+ -- Setup steps the service cannot check live, marked done by an admin; steps of different apps with
100
+ -- the same id share one mark.
101
+ create table agent_connect_confirmed (
102
+ organization_id uuid not null,
103
+ step text not null check (step ~ '^[a-z0-9-]+$'),
104
+ confirmed_by text not null,
105
+ confirmed_at timestamptz not null default now(),
106
+ primary key (organization_id, step)
107
+ );
108
+
109
+ -- Teams (design: AgentConnect/docs/teams.md). One bot per agent; its private key is made by
110
+ -- the service and sealed like other credentials.
111
+ create table agent_connect_teams_bots (
112
+ id uuid primary key default gen_random_uuid(),
113
+ organization_id uuid not null,
114
+ agent_id uuid not null unique references agent_connect_agents(id) on delete cascade,
115
+ -- The Entra application id; null until the setup script made the app and it was proven.
116
+ bot_app_id uuid unique,
117
+ -- The Teams app manifest id, minted here once.
118
+ teams_app_id uuid not null unique default gen_random_uuid(),
119
+ tenant_id uuid not null,
120
+ display_name text not null check (length(display_name) between 1 and 30),
121
+ -- The manifest's version is 1.0.<manifest_version>.
122
+ manifest_version int not null default 1 check (manifest_version >= 1),
123
+ status text not null check (status in ('awaiting_setup', 'connected', 'needs_reconnect')),
124
+ -- {certificate, nextCertificate?}; the private keys are in the sealed credential.
125
+ config jsonb not null default '{}'::jsonb,
126
+ credential bytea not null,
127
+ credential_key_id text not null,
128
+ created_by text,
129
+ created_at timestamptz not null default now(),
130
+ checked_at timestamptz,
131
+ -- The last request refused for this bot, in plain words, so the admin sees why nothing
132
+ -- arrives.
133
+ last_refused_at timestamptz,
134
+ last_refused_reason text
135
+ );
136
+
137
+ -- Where the bot is installed. A team install is one row (the bot sees all its channels);
138
+ -- team_id is Teams' thread id for the team, team_group_id its Microsoft 365 group id.
139
+ create table agent_connect_teams_conversations (
140
+ bot_id uuid not null references agent_connect_teams_bots(id) on delete cascade,
141
+ conversation_id text not null,
142
+ kind text not null check (kind in ('personal', 'groupChat', 'team')),
143
+ service_url text not null check (service_url like 'https://%'),
144
+ team_id text,
145
+ team_group_id uuid,
146
+ name text,
147
+ user_aad_id uuid,
148
+ installed_at timestamptz not null default now(),
149
+ removed_at timestamptz,
150
+ -- The last "limit reached" notice sent there, at most one an hour.
151
+ limit_notice_at timestamptz,
152
+ primary key (bot_id, conversation_id)
153
+ );
154
+
155
+ -- Dedupe and work queue. The activity is sealed (it holds the message text) and cleared once
156
+ -- processed. Pruned after 30 days by the service.
157
+ create table agent_connect_teams_events (
158
+ id bigint generated always as identity primary key,
159
+ bot_id uuid not null references agent_connect_teams_bots(id) on delete cascade,
160
+ activity_id text not null,
161
+ type text not null,
162
+ conversation_id text not null,
163
+ thread_id text,
164
+ from_aad_id text,
165
+ received_at timestamptz not null default now(),
166
+ state text not null check (state in ('pending', 'processing', 'held', 'ignored', 'run', 'done', 'failed')),
167
+ reason text,
168
+ payload bytea,
169
+ payload_key_id text,
170
+ claimed_at timestamptz,
171
+ unique (bot_id, activity_id)
172
+ );
173
+ create index agent_connect_teams_events_pending on agent_connect_teams_events (id)
174
+ where state = 'pending';
175
+ create index agent_connect_teams_events_held on agent_connect_teams_events (bot_id, thread_id)
176
+ where state = 'held';
177
+
178
+ -- Each agent's real-time response settings.
179
+ create table agent_connect_teams_triggers (
180
+ agent_id uuid primary key references agent_connect_agents(id) on delete cascade,
181
+ enabled boolean not null default false,
182
+ managed_agent_id text not null check (managed_agent_id ~ '^[A-Za-z0-9_-]{1,128}$'),
183
+ environment_id text not null check (environment_id ~ '^[A-Za-z0-9_-]{1,128}$'),
184
+ vault_ids text[] not null default '{}',
185
+ budget_cents int not null check (budget_cents between 1 and 2000),
186
+ max_runs_per_hour int not null default 20 check (max_runs_per_hour between 1 and 100),
187
+ -- What this agent's answers may cost together in any 24 hours.
188
+ max_cents_per_day int not null default 500 check (max_cents_per_day between 1 and 100000),
189
+ max_concurrent int not null default 2 check (max_concurrent between 1 and 10),
190
+ reply_mode text not null default 'mentions' check (reply_mode in ('mentions', 'all')),
191
+ allowed_teams uuid[] not null default '{}',
192
+ allowed_people uuid[] not null default '{}',
193
+ -- An empty allowed_people means nobody unless this is set: anyone in the organization (never
194
+ -- guests) may then ask the agent, which acts with everything the agent was granted.
195
+ anyone_in_organization boolean not null default false,
196
+ check (anyone_in_organization or cardinality(allowed_people) > 0 or not enabled),
197
+ updated_by text,
198
+ updated_at timestamptz not null default now()
199
+ );
200
+
201
+ -- One Claude Managed Agents session per thread, reused for later messages there. The reply
202
+ -- token is for the latest message only.
203
+ create table agent_connect_teams_runs (
204
+ id uuid primary key default gen_random_uuid(),
205
+ agent_id uuid not null references agent_connect_agents(id) on delete cascade,
206
+ bot_id uuid not null references agent_connect_teams_bots(id) on delete cascade,
207
+ conversation_id text not null,
208
+ thread_id text not null,
209
+ trigger_activity_id text not null,
210
+ session_id text,
211
+ reply_token_hash text not null unique check (reply_token_hash ~ '^[0-9a-f]{64}$'),
212
+ reply_token_at timestamptz not null default now(),
213
+ -- no_reply: the session finished without answering in Teams.
214
+ state text not null check (state in ('starting', 'running', 'idle', 'ended', 'failed', 'no_reply')),
215
+ error text,
216
+ -- Something the admin should know that did not stop the answer.
217
+ note text,
218
+ -- Who asked: a session is only reused for the same person.
219
+ requested_by_aad_id uuid,
220
+ -- Replies sent with the current reply token (a few per message at most), and the last one.
221
+ reply_count int not null default 0,
222
+ replied_at timestamptz,
223
+ cost_cents int,
224
+ turns int not null default 1,
225
+ started_at timestamptz not null default now(),
226
+ finished_at timestamptz
227
+ );
228
+ create index agent_connect_teams_runs_agent on agent_connect_teams_runs (agent_id, started_at desc);
229
+ -- One active session per thread: a second message while one runs is held, not a second run.
230
+ create unique index agent_connect_teams_runs_one_active
231
+ on agent_connect_teams_runs (bot_id, thread_id) where state in ('starting', 'running');
232
+
233
+ -- What each Teams answer cost, per turn (a run's cost_cents is its session's running total);
234
+ -- the 24-hour spend limit sums these.
235
+ create table agent_connect_teams_spend (
236
+ id bigint generated always as identity primary key,
237
+ agent_id uuid not null references agent_connect_agents(id) on delete cascade,
238
+ run_id uuid not null references agent_connect_teams_runs(id) on delete cascade,
239
+ cents int not null check (cents > 0),
240
+ spent_at timestamptz not null default now()
241
+ );
242
+ create index agent_connect_teams_spend_agent
243
+ on agent_connect_teams_spend (agent_id, spent_at desc);
244
+
245
+ alter table agent_connect_agents enable row level security;
246
+ alter table agent_connect_agents force row level security;
247
+ alter table agent_connect_providers enable row level security;
248
+ alter table agent_connect_providers force row level security;
249
+ alter table agent_connect_connections enable row level security;
250
+ alter table agent_connect_connections force row level security;
251
+ alter table agent_connect_grants enable row level security;
252
+ alter table agent_connect_grants force row level security;
253
+ alter table agent_connect_audit enable row level security;
254
+ alter table agent_connect_audit force row level security;
255
+ alter table agent_connect_confirmed enable row level security;
256
+ alter table agent_connect_confirmed force row level security;
257
+ alter table agent_connect_teams_bots enable row level security;
258
+ alter table agent_connect_teams_bots force row level security;
259
+ alter table agent_connect_teams_conversations enable row level security;
260
+ alter table agent_connect_teams_conversations force row level security;
261
+ alter table agent_connect_teams_events enable row level security;
262
+ alter table agent_connect_teams_events force row level security;
263
+ alter table agent_connect_teams_triggers enable row level security;
264
+ alter table agent_connect_teams_triggers force row level security;
265
+ alter table agent_connect_teams_runs enable row level security;
266
+ alter table agent_connect_teams_runs force row level security;
267
+ alter table agent_connect_teams_spend enable row level security;
268
+ alter table agent_connect_teams_spend force row level security;
@@ -0,0 +1,72 @@
1
+ -- The service's own organizations, and table names without the prefix they needed in public.
2
+ -- Index and constraint names keep their old spelling (a rename leaves them), so code matching
3
+ -- one works on every install.
4
+
5
+ create table organizations (
6
+ id uuid primary key default gen_random_uuid(),
7
+ -- Null for organizations taken over from rows saved before this table existed.
8
+ name text check (name is null or length(name) between 1 and 200),
9
+ created_at timestamptz not null default now()
10
+ );
11
+ alter table organizations enable row level security;
12
+ alter table organizations force row level security;
13
+
14
+ alter table agent_connect_agents rename to agents;
15
+ alter table agent_connect_providers rename to providers;
16
+ alter table agent_connect_connections rename to connections;
17
+ alter table agent_connect_grants rename to grants;
18
+ alter table agent_connect_audit rename to audit;
19
+ alter table agent_connect_confirmed rename to confirmed;
20
+ alter table agent_connect_teams_bots rename to teams_bots;
21
+ alter table agent_connect_teams_conversations rename to teams_conversations;
22
+ alter table agent_connect_teams_events rename to teams_events;
23
+ alter table agent_connect_teams_triggers rename to teams_triggers;
24
+ alter table agent_connect_teams_runs rename to teams_runs;
25
+ alter table agent_connect_teams_spend rename to teams_spend;
26
+
27
+ -- RLS stays forced. A role that owns these tables but cannot bypass RLS (one owning only this
28
+ -- schema) needs a policy to see any row, before the backfill below reads them; the role running
29
+ -- migrations is the service's own.
30
+ create policy service on organizations for all to current_user using (true) with check (true);
31
+ create policy service on agents for all to current_user using (true) with check (true);
32
+ create policy service on providers for all to current_user using (true) with check (true);
33
+ create policy service on connections for all to current_user using (true) with check (true);
34
+ create policy service on grants for all to current_user using (true) with check (true);
35
+ create policy service on audit for all to current_user using (true) with check (true);
36
+ create policy service on confirmed for all to current_user using (true) with check (true);
37
+ create policy service on teams_bots for all to current_user using (true) with check (true);
38
+ create policy service on teams_conversations for all to current_user using (true) with check (true);
39
+ create policy service on teams_events for all to current_user using (true) with check (true);
40
+ create policy service on teams_triggers for all to current_user using (true) with check (true);
41
+ create policy service on teams_runs for all to current_user using (true) with check (true);
42
+ create policy service on teams_spend for all to current_user using (true) with check (true);
43
+
44
+ -- Every organization already holding rows keeps its id.
45
+ insert into organizations (id)
46
+ select organization_id from agents
47
+ union select organization_id from providers
48
+ union select organization_id from connections
49
+ union select organization_id from audit
50
+ union select organization_id from confirmed
51
+ union select organization_id from teams_bots
52
+ on conflict do nothing;
53
+
54
+ -- An install adopted from public still points these at public.organizations.
55
+ alter table agents drop constraint if exists agent_connect_agents_organization_id_fkey,
56
+ add constraint agent_connect_agents_organization_id_fkey
57
+ foreign key (organization_id) references organizations (id) on delete restrict;
58
+ alter table providers drop constraint if exists agent_connect_providers_organization_id_fkey,
59
+ add constraint agent_connect_providers_organization_id_fkey
60
+ foreign key (organization_id) references organizations (id) on delete restrict;
61
+ alter table connections drop constraint if exists agent_connect_connections_organization_id_fkey,
62
+ add constraint agent_connect_connections_organization_id_fkey
63
+ foreign key (organization_id) references organizations (id) on delete restrict;
64
+ alter table audit drop constraint if exists agent_connect_audit_organization_id_fkey,
65
+ add constraint agent_connect_audit_organization_id_fkey
66
+ foreign key (organization_id) references organizations (id) on delete restrict;
67
+ alter table confirmed drop constraint if exists agent_connect_confirmed_organization_id_fkey,
68
+ add constraint agent_connect_confirmed_organization_id_fkey
69
+ foreign key (organization_id) references organizations (id) on delete restrict;
70
+ alter table teams_bots drop constraint if exists agent_connect_teams_bots_organization_id_fkey,
71
+ add constraint agent_connect_teams_bots_organization_id_fkey
72
+ foreign key (organization_id) references organizations (id) on delete restrict;
@@ -0,0 +1,3 @@
1
+ -- Never read or written by the service.
2
+ alter table connections drop column access_ceiling;
3
+ alter table grants drop column access_level;
@@ -0,0 +1,15 @@
1
+ -- What answers a Teams trigger: Claude Managed Agents (every row before this, so the default)
2
+ -- or another runner, with its own settings and, for a signed webhook, a signing secret sealed
3
+ -- like other credentials. Only the Claude runner needs a Claude agent and environment.
4
+ alter table teams_triggers
5
+ add column runner text not null default 'claude-managed-agents'
6
+ check (runner ~ '^[a-z][a-z0-9-]{1,40}$'),
7
+ add column settings jsonb not null default '{}',
8
+ add column secret bytea,
9
+ add column secret_key_id text,
10
+ alter column managed_agent_id drop not null,
11
+ alter column environment_id drop not null,
12
+ add constraint teams_triggers_claude_ids check (
13
+ runner <> 'claude-managed-agents'
14
+ or (managed_agent_id is not null and environment_id is not null)
15
+ );
@@ -0,0 +1,3 @@
1
+ -- The runner that started each session, so a trigger moved to another runner never hands a
2
+ -- session to a runner that did not start it. Every run before this was Claude's.
3
+ alter table teams_runs add column runner text not null default 'claude-managed-agents';
@@ -0,0 +1,36 @@
1
+ -- Approval cards: an agent asks one person, through its Teams bot, to approve or reject. The
2
+ -- answer is a click (adaptiveCard/action) in a request authenticated by a Bot Framework token,
3
+ -- accepted only from that person's Entra object id, in the team or chat the card was posted in.
4
+ create table approvals (
5
+ id uuid primary key default gen_random_uuid(),
6
+ agent_id uuid not null references agents (id) on delete cascade,
7
+ bot_id uuid not null references teams_bots (id) on delete cascade,
8
+ -- What the agent holds is a random id; only its SHA-256 is kept.
9
+ token_hash text not null unique check (token_hash ~ '^[0-9a-f]{64}$'),
10
+ -- Where the card is: the installed place, its Bot Connector address, the conversation to edit
11
+ -- the card in (a channel thread or the chat) and the card's activity id (set once posted).
12
+ conversation_id text not null,
13
+ service_url text not null,
14
+ thread_id text,
15
+ activity_id text,
16
+ approver_aad_id uuid not null,
17
+ approver_name text not null,
18
+ -- What the card says, to show it again with the decision.
19
+ title text not null,
20
+ body text not null,
21
+ facts jsonb not null default '[]',
22
+ status text not null default 'pending' check (status in ('pending', 'approved', 'rejected')),
23
+ decided_by_aad_id uuid,
24
+ decided_by_name text,
25
+ decided_at timestamptz,
26
+ comment text,
27
+ created_at timestamptz not null default now(),
28
+ expires_at timestamptz not null,
29
+ check ((status = 'pending') = (decided_at is null))
30
+ );
31
+ create index agent_connect_approvals_bot on approvals (bot_id, created_at desc);
32
+ -- An agent's own lookups and the cascade when it is deleted.
33
+ create index agent_connect_approvals_agent on approvals (agent_id);
34
+ alter table approvals enable row level security;
35
+ alter table approvals force row level security;
36
+ create policy service on approvals for all to current_user using (true) with check (true);
@@ -0,0 +1,110 @@
1
+ -- Events from connected apps (a Jira issue created, ...) that start agents. An organization
2
+ -- subscribes once per app, by webhook (the app posts to /agent-connect/events/<id>, signed with
3
+ -- the subscription's secret) or by polling the app on an interval from a cursor.
4
+ create table event_subscriptions (
5
+ id uuid primary key default gen_random_uuid(),
6
+ organization_id uuid not null references organizations (id) on delete cascade,
7
+ connector_id text not null,
8
+ source text not null check (source in ('webhook', 'poll')),
9
+ -- The webhook's secret, sealed (event-subscription:<id>); null for a poll.
10
+ secret bytea,
11
+ secret_key_id text,
12
+ -- Narrows what the app sends or what a poll reads, in the app's own terms (Jira: JQL).
13
+ filter text not null default '',
14
+ interval_seconds int not null default 300 check (interval_seconds between 60 and 86400),
15
+ -- A poll's position: the newest change it has read.
16
+ cursor text,
17
+ polled_at timestamptz,
18
+ last_error text,
19
+ -- Where the app keeps the webhook when it was registered through its API.
20
+ registered text,
21
+ created_by text not null,
22
+ created_at timestamptz not null default now(),
23
+ unique (organization_id, connector_id),
24
+ check ((source = 'webhook') = (secret is not null))
25
+ );
26
+
27
+ -- Deliveries waiting to be matched against triggers, and those done (kept 30 days, so a signed
28
+ -- delivery cannot be replayed while its timestamp would still pass). Only the fields the
29
+ -- connector keeps are stored, sealed, and only until processed.
30
+ create table app_events (
31
+ id bigint generated always as identity primary key,
32
+ subscription_id uuid not null references event_subscriptions (id) on delete cascade,
33
+ delivery_id text not null,
34
+ event_type text not null,
35
+ state text not null default 'pending'
36
+ check (state in ('pending', 'processing', 'done', 'failed')),
37
+ reason text,
38
+ payload bytea,
39
+ payload_key_id text,
40
+ received_at timestamptz not null default now(),
41
+ claimed_at timestamptz,
42
+ unique (subscription_id, delivery_id)
43
+ );
44
+ create index agent_connect_app_events_pending on app_events (id)
45
+ where state in ('pending', 'processing');
46
+ create index agent_connect_app_events_received on app_events (received_at);
47
+
48
+ -- What an agent does when an app's event arrives: which events, conditions on their fields,
49
+ -- its instructions, what runs it (as teams_triggers: runner, settings, sealed signing secret,
50
+ -- the Claude agent) and its caps.
51
+ create table event_triggers (
52
+ id uuid primary key default gen_random_uuid(),
53
+ agent_id uuid not null references agents (id) on delete cascade,
54
+ connector_id text not null,
55
+ enabled boolean not null default false,
56
+ event_types text[] not null check (cardinality(event_types) > 0),
57
+ conditions jsonb not null default '[]',
58
+ prompt text not null check (length(prompt) between 1 and 4000),
59
+ runner text not null check (runner ~ '^[a-z][a-z0-9-]{1,40}$'),
60
+ settings jsonb not null default '{}',
61
+ secret bytea,
62
+ secret_key_id text,
63
+ managed_agent_id text check (managed_agent_id ~ '^[A-Za-z0-9_-]{1,128}$'),
64
+ environment_id text check (environment_id ~ '^[A-Za-z0-9_-]{1,128}$'),
65
+ vault_ids text[] not null default '{}',
66
+ budget_cents int not null check (budget_cents between 1 and 2000),
67
+ max_runs_per_hour int not null default 20 check (max_runs_per_hour between 1 and 100),
68
+ max_cents_per_day int not null default 500 check (max_cents_per_day between 1 and 100000),
69
+ max_concurrent int not null default 2 check (max_concurrent between 1 and 10),
70
+ updated_by text,
71
+ updated_at timestamptz not null default now(),
72
+ unique (agent_id, connector_id),
73
+ check (
74
+ runner <> 'claude-managed-agents'
75
+ or (managed_agent_id is not null and environment_id is not null)
76
+ )
77
+ );
78
+ create index agent_connect_event_triggers_app on event_triggers (connector_id);
79
+
80
+ create table event_runs (
81
+ id uuid primary key default gen_random_uuid(),
82
+ agent_id uuid not null references agents (id) on delete cascade,
83
+ trigger_id uuid not null references event_triggers (id) on delete cascade,
84
+ event_id bigint references app_events (id) on delete set null,
85
+ event_type text not null,
86
+ delivery_id text not null,
87
+ runner text not null,
88
+ session_id text,
89
+ state text not null check (state in ('starting', 'running', 'ended', 'failed')),
90
+ error text,
91
+ cost_cents int,
92
+ started_at timestamptz not null default now(),
93
+ finished_at timestamptz
94
+ );
95
+ create index agent_connect_event_runs_trigger on event_runs (trigger_id, started_at desc);
96
+ create index agent_connect_event_runs_agent on event_runs (agent_id, started_at desc);
97
+ create index agent_connect_event_runs_live on event_runs (state) where state in ('starting', 'running');
98
+
99
+ alter table event_subscriptions enable row level security;
100
+ alter table event_subscriptions force row level security;
101
+ create policy service on event_subscriptions for all to current_user using (true) with check (true);
102
+ alter table app_events enable row level security;
103
+ alter table app_events force row level security;
104
+ create policy service on app_events for all to current_user using (true) with check (true);
105
+ alter table event_triggers enable row level security;
106
+ alter table event_triggers force row level security;
107
+ create policy service on event_triggers for all to current_user using (true) with check (true);
108
+ alter table event_runs enable row level security;
109
+ alter table event_runs force row level security;
110
+ create policy service on event_runs for all to current_user using (true) with check (true);
@@ -0,0 +1,90 @@
1
+ -- Rolls an install back to the earlier layout: the tables back in public under their old
2
+ -- names, pointing at public.organizations, and the service's schema gone. By hand, only to run
3
+ -- an older image again, in one transaction:
4
+ -- psql "$DATABASE_URL" -v ON_ERROR_STOP=1 -1 -f migrations/rollback/to-legacy.sql
5
+ -- Written for the default schema agent_connect. Fails, changing nothing, if an organization
6
+ -- here is missing from public.organizations.
7
+
8
+ -- The views migrate() made for the previous release, in the way of the tables' old names.
9
+ drop view if exists public.agent_connect_agents, public.agent_connect_providers,
10
+ public.agent_connect_connections, public.agent_connect_grants, public.agent_connect_audit,
11
+ public.agent_connect_confirmed, public.agent_connect_teams_bots,
12
+ public.agent_connect_teams_conversations, public.agent_connect_teams_events,
13
+ public.agent_connect_teams_triggers, public.agent_connect_teams_runs,
14
+ public.agent_connect_teams_spend;
15
+ -- 0007: app events and their triggers, which 0.7.5 does not have.
16
+ drop table agent_connect.event_runs, agent_connect.event_triggers, agent_connect.app_events,
17
+ agent_connect.event_subscriptions;
18
+ -- 0006: approval cards, which 0.7.5 does not have.
19
+ drop table agent_connect.approvals;
20
+ -- 0005: the runner of each session.
21
+ alter table agent_connect.teams_runs drop column runner;
22
+ -- 0004: triggers of other runners than Claude Managed Agents, which 0.7.5 cannot run, go.
23
+ delete from agent_connect.teams_triggers where runner <> 'claude-managed-agents';
24
+ alter table agent_connect.teams_triggers
25
+ drop constraint teams_triggers_claude_ids,
26
+ drop column runner,
27
+ drop column settings,
28
+ drop column secret,
29
+ drop column secret_key_id,
30
+ alter column managed_agent_id set not null,
31
+ alter column environment_id set not null;
32
+ alter table agent_connect.connections add column access_ceiling text;
33
+ alter table agent_connect.grants add column access_level text;
34
+ drop policy service on agent_connect.organizations;
35
+ drop policy service on agent_connect.agents;
36
+ drop policy service on agent_connect.providers;
37
+ drop policy service on agent_connect.connections;
38
+ drop policy service on agent_connect.grants;
39
+ drop policy service on agent_connect.audit;
40
+ drop policy service on agent_connect.confirmed;
41
+ drop policy service on agent_connect.teams_bots;
42
+ drop policy service on agent_connect.teams_conversations;
43
+ drop policy service on agent_connect.teams_events;
44
+ drop policy service on agent_connect.teams_triggers;
45
+ drop policy service on agent_connect.teams_runs;
46
+ drop policy service on agent_connect.teams_spend;
47
+ alter table agent_connect.agents drop constraint agent_connect_agents_organization_id_fkey,
48
+ add constraint agent_connect_agents_organization_id_fkey
49
+ foreign key (organization_id) references public.organizations (id) on delete restrict;
50
+ alter table agent_connect.providers drop constraint agent_connect_providers_organization_id_fkey,
51
+ add constraint agent_connect_providers_organization_id_fkey
52
+ foreign key (organization_id) references public.organizations (id) on delete restrict;
53
+ alter table agent_connect.connections drop constraint agent_connect_connections_organization_id_fkey,
54
+ add constraint agent_connect_connections_organization_id_fkey
55
+ foreign key (organization_id) references public.organizations (id) on delete restrict;
56
+ alter table agent_connect.audit drop constraint agent_connect_audit_organization_id_fkey,
57
+ add constraint agent_connect_audit_organization_id_fkey
58
+ foreign key (organization_id) references public.organizations (id) on delete restrict;
59
+ alter table agent_connect.confirmed drop constraint agent_connect_confirmed_organization_id_fkey,
60
+ add constraint agent_connect_confirmed_organization_id_fkey
61
+ foreign key (organization_id) references public.organizations (id) on delete restrict;
62
+ alter table agent_connect.teams_bots drop constraint agent_connect_teams_bots_organization_id_fkey,
63
+ add constraint agent_connect_teams_bots_organization_id_fkey
64
+ foreign key (organization_id) references public.organizations (id) on delete restrict;
65
+ alter table agent_connect.agents rename to agent_connect_agents;
66
+ alter table agent_connect.providers rename to agent_connect_providers;
67
+ alter table agent_connect.connections rename to agent_connect_connections;
68
+ alter table agent_connect.grants rename to agent_connect_grants;
69
+ alter table agent_connect.audit rename to agent_connect_audit;
70
+ alter table agent_connect.confirmed rename to agent_connect_confirmed;
71
+ alter table agent_connect.teams_bots rename to agent_connect_teams_bots;
72
+ alter table agent_connect.teams_conversations rename to agent_connect_teams_conversations;
73
+ alter table agent_connect.teams_events rename to agent_connect_teams_events;
74
+ alter table agent_connect.teams_triggers rename to agent_connect_teams_triggers;
75
+ alter table agent_connect.teams_runs rename to agent_connect_teams_runs;
76
+ alter table agent_connect.teams_spend rename to agent_connect_teams_spend;
77
+ alter table agent_connect.agent_connect_agents set schema public;
78
+ alter table agent_connect.agent_connect_providers set schema public;
79
+ alter table agent_connect.agent_connect_connections set schema public;
80
+ alter table agent_connect.agent_connect_grants set schema public;
81
+ alter table agent_connect.agent_connect_audit set schema public;
82
+ alter table agent_connect.agent_connect_confirmed set schema public;
83
+ alter table agent_connect.agent_connect_teams_bots set schema public;
84
+ alter table agent_connect.agent_connect_teams_conversations set schema public;
85
+ alter table agent_connect.agent_connect_teams_events set schema public;
86
+ alter table agent_connect.agent_connect_teams_triggers set schema public;
87
+ alter table agent_connect.agent_connect_teams_runs set schema public;
88
+ alter table agent_connect.agent_connect_teams_spend set schema public;
89
+ drop table agent_connect.organizations, agent_connect.schema_migrations;
90
+ drop schema agent_connect;