@elevasis/core 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (564) hide show
  1. package/dist/index.d.ts +435 -0
  2. package/dist/index.js +403 -0
  3. package/dist/organization-model/index.d.ts +435 -0
  4. package/dist/organization-model/index.js +403 -0
  5. package/package.json +62 -0
  6. package/src/README.md +34 -0
  7. package/src/__tests__/observability-exports.test.ts +36 -0
  8. package/src/__tests__/publish.test.ts +18 -0
  9. package/src/__tests__/template-foundations-compatibility.test.ts +34 -0
  10. package/src/auth/index.ts +8 -0
  11. package/src/auth/multi-tenancy/credentials/README.md +38 -0
  12. package/src/auth/multi-tenancy/credentials/__tests__/encryption.test.ts +216 -0
  13. package/src/auth/multi-tenancy/credentials/__tests__/service.test.ts +174 -0
  14. package/src/auth/multi-tenancy/credentials/index.ts +6 -0
  15. package/src/auth/multi-tenancy/credentials/server/encryption.ts +39 -0
  16. package/src/auth/multi-tenancy/credentials/server/service.ts +60 -0
  17. package/src/auth/multi-tenancy/index.ts +17 -0
  18. package/src/auth/multi-tenancy/invitations/__tests__/invitation.test.ts +237 -0
  19. package/src/auth/multi-tenancy/invitations/api-schemas.ts +107 -0
  20. package/src/auth/multi-tenancy/invitations/index.ts +38 -0
  21. package/src/auth/multi-tenancy/invitations/invitation.ts +86 -0
  22. package/src/auth/multi-tenancy/invitations/server/index.ts +25 -0
  23. package/src/auth/multi-tenancy/invitations/server/transforms.ts +24 -0
  24. package/src/auth/multi-tenancy/invitations/server/workos.ts +24 -0
  25. package/src/auth/multi-tenancy/invitations/supabase.ts +50 -0
  26. package/src/auth/multi-tenancy/memberships/__tests__/membership.test.ts +227 -0
  27. package/src/auth/multi-tenancy/memberships/__tests__/supabase-transforms.test.ts +88 -0
  28. package/src/auth/multi-tenancy/memberships/__tests__/workos-transforms.test.ts +139 -0
  29. package/src/auth/multi-tenancy/memberships/api-schemas.ts +126 -0
  30. package/src/auth/multi-tenancy/memberships/index.ts +22 -0
  31. package/src/auth/multi-tenancy/memberships/membership.ts +138 -0
  32. package/src/auth/multi-tenancy/memberships/server/index.ts +15 -0
  33. package/src/auth/multi-tenancy/memberships/server/transforms.ts +32 -0
  34. package/src/auth/multi-tenancy/memberships/server/workos.ts +21 -0
  35. package/src/auth/multi-tenancy/memberships/supabase.ts +46 -0
  36. package/src/auth/multi-tenancy/organizations/__tests__/organization.test.ts +249 -0
  37. package/src/auth/multi-tenancy/organizations/api-schemas.ts +128 -0
  38. package/src/auth/multi-tenancy/organizations/index.ts +23 -0
  39. package/src/auth/multi-tenancy/organizations/organization.ts +25 -0
  40. package/src/auth/multi-tenancy/organizations/server/index.ts +10 -0
  41. package/src/auth/multi-tenancy/organizations/server/transforms.ts +35 -0
  42. package/src/auth/multi-tenancy/organizations/server/workos.ts +20 -0
  43. package/src/auth/multi-tenancy/types.ts +89 -0
  44. package/src/auth/multi-tenancy/users/__tests__/user.test.ts +208 -0
  45. package/src/auth/multi-tenancy/users/api-schemas.ts +194 -0
  46. package/src/auth/multi-tenancy/users/index.ts +28 -0
  47. package/src/auth/multi-tenancy/users/server/index.ts +19 -0
  48. package/src/auth/multi-tenancy/users/server/transforms.ts +21 -0
  49. package/src/auth/multi-tenancy/users/server/workos.ts +16 -0
  50. package/src/auth/multi-tenancy/users/user.ts +65 -0
  51. package/src/business/acquisition/api-schemas.ts +759 -0
  52. package/src/business/acquisition/index.ts +109 -0
  53. package/src/business/acquisition/types.ts +400 -0
  54. package/src/business/crm/api-schemas.ts +75 -0
  55. package/src/business/delivery/index.ts +1 -0
  56. package/src/business/delivery/types.ts +89 -0
  57. package/src/business/index.ts +12 -0
  58. package/src/business/pdf/assets/ElevasisLogo.png +0 -0
  59. package/src/business/pdf/browser/image-utils.ts +74 -0
  60. package/src/business/pdf/browser/index.ts +16 -0
  61. package/src/business/pdf/browser/pdfmake-browser.ts +229 -0
  62. package/src/business/pdf/index.ts +10 -0
  63. package/src/business/pdf/sections/acceptance.ts +112 -0
  64. package/src/business/pdf/sections/automation.ts +56 -0
  65. package/src/business/pdf/sections/cover.ts +51 -0
  66. package/src/business/pdf/sections/index.ts +57 -0
  67. package/src/business/pdf/sections/investment.ts +69 -0
  68. package/src/business/pdf/sections/proposal-document.ts +200 -0
  69. package/src/business/pdf/sections/summary-investment.ts +124 -0
  70. package/src/business/pdf/sections/summary.ts +55 -0
  71. package/src/business/pdf/sections/table-summary.ts +59 -0
  72. package/src/business/pdf/sections/types.ts +124 -0
  73. package/src/business/pdf/server/__tests__/pdfmake-test.ts +219 -0
  74. package/src/business/pdf/server/index.ts +21 -0
  75. package/src/business/pdf/server/pdfmake-service.ts +237 -0
  76. package/src/business/pdf/server/themes/default.ts +8 -0
  77. package/src/business/pdf/server/themes/index.ts +9 -0
  78. package/src/business/pdf/server/themes/types.ts +8 -0
  79. package/src/business/pdf/shared/convert.ts +514 -0
  80. package/src/business/pdf/shared/index.ts +12 -0
  81. package/src/business/pdf/themes.ts +78 -0
  82. package/src/business/pdf/types.ts +272 -0
  83. package/src/business/seo/__tests__/linking.test.ts +549 -0
  84. package/src/business/seo/__tests__/types.test.ts +404 -0
  85. package/src/business/seo/index.ts +2 -0
  86. package/src/business/seo/linking.ts +281 -0
  87. package/src/business/seo/types.ts +199 -0
  88. package/src/commands/index.ts +8 -0
  89. package/src/commands/queue/index.ts +3 -0
  90. package/src/commands/queue/schemas.test.ts +593 -0
  91. package/src/commands/queue/schemas.ts +125 -0
  92. package/src/commands/queue/sse-events.ts +61 -0
  93. package/src/commands/queue/types/action.ts +52 -0
  94. package/src/commands/queue/types/checkpoint.ts +44 -0
  95. package/src/commands/queue/types/index.ts +7 -0
  96. package/src/commands/queue/types/task.ts +116 -0
  97. package/src/commands/queue/types.ts +14 -0
  98. package/src/content/distribution-metadata.ts +61 -0
  99. package/src/content/index.ts +10 -0
  100. package/src/deployments/index.ts +22 -0
  101. package/src/execution/calibration/__tests__/schemas.test.ts +320 -0
  102. package/src/execution/calibration/index.ts +3 -0
  103. package/src/execution/calibration/schemas.ts +121 -0
  104. package/src/execution/calibration/sse-events.ts +125 -0
  105. package/src/execution/calibration/types.ts +190 -0
  106. package/src/execution/core/__tests__/api-schemas.test.ts +667 -0
  107. package/src/execution/core/__tests__/archived-logs.test.ts +72 -0
  108. package/src/execution/core/api-schemas.ts +312 -0
  109. package/src/execution/core/index.ts +11 -0
  110. package/src/execution/core/resource-validator.test.ts +63 -0
  111. package/src/execution/core/runner-types.ts +80 -0
  112. package/src/execution/core/server/environment.ts +31 -0
  113. package/src/execution/core/sse-executions.ts +119 -0
  114. package/src/execution/core/types.ts +29 -0
  115. package/src/execution/engine/__tests__/fixtures/index.ts +2 -0
  116. package/src/execution/engine/__tests__/fixtures/mock-scenarios.ts +60 -0
  117. package/src/execution/engine/__tests__/fixtures/test-agents.ts +85 -0
  118. package/src/execution/engine/__tests__/integration/agent-framework.integration.test.ts +1031 -0
  119. package/src/execution/engine/__tests__/timeout.test.ts +565 -0
  120. package/src/execution/engine/agent/__tests__/errors.test.ts +508 -0
  121. package/src/execution/engine/agent/actions/__tests__/processor.test.ts +531 -0
  122. package/src/execution/engine/agent/actions/executor.ts +205 -0
  123. package/src/execution/engine/agent/actions/navigate-knowledge-executor.ts +230 -0
  124. package/src/execution/engine/agent/actions/processor.ts +116 -0
  125. package/src/execution/engine/agent/actions/types.ts +70 -0
  126. package/src/execution/engine/agent/core/__tests__/agent.test.ts +614 -0
  127. package/src/execution/engine/agent/core/__tests__/error-passthrough.test.ts +134 -0
  128. package/src/execution/engine/agent/core/agent.ts +810 -0
  129. package/src/execution/engine/agent/core/types.ts +155 -0
  130. package/src/execution/engine/agent/errors.ts +251 -0
  131. package/src/execution/engine/agent/index.ts +78 -0
  132. package/src/execution/engine/agent/knowledge-map/__tests__/navigate-knowledge-executor.test.ts +580 -0
  133. package/src/execution/engine/agent/knowledge-map/__tests__/utils.test.ts +622 -0
  134. package/src/execution/engine/agent/knowledge-map/types.ts +106 -0
  135. package/src/execution/engine/agent/knowledge-map/utils.ts +101 -0
  136. package/src/execution/engine/agent/memory/__tests__/domains.test.ts +72 -0
  137. package/src/execution/engine/agent/memory/__tests__/manager.test.ts +754 -0
  138. package/src/execution/engine/agent/memory/__tests__/utils.test.ts +285 -0
  139. package/src/execution/engine/agent/memory/domains.ts +99 -0
  140. package/src/execution/engine/agent/memory/manager.ts +365 -0
  141. package/src/execution/engine/agent/memory/processor.ts +66 -0
  142. package/src/execution/engine/agent/memory/types.ts +90 -0
  143. package/src/execution/engine/agent/memory/utils.ts +134 -0
  144. package/src/execution/engine/agent/observability/logging.ts +467 -0
  145. package/src/execution/engine/agent/observability/types.ts +64 -0
  146. package/src/execution/engine/agent/reasoning/__tests__/request-builder.test.ts +209 -0
  147. package/src/execution/engine/agent/reasoning/adapters/agent-adapter-helpers.ts +349 -0
  148. package/src/execution/engine/agent/reasoning/processor.ts +92 -0
  149. package/src/execution/engine/agent/reasoning/prompt-sections/base-actions.ts +134 -0
  150. package/src/execution/engine/agent/reasoning/prompt-sections/completion.ts +49 -0
  151. package/src/execution/engine/agent/reasoning/prompt-sections/knowledge-map.ts +93 -0
  152. package/src/execution/engine/agent/reasoning/prompt-sections/memory.ts +65 -0
  153. package/src/execution/engine/agent/reasoning/prompt-sections/security.ts +32 -0
  154. package/src/execution/engine/agent/reasoning/prompt-sections/tools.ts +44 -0
  155. package/src/execution/engine/agent/reasoning/request-builder.ts +169 -0
  156. package/src/execution/engine/agent/reasoning/types.ts +18 -0
  157. package/src/execution/engine/base/__tests__/errors.test.ts +246 -0
  158. package/src/execution/engine/base/__tests__/serialization.test.ts +670 -0
  159. package/src/execution/engine/base/__tests__/utils.test.ts +45 -0
  160. package/src/execution/engine/base/errors.ts +118 -0
  161. package/src/execution/engine/base/index.ts +2 -0
  162. package/src/execution/engine/base/logging.ts +31 -0
  163. package/src/execution/engine/base/serialization.ts +324 -0
  164. package/src/execution/engine/base/types.ts +126 -0
  165. package/src/execution/engine/base/utils.ts +41 -0
  166. package/src/execution/engine/index.ts +440 -0
  167. package/src/execution/engine/interface/index.ts +1 -0
  168. package/src/execution/engine/interface/types.ts +62 -0
  169. package/src/execution/engine/llm/__tests__/errors.test.ts +318 -0
  170. package/src/execution/engine/llm/__tests__/input-sanitizer.test.ts +286 -0
  171. package/src/execution/engine/llm/__tests__/model-info.test.ts +50 -0
  172. package/src/execution/engine/llm/__tests__/model-validation.test.ts +321 -0
  173. package/src/execution/engine/llm/__tests__/response-schema-validator.test.ts +115 -0
  174. package/src/execution/engine/llm/adapters/__tests__/adapter-factory.test.ts +375 -0
  175. package/src/execution/engine/llm/adapters/__tests__/anthropic-adapter.test.ts +463 -0
  176. package/src/execution/engine/llm/adapters/__tests__/anthropic.integration.test.ts +177 -0
  177. package/src/execution/engine/llm/adapters/__tests__/circuit-breaker-error.test.ts +94 -0
  178. package/src/execution/engine/llm/adapters/__tests__/google-adapter.test.ts +722 -0
  179. package/src/execution/engine/llm/adapters/__tests__/google.integration.test.ts +376 -0
  180. package/src/execution/engine/llm/adapters/__tests__/mock-adapter.test.ts +432 -0
  181. package/src/execution/engine/llm/adapters/__tests__/openai-adapter.test.ts +551 -0
  182. package/src/execution/engine/llm/adapters/__tests__/openrouter-adapter.test.ts +563 -0
  183. package/src/execution/engine/llm/adapters/__tests__/openrouter.integration.test.ts +105 -0
  184. package/src/execution/engine/llm/adapters/__tests__/universal-adapter.test.ts +537 -0
  185. package/src/execution/engine/llm/adapters/circuit-breaker.ts +147 -0
  186. package/src/execution/engine/llm/adapters/index.ts +17 -0
  187. package/src/execution/engine/llm/adapters/mock-adapter.ts +116 -0
  188. package/src/execution/engine/llm/adapters/server/adapter-factory.ts +130 -0
  189. package/src/execution/engine/llm/adapters/server/anthropic.ts +137 -0
  190. package/src/execution/engine/llm/adapters/server/compose-signal.ts +18 -0
  191. package/src/execution/engine/llm/adapters/server/google.ts +283 -0
  192. package/src/execution/engine/llm/adapters/server/index.ts +12 -0
  193. package/src/execution/engine/llm/adapters/server/openai.ts +206 -0
  194. package/src/execution/engine/llm/adapters/server/openrouter.ts +235 -0
  195. package/src/execution/engine/llm/adapters/universal-adapter.ts +230 -0
  196. package/src/execution/engine/llm/errors.ts +186 -0
  197. package/src/execution/engine/llm/input-sanitizer.ts +129 -0
  198. package/src/execution/engine/llm/model-info.ts +332 -0
  199. package/src/execution/engine/llm/response-schema-validator.ts +113 -0
  200. package/src/execution/engine/llm/types.ts +86 -0
  201. package/src/execution/engine/test-utils/index.ts +6 -0
  202. package/src/execution/engine/test-utils/mocks.ts +56 -0
  203. package/src/execution/engine/tools/__tests__/tooling-error.test.ts +265 -0
  204. package/src/execution/engine/tools/__tests__/types.test.ts +47 -0
  205. package/src/execution/engine/tools/integration/base-integration-adapter.ts +50 -0
  206. package/src/execution/engine/tools/integration/index.ts +53 -0
  207. package/src/execution/engine/tools/integration/server/adapters/anymailfinder/anymailfinder-adapter.ts +73 -0
  208. package/src/execution/engine/tools/integration/server/adapters/anymailfinder/anymailfinder-tools.ts +209 -0
  209. package/src/execution/engine/tools/integration/server/adapters/anymailfinder/fetch/find-company-email/index.ts +82 -0
  210. package/src/execution/engine/tools/integration/server/adapters/anymailfinder/fetch/find-decision-maker-email/index.ts +122 -0
  211. package/src/execution/engine/tools/integration/server/adapters/anymailfinder/fetch/find-person-email/index.ts +89 -0
  212. package/src/execution/engine/tools/integration/server/adapters/anymailfinder/fetch/verify-email/index.ts +84 -0
  213. package/src/execution/engine/tools/integration/server/adapters/anymailfinder/index.ts +16 -0
  214. package/src/execution/engine/tools/integration/server/adapters/apify/__tests__/apify-run-actor.integration.test.ts +293 -0
  215. package/src/execution/engine/tools/integration/server/adapters/apify/apify-adapter.ts +100 -0
  216. package/src/execution/engine/tools/integration/server/adapters/apify/apify-tools.ts +217 -0
  217. package/src/execution/engine/tools/integration/server/adapters/apify/fetch/get-dataset-items/index.ts +92 -0
  218. package/src/execution/engine/tools/integration/server/adapters/apify/fetch/run-actor/index.ts +218 -0
  219. package/src/execution/engine/tools/integration/server/adapters/apify/fetch/start-actor/index.ts +87 -0
  220. package/src/execution/engine/tools/integration/server/adapters/apify/index.ts +11 -0
  221. package/src/execution/engine/tools/integration/server/adapters/attio/__tests__/attio-crud.integration.test.ts +362 -0
  222. package/src/execution/engine/tools/integration/server/adapters/attio/attio-adapter.ts +162 -0
  223. package/src/execution/engine/tools/integration/server/adapters/attio/attio-tools.ts +594 -0
  224. package/src/execution/engine/tools/integration/server/adapters/attio/fetch/README.md +632 -0
  225. package/src/execution/engine/tools/integration/server/adapters/attio/fetch/create-attribute/index.ts +214 -0
  226. package/src/execution/engine/tools/integration/server/adapters/attio/fetch/create-note/index.ts +152 -0
  227. package/src/execution/engine/tools/integration/server/adapters/attio/fetch/create-record/index.ts +141 -0
  228. package/src/execution/engine/tools/integration/server/adapters/attio/fetch/delete-note/index.ts +86 -0
  229. package/src/execution/engine/tools/integration/server/adapters/attio/fetch/delete-record/index.ts +105 -0
  230. package/src/execution/engine/tools/integration/server/adapters/attio/fetch/get-record/index.test.ts +186 -0
  231. package/src/execution/engine/tools/integration/server/adapters/attio/fetch/get-record/index.ts +118 -0
  232. package/src/execution/engine/tools/integration/server/adapters/attio/fetch/list-attributes/index.ts +165 -0
  233. package/src/execution/engine/tools/integration/server/adapters/attio/fetch/list-notes/index.ts +96 -0
  234. package/src/execution/engine/tools/integration/server/adapters/attio/fetch/list-objects/index.ts +104 -0
  235. package/src/execution/engine/tools/integration/server/adapters/attio/fetch/list-records/index.test.ts +338 -0
  236. package/src/execution/engine/tools/integration/server/adapters/attio/fetch/list-records/index.ts +156 -0
  237. package/src/execution/engine/tools/integration/server/adapters/attio/fetch/update-attribute/index.ts +220 -0
  238. package/src/execution/engine/tools/integration/server/adapters/attio/fetch/update-record/index.ts +140 -0
  239. package/src/execution/engine/tools/integration/server/adapters/attio/fetch/utils/types.ts +147 -0
  240. package/src/execution/engine/tools/integration/server/adapters/attio/index.ts +31 -0
  241. package/src/execution/engine/tools/integration/server/adapters/dropbox/__tests__/dropbox-adapter.test.ts +409 -0
  242. package/src/execution/engine/tools/integration/server/adapters/dropbox/dropbox-adapter.ts +281 -0
  243. package/src/execution/engine/tools/integration/server/adapters/dropbox/dropbox-tools.ts +106 -0
  244. package/src/execution/engine/tools/integration/server/adapters/dropbox/fetch/create-folder/__tests__/index.test.ts +451 -0
  245. package/src/execution/engine/tools/integration/server/adapters/dropbox/fetch/create-folder/index.ts +114 -0
  246. package/src/execution/engine/tools/integration/server/adapters/dropbox/fetch/upload-file/__tests__/index.test.ts +415 -0
  247. package/src/execution/engine/tools/integration/server/adapters/dropbox/fetch/upload-file/index.ts +111 -0
  248. package/src/execution/engine/tools/integration/server/adapters/dropbox/index.ts +25 -0
  249. package/src/execution/engine/tools/integration/server/adapters/gmail/gmail-adapter.ts +210 -0
  250. package/src/execution/engine/tools/integration/server/adapters/gmail/gmail-tools.ts +104 -0
  251. package/src/execution/engine/tools/integration/server/adapters/google-sheets/__tests__/google-sheets.integration.test.ts +261 -0
  252. package/src/execution/engine/tools/integration/server/adapters/google-sheets/google-sheets-adapter.ts +1189 -0
  253. package/src/execution/engine/tools/integration/server/adapters/google-sheets/google-sheets-tools.ts +641 -0
  254. package/src/execution/engine/tools/integration/server/adapters/google-sheets/index.ts +18 -0
  255. package/src/execution/engine/tools/integration/server/adapters/instantly/fetch/activate-campaign/index.ts +86 -0
  256. package/src/execution/engine/tools/integration/server/adapters/instantly/fetch/add-to-campaign/__tests__/index.test.ts +289 -0
  257. package/src/execution/engine/tools/integration/server/adapters/instantly/fetch/add-to-campaign/index.ts +154 -0
  258. package/src/execution/engine/tools/integration/server/adapters/instantly/fetch/bulk-add-leads/__tests__/index.test.ts +325 -0
  259. package/src/execution/engine/tools/integration/server/adapters/instantly/fetch/bulk-add-leads/index.ts +153 -0
  260. package/src/execution/engine/tools/integration/server/adapters/instantly/fetch/bulk-delete-leads/index.ts +84 -0
  261. package/src/execution/engine/tools/integration/server/adapters/instantly/fetch/create-campaign/index.ts +125 -0
  262. package/src/execution/engine/tools/integration/server/adapters/instantly/fetch/create-inbox-test/index.ts +107 -0
  263. package/src/execution/engine/tools/integration/server/adapters/instantly/fetch/delete-campaign/index.ts +85 -0
  264. package/src/execution/engine/tools/integration/server/adapters/instantly/fetch/get-account-health/index.ts +91 -0
  265. package/src/execution/engine/tools/integration/server/adapters/instantly/fetch/get-campaign/index.ts +92 -0
  266. package/src/execution/engine/tools/integration/server/adapters/instantly/fetch/get-campaign-analytics/__tests__/index.test.ts +195 -0
  267. package/src/execution/engine/tools/integration/server/adapters/instantly/fetch/get-campaign-analytics/index.ts +113 -0
  268. package/src/execution/engine/tools/integration/server/adapters/instantly/fetch/get-daily-campaign-analytics/index.ts +104 -0
  269. package/src/execution/engine/tools/integration/server/adapters/instantly/fetch/get-emails/index.ts +155 -0
  270. package/src/execution/engine/tools/integration/server/adapters/instantly/fetch/get-step-analytics/__tests__/index.test.ts +196 -0
  271. package/src/execution/engine/tools/integration/server/adapters/instantly/fetch/get-step-analytics/index.ts +102 -0
  272. package/src/execution/engine/tools/integration/server/adapters/instantly/fetch/list-campaigns/__tests__/index.test.ts +189 -0
  273. package/src/execution/engine/tools/integration/server/adapters/instantly/fetch/list-campaigns/index.ts +87 -0
  274. package/src/execution/engine/tools/integration/server/adapters/instantly/fetch/list-leads/index.ts +112 -0
  275. package/src/execution/engine/tools/integration/server/adapters/instantly/fetch/patch-lead/index.ts +76 -0
  276. package/src/execution/engine/tools/integration/server/adapters/instantly/fetch/pause-campaign/index.ts +86 -0
  277. package/src/execution/engine/tools/integration/server/adapters/instantly/fetch/remove-from-subsequence/index.ts +98 -0
  278. package/src/execution/engine/tools/integration/server/adapters/instantly/fetch/send-reply/index.ts +126 -0
  279. package/src/execution/engine/tools/integration/server/adapters/instantly/fetch/update-campaign/__tests__/index.test.ts +193 -0
  280. package/src/execution/engine/tools/integration/server/adapters/instantly/fetch/update-campaign/index.ts +99 -0
  281. package/src/execution/engine/tools/integration/server/adapters/instantly/fetch/update-interest-status/__tests__/index.test.ts +621 -0
  282. package/src/execution/engine/tools/integration/server/adapters/instantly/fetch/update-interest-status/index.ts +125 -0
  283. package/src/execution/engine/tools/integration/server/adapters/instantly/index.ts +29 -0
  284. package/src/execution/engine/tools/integration/server/adapters/instantly/instantly-adapter.ts +178 -0
  285. package/src/execution/engine/tools/integration/server/adapters/instantly/instantly-tools.ts +1473 -0
  286. package/src/execution/engine/tools/integration/server/adapters/millionverifier/fetch/check-credits/index.ts +59 -0
  287. package/src/execution/engine/tools/integration/server/adapters/millionverifier/fetch/verify-email/index.ts +102 -0
  288. package/src/execution/engine/tools/integration/server/adapters/millionverifier/index.ts +17 -0
  289. package/src/execution/engine/tools/integration/server/adapters/millionverifier/millionverifier-adapter.ts +80 -0
  290. package/src/execution/engine/tools/integration/server/adapters/millionverifier/millionverifier-tools.ts +102 -0
  291. package/src/execution/engine/tools/integration/server/adapters/resend/fetch/get-email/index.ts +102 -0
  292. package/src/execution/engine/tools/integration/server/adapters/resend/fetch/send-email/index.ts +134 -0
  293. package/src/execution/engine/tools/integration/server/adapters/resend/fetch/utils/types.ts +75 -0
  294. package/src/execution/engine/tools/integration/server/adapters/resend/index.ts +27 -0
  295. package/src/execution/engine/tools/integration/server/adapters/resend/resend-adapter.ts +108 -0
  296. package/src/execution/engine/tools/integration/server/adapters/resend/resend-tools.ts +132 -0
  297. package/src/execution/engine/tools/integration/server/adapters/resend/types.ts +44 -0
  298. package/src/execution/engine/tools/integration/server/adapters/signature-api/fetch/create-envelope/index.ts +274 -0
  299. package/src/execution/engine/tools/integration/server/adapters/signature-api/fetch/download-document/index.ts +230 -0
  300. package/src/execution/engine/tools/integration/server/adapters/signature-api/fetch/get-envelope/index.ts +133 -0
  301. package/src/execution/engine/tools/integration/server/adapters/signature-api/fetch/utils/types.ts +246 -0
  302. package/src/execution/engine/tools/integration/server/adapters/signature-api/fetch/void-envelope/index.ts +90 -0
  303. package/src/execution/engine/tools/integration/server/adapters/signature-api/index.ts +38 -0
  304. package/src/execution/engine/tools/integration/server/adapters/signature-api/signature-api-adapter.ts +87 -0
  305. package/src/execution/engine/tools/integration/server/adapters/signature-api/signature-api-tools.ts +179 -0
  306. package/src/execution/engine/tools/integration/server/adapters/stripe/fetch/utils/types.ts +210 -0
  307. package/src/execution/engine/tools/integration/server/adapters/stripe/index.ts +44 -0
  308. package/src/execution/engine/tools/integration/server/adapters/stripe/stripe-adapter.ts +517 -0
  309. package/src/execution/engine/tools/integration/server/adapters/stripe/stripe-tools.ts +309 -0
  310. package/src/execution/engine/tools/integration/server/adapters/tomba/fetch/domain-search/index.ts +133 -0
  311. package/src/execution/engine/tools/integration/server/adapters/tomba/fetch/email-finder/index.ts +122 -0
  312. package/src/execution/engine/tools/integration/server/adapters/tomba/fetch/email-verifier/index.ts +111 -0
  313. package/src/execution/engine/tools/integration/server/adapters/tomba/index.ts +11 -0
  314. package/src/execution/engine/tools/integration/server/adapters/tomba/tomba-adapter.ts +78 -0
  315. package/src/execution/engine/tools/integration/server/adapters/tomba/tomba-tools.ts +222 -0
  316. package/src/execution/engine/tools/integration/server/index.ts +61 -0
  317. package/src/execution/engine/tools/integration/service.ts +161 -0
  318. package/src/execution/engine/tools/integration/tool.ts +253 -0
  319. package/src/execution/engine/tools/integration/types/anymailfinder.ts +74 -0
  320. package/src/execution/engine/tools/integration/types/apify.ts +92 -0
  321. package/src/execution/engine/tools/integration/types/attio.ts +354 -0
  322. package/src/execution/engine/tools/integration/types/dropbox.ts +64 -0
  323. package/src/execution/engine/tools/integration/types/gmail.ts +35 -0
  324. package/src/execution/engine/tools/integration/types/google-sheets.ts +303 -0
  325. package/src/execution/engine/tools/integration/types/index.ts +19 -0
  326. package/src/execution/engine/tools/integration/types/instantly.ts +557 -0
  327. package/src/execution/engine/tools/integration/types/millionverifier.ts +56 -0
  328. package/src/execution/engine/tools/integration/types/resend.ts +63 -0
  329. package/src/execution/engine/tools/integration/types/signature-api.ts +164 -0
  330. package/src/execution/engine/tools/integration/types/stripe.ts +162 -0
  331. package/src/execution/engine/tools/integration/types/tomba.ts +94 -0
  332. package/src/execution/engine/tools/lead-service-types.ts +884 -0
  333. package/src/execution/engine/tools/llm/index.ts +11 -0
  334. package/src/execution/engine/tools/llm/server/index.ts +8 -0
  335. package/src/execution/engine/tools/llm/server/llm-call-tool.ts +118 -0
  336. package/src/execution/engine/tools/platform/__tests__/approval.test.ts +242 -0
  337. package/src/execution/engine/tools/platform/__tests__/email.test.ts +482 -0
  338. package/src/execution/engine/tools/platform/__tests__/hitl-cancel.test.ts +97 -0
  339. package/src/execution/engine/tools/platform/__tests__/notification.test.ts +208 -0
  340. package/src/execution/engine/tools/platform/__tests__/pdf.test.ts +441 -0
  341. package/src/execution/engine/tools/platform/__tests__/scheduler.test.ts +189 -0
  342. package/src/execution/engine/tools/platform/__tests__/schedules.test.ts +336 -0
  343. package/src/execution/engine/tools/platform/acquisition/company-tools.ts +248 -0
  344. package/src/execution/engine/tools/platform/acquisition/contact-tools.ts +319 -0
  345. package/src/execution/engine/tools/platform/acquisition/index.ts +43 -0
  346. package/src/execution/engine/tools/platform/acquisition/list-tools.ts +148 -0
  347. package/src/execution/engine/tools/platform/acquisition/types.ts +260 -0
  348. package/src/execution/engine/tools/platform/approval/cancel-by-metadata.ts +65 -0
  349. package/src/execution/engine/tools/platform/approval/index.ts +4 -0
  350. package/src/execution/engine/tools/platform/approval/tool.ts +99 -0
  351. package/src/execution/engine/tools/platform/email/index.ts +122 -0
  352. package/src/execution/engine/tools/platform/email/types.ts +96 -0
  353. package/src/execution/engine/tools/platform/index.ts +181 -0
  354. package/src/execution/engine/tools/platform/notification.ts +81 -0
  355. package/src/execution/engine/tools/platform/pdf/index.ts +110 -0
  356. package/src/execution/engine/tools/platform/pdf/types.ts +77 -0
  357. package/src/execution/engine/tools/platform/resource-invocation/__tests__/edge-cases.test.ts +507 -0
  358. package/src/execution/engine/tools/platform/resource-invocation/__tests__/resource-invocation-service.test.ts +500 -0
  359. package/src/execution/engine/tools/platform/resource-invocation/__tests__/tool.test.ts +555 -0
  360. package/src/execution/engine/tools/platform/resource-invocation/dynamic-tool.ts +94 -0
  361. package/src/execution/engine/tools/platform/resource-invocation/index.ts +14 -0
  362. package/src/execution/engine/tools/platform/resource-invocation/resource-invocation-service.ts +147 -0
  363. package/src/execution/engine/tools/platform/resource-invocation/tool.ts +115 -0
  364. package/src/execution/engine/tools/platform/resource-invocation/types.ts +31 -0
  365. package/src/execution/engine/tools/platform/scheduler.ts +87 -0
  366. package/src/execution/engine/tools/platform/schedules/cancel-by-key-tool.ts +48 -0
  367. package/src/execution/engine/tools/platform/schedules/cancel-by-metadata-tool.ts +42 -0
  368. package/src/execution/engine/tools/platform/schedules/delete-by-key-tool.ts +43 -0
  369. package/src/execution/engine/tools/platform/schedules/index.ts +13 -0
  370. package/src/execution/engine/tools/platform/schedules/list-tool.ts +56 -0
  371. package/src/execution/engine/tools/platform/schedules/types.ts +88 -0
  372. package/src/execution/engine/tools/platform/storage/__tests__/storage.test.ts +998 -0
  373. package/src/execution/engine/tools/platform/storage/index.ts +370 -0
  374. package/src/execution/engine/tools/platform/storage/types.ts +128 -0
  375. package/src/execution/engine/tools/platform/types.ts +148 -0
  376. package/src/execution/engine/tools/registry.ts +590 -0
  377. package/src/execution/engine/tools/tool-maps.ts +694 -0
  378. package/src/execution/engine/tools/types.ts +233 -0
  379. package/src/execution/engine/workflow/__tests__/errors.test.ts +139 -0
  380. package/src/execution/engine/workflow/__tests__/utils.test.ts +645 -0
  381. package/src/execution/engine/workflow/__tests__/workflow.test.ts +818 -0
  382. package/src/execution/engine/workflow/errors.ts +63 -0
  383. package/src/execution/engine/workflow/helpers/index.ts +11 -0
  384. package/src/execution/engine/workflow/helpers/server/index.ts +8 -0
  385. package/src/execution/engine/workflow/helpers/server/llm-call.ts +93 -0
  386. package/src/execution/engine/workflow/index.ts +19 -0
  387. package/src/execution/engine/workflow/log-truncate.ts +26 -0
  388. package/src/execution/engine/workflow/logging.ts +191 -0
  389. package/src/execution/engine/workflow/types.ts +183 -0
  390. package/src/execution/engine/workflow/utils.ts +280 -0
  391. package/src/execution/engine/workflow/workflow.ts +168 -0
  392. package/src/execution/index.ts +20 -0
  393. package/src/execution/scheduler/__tests__/api-schemas.test.ts +733 -0
  394. package/src/execution/scheduler/__tests__/retry.test.ts +37 -0
  395. package/src/execution/scheduler/__tests__/utils.test.ts +1009 -0
  396. package/src/execution/scheduler/api-schemas.ts +296 -0
  397. package/src/execution/scheduler/index.ts +50 -0
  398. package/src/execution/scheduler/schemas.ts +264 -0
  399. package/src/execution/scheduler/types.ts +111 -0
  400. package/src/execution/scheduler/utils.ts +364 -0
  401. package/src/forms/index.ts +7 -0
  402. package/src/forms/schemas.test.ts +113 -0
  403. package/src/forms/schemas.ts +69 -0
  404. package/src/forms/types.ts +70 -0
  405. package/src/index.ts +54 -0
  406. package/src/integrations/credentials/__tests__/api-schemas.test.ts +496 -0
  407. package/src/integrations/credentials/__tests__/schemas.test.ts +82 -0
  408. package/src/integrations/credentials/__tests__/utils.test.ts +144 -0
  409. package/src/integrations/credentials/api-schemas.ts +143 -0
  410. package/src/integrations/credentials/index.ts +32 -0
  411. package/src/integrations/credentials/schemas.ts +164 -0
  412. package/src/integrations/credentials/utils.ts +59 -0
  413. package/src/integrations/oauth/__tests__/provider-registry.test.ts +59 -0
  414. package/src/integrations/oauth/api-schemas.ts +92 -0
  415. package/src/integrations/oauth/index.ts +19 -0
  416. package/src/integrations/oauth/provider-registry.ts +61 -0
  417. package/src/integrations/oauth/server/__tests__/refresh-concurrent.test.ts +183 -0
  418. package/src/integrations/oauth/server/__tests__/refresh.integration.test.ts +257 -0
  419. package/src/integrations/oauth/server/__tests__/refresh.test.ts +577 -0
  420. package/src/integrations/oauth/server/credentials.ts +39 -0
  421. package/src/integrations/oauth/server/refresh.ts +214 -0
  422. package/src/integrations/oauth/types.ts +34 -0
  423. package/src/integrations/webhook-endpoints/__tests__/api-schemas.test.ts +318 -0
  424. package/src/integrations/webhook-endpoints/api-schemas.ts +102 -0
  425. package/src/integrations/webhook-endpoints/index.ts +28 -0
  426. package/src/integrations/webhook-endpoints/types.ts +51 -0
  427. package/src/operations/activities/api-schemas.ts +79 -0
  428. package/src/operations/activities/index.ts +9 -0
  429. package/src/operations/activities/sse-events.ts +30 -0
  430. package/src/operations/activities/types.ts +63 -0
  431. package/src/operations/debug-logs/client.ts +60 -0
  432. package/src/operations/debug-logs/debug-logger.ts +83 -0
  433. package/src/operations/debug-logs/index.ts +8 -0
  434. package/src/operations/debug-logs/server.ts +19 -0
  435. package/src/operations/debug-logs/types.ts +33 -0
  436. package/src/operations/index.ts +50 -0
  437. package/src/operations/notifications/__tests__/api-schemas.test.ts +216 -0
  438. package/src/operations/notifications/api-schemas.ts +91 -0
  439. package/src/operations/notifications/index.ts +3 -0
  440. package/src/operations/notifications/sse-events.ts +21 -0
  441. package/src/operations/notifications/types.ts +47 -0
  442. package/src/operations/observability/__tests__/openrouter-cost-flow.test.ts +297 -0
  443. package/src/operations/observability/__tests__/schemas.test.ts +151 -0
  444. package/src/operations/observability/__tests__/types.test.ts +109 -0
  445. package/src/operations/observability/__tests__/utils.test.ts +54 -0
  446. package/src/operations/observability/ai-usage-collector.ts +64 -0
  447. package/src/operations/observability/index.ts +13 -0
  448. package/src/operations/observability/metrics-collector.ts +49 -0
  449. package/src/operations/observability/schemas.ts +39 -0
  450. package/src/operations/observability/types.ts +463 -0
  451. package/src/operations/observability/utils.ts +77 -0
  452. package/src/operations/sessions/__tests__/api-schemas.test.ts +361 -0
  453. package/src/operations/sessions/__tests__/manager.test.ts +821 -0
  454. package/src/operations/sessions/api-schemas.ts +166 -0
  455. package/src/operations/sessions/index.ts +26 -0
  456. package/src/operations/sessions/server/manager.ts +90 -0
  457. package/src/operations/sessions/server/session.ts +180 -0
  458. package/src/operations/sessions/types.ts +98 -0
  459. package/src/operations/triggers/index.ts +12 -0
  460. package/src/operations/triggers/webhook/definitions/__tests__/instantly-reply-received.test.ts +72 -0
  461. package/src/operations/triggers/webhook/definitions/instantly-account-error.ts +44 -0
  462. package/src/operations/triggers/webhook/definitions/instantly-auto-reply-received.ts +51 -0
  463. package/src/operations/triggers/webhook/definitions/instantly-campaign-completed.ts +45 -0
  464. package/src/operations/triggers/webhook/definitions/instantly-email-bounced.ts +49 -0
  465. package/src/operations/triggers/webhook/definitions/instantly-lead-unsubscribed.ts +45 -0
  466. package/src/operations/triggers/webhook/definitions/instantly-reply-received.ts +54 -0
  467. package/src/operations/triggers/webhook/index.ts +35 -0
  468. package/src/operations/triggers/webhook/types.ts +74 -0
  469. package/src/organization-model/README.md +79 -0
  470. package/src/organization-model/__tests__/graph.test.ts +250 -0
  471. package/src/organization-model/__tests__/resolve.test.ts +47 -0
  472. package/src/organization-model/defaults.ts +60 -0
  473. package/src/organization-model/domains/branding.ts +22 -0
  474. package/src/organization-model/domains/crm.ts +46 -0
  475. package/src/organization-model/domains/delivery.ts +48 -0
  476. package/src/organization-model/domains/features.ts +57 -0
  477. package/src/organization-model/domains/lead-gen.ts +33 -0
  478. package/src/organization-model/domains/navigation.ts +103 -0
  479. package/src/organization-model/domains/shared.ts +42 -0
  480. package/src/organization-model/graph/build.ts +432 -0
  481. package/src/organization-model/graph/index.ts +4 -0
  482. package/src/organization-model/graph/schema.ts +50 -0
  483. package/src/organization-model/graph/types.ts +52 -0
  484. package/src/organization-model/index.ts +11 -0
  485. package/src/organization-model/published.ts +18 -0
  486. package/src/organization-model/resolve.ts +42 -0
  487. package/src/organization-model/schema.ts +21 -0
  488. package/src/organization-model/types.ts +27 -0
  489. package/src/platform/api/index.ts +1 -0
  490. package/src/platform/api/types.ts +35 -0
  491. package/src/platform/constants/http.ts +37 -0
  492. package/src/platform/constants/index.ts +5 -0
  493. package/src/platform/constants/limits.ts +32 -0
  494. package/src/platform/constants/resilience.ts +51 -0
  495. package/src/platform/constants/timeouts.ts +20 -0
  496. package/src/platform/constants/versions.ts +3 -0
  497. package/src/platform/index.ts +27 -0
  498. package/src/platform/registry/__tests__/command-view.test.ts +410 -0
  499. package/src/platform/registry/__tests__/resource-registry-static.test.ts +347 -0
  500. package/src/platform/registry/__tests__/resource-registry.integration.test.ts +1004 -0
  501. package/src/platform/registry/__tests__/resource-registry.list-executable.test.ts +393 -0
  502. package/src/platform/registry/__tests__/resource-registry.test.ts +1942 -0
  503. package/src/platform/registry/__tests__/serialization.test.ts +1127 -0
  504. package/src/platform/registry/__tests__/validation.test.ts +1086 -0
  505. package/src/platform/registry/command-view.ts +180 -0
  506. package/src/platform/registry/domains.ts +165 -0
  507. package/src/platform/registry/index.ts +93 -0
  508. package/src/platform/registry/reserved.ts +24 -0
  509. package/src/platform/registry/resource-metadata.ts +59 -0
  510. package/src/platform/registry/resource-registry.command-queue-groups.test.ts +129 -0
  511. package/src/platform/registry/resource-registry.ts +788 -0
  512. package/src/platform/registry/serialization.ts +273 -0
  513. package/src/platform/registry/serialized-types.ts +231 -0
  514. package/src/platform/registry/stats-types.ts +66 -0
  515. package/src/platform/registry/types.ts +404 -0
  516. package/src/platform/registry/validation.ts +513 -0
  517. package/src/platform/resilience/__tests__/circuit-breaker.test.ts +291 -0
  518. package/src/platform/resilience/__tests__/http-error-mapper.test.ts +173 -0
  519. package/src/platform/resilience/__tests__/rate-limiter.test.ts +471 -0
  520. package/src/platform/resilience/__tests__/retry.test.ts +380 -0
  521. package/src/platform/resilience/__tests__/timeout.test.ts +219 -0
  522. package/src/platform/resilience/circuit-breaker.ts +164 -0
  523. package/src/platform/resilience/errors.ts +68 -0
  524. package/src/platform/resilience/http-error-mapper.ts +129 -0
  525. package/src/platform/resilience/index.ts +93 -0
  526. package/src/platform/resilience/rate-limiter-types.ts +46 -0
  527. package/src/platform/resilience/rate-limiter.ts +140 -0
  528. package/src/platform/resilience/retry.ts +89 -0
  529. package/src/platform/resilience/timeout.ts +63 -0
  530. package/src/platform/sse/events.ts +67 -0
  531. package/src/platform/sse/index.ts +7 -0
  532. package/src/platform/utils/__tests__/currency.test.ts +77 -0
  533. package/src/platform/utils/__tests__/validation.test.ts +1083 -0
  534. package/src/platform/utils/currency.ts +96 -0
  535. package/src/platform/utils/debounce.ts +52 -0
  536. package/src/platform/utils/error.ts +42 -0
  537. package/src/platform/utils/hmac.test.ts +97 -0
  538. package/src/platform/utils/index.ts +32 -0
  539. package/src/platform/utils/server/betterstack-logger.ts +210 -0
  540. package/src/platform/utils/server/hmac.ts +44 -0
  541. package/src/platform/utils/server/unsubscribe.ts +111 -0
  542. package/src/platform/utils/token-counter.ts +96 -0
  543. package/src/platform/utils/validation.ts +425 -0
  544. package/src/projects/api-schemas.ts +265 -0
  545. package/src/published.ts +1 -0
  546. package/src/server.ts +273 -0
  547. package/src/supabase/__tests__/helpers.test.ts +51 -0
  548. package/src/supabase/database.types.ts +2674 -0
  549. package/src/supabase/helpers.ts +20 -0
  550. package/src/supabase/index.ts +52 -0
  551. package/src/supabase/server/client.ts +58 -0
  552. package/src/test-utils/README.md +150 -0
  553. package/src/test-utils/browser-mocks.ts +54 -0
  554. package/src/test-utils/fixtures/api-keys.ts +52 -0
  555. package/src/test-utils/fixtures/index.ts +4 -0
  556. package/src/test-utils/fixtures/memberships.ts +80 -0
  557. package/src/test-utils/fixtures/organizations.ts +69 -0
  558. package/src/test-utils/fixtures/users.ts +79 -0
  559. package/src/test-utils/index.ts +11 -0
  560. package/src/test-utils/mocks/index.ts +2 -0
  561. package/src/test-utils/mocks/supabase.ts +142 -0
  562. package/src/test-utils/mocks/workos.ts +108 -0
  563. package/src/test-utils/rls/RLSTestContext.ts +586 -0
  564. package/src/test-utils/rls/index.ts +1 -0
@@ -0,0 +1,148 @@
1
+ /**
2
+ * Acquisition List Platform Tools
3
+ *
4
+ * Platform tools for managing acquisition lists. Lists work like Google Sheets tabs,
5
+ * organizing contacts into logical groups.
6
+ *
7
+ * Multi-tenancy: All operations are scoped by organizationId from ExecutionContext.
8
+ * Agents cannot specify organizationId - it is always derived from the execution context.
9
+ */
10
+
11
+ import { z } from 'zod'
12
+ import { getToolServices } from '../../registry'
13
+ import { serviceUnavailable } from '../../types'
14
+ import type { Tool } from '../../types'
15
+ import {
16
+ CreateListInputSchema,
17
+ UpdateListInputSchema,
18
+ DeleteListInputSchema,
19
+ ListOutputSchema,
20
+ ListArrayOutputSchema,
21
+ DeleteResultSchema
22
+ } from './types'
23
+
24
+ /**
25
+ * Create a new acquisition list
26
+ *
27
+ * Creates a list for organizing contacts. Lists are organization-scoped
28
+ * and ordered by creation date (newest first) when retrieved.
29
+ */
30
+ export function createAcqListCreateTool(): Tool {
31
+ return {
32
+ name: 'acq_list_create',
33
+ description: 'Create a new acquisition list for organizing contacts. Lists work like Google Sheets tabs.',
34
+ inputSchema: CreateListInputSchema,
35
+ outputSchema: ListOutputSchema,
36
+ execute: async ({ input, executionContext }) => {
37
+ const leadService = getToolServices().leadService
38
+ if (!leadService) throw serviceUnavailable('LeadService')
39
+ if (!executionContext?.organizationId) throw serviceUnavailable('ExecutionContext', { reason: 'organizationId required for multi-tenant isolation' })
40
+
41
+ const typedInput = input as { name: string; description?: string }
42
+
43
+ const result = await leadService.createList({
44
+ organizationId: executionContext.organizationId,
45
+ name: typedInput.name,
46
+ description: typedInput.description
47
+ })
48
+
49
+ return {
50
+ id: result.id,
51
+ organizationId: result.organizationId,
52
+ name: result.name,
53
+ description: result.description,
54
+ createdAt: result.createdAt.toISOString()
55
+ }
56
+ }
57
+ }
58
+ }
59
+
60
+ /**
61
+ * Update an existing acquisition list
62
+ *
63
+ * Updates list metadata (name and/or description). The list must exist
64
+ * and belong to the organization.
65
+ */
66
+ export function createAcqListUpdateTool(): Tool {
67
+ return {
68
+ name: 'acq_list_update',
69
+ description: 'Update an existing acquisition list metadata (name or description).',
70
+ inputSchema: UpdateListInputSchema,
71
+ outputSchema: ListOutputSchema,
72
+ execute: async ({ input, executionContext }) => {
73
+ const leadService = getToolServices().leadService
74
+ if (!leadService) throw serviceUnavailable('LeadService')
75
+ if (!executionContext?.organizationId) throw serviceUnavailable('ExecutionContext', { reason: 'organizationId required for multi-tenant isolation' })
76
+
77
+ const typedInput = input as { id: string; name?: string; description?: string }
78
+
79
+ const result = await leadService.updateList(typedInput.id, {
80
+ name: typedInput.name,
81
+ description: typedInput.description
82
+ })
83
+
84
+ return {
85
+ id: result.id,
86
+ organizationId: result.organizationId,
87
+ name: result.name,
88
+ description: result.description,
89
+ createdAt: result.createdAt.toISOString()
90
+ }
91
+ }
92
+ }
93
+ }
94
+
95
+ /**
96
+ * Delete an acquisition list
97
+ *
98
+ * Deletes a list. Contacts in this list will have their list_ids updated
99
+ * to remove this list reference. The list must belong to the organization.
100
+ */
101
+ export function createAcqListDeleteTool(): Tool {
102
+ return {
103
+ name: 'acq_list_delete',
104
+ description: 'Delete an acquisition list. Contacts in this list will have their list_ids updated to remove this list.',
105
+ inputSchema: DeleteListInputSchema,
106
+ outputSchema: DeleteResultSchema,
107
+ execute: async ({ input, executionContext }) => {
108
+ const leadService = getToolServices().leadService
109
+ if (!leadService) throw serviceUnavailable('LeadService')
110
+ if (!executionContext?.organizationId) throw serviceUnavailable('ExecutionContext', { reason: 'organizationId required for multi-tenant isolation' })
111
+
112
+ const typedInput = input as { id: string }
113
+
114
+ await leadService.deleteList(typedInput.id, executionContext.organizationId)
115
+ return { success: true }
116
+ }
117
+ }
118
+ }
119
+
120
+ /**
121
+ * List all acquisition lists for the organization
122
+ *
123
+ * Returns all lists ordered by creation date (newest first).
124
+ * No input parameters required - organization is derived from context.
125
+ */
126
+ export function createAcqListListTool(): Tool {
127
+ return {
128
+ name: 'acq_list_list',
129
+ description: 'List all acquisition lists for the organization. Returns lists ordered by creation date (newest first).',
130
+ inputSchema: z.object({}),
131
+ outputSchema: ListArrayOutputSchema,
132
+ execute: async ({ executionContext }) => {
133
+ const leadService = getToolServices().leadService
134
+ if (!leadService) throw serviceUnavailable('LeadService')
135
+ if (!executionContext?.organizationId) throw serviceUnavailable('ExecutionContext', { reason: 'organizationId required for multi-tenant isolation' })
136
+
137
+ const results = await leadService.listLists(executionContext.organizationId)
138
+
139
+ return results.map(result => ({
140
+ id: result.id,
141
+ organizationId: result.organizationId,
142
+ name: result.name,
143
+ description: result.description,
144
+ createdAt: result.createdAt.toISOString()
145
+ }))
146
+ }
147
+ }
148
+ }
@@ -0,0 +1,260 @@
1
+ import { z } from 'zod'
2
+
3
+ // ============================================
4
+ // LIST SCHEMAS
5
+ // ============================================
6
+
7
+ export const CreateListInputSchema = z.object({
8
+ name: z.string().min(1),
9
+ description: z.string().optional()
10
+ })
11
+
12
+ export const UpdateListInputSchema = z.object({
13
+ id: z.string().uuid(),
14
+ name: z.string().min(1).optional(),
15
+ description: z.string().optional()
16
+ })
17
+
18
+ export const DeleteListInputSchema = z.object({
19
+ id: z.string().uuid()
20
+ })
21
+
22
+ export const ListOutputSchema = z.object({
23
+ id: z.string().uuid(),
24
+ organizationId: z.string().uuid(),
25
+ name: z.string(),
26
+ description: z.string().nullable(),
27
+ createdAt: z.string() // ISO date string
28
+ })
29
+
30
+ export const ListArrayOutputSchema = z.array(ListOutputSchema)
31
+
32
+ // ============================================
33
+ // COMPANY SCHEMAS
34
+ // ============================================
35
+
36
+ export const CreateCompanyInputSchema = z.object({
37
+ name: z.string().min(1),
38
+ domain: z.string().optional(),
39
+ linkedinUrl: z.string().url().optional(),
40
+ website: z.string().url().optional(),
41
+ numEmployees: z.number().int().positive().optional(),
42
+ foundedYear: z.number().int().min(1800).max(2100).optional(),
43
+ locationCity: z.string().optional(),
44
+ locationState: z.string().optional(),
45
+ source: z.string().optional(),
46
+ batchId: z.string().optional()
47
+ })
48
+
49
+ export const UpdateCompanyInputSchema = z.object({
50
+ id: z.string().uuid(),
51
+ name: z.string().min(1).optional(),
52
+ domain: z.string().optional(),
53
+ linkedinUrl: z.string().url().optional(),
54
+ website: z.string().url().optional(),
55
+ numEmployees: z.number().int().positive().optional(),
56
+ foundedYear: z.number().int().min(1800).max(2100).optional(),
57
+ locationCity: z.string().optional(),
58
+ locationState: z.string().optional(),
59
+ category: z.string().optional(),
60
+ segment: z.string().optional(),
61
+ pipelineStatus: z.record(z.string(), z.unknown()).optional(),
62
+ enrichmentData: z.record(z.string(), z.unknown()).optional(),
63
+ source: z.string().optional(),
64
+ batchId: z.string().optional()
65
+ })
66
+
67
+ export const UpsertCompanyInputSchema = CreateCompanyInputSchema.extend({
68
+ domain: z.string().min(1) // Domain required for upsert (unique key)
69
+ })
70
+
71
+ export const GetCompanyInputSchema = z.object({
72
+ id: z.string().uuid()
73
+ })
74
+
75
+ export const ListCompaniesInputSchema = z.object({
76
+ segment: z.string().optional(),
77
+ category: z.string().optional(),
78
+ domain: z.string().optional().describe('Exact domain match filter'),
79
+ website: z.string().optional().describe('Exact website match filter'),
80
+ pipelineStatus: z.record(z.string(), z.unknown()).optional().describe('JSONB containment filter for pipeline_status'),
81
+ batchId: z.string().optional(),
82
+ status: z
83
+ .enum(['active', 'invalid'])
84
+ .optional()
85
+ .describe('Filter by company status. Defaults to active if not set and includeAll is false'),
86
+ includeAll: z
87
+ .boolean()
88
+ .optional()
89
+ .describe('Bypass default active-only filter to return all companies regardless of status'),
90
+ excludeColumns: z
91
+ .array(z.enum(['enrichmentData', 'pipelineStatus']))
92
+ .optional()
93
+ .describe('Exclude large JSONB columns from the response to reduce query size')
94
+ })
95
+
96
+ export const DeleteCompanyInputSchema = z.object({
97
+ id: z.string().uuid()
98
+ })
99
+
100
+ export const CompanyOutputSchema = z.object({
101
+ id: z.string().uuid(),
102
+ organizationId: z.string().uuid(),
103
+ name: z.string(),
104
+ domain: z.string().nullable(),
105
+ linkedinUrl: z.string().nullable(),
106
+ website: z.string().nullable(),
107
+ numEmployees: z.number().nullable(),
108
+ foundedYear: z.number().nullable(),
109
+ locationCity: z.string().nullable(),
110
+ locationState: z.string().nullable(),
111
+ category: z.string().nullable(),
112
+ segment: z.string().nullable(),
113
+ pipelineStatus: z.record(z.string(), z.unknown()).nullable(),
114
+ enrichmentData: z.record(z.string(), z.unknown()).nullable(),
115
+ source: z.string().nullable(),
116
+ batchId: z.string().nullable().optional(),
117
+ status: z.enum(['active', 'invalid']),
118
+ createdAt: z.string(),
119
+ updatedAt: z.string()
120
+ })
121
+
122
+ export const CompanyArrayOutputSchema = z.array(CompanyOutputSchema)
123
+
124
+ // ============================================
125
+ // CONTACT SCHEMAS
126
+ // ============================================
127
+
128
+ export const CreateContactInputSchema = z.object({
129
+ email: z.string().email(),
130
+ companyId: z.string().uuid().optional(),
131
+ firstName: z.string().optional(),
132
+ lastName: z.string().optional(),
133
+ linkedinUrl: z.string().url().optional(),
134
+ title: z.string().optional(),
135
+ source: z.string().optional(),
136
+ sourceId: z.string().optional(),
137
+ batchId: z.string().optional()
138
+ })
139
+
140
+ export const UpdateContactInputSchema = z.object({
141
+ id: z.string().uuid(),
142
+ companyId: z.string().uuid().optional(),
143
+ emailValid: z.enum(['VALID', 'INVALID', 'RISKY', 'UNKNOWN']).optional(),
144
+ firstName: z.string().optional(),
145
+ lastName: z.string().optional(),
146
+ linkedinUrl: z.string().url().optional(),
147
+ title: z.string().optional(),
148
+ headline: z.string().optional(),
149
+ filterReason: z.string().optional(),
150
+ openingLine: z.string().optional(),
151
+ pipelineStatus: z.record(z.string(), z.unknown()).optional(),
152
+ enrichmentData: z.record(z.string(), z.unknown()).optional(),
153
+ status: z.enum(['active', 'invalid']).optional()
154
+ })
155
+
156
+ export const UpsertContactInputSchema = CreateContactInputSchema
157
+
158
+ export const GetContactInputSchema = z.object({
159
+ id: z.string().uuid()
160
+ })
161
+
162
+ export const ListContactsInputSchema = z.object({
163
+ openingLineIsNull: z.boolean().optional(), // Filter to contacts without personalization
164
+ batchId: z.string().optional(),
165
+ contactStatus: z.enum(['active', 'invalid']).optional().describe('Filter by contact status (soft-delete flag)'),
166
+ limit: z.number().int().min(1).max(1000).default(100),
167
+ offset: z.number().int().min(0).default(0)
168
+ })
169
+
170
+ export const DeleteContactInputSchema = z.object({
171
+ id: z.string().uuid()
172
+ })
173
+
174
+ export const DeactivateContactsByCompanyInputSchema = z.object({
175
+ companyId: z.string().uuid()
176
+ })
177
+
178
+ export const DeactivateContactsByCompanyResultSchema = z.object({
179
+ deactivated: z.number()
180
+ })
181
+
182
+ export const BulkImportInputSchema = z.object({
183
+ contacts: z.array(CreateContactInputSchema)
184
+ })
185
+
186
+ export const ContactOutputSchema = z.object({
187
+ id: z.string().uuid(),
188
+ organizationId: z.string().uuid(),
189
+ companyId: z.string().uuid().nullable(),
190
+ email: z.string(),
191
+ emailValid: z.enum(['VALID', 'INVALID', 'RISKY', 'UNKNOWN']).nullable(),
192
+ firstName: z.string().nullable(),
193
+ lastName: z.string().nullable(),
194
+ linkedinUrl: z.string().nullable(),
195
+ title: z.string().nullable(),
196
+ headline: z.string().nullable(),
197
+ filterReason: z.string().nullable(),
198
+ openingLine: z.string().nullable(),
199
+ source: z.string().nullable(),
200
+ sourceId: z.string().nullable(),
201
+ pipelineStatus: z.record(z.string(), z.unknown()).nullable(),
202
+ enrichmentData: z.record(z.string(), z.unknown()).nullable(),
203
+ batchId: z.string().nullable().optional(),
204
+ status: z.enum(['active', 'invalid']),
205
+ createdAt: z.string(),
206
+ updatedAt: z.string()
207
+ })
208
+
209
+ export const PaginatedContactsOutputSchema = z.object({
210
+ data: z.array(ContactOutputSchema),
211
+ total: z.number(),
212
+ limit: z.number(),
213
+ offset: z.number()
214
+ })
215
+
216
+ export const BulkImportResultSchema = z.object({
217
+ created: z.number(),
218
+ updated: z.number(),
219
+ errors: z.array(
220
+ z.object({
221
+ email: z.string(),
222
+ error: z.string()
223
+ })
224
+ )
225
+ })
226
+
227
+ export const DeleteResultSchema = z.object({
228
+ success: z.boolean()
229
+ })
230
+
231
+ // ============================================
232
+ // INFERRED TYPES
233
+ // ============================================
234
+
235
+ export type CreateListInput = z.infer<typeof CreateListInputSchema>
236
+ export type UpdateListInput = z.infer<typeof UpdateListInputSchema>
237
+ export type DeleteListInput = z.infer<typeof DeleteListInputSchema>
238
+ export type ListOutput = z.infer<typeof ListOutputSchema>
239
+
240
+ export type CreateCompanyInput = z.infer<typeof CreateCompanyInputSchema>
241
+ export type UpdateCompanyInput = z.infer<typeof UpdateCompanyInputSchema>
242
+ export type UpsertCompanyInput = z.infer<typeof UpsertCompanyInputSchema>
243
+ export type GetCompanyInput = z.infer<typeof GetCompanyInputSchema>
244
+ export type ListCompaniesInput = z.infer<typeof ListCompaniesInputSchema>
245
+ export type DeleteCompanyInput = z.infer<typeof DeleteCompanyInputSchema>
246
+ export type CompanyOutput = z.infer<typeof CompanyOutputSchema>
247
+
248
+ export type CreateContactInput = z.infer<typeof CreateContactInputSchema>
249
+ export type UpdateContactInput = z.infer<typeof UpdateContactInputSchema>
250
+ export type UpsertContactInput = z.infer<typeof UpsertContactInputSchema>
251
+ export type GetContactInput = z.infer<typeof GetContactInputSchema>
252
+ export type ListContactsInput = z.infer<typeof ListContactsInputSchema>
253
+ export type DeleteContactInput = z.infer<typeof DeleteContactInputSchema>
254
+ export type BulkImportInput = z.infer<typeof BulkImportInputSchema>
255
+ export type ContactOutput = z.infer<typeof ContactOutputSchema>
256
+ export type PaginatedContactsOutput = z.infer<typeof PaginatedContactsOutputSchema>
257
+ export type BulkImportResult = z.infer<typeof BulkImportResultSchema>
258
+ export type DeleteResult = z.infer<typeof DeleteResultSchema>
259
+ export type DeactivateContactsByCompanyInput = z.infer<typeof DeactivateContactsByCompanyInputSchema>
260
+ export type DeactivateContactsByCompanyResult = z.infer<typeof DeactivateContactsByCompanyResultSchema>
@@ -0,0 +1,65 @@
1
+ /**
2
+ * HITL Cancel by Metadata Tool
3
+ *
4
+ * Batch delete pending HITL (command queue) tasks matching metadata filters.
5
+ * Used for cleanup when a contact unsubscribes or a deal is closed.
6
+ */
7
+
8
+ import { z } from 'zod'
9
+ import { getToolServices } from '../../registry'
10
+ import type { Tool } from '../../types'
11
+ import { serviceUnavailable } from '../../types'
12
+
13
+ // ============================================
14
+ // Schemas
15
+ // ============================================
16
+
17
+ export const HitlCancelByMetadataInputSchema = z.object({
18
+ /** JSONB containment filter for metadata (e.g., { contactEmail: 'user@example.com' }) */
19
+ metadata: z.record(z.string(), z.unknown()),
20
+ /** Only delete tasks with this status (default: 'pending') */
21
+ status: z.string().default('pending')
22
+ })
23
+
24
+ export const HitlCancelByMetadataOutputSchema = z.object({
25
+ deleted: z.number()
26
+ })
27
+
28
+ export type HitlCancelByMetadataInput = z.infer<typeof HitlCancelByMetadataInputSchema>
29
+ export type HitlCancelByMetadataOutput = z.infer<typeof HitlCancelByMetadataOutputSchema>
30
+
31
+ // ============================================
32
+ // Tool Factory
33
+ // ============================================
34
+
35
+ export function createHitlCancelByMetadataTool(): Tool {
36
+ return {
37
+ name: 'hitl_cancel_by_metadata',
38
+ description:
39
+ 'Delete pending HITL (human-in-the-loop) tasks matching metadata filters. Used for batch cleanup of command queue entries when a contact unsubscribes or a deal is closed.',
40
+ inputSchema: HitlCancelByMetadataInputSchema,
41
+ outputSchema: HitlCancelByMetadataOutputSchema,
42
+ async execute({ input, executionContext }) {
43
+ if (!executionContext?.organizationId) {
44
+ throw serviceUnavailable('ExecutionContext', { tool: 'hitl_cancel_by_metadata', reason: 'organizationId required for multi-tenant isolation' })
45
+ }
46
+
47
+ const { commandQueueService } = getToolServices()
48
+ if (!commandQueueService) {
49
+ throw serviceUnavailable('CommandQueueService', {
50
+ message:
51
+ 'Ensure toolServicesRegistry.initialize() was called in apps/api/src/main.ts',
52
+ tool: 'hitl_cancel_by_metadata'
53
+ })
54
+ }
55
+
56
+ const { metadata, status } = input as HitlCancelByMetadataInput
57
+
58
+ return commandQueueService.deleteByMetadata(
59
+ executionContext.organizationId,
60
+ metadata,
61
+ status
62
+ )
63
+ }
64
+ }
65
+ }
@@ -0,0 +1,4 @@
1
+ export { createApprovalTool } from './tool'
2
+ export { createHitlCancelByMetadataTool } from './cancel-by-metadata'
3
+ export type { HitlCancelByMetadataInput, HitlCancelByMetadataOutput } from './cancel-by-metadata'
4
+ export { HitlCancelByMetadataInputSchema, HitlCancelByMetadataOutputSchema } from './cancel-by-metadata'
@@ -0,0 +1,99 @@
1
+ import type { Tool, ToolExecutionOptions } from '../../types'
2
+ import { serviceUnavailable } from '../../types'
3
+ import type { CreateTaskParams, ActionConfig } from '../../../../../commands/queue/types'
4
+ import { getToolServices } from '../../registry'
5
+ import type { ApprovalToolConfig } from '../types'
6
+
7
+ /**
8
+ * Create an approval tool that sends tasks to the command queue for human approval
9
+ *
10
+ * Approval tools enable human-in-the-loop workflows by creating tasks that require
11
+ * human approval before proceeding. The task contains the input payload and routes
12
+ * to specified agents based on approval/rejection.
13
+ *
14
+ * @param config - Configuration for the approval tool
15
+ * @returns Tool that creates approval tasks in the command queue
16
+ *
17
+ * @example
18
+ * const approvalTool = createApprovalTool({
19
+ * name: 'request_payment_approval',
20
+ * description: 'Request approval for high-value payment',
21
+ * inputSchema: z.object({ amount: z.number(), recipient: z.string() }),
22
+ * outputSchema: z.object({ taskId: z.string() }),
23
+ * approveTargetResourceId: 'payment-processor-agent',
24
+ * rejectTargetResourceId: 'payment-rejection-handler',
25
+ * priority: 8
26
+ * })
27
+ */
28
+ export function createApprovalTool(config: ApprovalToolConfig): Tool {
29
+ return {
30
+ name: config.name,
31
+ description: config.description,
32
+ inputSchema: config.inputSchema,
33
+ outputSchema: config.outputSchema,
34
+
35
+ async execute(options: ToolExecutionOptions): Promise<unknown> {
36
+ // ExecutionContext is required for platform tools
37
+ if (!options.executionContext) {
38
+ throw serviceUnavailable('ExecutionContext', { tool: config.name, reason: 'organizationId required for multi-tenant isolation' })
39
+ }
40
+
41
+ // Get command queue service from global registry
42
+ const { commandQueueService: commandQueue } = getToolServices()
43
+ if (!commandQueue) {
44
+ throw serviceUnavailable('CommandQueueService', {
45
+ message: 'Ensure toolServicesRegistry.initialize() was called in apps/api/src/main.ts',
46
+ tool: config.name
47
+ })
48
+ }
49
+
50
+ // Build task parameters using execution context
51
+ // Convert old approve/reject pattern to new action-based schema
52
+ const actions: ActionConfig[] = [
53
+ {
54
+ id: 'approve',
55
+ label: 'Approve',
56
+ type: 'primary',
57
+ icon: 'IconCheck',
58
+ color: 'green',
59
+ target: {
60
+ resourceType: 'agent',
61
+ resourceId: config.approveTargetResourceId
62
+ }
63
+ }
64
+ ]
65
+
66
+ // Add reject action if configured
67
+ if (config.rejectTargetResourceId) {
68
+ actions.push({
69
+ id: 'reject',
70
+ label: 'Reject',
71
+ type: 'danger',
72
+ icon: 'IconX',
73
+ color: 'red',
74
+ target: {
75
+ resourceType: 'agent',
76
+ resourceId: config.rejectTargetResourceId
77
+ }
78
+ })
79
+ }
80
+
81
+ const params: CreateTaskParams = {
82
+ organizationId: options.executionContext.organizationId,
83
+ originExecutionId: options.executionContext.executionId,
84
+ originResourceType: 'agent',
85
+ originResourceId: options.executionContext.resourceId,
86
+ actions,
87
+ context: options.input,
88
+ priority: config.priority ?? 5,
89
+ expiresAt: config.expiresAt
90
+ }
91
+
92
+ // Create task in command queue
93
+ const task = await commandQueue.createTask(params)
94
+
95
+ // Return task ID for tracking
96
+ return { taskId: task.id }
97
+ }
98
+ }
99
+ }
@@ -0,0 +1,122 @@
1
+ /**
2
+ * Platform Email Tool
3
+ *
4
+ * Factory function for creating a platform email tool that sends
5
+ * transactional emails from notifications@elevasis.io using platform Resend credentials.
6
+ *
7
+ * Usage:
8
+ * ```typescript
9
+ * const emailTool = createPlatformEmailTool({
10
+ * name: 'send_platform_email',
11
+ * description: 'Send platform notification emails to users'
12
+ * })
13
+ * ```
14
+ */
15
+
16
+ import type { Tool, ToolExecutionOptions } from '../../types'
17
+ import { serviceUnavailable } from '../../types'
18
+ import { getToolServices } from '../../registry'
19
+ import type { SendPlatformEmailParams } from '../../registry'
20
+ import {
21
+ SendPlatformEmailInputSchema,
22
+ SendPlatformEmailOutputSchema,
23
+ type SendPlatformEmailInput,
24
+ type SendPlatformEmailOutput,
25
+ type PlatformEmailToolConfig
26
+ } from './types'
27
+
28
+ /**
29
+ * Create a platform email tool that sends emails to targeted users
30
+ *
31
+ * Platform email tools enable agents and workflows to send transactional emails
32
+ * from the platform email address (notifications@elevasis.io). Emails can target
33
+ * specific users, users with a role, or all organization members.
34
+ *
35
+ * @param config - Configuration for the email tool
36
+ * @returns Tool that sends platform emails
37
+ *
38
+ * @example
39
+ * const emailTool = createPlatformEmailTool({
40
+ * name: 'notify_admins',
41
+ * description: 'Send email notification to all admin users'
42
+ * })
43
+ *
44
+ * // Execute with explicit user targeting
45
+ * await emailTool.execute({
46
+ * input: {
47
+ * userIds: ['user-id-1', 'user-id-2'],
48
+ * subject: 'Workflow completed',
49
+ * html: '<p>Your workflow has completed successfully.</p>'
50
+ * },
51
+ * executionContext: context
52
+ * })
53
+ *
54
+ * // Execute with role-based targeting
55
+ * await emailTool.execute({
56
+ * input: {
57
+ * targetRole: 'admin',
58
+ * subject: 'System alert',
59
+ * text: 'A critical error occurred.'
60
+ * },
61
+ * executionContext: context
62
+ * })
63
+ */
64
+ export function createPlatformEmailTool(config: PlatformEmailToolConfig): Tool {
65
+ return {
66
+ name: config.name,
67
+ description: config.description,
68
+ inputSchema: SendPlatformEmailInputSchema,
69
+ outputSchema: SendPlatformEmailOutputSchema,
70
+
71
+ async execute(options: ToolExecutionOptions): Promise<SendPlatformEmailOutput> {
72
+ // ExecutionContext is required for platform tools
73
+ if (!options.executionContext) {
74
+ throw serviceUnavailable('ExecutionContext', { tool: config.name, reason: 'organizationId required for multi-tenant isolation' })
75
+ }
76
+
77
+ // Get email service from global registry
78
+ const { emailService } = getToolServices()
79
+ if (!emailService) {
80
+ throw serviceUnavailable('EmailService', {
81
+ message: 'Ensure toolServicesRegistry.initialize() was called in apps/api/src/main.ts',
82
+ tool: config.name
83
+ })
84
+ }
85
+
86
+ // Build email parameters from input + context
87
+ const inputData = options.input as SendPlatformEmailInput
88
+
89
+ const params: SendPlatformEmailParams = {
90
+ organizationId: options.executionContext.organizationId,
91
+
92
+ // Targeting (exactly one will be set, validated by schema)
93
+ userIds: inputData.userIds,
94
+ targetRole: inputData.targetRole,
95
+ targetAll: inputData.targetAll,
96
+
97
+ // Content
98
+ subject: inputData.subject,
99
+ html: inputData.html,
100
+ text: inputData.text,
101
+
102
+ // Optional
103
+ replyTo: inputData.replyTo,
104
+ tags: inputData.tags
105
+ }
106
+
107
+ // Send email via service
108
+ const result = await emailService.send(params)
109
+
110
+ return result
111
+ }
112
+ }
113
+ }
114
+
115
+ // Re-export types for consumers
116
+ export {
117
+ SendPlatformEmailInputSchema,
118
+ SendPlatformEmailOutputSchema,
119
+ type SendPlatformEmailInput,
120
+ type SendPlatformEmailOutput,
121
+ type PlatformEmailToolConfig
122
+ } from './types'