@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,147 @@
1
+ import type { ExecutionContext } from '../../../base/types'
2
+ import type { ResourceRegistry } from '../../../../../platform/registry/resource-registry'
3
+ import type { ResourceExecutionRequest, ResourceInvocationResult } from './types'
4
+
5
+ /**
6
+ * ResourceInvocationService
7
+ * Handles execution of resources (agents and workflows) from agent context
8
+ *
9
+ * Responsibilities:
10
+ * - Validate resource exists and is accessible
11
+ * - Validate input against resource contract
12
+ * - Execute resource with parent execution context
13
+ * - Return typed invocation result
14
+ *
15
+ * Multi-tenancy: All resource lookups scoped by organizationName (passed as parameter)
16
+ */
17
+ export class ResourceInvocationService {
18
+ constructor(
19
+ private registry: ResourceRegistry,
20
+ private executeResource: (
21
+ request: ResourceExecutionRequest,
22
+ parentContext: ExecutionContext
23
+ ) => Promise<ResourceInvocationResult>
24
+ ) {}
25
+
26
+ /**
27
+ * Execute resource synchronously (waits for completion)
28
+ *
29
+ * @param resourceId - ID of resource to execute (agent or workflow)
30
+ * @param input - Input payload for resource
31
+ * @param organizationName - Organization name for resource lookup (from execution request)
32
+ * @param parentContext - Parent execution context (provides organization ID and tracking)
33
+ * @returns Invocation result with success, output, executionId, and resourceType
34
+ *
35
+ * @example
36
+ * const result = await service.executeSync(
37
+ * 'lead-validation-workflow',
38
+ * { email: 'test@test.com', name: 'John Doe' },
39
+ * 'acme-corp',
40
+ * executionContext
41
+ * )
42
+ *
43
+ * if (result.success) {
44
+ * console.log('Validation result:', result.output)
45
+ * } else {
46
+ * console.error('Validation failed:', result.error)
47
+ * }
48
+ */
49
+ async executeSync(
50
+ resourceId: string,
51
+ input: unknown,
52
+ organizationName: string,
53
+ parentContext: ExecutionContext
54
+ ): Promise<ResourceInvocationResult> {
55
+ // 1. Validate resource exists (scoped to organization)
56
+ const definition = this.registry.getResourceDefinition(
57
+ organizationName,
58
+ resourceId
59
+ )
60
+
61
+ if (!definition) {
62
+ return {
63
+ success: false,
64
+ output: null,
65
+ executionId: '',
66
+ resourceType: 'workflow',
67
+ error: `Resource not found: ${resourceId}`
68
+ }
69
+ }
70
+
71
+ // Determine resource type from definition
72
+ const resourceType = definition.config.type as 'agent' | 'workflow'
73
+
74
+ // 2. Enforce relationship declaration
75
+ const relationships = this.registry.getRelationships(organizationName)
76
+ if (relationships) {
77
+ const callerRel = relationships[parentContext.resourceId]
78
+ const declaredTargets = [
79
+ ...(callerRel?.triggers?.agents ?? []),
80
+ ...(callerRel?.triggers?.workflows ?? [])
81
+ ]
82
+ if (!declaredTargets.includes(resourceId)) {
83
+ throw new Error(
84
+ `Undeclared resource invocation: "${parentContext.resourceId}" -> "${resourceId}". ` +
85
+ `Add to relationships: { '${parentContext.resourceId}': { triggers: { ${resourceType}s: ['${resourceId}'] } } }`
86
+ )
87
+ }
88
+ }
89
+
90
+ // 3. Validate input against resource contract
91
+ const validationResult = definition.contract.inputSchema.safeParse(input)
92
+ if (!validationResult.success) {
93
+ return {
94
+ success: false,
95
+ output: null,
96
+ executionId: '',
97
+ resourceType,
98
+ error: `Input validation failed: ${validationResult.error.message}`
99
+ }
100
+ }
101
+
102
+ // 4. Execute resource with parent context
103
+ const result = await this.executeResource(
104
+ {
105
+ resourceId,
106
+ input: validationResult.data,
107
+ organizationId: parentContext.organizationId,
108
+ organizationName
109
+ },
110
+ parentContext
111
+ )
112
+
113
+ return {
114
+ ...result,
115
+ resourceType
116
+ }
117
+ }
118
+ }
119
+
120
+ /**
121
+ * Factory function for creating ResourceInvocationService
122
+ * Validates dependencies at construction time (fail-fast)
123
+ *
124
+ * @param registry - ResourceRegistry for resource lookup
125
+ * @param executeResource - Callback to execute resource (delegates to coordinator)
126
+ * @returns ResourceInvocationService instance
127
+ * @throws Error if dependencies are missing
128
+ *
129
+ * @example
130
+ * const service = createResourceInvocationService(
131
+ * resourceRegistry,
132
+ * async (request, parentContext) => {
133
+ * return coordinator.executeNested(request, parentContext)
134
+ * }
135
+ * )
136
+ */
137
+ export function createResourceInvocationService(
138
+ registry: ResourceRegistry,
139
+ executeResource: (
140
+ request: ResourceExecutionRequest,
141
+ parentContext: ExecutionContext
142
+ ) => Promise<ResourceInvocationResult>
143
+ ): ResourceInvocationService {
144
+ if (!registry) throw new Error('ResourceRegistry required')
145
+ if (!executeResource) throw new Error('executeResource callback required')
146
+ return new ResourceInvocationService(registry, executeResource)
147
+ }
@@ -0,0 +1,115 @@
1
+ /**
2
+ * Resource Invocation Tool Factory
3
+ *
4
+ * Creates tools that invoke other resources (agents or workflows) as first-class tools.
5
+ * Schemas are derived directly from the resource's contract, eliminating duplication.
6
+ *
7
+ * @module resource-invocation/tool
8
+ */
9
+
10
+ import { z } from 'zod'
11
+ import { serviceUnavailable, apiError } from '../../types'
12
+ import type { Tool, ToolExecutionOptions } from '../../types'
13
+ import type { AgentDefinition } from '../../../agent/core/types'
14
+ import type { WorkflowDefinition } from '../../../workflow/types'
15
+ import { getToolServices } from '../../registry'
16
+ import { DEFAULT_RESOURCE_INVOCATION_TIMEOUT } from '../../../../../platform/constants/timeouts'
17
+
18
+ /**
19
+ * Resource definition type (Agent or Workflow)
20
+ * Both types have config and contract fields needed for tool creation
21
+ */
22
+ export type ResourceDefinition = AgentDefinition | WorkflowDefinition
23
+
24
+ /**
25
+ * Configuration for creating a resource invocation tool
26
+ *
27
+ * The tool factory derives schemas from resource.contract automatically,
28
+ * ensuring type safety and eliminating manual schema duplication.
29
+ */
30
+ export interface ResourceInvocationToolConfig {
31
+ /** Tool name for LLM selection (e.g., 'invoke_lead_validation') */
32
+ name: string
33
+
34
+ /** Description of what the tool does (shown to LLM) */
35
+ description: string
36
+
37
+ /** Target resource definition - schemas derived automatically from contract */
38
+ resource: ResourceDefinition
39
+ }
40
+
41
+ /**
42
+ * Create a tool that invokes another resource (agent or workflow)
43
+ *
44
+ * Schemas are derived directly from the resource's contract:
45
+ * - inputSchema: From resource.contract.inputSchema
46
+ * - outputSchema: From resource.contract.outputSchema (or z.null() if not defined)
47
+ *
48
+ * This ensures type safety and eliminates schema duplication.
49
+ *
50
+ * @param config - Tool configuration with name, description, and target resource
51
+ * @returns Tool that invokes the resource via ResourceInvocationService
52
+ *
53
+ * @example
54
+ * // Invoke workflow with derived schemas
55
+ * const leadValidationTool = createResourceInvocationTool({
56
+ * name: 'invoke_lead_validation',
57
+ * description: 'Validate scraped lead data for completeness and format',
58
+ * resource: leadValidationWorkflow // Schemas derived from contract
59
+ * })
60
+ *
61
+ * @example
62
+ * // Invoke agent with derived schemas
63
+ * const companyResearchTool = createResourceInvocationTool({
64
+ * name: 'invoke_company_research',
65
+ * description: 'Research company details using AI reasoning',
66
+ * resource: companyResearchAgent // Schemas derived from contract
67
+ * })
68
+ */
69
+ export function createResourceInvocationTool(
70
+ config: ResourceInvocationToolConfig
71
+ ): Tool {
72
+ const { resource } = config
73
+
74
+ // Derive schemas from resource contract - no manual duplication
75
+ const inputSchema = resource.contract.inputSchema
76
+ const outputSchema = resource.contract.outputSchema ?? z.null()
77
+
78
+ return {
79
+ name: config.name,
80
+ description: config.description,
81
+ inputSchema,
82
+ outputSchema,
83
+ timeout: DEFAULT_RESOURCE_INVOCATION_TIMEOUT,
84
+
85
+ async execute(options: ToolExecutionOptions): Promise<unknown> {
86
+ // Get resource invocation service from global registry
87
+ const { resourceInvocationService } = getToolServices()
88
+
89
+ if (!resourceInvocationService) {
90
+ throw serviceUnavailable('ResourceInvocationService')
91
+ }
92
+
93
+ if (!options.executionContext) {
94
+ throw serviceUnavailable('ExecutionContext', { tool: config.name, reason: 'organizationId required for multi-tenant isolation' })
95
+ }
96
+
97
+ // Execute resource and get result
98
+ // organizationName is guaranteed to be present in ExecutionContext (extends ExecutionMetadata)
99
+ const result = await resourceInvocationService.executeSync(
100
+ resource.config.resourceId,
101
+ options.input,
102
+ options.executionContext.organizationName,
103
+ options.executionContext
104
+ )
105
+
106
+ // Throw error if execution failed
107
+ if (!result.success) {
108
+ throw apiError(result.error || `${result.resourceType} execution failed`)
109
+ }
110
+
111
+ // Return output (null for fire-and-forget resources without outputSchema)
112
+ return result.output
113
+ }
114
+ }
115
+ }
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Resource execution request parameters
3
+ * Contains resource identification and input payload for execution
4
+ */
5
+ export interface ResourceExecutionRequest {
6
+ /** Resource ID to execute (agent or workflow) */
7
+ resourceId: string
8
+ /** Input payload for the resource (validated against resource contract) */
9
+ input: unknown
10
+ /** Organization ID for multi-tenancy isolation */
11
+ organizationId: string
12
+ /** Organization name for resource lookup */
13
+ organizationName: string
14
+ }
15
+
16
+ /**
17
+ * Resource invocation result
18
+ * Returned from executeSync() after resource execution completes
19
+ */
20
+ export interface ResourceInvocationResult {
21
+ /** Whether execution succeeded */
22
+ success: boolean
23
+ /** Output from resource (TOutput from contract, or null if no outputSchema) */
24
+ output: unknown
25
+ /** Execution ID for tracking and observability */
26
+ executionId: string
27
+ /** Type of resource executed (agent or workflow) */
28
+ resourceType: 'agent' | 'workflow'
29
+ /** Error message if execution failed */
30
+ error?: string
31
+ }
@@ -0,0 +1,87 @@
1
+ import type { Tool, ToolExecutionOptions } from '../types'
2
+ import { serviceUnavailable } from '../types'
3
+ import type { CreateScheduleInput, AbsoluteScheduleConfig } from '../../../scheduler/types'
4
+ import { getToolServices } from '../registry'
5
+ import type { SchedulerToolConfig } from './types'
6
+
7
+ /**
8
+ * Create a scheduler tool that schedules future execution of agents/workflows
9
+ *
10
+ * Scheduler tools enable time-based automation by creating scheduled tasks that
11
+ * execute at a specific time. The task contains the input payload and routes to
12
+ * the specified resource.
13
+ *
14
+ * @param config - Configuration for the scheduler tool
15
+ * @returns Tool that creates scheduled tasks
16
+ *
17
+ * @example
18
+ * const schedulerTool = createSchedulerTool({
19
+ * name: 'schedule_followup',
20
+ * description: 'Schedule a follow-up task for later',
21
+ * inputSchema: z.object({ message: z.string(), recipientId: z.string() }),
22
+ * outputSchema: z.object({ taskId: z.string() }),
23
+ * targetResourceId: 'followup-agent',
24
+ * targetResourceType: 'agent',
25
+ * runAt: new Date(Date.now() + 86400000), // 24 hours from now
26
+ * maxRetries: 3
27
+ * })
28
+ */
29
+ export function createSchedulerTool(config: SchedulerToolConfig): Tool {
30
+ return {
31
+ name: config.name,
32
+ description: config.description,
33
+ inputSchema: config.inputSchema,
34
+ outputSchema: config.outputSchema,
35
+
36
+ async execute(options: ToolExecutionOptions): Promise<unknown> {
37
+ // ExecutionContext is required for platform tools
38
+ if (!options.executionContext) {
39
+ throw serviceUnavailable('ExecutionContext', { tool: config.name, reason: 'organizationId required for multi-tenant isolation' })
40
+ }
41
+
42
+ // Get task scheduler service from global registry
43
+ const { taskSchedulerService: taskScheduler } = getToolServices()
44
+ if (!taskScheduler) {
45
+ throw serviceUnavailable('TaskSchedulerService', {
46
+ message: 'Ensure toolServicesRegistry.initialize() was called in apps/api/src/main.ts',
47
+ tool: config.name
48
+ })
49
+ }
50
+
51
+ // Convert simple runAt to AbsoluteScheduleConfig (single-item schedule)
52
+ const scheduleConfig: AbsoluteScheduleConfig = {
53
+ type: 'absolute',
54
+ items: [{
55
+ runAt: config.runAt.toISOString(),
56
+ payload: options.input as Record<string, unknown>,
57
+ label: config.taskDescription
58
+ }]
59
+ }
60
+
61
+ // Build schedule input using execution context
62
+ const scheduleInput: CreateScheduleInput = {
63
+ organizationId: options.executionContext.organizationId,
64
+ name: config.taskDescription ?? `Scheduled: ${config.name}`,
65
+ description: `Created by ${config.name} tool`,
66
+ target: {
67
+ resourceType: config.targetResourceType,
68
+ resourceId: config.targetResourceId
69
+ },
70
+ scheduleConfig,
71
+ maxRetries: config.maxRetries ?? 3,
72
+ idempotencyKey: config.idempotencyKey,
73
+
74
+ // Origin tracking
75
+ originExecutionId: options.executionContext.executionId,
76
+ originResourceType: 'agent',
77
+ originResourceId: options.executionContext.resourceId
78
+ }
79
+
80
+ // Create schedule (returns TaskSchedule)
81
+ const schedule = await taskScheduler.createSchedule(scheduleInput)
82
+
83
+ // Return schedule ID for tracking (unchanged return shape)
84
+ return { taskId: schedule.id }
85
+ }
86
+ }
87
+ }
@@ -0,0 +1,48 @@
1
+ /**
2
+ * Schedule Cancel by Key Tool
3
+ *
4
+ * Cancel a single schedule by its idempotency key (soft delete).
5
+ * Finds the schedule by key and cancels it. No-op if not found.
6
+ */
7
+
8
+ import { getToolServices } from '../../registry'
9
+ import type { Tool } from '../../types'
10
+ import { serviceUnavailable } from '../../types'
11
+ import { CancelScheduleByKeyInputSchema, CancelScheduleByKeyOutputSchema } from './types'
12
+ import type { CancelScheduleByKeyInput } from './types'
13
+
14
+ export function createScheduleCancelByKeyTool(): Tool {
15
+ return {
16
+ name: 'schedule_cancel_by_key',
17
+ description: 'Cancel a schedule by its idempotency key (soft delete). Sets status to cancelled. Returns whether a schedule was found and cancelled.',
18
+ inputSchema: CancelScheduleByKeyInputSchema,
19
+ outputSchema: CancelScheduleByKeyOutputSchema,
20
+ async execute({ input, executionContext }) {
21
+ if (!executionContext?.organizationId) {
22
+ throw serviceUnavailable('ExecutionContext', { tool: 'schedule_cancel_by_key', reason: 'organizationId required for multi-tenant isolation' })
23
+ }
24
+
25
+ const { taskSchedulerService } = getToolServices()
26
+ if (!taskSchedulerService) {
27
+ throw serviceUnavailable('TaskSchedulerService', {
28
+ message: 'Ensure toolServicesRegistry.initialize() was called in apps/api/src/main.ts',
29
+ tool: 'schedule_cancel_by_key'
30
+ })
31
+ }
32
+
33
+ const { idempotencyKey } = input as CancelScheduleByKeyInput
34
+
35
+ const schedule = await taskSchedulerService.findByIdempotencyKey(
36
+ executionContext.organizationId,
37
+ idempotencyKey
38
+ )
39
+
40
+ if (!schedule) {
41
+ return { cancelled: false }
42
+ }
43
+
44
+ await taskSchedulerService.cancelSchedule(schedule.id, executionContext.organizationId)
45
+ return { cancelled: true }
46
+ }
47
+ }
48
+ }
@@ -0,0 +1,42 @@
1
+ /**
2
+ * Schedule Cancel by Metadata Tool
3
+ *
4
+ * Batch cancel (soft delete) task schedules matching metadata filters.
5
+ * Sets status to 'cancelled' and clears next_run_at.
6
+ */
7
+
8
+ import { getToolServices } from '../../registry'
9
+ import type { Tool } from '../../types'
10
+ import { serviceUnavailable } from '../../types'
11
+ import { CancelSchedulesByMetadataInputSchema, CancelSchedulesByMetadataOutputSchema } from './types'
12
+ import type { CancelSchedulesByMetadataInput } from './types'
13
+
14
+ export function createScheduleCancelByMetadataTool(): Tool {
15
+ return {
16
+ name: 'schedule_cancel_by_metadata',
17
+ description: 'Cancel all active schedules matching metadata filters. Performs a soft delete (sets status to cancelled). Use for batch cleanup when a contact unsubscribes or a deal is closed.',
18
+ inputSchema: CancelSchedulesByMetadataInputSchema,
19
+ outputSchema: CancelSchedulesByMetadataOutputSchema,
20
+ async execute({ input, executionContext }) {
21
+ if (!executionContext?.organizationId) {
22
+ throw serviceUnavailable('ExecutionContext', { tool: 'schedule_cancel_by_metadata', reason: 'organizationId required for multi-tenant isolation' })
23
+ }
24
+
25
+ const { taskSchedulerService } = getToolServices()
26
+ if (!taskSchedulerService) {
27
+ throw serviceUnavailable('TaskSchedulerService', {
28
+ message: 'Ensure toolServicesRegistry.initialize() was called in apps/api/src/main.ts',
29
+ tool: 'schedule_cancel_by_metadata'
30
+ })
31
+ }
32
+
33
+ const { metadata, status } = input as CancelSchedulesByMetadataInput
34
+
35
+ return taskSchedulerService.cancelSchedulesByMetadata(
36
+ executionContext.organizationId,
37
+ metadata,
38
+ status
39
+ )
40
+ }
41
+ }
42
+ }
@@ -0,0 +1,43 @@
1
+ /**
2
+ * Schedule Delete by Key Tool
3
+ *
4
+ * Hard delete a schedule by its idempotency key.
5
+ * Removes the schedule from the database entirely so the key can be reused.
6
+ */
7
+
8
+ import { getToolServices } from '../../registry'
9
+ import type { Tool } from '../../types'
10
+ import { serviceUnavailable } from '../../types'
11
+ import { DeleteScheduleByKeyInputSchema, DeleteScheduleByKeyOutputSchema } from './types'
12
+ import type { DeleteScheduleByKeyInput } from './types'
13
+
14
+ export function createScheduleDeleteByKeyTool(): Tool {
15
+ return {
16
+ name: 'schedule_delete_by_key',
17
+ description: 'Hard delete a schedule by its idempotency key. Removes it from the database entirely so the key can be reused for a new schedule.',
18
+ inputSchema: DeleteScheduleByKeyInputSchema,
19
+ outputSchema: DeleteScheduleByKeyOutputSchema,
20
+ async execute({ input, executionContext }) {
21
+ if (!executionContext?.organizationId) {
22
+ throw serviceUnavailable('ExecutionContext', { tool: 'schedule_delete_by_key', reason: 'organizationId required for multi-tenant isolation' })
23
+ }
24
+
25
+ const { taskSchedulerService } = getToolServices()
26
+ if (!taskSchedulerService) {
27
+ throw serviceUnavailable('TaskSchedulerService', {
28
+ message: 'Ensure toolServicesRegistry.initialize() was called in apps/api/src/main.ts',
29
+ tool: 'schedule_delete_by_key'
30
+ })
31
+ }
32
+
33
+ const { idempotencyKey } = input as DeleteScheduleByKeyInput
34
+
35
+ await taskSchedulerService.deleteScheduleByIdempotencyKey(
36
+ idempotencyKey,
37
+ executionContext.organizationId
38
+ )
39
+
40
+ return { deleted: true }
41
+ }
42
+ }
43
+ }
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Schedule Management Platform Tools
3
+ *
4
+ * Tools for querying, cancelling, and deleting task schedules.
5
+ * Enables agents to manage schedules without direct database access.
6
+ */
7
+
8
+ export * from './types'
9
+
10
+ export { createScheduleListTool } from './list-tool'
11
+ export { createScheduleCancelByMetadataTool } from './cancel-by-metadata-tool'
12
+ export { createScheduleCancelByKeyTool } from './cancel-by-key-tool'
13
+ export { createScheduleDeleteByKeyTool } from './delete-by-key-tool'
@@ -0,0 +1,56 @@
1
+ /**
2
+ * Schedule List Tool
3
+ *
4
+ * List task schedules with optional metadata-based filtering.
5
+ * Supports JSONB containment queries for metadata fields.
6
+ */
7
+
8
+ import { getToolServices } from '../../registry'
9
+ import type { Tool } from '../../types'
10
+ import { serviceUnavailable } from '../../types'
11
+ import { ListSchedulesInputSchema, ListSchedulesOutputSchema } from './types'
12
+ import type { ListSchedulesInput } from './types'
13
+
14
+ export function createScheduleListTool(): Tool {
15
+ return {
16
+ name: 'schedule_list',
17
+ description: 'List task schedules with optional filters. Supports metadata-based JSONB filtering for finding schedules by contact email or other metadata fields.',
18
+ inputSchema: ListSchedulesInputSchema,
19
+ outputSchema: ListSchedulesOutputSchema,
20
+ async execute({ input, executionContext }) {
21
+ if (!executionContext?.organizationId) {
22
+ throw serviceUnavailable('ExecutionContext', { tool: 'schedule_list', reason: 'organizationId required for multi-tenant isolation' })
23
+ }
24
+
25
+ const { taskSchedulerService } = getToolServices()
26
+ if (!taskSchedulerService) {
27
+ throw serviceUnavailable('TaskSchedulerService', {
28
+ message: 'Ensure toolServicesRegistry.initialize() was called in apps/api/src/main.ts',
29
+ tool: 'schedule_list'
30
+ })
31
+ }
32
+
33
+ const { targetResourceId, status, metadata, limit } = input as ListSchedulesInput
34
+
35
+ const result = await taskSchedulerService.listSchedules({
36
+ organizationId: executionContext.organizationId,
37
+ targetResourceId,
38
+ status,
39
+ metadata,
40
+ limit
41
+ })
42
+
43
+ return {
44
+ schedules: result.schedules.map(s => ({
45
+ id: s.id,
46
+ name: s.name,
47
+ status: s.status,
48
+ nextRunAt: s.nextRunAt instanceof Date ? s.nextRunAt.toISOString() : s.nextRunAt ?? null,
49
+ idempotencyKey: s.idempotencyKey ?? null,
50
+ createdAt: s.createdAt instanceof Date ? s.createdAt.toISOString() : s.createdAt
51
+ })),
52
+ total: result.total
53
+ }
54
+ }
55
+ }
56
+ }
@@ -0,0 +1,88 @@
1
+ /**
2
+ * Schedule Management Tool Types
3
+ *
4
+ * Zod schemas for schedule management platform tools.
5
+ * These tools enable agents to query, cancel, and delete task schedules.
6
+ */
7
+
8
+ import { z } from 'zod'
9
+
10
+ // ============================================
11
+ // List Schedules
12
+ // ============================================
13
+
14
+ export const ListSchedulesInputSchema = z.object({
15
+ /** Filter by target resource ID */
16
+ targetResourceId: z.string().optional(),
17
+ /** Filter by schedule status */
18
+ status: z.string().optional(),
19
+ /** JSONB containment filter for metadata (e.g., { contactEmail: 'user@example.com' }) */
20
+ metadata: z.record(z.string(), z.unknown()).optional(),
21
+ /** Maximum results to return (1-100, default: 20) */
22
+ limit: z.number().min(1).max(100).default(20)
23
+ })
24
+
25
+ export const ListSchedulesOutputSchema = z.object({
26
+ schedules: z.array(z.object({
27
+ id: z.string(),
28
+ name: z.string(),
29
+ status: z.string(),
30
+ nextRunAt: z.string().nullable(),
31
+ idempotencyKey: z.string().nullable(),
32
+ createdAt: z.string()
33
+ })),
34
+ total: z.number()
35
+ })
36
+
37
+ export type ListSchedulesInput = z.infer<typeof ListSchedulesInputSchema>
38
+ export type ListSchedulesOutput = z.infer<typeof ListSchedulesOutputSchema>
39
+
40
+ // ============================================
41
+ // Cancel Schedules by Metadata
42
+ // ============================================
43
+
44
+ export const CancelSchedulesByMetadataInputSchema = z.object({
45
+ /** JSONB containment filter for metadata (required) */
46
+ metadata: z.record(z.string(), z.unknown()),
47
+ /** Only cancel schedules with this status (default: 'active') */
48
+ status: z.string().default('active')
49
+ })
50
+
51
+ export const CancelSchedulesByMetadataOutputSchema = z.object({
52
+ cancelled: z.number()
53
+ })
54
+
55
+ export type CancelSchedulesByMetadataInput = z.infer<typeof CancelSchedulesByMetadataInputSchema>
56
+ export type CancelSchedulesByMetadataOutput = z.infer<typeof CancelSchedulesByMetadataOutputSchema>
57
+
58
+ // ============================================
59
+ // Cancel Schedule by Idempotency Key
60
+ // ============================================
61
+
62
+ export const CancelScheduleByKeyInputSchema = z.object({
63
+ /** Idempotency key of the schedule to cancel */
64
+ idempotencyKey: z.string()
65
+ })
66
+
67
+ export const CancelScheduleByKeyOutputSchema = z.object({
68
+ cancelled: z.boolean()
69
+ })
70
+
71
+ export type CancelScheduleByKeyInput = z.infer<typeof CancelScheduleByKeyInputSchema>
72
+ export type CancelScheduleByKeyOutput = z.infer<typeof CancelScheduleByKeyOutputSchema>
73
+
74
+ // ============================================
75
+ // Delete Schedule by Idempotency Key
76
+ // ============================================
77
+
78
+ export const DeleteScheduleByKeyInputSchema = z.object({
79
+ /** Idempotency key of the schedule to hard-delete */
80
+ idempotencyKey: z.string()
81
+ })
82
+
83
+ export const DeleteScheduleByKeyOutputSchema = z.object({
84
+ deleted: z.boolean()
85
+ })
86
+
87
+ export type DeleteScheduleByKeyInput = z.infer<typeof DeleteScheduleByKeyInputSchema>
88
+ export type DeleteScheduleByKeyOutput = z.infer<typeof DeleteScheduleByKeyOutputSchema>