@zmeel/server 0.3.2 → 0.3.3

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 (171) hide show
  1. package/dist/adapters/registry.d.ts.map +1 -1
  2. package/dist/adapters/registry.js +11 -0
  3. package/dist/adapters/registry.js.map +1 -1
  4. package/dist/app.d.ts +1 -0
  5. package/dist/app.d.ts.map +1 -1
  6. package/dist/app.js +10 -1
  7. package/dist/app.js.map +1 -1
  8. package/dist/auth/better-auth.d.ts +1 -1
  9. package/dist/auth/better-auth.d.ts.map +1 -1
  10. package/dist/auth/better-auth.js +13 -1
  11. package/dist/auth/better-auth.js.map +1 -1
  12. package/dist/config.d.ts +1 -0
  13. package/dist/config.d.ts.map +1 -1
  14. package/dist/config.js +6 -2
  15. package/dist/config.js.map +1 -1
  16. package/dist/index.d.ts.map +1 -1
  17. package/dist/index.js +2 -1
  18. package/dist/index.js.map +1 -1
  19. package/dist/routes/agents.d.ts.map +1 -1
  20. package/dist/routes/agents.js +83 -0
  21. package/dist/routes/agents.js.map +1 -1
  22. package/dist/routes/billing.d.ts +3 -0
  23. package/dist/routes/billing.d.ts.map +1 -0
  24. package/dist/routes/billing.js +69 -0
  25. package/dist/routes/billing.js.map +1 -0
  26. package/dist/routes/companies.d.ts +3 -1
  27. package/dist/routes/companies.d.ts.map +1 -1
  28. package/dist/routes/companies.js +8 -3
  29. package/dist/routes/companies.js.map +1 -1
  30. package/dist/routes/employee-files.d.ts +3 -0
  31. package/dist/routes/employee-files.d.ts.map +1 -0
  32. package/dist/routes/employee-files.js +49 -0
  33. package/dist/routes/employee-files.js.map +1 -0
  34. package/dist/routes/health.d.ts +1 -0
  35. package/dist/routes/health.d.ts.map +1 -1
  36. package/dist/routes/health.js +7 -1
  37. package/dist/routes/health.js.map +1 -1
  38. package/dist/routes/index.d.ts +1 -0
  39. package/dist/routes/index.d.ts.map +1 -1
  40. package/dist/routes/index.js +1 -0
  41. package/dist/routes/index.js.map +1 -1
  42. package/dist/routes/role-templates.d.ts +2 -0
  43. package/dist/routes/role-templates.d.ts.map +1 -0
  44. package/dist/routes/role-templates.js +18 -0
  45. package/dist/routes/role-templates.js.map +1 -0
  46. package/dist/routes/tool-connections.d.ts +3 -0
  47. package/dist/routes/tool-connections.d.ts.map +1 -0
  48. package/dist/routes/tool-connections.js +117 -0
  49. package/dist/routes/tool-connections.js.map +1 -0
  50. package/dist/services/activity.d.ts +3 -3
  51. package/dist/services/agents.d.ts +3 -3
  52. package/dist/services/approvals.d.ts +2 -2
  53. package/dist/services/billing.d.ts +35 -0
  54. package/dist/services/billing.d.ts.map +1 -0
  55. package/dist/services/billing.js +62 -0
  56. package/dist/services/billing.js.map +1 -0
  57. package/dist/services/composio.d.ts +40 -0
  58. package/dist/services/composio.d.ts.map +1 -0
  59. package/dist/services/composio.js +241 -0
  60. package/dist/services/composio.js.map +1 -0
  61. package/dist/services/costs.d.ts +2 -2
  62. package/dist/services/employee-files.d.ts +31 -0
  63. package/dist/services/employee-files.d.ts.map +1 -0
  64. package/dist/services/employee-files.js +69 -0
  65. package/dist/services/employee-files.js.map +1 -0
  66. package/dist/services/feedback.d.ts +2 -2
  67. package/dist/services/finance.d.ts +2 -2
  68. package/dist/services/goals.d.ts +6 -6
  69. package/dist/services/heartbeat.d.ts +17 -17
  70. package/dist/services/heartbeat.d.ts.map +1 -1
  71. package/dist/services/heartbeat.js +39 -1
  72. package/dist/services/heartbeat.js.map +1 -1
  73. package/dist/services/index.d.ts +1 -0
  74. package/dist/services/index.d.ts.map +1 -1
  75. package/dist/services/index.js +1 -0
  76. package/dist/services/index.js.map +1 -1
  77. package/dist/services/issues.d.ts +3 -3
  78. package/dist/services/managed-api-keys.d.ts +18 -0
  79. package/dist/services/managed-api-keys.d.ts.map +1 -0
  80. package/dist/services/managed-api-keys.js +51 -0
  81. package/dist/services/managed-api-keys.js.map +1 -0
  82. package/dist/services/plugin-registry.d.ts +73 -73
  83. package/dist/services/role-templates.d.ts +24 -0
  84. package/dist/services/role-templates.d.ts.map +1 -0
  85. package/dist/services/role-templates.js +969 -0
  86. package/dist/services/role-templates.js.map +1 -0
  87. package/dist/services/routines.d.ts +15 -15
  88. package/dist/services/saas-provisioning.d.ts +16 -0
  89. package/dist/services/saas-provisioning.d.ts.map +1 -0
  90. package/dist/services/saas-provisioning.js +21 -0
  91. package/dist/services/saas-provisioning.js.map +1 -0
  92. package/dist/services/workspace-runtime.d.ts +2 -2
  93. package/package.json +39 -32
  94. package/ui-dist/assets/{_basePickBy-D2fZf0o0.js → _basePickBy-CMk22i5t.js} +1 -1
  95. package/ui-dist/assets/{_baseUniq-CWLG_Xqf.js → _baseUniq-BRF60Jak.js} +1 -1
  96. package/ui-dist/assets/{arc-DeECLtLk.js → arc-BzLMeDv5.js} +1 -1
  97. package/ui-dist/assets/{architectureDiagram-VXUJARFQ-a4Gzo-8u.js → architectureDiagram-VXUJARFQ-DInJrxvO.js} +1 -1
  98. package/ui-dist/assets/{blockDiagram-VD42YOAC-tsACr-ke.js → blockDiagram-VD42YOAC-vXi5zaBG.js} +1 -1
  99. package/ui-dist/assets/{c4Diagram-YG6GDRKO-CxIEiGp0.js → c4Diagram-YG6GDRKO-BJG8J9ib.js} +1 -1
  100. package/ui-dist/assets/channel-DrNAM91H.js +1 -0
  101. package/ui-dist/assets/{chunk-4BX2VUAB-DXyq1OVE.js → chunk-4BX2VUAB-CVqGTOhG.js} +1 -1
  102. package/ui-dist/assets/{chunk-55IACEB6-DE0IJwCp.js → chunk-55IACEB6-DdPau3JC.js} +1 -1
  103. package/ui-dist/assets/{chunk-B4BG7PRW-C4VgkuRm.js → chunk-B4BG7PRW-9mSiYUJq.js} +1 -1
  104. package/ui-dist/assets/{chunk-DI55MBZ5-DUnVODLP.js → chunk-DI55MBZ5-D-JZMTva.js} +1 -1
  105. package/ui-dist/assets/{chunk-FMBD7UC4-D14U1wU8.js → chunk-FMBD7UC4-CebhDcDU.js} +1 -1
  106. package/ui-dist/assets/{chunk-QN33PNHL--9Fa_-d7.js → chunk-QN33PNHL-C-TCIW_q.js} +1 -1
  107. package/ui-dist/assets/{chunk-QZHKN3VN-6vF9hrbB.js → chunk-QZHKN3VN-pYW0vu4N.js} +1 -1
  108. package/ui-dist/assets/{chunk-TZMSLE5B-BOKdVMfQ.js → chunk-TZMSLE5B-CJuXCdVr.js} +1 -1
  109. package/ui-dist/assets/classDiagram-2ON5EDUG-Bv0OJ-at.js +1 -0
  110. package/ui-dist/assets/classDiagram-v2-WZHVMYZB-Bv0OJ-at.js +1 -0
  111. package/ui-dist/assets/clone-zJKi4Z7Y.js +1 -0
  112. package/ui-dist/assets/{cose-bilkent-S5V4N54A-BSFYrItZ.js → cose-bilkent-S5V4N54A-CjBOmbda.js} +1 -1
  113. package/ui-dist/assets/{dagre-6UL2VRFP-D8xEb_jz.js → dagre-6UL2VRFP-Dnp0GsR_.js} +1 -1
  114. package/ui-dist/assets/{diagram-PSM6KHXK-kkdfif_P.js → diagram-PSM6KHXK-BXZZpwx8.js} +1 -1
  115. package/ui-dist/assets/{diagram-QEK2KX5R-BOA1wTkn.js → diagram-QEK2KX5R-qRdZZtvc.js} +1 -1
  116. package/ui-dist/assets/{diagram-S2PKOQOG-BMxIrdD_.js → diagram-S2PKOQOG-D_09g7dR.js} +1 -1
  117. package/ui-dist/assets/{erDiagram-Q2GNP2WA-O1OwJuJt.js → erDiagram-Q2GNP2WA-Ko72NRnY.js} +1 -1
  118. package/ui-dist/assets/{flowDiagram-NV44I4VS-Ca9TsVEe.js → flowDiagram-NV44I4VS-0djOGxYO.js} +1 -1
  119. package/ui-dist/assets/{ganttDiagram-JELNMOA3-CZ3k4lR4.js → ganttDiagram-JELNMOA3-DGShyPo5.js} +1 -1
  120. package/ui-dist/assets/{gitGraphDiagram-V2S2FVAM-CYXpu5VF.js → gitGraphDiagram-V2S2FVAM-o1Ofh8BV.js} +1 -1
  121. package/ui-dist/assets/{graph-Ct1Mwc2w.js → graph-SsVnC_wA.js} +1 -1
  122. package/ui-dist/assets/{index-2BV3lexL.js → index-B8jvXnJM.js} +1 -1
  123. package/ui-dist/assets/index-B8oh85kW.js +1262 -0
  124. package/ui-dist/assets/{index-B3cKIXfV.js → index-BKh69TGx.js} +1 -1
  125. package/ui-dist/assets/{index-ChGANpP5.js → index-BVJCR9-5.js} +1 -1
  126. package/ui-dist/assets/{index-b-wjeoWr.js → index-BZO7ebib.js} +1 -1
  127. package/ui-dist/assets/{index-CU0xjnJx.js → index-BgpO4lCF.js} +1 -1
  128. package/ui-dist/assets/{index-DZ5z-1W5.js → index-BkhtXozO.js} +1 -1
  129. package/ui-dist/assets/{index-zAFj8SiW.js → index-CAwQRx1H.js} +1 -1
  130. package/ui-dist/assets/{index-Cyi4EPvJ.js → index-CGzKzWEI.js} +1 -1
  131. package/ui-dist/assets/{index-DYf-Vmt-.js → index-CH6qpD_O.js} +1 -1
  132. package/ui-dist/assets/{index-BKVrlVnm.js → index-CKRSx4E0.js} +1 -1
  133. package/ui-dist/assets/{index-DcJU9_Xw.js → index-Ce3cNGGf.js} +1 -1
  134. package/ui-dist/assets/{index-DzvAUKSy.js → index-CfTkAwgM.js} +1 -1
  135. package/ui-dist/assets/{index-BoQp7qpa.js → index-CgYMoxFD.js} +1 -1
  136. package/ui-dist/assets/{index-1-xGTyG8.js → index-CmzUmqke.js} +1 -1
  137. package/ui-dist/assets/{index-Dbx0Jq5s.js → index-Cw_pE1Cj.js} +1 -1
  138. package/ui-dist/assets/{index-C016T1QA.js → index-Cyp3WxFA.js} +1 -1
  139. package/ui-dist/assets/{index-CKShy7qg.js → index-D9oAsAw_.js} +1 -1
  140. package/ui-dist/assets/{index-Bso7Ph2z.js → index-DFAXMkw_.js} +1 -1
  141. package/ui-dist/assets/index-DRwR8MX2.css +1 -0
  142. package/ui-dist/assets/{index-CTeTAOP4.js → index-DfZDOeuL.js} +1 -1
  143. package/ui-dist/assets/{index-DAhE9Tae.js → index-KUPFoIYr.js} +1 -1
  144. package/ui-dist/assets/{index-CX3xG_nU.js → index-x9SZ5O1I.js} +1 -1
  145. package/ui-dist/assets/{index-D4ERoZ49.js → index-yp89SiAI.js} +1 -1
  146. package/ui-dist/assets/{infoDiagram-HS3SLOUP-BBoge3td.js → infoDiagram-HS3SLOUP-BvBgHbDr.js} +1 -1
  147. package/ui-dist/assets/{journeyDiagram-XKPGCS4Q-D6qBxJvS.js → journeyDiagram-XKPGCS4Q-CqqEPjJY.js} +1 -1
  148. package/ui-dist/assets/{kanban-definition-3W4ZIXB7-BKw70hff.js → kanban-definition-3W4ZIXB7-CXcCv_Ip.js} +1 -1
  149. package/ui-dist/assets/{layout-C-MelZ5a.js → layout-BSP84oTG.js} +1 -1
  150. package/ui-dist/assets/{linear-BDJBF_lN.js → linear-BXMkYkHB.js} +1 -1
  151. package/ui-dist/assets/{mermaid.core-C_LSSro9.js → mermaid.core-gUe3q3NG.js} +4 -4
  152. package/ui-dist/assets/{mindmap-definition-VGOIOE7T-DKTz8YjL.js → mindmap-definition-VGOIOE7T-BkVsCY6g.js} +1 -1
  153. package/ui-dist/assets/{pieDiagram-ADFJNKIX-COzMH2F2.js → pieDiagram-ADFJNKIX-DbyIYf3g.js} +1 -1
  154. package/ui-dist/assets/{quadrantDiagram-AYHSOK5B-I8FRTFaI.js → quadrantDiagram-AYHSOK5B-D8PrHyHa.js} +1 -1
  155. package/ui-dist/assets/{requirementDiagram-UZGBJVZJ-DI3nQy2l.js → requirementDiagram-UZGBJVZJ-CqHxrd_k.js} +1 -1
  156. package/ui-dist/assets/{sankeyDiagram-TZEHDZUN-Pf_PmYIt.js → sankeyDiagram-TZEHDZUN-YmSuzjgS.js} +1 -1
  157. package/ui-dist/assets/{sequenceDiagram-WL72ISMW-DLgaS7kB.js → sequenceDiagram-WL72ISMW-B-_tiWIt.js} +1 -1
  158. package/ui-dist/assets/{stateDiagram-FKZM4ZOC-BvMa1uU-.js → stateDiagram-FKZM4ZOC-lSSuHsyv.js} +1 -1
  159. package/ui-dist/assets/stateDiagram-v2-4FDKWEC3-DolpXHAz.js +1 -0
  160. package/ui-dist/assets/{timeline-definition-IT6M3QCI-JQUCAkOQ.js → timeline-definition-IT6M3QCI-BOWlxdTv.js} +1 -1
  161. package/ui-dist/assets/{treemap-GDKQZRPO-BK87qA0V.js → treemap-GDKQZRPO-Bf4ApA1I.js} +1 -1
  162. package/ui-dist/assets/{xychartDiagram-PRI3JC2R-UI3XP-6x.js → xychartDiagram-PRI3JC2R-CB-X3oO_.js} +1 -1
  163. package/ui-dist/index.html +2 -2
  164. package/LICENSE +0 -21
  165. package/ui-dist/assets/channel-B8aOlvkH.js +0 -1
  166. package/ui-dist/assets/classDiagram-2ON5EDUG-CNtVQyHf.js +0 -1
  167. package/ui-dist/assets/classDiagram-v2-WZHVMYZB-CNtVQyHf.js +0 -1
  168. package/ui-dist/assets/clone-DbnZAhBs.js +0 -1
  169. package/ui-dist/assets/index-7nZVjhgZ.js +0 -1227
  170. package/ui-dist/assets/index-Ip5TfL79.css +0 -1
  171. package/ui-dist/assets/stateDiagram-v2-4FDKWEC3-BKAZNp5l.js +0 -1
@@ -0,0 +1,49 @@
1
+ import { Router } from "express";
2
+ import { employeeFileService } from "../services/employee-files.js";
3
+ import { agentService } from "../services/agents.js";
4
+ import { assertBoard, assertCompanyAccess } from "./authz.js";
5
+ import { notFound } from "../errors.js";
6
+ const VALID_FILE_TYPES = ["soul", "procedures", "heartbeat", "memory", "tools", "learning"];
7
+ function isValidFileType(value) {
8
+ return VALID_FILE_TYPES.includes(value);
9
+ }
10
+ export function employeeFileRoutes(db) {
11
+ const router = Router();
12
+ const fileSvc = employeeFileService(db);
13
+ const agents = agentService(db);
14
+ // GET /companies/:companyId/agents/:agentId/brain
15
+ router.get("/companies/:companyId/agents/:agentId/brain", async (req, res) => {
16
+ assertBoard(req);
17
+ assertCompanyAccess(req, req.params.companyId);
18
+ const agent = await agents.getById(req.params.agentId);
19
+ if (!agent || agent.companyId !== req.params.companyId) {
20
+ throw notFound("Agent not found");
21
+ }
22
+ const files = await fileSvc.getAllFiles(agent.id);
23
+ res.json({ files });
24
+ });
25
+ // PUT /companies/:companyId/agents/:agentId/brain/:fileType
26
+ router.put("/companies/:companyId/agents/:agentId/brain/:fileType", async (req, res) => {
27
+ assertBoard(req);
28
+ assertCompanyAccess(req, req.params.companyId);
29
+ const { fileType } = req.params;
30
+ if (!isValidFileType(fileType)) {
31
+ res.status(400).json({ error: `Invalid file type: ${fileType}` });
32
+ return;
33
+ }
34
+ const agent = await agents.getById(req.params.agentId);
35
+ if (!agent || agent.companyId !== req.params.companyId) {
36
+ throw notFound("Agent not found");
37
+ }
38
+ const { content } = req.body;
39
+ if (typeof content !== "string") {
40
+ res.status(400).json({ error: "content must be a string" });
41
+ return;
42
+ }
43
+ await fileSvc.updateFile(agent.id, fileType, content, "user");
44
+ const updated = await fileSvc.getFile(agent.id, fileType);
45
+ res.json({ file: updated });
46
+ });
47
+ return router;
48
+ }
49
+ //# sourceMappingURL=employee-files.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"employee-files.js","sourceRoot":"","sources":["../../src/routes/employee-files.ts"],"names":[],"mappings":"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"}
@@ -5,5 +5,6 @@ export declare function healthRoutes(db?: Db, opts?: {
5
5
  deploymentExposure: DeploymentExposure;
6
6
  authReady: boolean;
7
7
  companyDeletionEnabled: boolean;
8
+ saasMode?: boolean;
8
9
  }): import("express-serve-static-core").Router;
9
10
  //# sourceMappingURL=health.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"health.d.ts","sourceRoot":"","sources":["../../src/routes/health.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,WAAW,CAAC;AAGpC,OAAO,KAAK,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAKxE,wBAAgB,YAAY,CAC1B,EAAE,CAAC,EAAE,EAAE,EACP,IAAI,GAAE;IACJ,cAAc,EAAE,cAAc,CAAC;IAC/B,kBAAkB,EAAE,kBAAkB,CAAC;IACvC,SAAS,EAAE,OAAO,CAAC;IACnB,sBAAsB,EAAE,OAAO,CAAC;CAMjC,8CAkFF"}
1
+ {"version":3,"file":"health.d.ts","sourceRoot":"","sources":["../../src/routes/health.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,WAAW,CAAC;AAGpC,OAAO,KAAK,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAKxE,wBAAgB,YAAY,CAC1B,EAAE,CAAC,EAAE,EAAE,EACP,IAAI,GAAE;IACJ,cAAc,EAAE,cAAc,CAAC;IAC/B,kBAAkB,EAAE,kBAAkB,CAAC;IACvC,SAAS,EAAE,OAAO,CAAC;IACnB,sBAAsB,EAAE,OAAO,CAAC;IAChC,QAAQ,CAAC,EAAE,OAAO,CAAC;CAOpB,8CAsFF"}
@@ -9,6 +9,7 @@ export function healthRoutes(db, opts = {
9
9
  deploymentExposure: "private",
10
10
  authReady: true,
11
11
  companyDeletionEnabled: true,
12
+ saasMode: false,
12
13
  }) {
13
14
  const router = Router();
14
15
  router.get("/", async (_req, res) => {
@@ -29,7 +30,11 @@ export function healthRoutes(db, opts = {
29
30
  }
30
31
  let bootstrapStatus = "ready";
31
32
  let bootstrapInviteActive = false;
32
- if (opts.deploymentMode === "authenticated") {
33
+ if (opts.saasMode) {
34
+ // SaaS mode: auto-provisioning handles admin creation, skip bootstrap check
35
+ bootstrapStatus = "ready";
36
+ }
37
+ else if (opts.deploymentMode === "authenticated") {
33
38
  const roleCount = await db
34
39
  .select({ count: count() })
35
40
  .from(instanceUserRoles)
@@ -69,6 +74,7 @@ export function healthRoutes(db, opts = {
69
74
  authReady: opts.authReady,
70
75
  bootstrapStatus,
71
76
  bootstrapInviteActive,
77
+ saasMode: opts.saasMode ?? false,
72
78
  features: {
73
79
  companyDeletionEnabled: opts.companyDeletionEnabled,
74
80
  },
@@ -1 +1 @@
1
- {"version":3,"file":"health.js","sourceRoot":"","sources":["../../src/routes/health.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"health.js","sourceRoot":"","sources":["../../src/routes/health.ts"],"names":[],"mappings":"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"}
@@ -14,5 +14,6 @@ export { dashboardRoutes } from "./dashboard.js";
14
14
  export { sidebarBadgeRoutes } from "./sidebar-badges.js";
15
15
  export { llmRoutes } from "./llms.js";
16
16
  export { accessRoutes } from "./access.js";
17
+ export { billingRoutes } from "./billing.js";
17
18
  export { instanceSettingsRoutes } from "./instance-settings.js";
18
19
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/routes/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/routes/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC"}
@@ -14,5 +14,6 @@ export { dashboardRoutes } from "./dashboard.js";
14
14
  export { sidebarBadgeRoutes } from "./sidebar-badges.js";
15
15
  export { llmRoutes } from "./llms.js";
16
16
  export { accessRoutes } from "./access.js";
17
+ export { billingRoutes } from "./billing.js";
17
18
  export { instanceSettingsRoutes } from "./instance-settings.js";
18
19
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/routes/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/routes/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function roleTemplateRoutes(): import("express-serve-static-core").Router;
2
+ //# sourceMappingURL=role-templates.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"role-templates.d.ts","sourceRoot":"","sources":["../../src/routes/role-templates.ts"],"names":[],"mappings":"AAGA,wBAAgB,kBAAkB,+CAiBjC"}
@@ -0,0 +1,18 @@
1
+ import { Router } from "express";
2
+ import { getRoleTemplates, getRoleTemplate } from "../services/role-templates.js";
3
+ export function roleTemplateRoutes() {
4
+ const router = Router();
5
+ router.get("/role-templates", (_req, res) => {
6
+ res.json(getRoleTemplates());
7
+ });
8
+ router.get("/role-templates/:id", (req, res) => {
9
+ const template = getRoleTemplate(req.params.id);
10
+ if (!template) {
11
+ res.status(404).json({ error: "Role template not found" });
12
+ return;
13
+ }
14
+ res.json(template);
15
+ });
16
+ return router;
17
+ }
18
+ //# sourceMappingURL=role-templates.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"role-templates.js","sourceRoot":"","sources":["../../src/routes/role-templates.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAElF,MAAM,UAAU,kBAAkB;IAChC,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC;IAExB,MAAM,CAAC,GAAG,CAAC,iBAAiB,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE;QAC1C,GAAG,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC,CAAC;IAC/B,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,GAAG,CAAC,qBAAqB,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;QAC7C,MAAM,QAAQ,GAAG,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC,EAAY,CAAC,CAAC;QAC1D,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,yBAAyB,EAAE,CAAC,CAAC;YAC3D,OAAO;QACT,CAAC;QACD,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACrB,CAAC,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { Db } from "@zmeel/db";
2
+ export declare function toolConnectionRoutes(db: Db): import("express-serve-static-core").Router;
3
+ //# sourceMappingURL=tool-connections.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-connections.d.ts","sourceRoot":"","sources":["../../src/routes/tool-connections.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,WAAW,CAAC;AAIpC,wBAAgB,oBAAoB,CAAC,EAAE,EAAE,EAAE,8CAiI1C"}
@@ -0,0 +1,117 @@
1
+ import { Router } from "express";
2
+ import { eq, and } from "drizzle-orm";
3
+ import { toolConnections } from "@zmeel/db";
4
+ import { assertBoard, assertCompanyAccess } from "./authz.js";
5
+ export function toolConnectionRoutes(db) {
6
+ const router = Router();
7
+ // GET /companies/:companyId/tools — list connected tools
8
+ router.get("/companies/:companyId/tools", async (req, res) => {
9
+ const companyId = req.params.companyId;
10
+ assertCompanyAccess(req, companyId);
11
+ assertBoard(req);
12
+ try {
13
+ const connections = await db
14
+ .select()
15
+ .from(toolConnections)
16
+ .where(eq(toolConnections.companyId, companyId));
17
+ res.json(connections);
18
+ }
19
+ catch (err) {
20
+ console.error("[tool-connections] list failed:", err);
21
+ res.status(500).json({ error: "Failed to list tool connections" });
22
+ }
23
+ });
24
+ // POST /companies/:companyId/tools/:appName/connect — initiate OAuth
25
+ router.post("/companies/:companyId/tools/:appName/connect", async (req, res) => {
26
+ const companyId = req.params.companyId;
27
+ const appName = req.params.appName;
28
+ assertCompanyAccess(req, companyId);
29
+ assertBoard(req);
30
+ try {
31
+ const composioService = await import("../services/composio.js");
32
+ const userId = req.actor.userId ?? "board";
33
+ const redirectUrl = req.body?.redirectUrl ||
34
+ `${req.protocol}://${req.get("host")}/api/tools/oauth/callback`;
35
+ const result = await composioService.initiateConnection(userId, appName, redirectUrl);
36
+ if (!result) {
37
+ res.status(503).json({ error: "Composio service not available" });
38
+ return;
39
+ }
40
+ await db.insert(toolConnections).values({
41
+ companyId,
42
+ userId,
43
+ appName,
44
+ composioEntityId: userId,
45
+ composioConnectionId: result.connectedAccountId,
46
+ status: "pending",
47
+ });
48
+ res.json({
49
+ redirectUrl: result.redirectUrl,
50
+ connectedAccountId: result.connectedAccountId,
51
+ });
52
+ }
53
+ catch (err) {
54
+ console.error("[tool-connections] connect failed:", err);
55
+ res.status(500).json({ error: "Failed to initiate connection" });
56
+ }
57
+ });
58
+ // DELETE /companies/:companyId/tools/:appName — disconnect a tool
59
+ router.delete("/companies/:companyId/tools/:appName", async (req, res) => {
60
+ const companyId = req.params.companyId;
61
+ const appName = req.params.appName;
62
+ assertCompanyAccess(req, companyId);
63
+ assertBoard(req);
64
+ try {
65
+ const deleted = await db
66
+ .delete(toolConnections)
67
+ .where(and(eq(toolConnections.companyId, companyId), eq(toolConnections.appName, appName)))
68
+ .returning();
69
+ if (deleted.length === 0) {
70
+ res.status(404).json({ error: "Tool connection not found" });
71
+ return;
72
+ }
73
+ res.json({ ok: true });
74
+ }
75
+ catch (err) {
76
+ console.error("[tool-connections] disconnect failed:", err);
77
+ res.status(500).json({ error: "Failed to disconnect tool" });
78
+ }
79
+ });
80
+ // GET /tools/available — list all available apps from Composio
81
+ router.get("/tools/available", async (req, res) => {
82
+ assertBoard(req);
83
+ try {
84
+ const composioService = await import("../services/composio.js");
85
+ const apps = await composioService.listAvailableApps();
86
+ res.json(apps);
87
+ }
88
+ catch (err) {
89
+ console.error("[tool-connections] listAvailableApps failed:", err);
90
+ res.status(500).json({ error: "Failed to list available apps" });
91
+ }
92
+ });
93
+ // GET /tools/oauth/callback — OAuth callback redirect
94
+ router.get("/tools/oauth/callback", async (req, res) => {
95
+ try {
96
+ const connectionId = req.query.connectedAccountId;
97
+ if (connectionId) {
98
+ await db
99
+ .update(toolConnections)
100
+ .set({
101
+ status: "active",
102
+ connectedAt: new Date(),
103
+ updatedAt: new Date(),
104
+ })
105
+ .where(eq(toolConnections.composioConnectionId, connectionId));
106
+ }
107
+ // Redirect back to the UI
108
+ res.redirect("/settings/tools?connected=true");
109
+ }
110
+ catch (err) {
111
+ console.error("[tool-connections] oauth callback failed:", err);
112
+ res.redirect("/settings/tools?error=callback_failed");
113
+ }
114
+ });
115
+ return router;
116
+ }
117
+ //# sourceMappingURL=tool-connections.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-connections.js","sourceRoot":"","sources":["../../src/routes/tool-connections.ts"],"names":[],"mappings":"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"}
@@ -13,9 +13,9 @@ export declare function activityService(db: Db): {
13
13
  companyId: string;
14
14
  agentId: string | null;
15
15
  runId: string | null;
16
- action: string;
17
16
  actorType: string;
18
17
  actorId: string;
18
+ action: string;
19
19
  entityType: string;
20
20
  entityId: string;
21
21
  details: Record<string, unknown> | null;
@@ -216,9 +216,9 @@ export declare function activityService(db: Db): {
216
216
  companyId: string;
217
217
  agentId: string | null;
218
218
  runId: string | null;
219
- action: string;
220
219
  actorType: string;
221
220
  actorId: string;
221
+ action: string;
222
222
  entityType: string;
223
223
  entityId: string;
224
224
  details: Record<string, unknown> | null;
@@ -753,9 +753,9 @@ export declare function activityService(db: Db): {
753
753
  companyId: string;
754
754
  agentId: string | null;
755
755
  runId: string | null;
756
- action: string;
757
756
  actorType: string;
758
757
  actorId: string;
758
+ action: string;
759
759
  entityType: string;
760
760
  entityId: string;
761
761
  details: Record<string, unknown> | null;
@@ -1047,17 +1047,17 @@ export declare function agentService(db: Db): {
1047
1047
  generated: undefined;
1048
1048
  }, {}, {}>;
1049
1049
  }, "single", Record<"heartbeat_runs", "not-null">, false, "where", {
1050
+ error: string | null;
1050
1051
  id: string;
1051
1052
  status: string;
1052
1053
  createdAt: Date;
1053
1054
  updatedAt: Date;
1054
1055
  companyId: string;
1055
1056
  agentId: string;
1056
- triggerDetail: string | null;
1057
- finishedAt: Date | null;
1058
- error: string | null;
1059
1057
  invocationSource: string;
1058
+ triggerDetail: string | null;
1060
1059
  startedAt: Date | null;
1060
+ finishedAt: Date | null;
1061
1061
  wakeupRequestId: string | null;
1062
1062
  exitCode: number | null;
1063
1063
  signal: string | null;
@@ -525,9 +525,9 @@ export declare function approvalService(db: Db): {
525
525
  updatedAt: Date;
526
526
  companyId: string;
527
527
  approvalId: string;
528
- body: string;
529
528
  authorAgentId: string | null;
530
529
  authorUserId: string | null;
530
+ body: string;
531
531
  }[]>;
532
532
  addComment: (approvalId: string, body: string, actor: {
533
533
  agentId?: string;
@@ -538,9 +538,9 @@ export declare function approvalService(db: Db): {
538
538
  updatedAt: Date;
539
539
  companyId: string;
540
540
  approvalId: string;
541
- body: string;
542
541
  authorAgentId: string | null;
543
542
  authorUserId: string | null;
543
+ body: string;
544
544
  }>;
545
545
  };
546
546
  //# sourceMappingURL=approvals.d.ts.map
@@ -0,0 +1,35 @@
1
+ import type { Db } from "@zmeel/db";
2
+ export interface Subscription {
3
+ id: string;
4
+ companyId: string;
5
+ stripeCustomerId: string | null;
6
+ stripeSubscriptionId: string | null;
7
+ plan: string;
8
+ status: string;
9
+ currentPeriodStart: Date | null;
10
+ currentPeriodEnd: Date | null;
11
+ monthlyBudgetCents: number;
12
+ apiKeyMode: string;
13
+ anthropicApiKey: string | null;
14
+ createdAt: Date;
15
+ updatedAt: Date;
16
+ }
17
+ /**
18
+ * Retrieve the subscription for a given company.
19
+ */
20
+ export declare function getSubscription(db: Db, companyId: string): Promise<Subscription | null>;
21
+ /**
22
+ * Create a free-tier subscription for a newly provisioned company.
23
+ */
24
+ export declare function createFreeSubscription(db: Db, companyId: string): Promise<Subscription>;
25
+ /**
26
+ * Returns the API key a company should use for Anthropic calls.
27
+ * If BYOK mode and key is set, returns the BYOK key.
28
+ * Otherwise returns the platform managed key.
29
+ */
30
+ export declare function getApiKeyForCompany(db: Db, companyId: string, provider?: string): Promise<string | null>;
31
+ /**
32
+ * Switch between managed and BYOK API key modes.
33
+ */
34
+ export declare function updateApiKeyMode(db: Db, companyId: string, mode: "managed" | "byok", apiKey?: string): Promise<Subscription | null>;
35
+ //# sourceMappingURL=billing.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"billing.d.ts","sourceRoot":"","sources":["../../src/services/billing.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,WAAW,CAAC;AAIpC,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,oBAAoB,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,kBAAkB,EAAE,IAAI,GAAG,IAAI,CAAC;IAChC,gBAAgB,EAAE,IAAI,GAAG,IAAI,CAAC;IAC9B,kBAAkB,EAAE,MAAM,CAAC;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,SAAS,EAAE,IAAI,CAAC;IAChB,SAAS,EAAE,IAAI,CAAC;CACjB;AAED;;GAEG;AACH,wBAAsB,eAAe,CAAC,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAO7F;AAED;;GAEG;AACH,wBAAsB,sBAAsB,CAAC,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAe7F;AAED;;;;GAIG;AACH,wBAAsB,mBAAmB,CACvC,EAAE,EAAE,EAAE,EACN,SAAS,EAAE,MAAM,EACjB,QAAQ,SAAc,GACrB,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAMxB;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CACpC,EAAE,EAAE,EAAE,EACN,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,SAAS,GAAG,MAAM,EACxB,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAY9B"}
@@ -0,0 +1,62 @@
1
+ import { eq } from "drizzle-orm";
2
+ import { subscriptions } from "@zmeel/db";
3
+ import { getManagedApiKey } from "./managed-api-keys.js";
4
+ /**
5
+ * Retrieve the subscription for a given company.
6
+ */
7
+ export async function getSubscription(db, companyId) {
8
+ const rows = await db
9
+ .select()
10
+ .from(subscriptions)
11
+ .where(eq(subscriptions.companyId, companyId))
12
+ .limit(1);
13
+ return rows[0] ?? null;
14
+ }
15
+ /**
16
+ * Create a free-tier subscription for a newly provisioned company.
17
+ */
18
+ export async function createFreeSubscription(db, companyId) {
19
+ const now = new Date();
20
+ const rows = await db
21
+ .insert(subscriptions)
22
+ .values({
23
+ companyId,
24
+ plan: "free",
25
+ status: "active",
26
+ monthlyBudgetCents: 500, // $5 free tier
27
+ apiKeyMode: "managed",
28
+ createdAt: now,
29
+ updatedAt: now,
30
+ })
31
+ .returning();
32
+ return rows[0];
33
+ }
34
+ /**
35
+ * Returns the API key a company should use for Anthropic calls.
36
+ * If BYOK mode and key is set, returns the BYOK key.
37
+ * Otherwise returns the platform managed key.
38
+ */
39
+ export async function getApiKeyForCompany(db, companyId, provider = "anthropic") {
40
+ const sub = await getSubscription(db, companyId);
41
+ if (sub && sub.apiKeyMode === "byok" && sub.anthropicApiKey) {
42
+ return sub.anthropicApiKey;
43
+ }
44
+ return getManagedApiKey(provider);
45
+ }
46
+ /**
47
+ * Switch between managed and BYOK API key modes.
48
+ */
49
+ export async function updateApiKeyMode(db, companyId, mode, apiKey) {
50
+ const now = new Date();
51
+ const rows = await db
52
+ .update(subscriptions)
53
+ .set({
54
+ apiKeyMode: mode,
55
+ anthropicApiKey: mode === "byok" ? (apiKey ?? null) : null,
56
+ updatedAt: now,
57
+ })
58
+ .where(eq(subscriptions.companyId, companyId))
59
+ .returning();
60
+ return rows[0] ?? null;
61
+ }
62
+ //# sourceMappingURL=billing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"billing.js","sourceRoot":"","sources":["../../src/services/billing.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AAEjC,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAkBzD;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,EAAM,EAAE,SAAiB;IAC7D,MAAM,IAAI,GAAG,MAAM,EAAE;SAClB,MAAM,EAAE;SACR,IAAI,CAAC,aAAa,CAAC;SACnB,KAAK,CAAC,EAAE,CAAC,aAAa,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;SAC7C,KAAK,CAAC,CAAC,CAAC,CAAC;IACZ,OAAQ,IAAI,CAAC,CAAC,CAA8B,IAAI,IAAI,CAAC;AACvD,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAAC,EAAM,EAAE,SAAiB;IACpE,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;IACvB,MAAM,IAAI,GAAG,MAAM,EAAE;SAClB,MAAM,CAAC,aAAa,CAAC;SACrB,MAAM,CAAC;QACN,SAAS;QACT,IAAI,EAAE,MAAM;QACZ,MAAM,EAAE,QAAQ;QAChB,kBAAkB,EAAE,GAAG,EAAE,eAAe;QACxC,UAAU,EAAE,SAAS;QACrB,SAAS,EAAE,GAAG;QACd,SAAS,EAAE,GAAG;KACf,CAAC;SACD,SAAS,EAAE,CAAC;IACf,OAAO,IAAI,CAAC,CAAC,CAAiB,CAAC;AACjC,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,EAAM,EACN,SAAiB,EACjB,QAAQ,GAAG,WAAW;IAEtB,MAAM,GAAG,GAAG,MAAM,eAAe,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC;IACjD,IAAI,GAAG,IAAI,GAAG,CAAC,UAAU,KAAK,MAAM,IAAI,GAAG,CAAC,eAAe,EAAE,CAAC;QAC5D,OAAO,GAAG,CAAC,eAAe,CAAC;IAC7B,CAAC;IACD,OAAO,gBAAgB,CAAC,QAAQ,CAAC,CAAC;AACpC,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,EAAM,EACN,SAAiB,EACjB,IAAwB,EACxB,MAAe;IAEf,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;IACvB,MAAM,IAAI,GAAG,MAAM,EAAE;SAClB,MAAM,CAAC,aAAa,CAAC;SACrB,GAAG,CAAC;QACH,UAAU,EAAE,IAAI;QAChB,eAAe,EAAE,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI;QAC1D,SAAS,EAAE,GAAG;KACf,CAAC;SACD,KAAK,CAAC,EAAE,CAAC,aAAa,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;SAC7C,SAAS,EAAE,CAAC;IACf,OAAQ,IAAI,CAAC,CAAC,CAA8B,IAAI,IAAI,CAAC;AACvD,CAAC"}
@@ -0,0 +1,40 @@
1
+ /**
2
+ * Create a Composio entity for a given user. In Composio's model, an "entity"
3
+ * represents an end-user who can connect apps and execute actions.
4
+ */
5
+ export declare function getComposioSession(userId: string): import("composio-core").Entity | null;
6
+ /**
7
+ * Get tool/action definitions for a set of apps, scoped to a user entity.
8
+ * `apps` is a comma-separated string of app keys (e.g. "github,slack").
9
+ */
10
+ export declare function getToolsForApps(userId: string, apps: string[]): Promise<unknown[]>;
11
+ /**
12
+ * Initiate an OAuth connection for a user with a specific app.
13
+ * Returns a ConnectionRequest with a redirectUrl the user should visit.
14
+ */
15
+ export declare function initiateConnection(userId: string, appName: string, redirectUrl: string): Promise<{
16
+ redirectUrl: string | null;
17
+ connectedAccountId: string;
18
+ } | null>;
19
+ /**
20
+ * List all connected accounts for a given user entity.
21
+ */
22
+ export declare function getConnectedApps(userId: string): Promise<unknown[]>;
23
+ /**
24
+ * Execute a tool call (action) on behalf of a user.
25
+ */
26
+ export declare function executeToolCall(userId: string, toolName: string, toolInput: Record<string, unknown>): Promise<unknown>;
27
+ interface NormalizedApp {
28
+ appName: string;
29
+ displayName: string;
30
+ description: string;
31
+ logoUrl: string | null;
32
+ categories: string[];
33
+ }
34
+ /**
35
+ * List all available apps from the Composio platform (250+ integrations).
36
+ * Normalizes the response to a consistent shape with logo URLs.
37
+ */
38
+ export declare function listAvailableApps(): Promise<NormalizedApp[]>;
39
+ export {};
40
+ //# sourceMappingURL=composio.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"composio.d.ts","sourceRoot":"","sources":["../../src/services/composio.ts"],"names":[],"mappings":"AAgBA;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,yCAIhD;AAED;;;GAGG;AACH,wBAAsB,eAAe,CACnC,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EAAE,GACb,OAAO,CAAC,OAAO,EAAE,CAAC,CAapB;AAED;;;GAGG;AACH,wBAAsB,kBAAkB,CACtC,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC;IAAE,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,kBAAkB,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAAC,CAmB5E;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,OAAO,EAAE,CAAC,CAYpB;AAED;;GAEG;AACH,wBAAsB,eAAe,CACnC,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACjC,OAAO,CAAC,OAAO,CAAC,CAelB;AAmHD,UAAU,aAAa;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,UAAU,EAAE,MAAM,EAAE,CAAC;CACtB;AAED;;;GAGG;AACH,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC,CAsBlE"}