@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,166 @@
1
+ /**
2
+ * Sessions Domain - Zod Validation Schemas
3
+ *
4
+ * Validation schemas for session management endpoints.
5
+ * Includes request bodies, query params, path params, and WebSocket messages.
6
+ *
7
+ * Security:
8
+ * - All schemas use .strict() to prevent mass assignment attacks
9
+ * - UUID validation prevents invalid references
10
+ * - String length limits prevent DoS (+ token counter at 10k tokens)
11
+ * - organizationId never accepted in request body (taken from JWT)
12
+ */
13
+
14
+ import { z } from 'zod'
15
+ import { UuidSchema } from '../../platform/utils/validation'
16
+
17
+ // Re-export UuidSchema for convenience
18
+ export { UuidSchema }
19
+
20
+ // ============================================================================
21
+ // Path Parameters
22
+ // ============================================================================
23
+
24
+ /**
25
+ * Validate sessionId in URL path
26
+ * Used by: GET/DELETE /sessions/:sessionId, GET /sessions/:sessionId/messages
27
+ */
28
+ export const SessionIdParamSchema = z
29
+ .object({
30
+ sessionId: UuidSchema
31
+ })
32
+ .strict()
33
+
34
+ /**
35
+ * Validate sessionId + executionId in URL path
36
+ * Used by: GET /sessions/:sessionId/executions/:executionId
37
+ */
38
+ export const ExecutionIdParamsSchema = z
39
+ .object({
40
+ sessionId: UuidSchema,
41
+ executionId: UuidSchema
42
+ })
43
+ .strict()
44
+
45
+ // ============================================================================
46
+ // Request Bodies
47
+ // ============================================================================
48
+
49
+ /**
50
+ * Create new session
51
+ * POST /sessions
52
+ *
53
+ * Security:
54
+ * - resourceId is string identifier (e.g., 'basic-agent', 'linear-test-workflow')
55
+ * - userId optional (for user-specific sessions)
56
+ * - metadata optional (arbitrary JSON for agent use)
57
+ * - organizationId NOT accepted (taken from JWT)
58
+ */
59
+ export const CreateSessionSchema = z
60
+ .object({
61
+ resourceId: z.string().min(1).max(100),
62
+ userId: UuidSchema.optional(),
63
+ metadata: z.any().optional()
64
+ })
65
+ .strict()
66
+
67
+ /**
68
+ * Execute session turn
69
+ * POST /sessions/:sessionId/turns
70
+ *
71
+ * Supports string, object, and any JSON-serializable input formats
72
+ *
73
+ * Security:
74
+ * - Input length max 100k chars (supports long-form AI interactions)
75
+ * - Prompt injection blocked by input-sanitizer before execution
76
+ * - Strict mode prevents metadata injection
77
+ */
78
+ export const ExecuteTurnSchema = z
79
+ .object({
80
+ input: z.unknown().refine(
81
+ (val) => {
82
+ let text: string
83
+ if (typeof val === 'string') {
84
+ text = val
85
+ } else if (val && typeof val === 'object' && 'message' in val) {
86
+ text = String((val as Record<string, unknown>).message)
87
+ } else {
88
+ text = JSON.stringify(val)
89
+ }
90
+ return text.length > 0 && text.length <= 100_000
91
+ },
92
+ { message: 'Input must be between 1 and 100,000 characters' }
93
+ ),
94
+ metadata: z.any().optional()
95
+ })
96
+ .strict()
97
+
98
+ // ============================================================================
99
+ // Query Parameters
100
+ // ============================================================================
101
+
102
+ /**
103
+ * List sessions with filters
104
+ * GET /sessions
105
+ *
106
+ * Filters:
107
+ * - userId: Filter by user (UUID)
108
+ * - resourceId: Filter by agent/resource (string identifier like 'executive-agent')
109
+ * - limit: Max results (1-100, default 20)
110
+ *
111
+ * Security:
112
+ * - userId validated as UUID (prevents SQL injection)
113
+ * - resourceId validated as string (resource identifiers)
114
+ * - Limit bounded (prevents DoS via large result sets)
115
+ */
116
+ export const ListSessionsQuerySchema = z
117
+ .object({
118
+ userId: UuidSchema.optional(),
119
+ resourceId: z.string().optional(),
120
+ limit: z.coerce.number().int().min(1).max(100).default(20)
121
+ })
122
+ .strict()
123
+
124
+ // ============================================================================
125
+ // WebSocket Messages
126
+ // ============================================================================
127
+
128
+ /**
129
+ * WebSocket client message: Execute turn
130
+ *
131
+ * Client sends: { type: "session:turn", input: "..." }
132
+ *
133
+ * Security:
134
+ * - Same input validation as HTTP endpoint (100k char limit)
135
+ * - Token limit also validated separately (10k tokens for CHAT_MESSAGE)
136
+ * - Prompt injection blocked by input-sanitizer
137
+ */
138
+ export const WebSocketSessionTurnSchema = z
139
+ .object({
140
+ type: z.literal('session:turn'),
141
+ input: z.unknown().refine(
142
+ (val) => {
143
+ let text: string
144
+ if (typeof val === 'string') {
145
+ text = val
146
+ } else if (val && typeof val === 'object' && 'message' in val) {
147
+ text = String((val as Record<string, unknown>).message)
148
+ } else {
149
+ text = JSON.stringify(val) || ''
150
+ }
151
+ return text && text.length > 0 && text.length <= 100_000
152
+ },
153
+ { message: 'Input must be between 1 and 100,000 characters' }
154
+ )
155
+ })
156
+ .strict()
157
+
158
+ // ============================================================================
159
+ // TypeScript Type Exports
160
+ // ============================================================================
161
+
162
+ // Export inferred types for use in route handlers
163
+ export type CreateSessionInput = z.infer<typeof CreateSessionSchema>
164
+ export type ExecuteTurnInput = z.infer<typeof ExecuteTurnSchema>
165
+ export type ListSessionsQuery = z.infer<typeof ListSessionsQuerySchema>
166
+ export type WebSocketSessionTurnMessage = z.infer<typeof WebSocketSessionTurnSchema>
@@ -0,0 +1,26 @@
1
+ // Session classes are server-only - import from @repo/core/server
2
+ // Only types are exported here for browser-safe access
3
+ export type {
4
+ SessionTurnResult,
5
+ SessionTokenUsage,
6
+ CreateSessionParams,
7
+ ListSessionsFilters,
8
+ SessionRow,
9
+ SessionInsert,
10
+ ExecuteTurnRequest
11
+ } from './types'
12
+
13
+ // Export validation schemas
14
+ export {
15
+ CreateSessionSchema,
16
+ ExecuteTurnSchema,
17
+ ListSessionsQuerySchema,
18
+ SessionIdParamSchema,
19
+ ExecutionIdParamsSchema,
20
+ WebSocketSessionTurnSchema,
21
+ UuidSchema,
22
+ type CreateSessionInput,
23
+ type ExecuteTurnInput,
24
+ type ListSessionsQuery,
25
+ type WebSocketSessionTurnMessage
26
+ } from './api-schemas'
@@ -0,0 +1,90 @@
1
+ import type { SupabaseClient } from '../../../supabase'
2
+ import { Session } from './session'
3
+ import type { CreateSessionParams, ListSessionsFilters } from '../types'
4
+
5
+ export class SessionManager {
6
+ constructor(private db: SupabaseClient) {}
7
+
8
+ async create(params: CreateSessionParams): Promise<Session> {
9
+ const { resourceId, organizationId, userId, metadata, contextWindowSize } = params
10
+
11
+ const { data, error } = await this.db
12
+ .from('sessions')
13
+ .insert({
14
+ resource_id: resourceId,
15
+ organization_id: organizationId,
16
+ user_id: userId ?? null,
17
+ memory_snapshot: { sessionMemory: {}, history: [] },
18
+ metadata: (metadata as Record<string, never> | null) ?? null,
19
+ session_total_turns: 0,
20
+ ...(contextWindowSize !== undefined && { context_window_size: contextWindowSize })
21
+ })
22
+ .select()
23
+ .single()
24
+
25
+ if (error) {
26
+ throw new Error(`Failed to create session: ${error.message}`)
27
+ }
28
+
29
+ return new Session(this.db, data)
30
+ }
31
+
32
+ async get(sessionId: string, organizationId: string): Promise<Session | null> {
33
+ const { data, error } = await this.db
34
+ .from('sessions')
35
+ .select()
36
+ .eq('session_id', sessionId)
37
+ .eq('organization_id', organizationId)
38
+ .is('deleted_at', null)
39
+ .single()
40
+
41
+ if (error) {
42
+ if (error.code === 'PGRST116') {
43
+ return null // Not found
44
+ }
45
+ throw new Error(`Failed to get session: ${error.message}`)
46
+ }
47
+
48
+ return new Session(this.db, data)
49
+ }
50
+
51
+ async list(filters: ListSessionsFilters): Promise<Session[]> {
52
+ const { organizationId, userId, resourceId, limit = 50 } = filters
53
+
54
+ let query = this.db
55
+ .from('sessions')
56
+ .select()
57
+ .eq('organization_id', organizationId)
58
+ .is('deleted_at', null)
59
+ .order('created_at', { ascending: false })
60
+ .limit(limit)
61
+
62
+ if (userId) {
63
+ query = query.eq('user_id', userId)
64
+ }
65
+
66
+ if (resourceId) {
67
+ query = query.eq('resource_id', resourceId)
68
+ }
69
+
70
+ const { data, error } = await query
71
+
72
+ if (error) {
73
+ throw new Error(`Failed to list sessions: ${error.message}`)
74
+ }
75
+
76
+ return data.map((row) => new Session(this.db, row))
77
+ }
78
+
79
+ async delete(sessionId: string, organizationId: string): Promise<void> {
80
+ const { error } = await this.db
81
+ .from('sessions')
82
+ .update({ deleted_at: new Date().toISOString() })
83
+ .eq('session_id', sessionId)
84
+ .eq('organization_id', organizationId)
85
+
86
+ if (error) {
87
+ throw new Error(`Failed to delete session: ${error.message}`)
88
+ }
89
+ }
90
+ }
@@ -0,0 +1,180 @@
1
+ import type { SupabaseClient, Json } from '../../../supabase'
2
+ import type { ExecutionContext } from '../../../execution/engine/base/types'
3
+ import type { AgentDefinition } from '../../../execution/engine/agent/core/types'
4
+ import type { AgentMemory } from '../../../execution/engine/agent/memory/types'
5
+ import type { SessionRow, SessionTurnResult } from '../types'
6
+ import { createLLMAdapter } from '../../../execution/engine/llm/adapters/server/adapter-factory'
7
+
8
+ export class Session {
9
+ constructor(
10
+ private db: SupabaseClient,
11
+ private data: SessionRow
12
+ ) {}
13
+
14
+ // Getters
15
+ get sessionId(): string {
16
+ return this.data.session_id
17
+ }
18
+
19
+ get organizationId(): string {
20
+ return this.data.organization_id
21
+ }
22
+
23
+ get userId(): string | null {
24
+ return this.data.user_id
25
+ }
26
+
27
+ get resourceId(): string {
28
+ return this.data.resource_id
29
+ }
30
+
31
+ get totalTurns(): number {
32
+ return this.data.session_total_turns ?? 0
33
+ }
34
+
35
+ get memorySnapshot(): AgentMemory {
36
+ return this.data.memory_snapshot as unknown as AgentMemory
37
+ }
38
+
39
+ get metadata(): Record<string, unknown> | null {
40
+ return this.data.metadata as Record<string, unknown> | null
41
+ }
42
+
43
+ /** Title derived from the first user message, stored in metadata */
44
+ get title(): string | null {
45
+ const meta = this.data.metadata as Record<string, unknown> | null
46
+ return (meta?.title as string) ?? null
47
+ }
48
+
49
+ get createdAt(): Date {
50
+ return new Date(this.data.created_at!)
51
+ }
52
+
53
+ get updatedAt(): Date {
54
+ return new Date(this.data.updated_at!)
55
+ }
56
+
57
+ get isEnded(): boolean {
58
+ return !!this.data.ended_at
59
+ }
60
+
61
+ get contextWindowSize(): number {
62
+ return this.data.context_window_size
63
+ }
64
+
65
+ /**
66
+ * Execute a turn in this session
67
+ *
68
+ * Uses database transaction with row-level lock to prevent concurrent turn execution.
69
+ * Pattern: Lock → Read → Validate → Execute → Save
70
+ *
71
+ * @param agentDefinition - Agent definition to execute
72
+ * @param input - Input for this turn
73
+ * @param context - Full execution context (including sessionTurnMessages if streaming)
74
+ * @returns Turn result with output and metadata
75
+ */
76
+ async executeTurn<TInput, TOutput>(
77
+ agentDefinition: AgentDefinition,
78
+ input: TInput,
79
+ context: ExecutionContext
80
+ ): Promise<SessionTurnResult<TOutput>> {
81
+ const turnStartTime = Date.now()
82
+
83
+ // NOTE: Using RPC to acquire row-level lock and get fresh state
84
+ // This ensures atomic lock acquisition for concurrent turn prevention
85
+ const { data, error } = await this.db.rpc('execute_session_turn', {
86
+ p_session_id: this.sessionId
87
+ })
88
+
89
+ if (error) {
90
+ throw new Error(`Failed to acquire session lock: ${error.message}`)
91
+ }
92
+
93
+ // Reload fresh state from lock result
94
+ const lockResult = (Array.isArray(data) ? data[0] : data) as unknown
95
+ if (!lockResult) {
96
+ throw new Error('Session not found')
97
+ }
98
+
99
+ this.data = lockResult as SessionRow
100
+
101
+ // Validate
102
+ if (this.isEnded) {
103
+ throw new Error('Cannot execute turn on ended session')
104
+ }
105
+
106
+ // Create agent instance (stateless, recreated per turn)
107
+ const { Agent } = await import('../../../execution/engine/agent/core/agent')
108
+ const agent = new Agent<TInput, TOutput>(agentDefinition, createLLMAdapter)
109
+
110
+ // Execute agent (preloadMemory callback will restore session memory)
111
+ const output = await agent.execute(input, context)
112
+
113
+ // Update state and persist
114
+ const snapshot = agent.getMemorySnapshot()
115
+ if (!snapshot) {
116
+ throw new Error('Agent did not produce memory snapshot')
117
+ }
118
+
119
+ // Complete turn (messages already persisted immediately via onMessageEvent)
120
+ await this.completeTurn(snapshot)
121
+
122
+ return {
123
+ sessionId: this.sessionId,
124
+ executionId: context.executionId,
125
+ turnNumber: this.data.session_total_turns ?? 0,
126
+ output,
127
+ duration: Date.now() - turnStartTime
128
+ }
129
+ }
130
+
131
+ /**
132
+ * End this session (marks as ended, prevents future turns)
133
+ */
134
+ async end(): Promise<void> {
135
+ this.data.ended_at = new Date().toISOString()
136
+ this.data.updated_at = new Date().toISOString()
137
+ await this.save()
138
+ }
139
+
140
+ /**
141
+ * Convert to JSON representation
142
+ */
143
+ toJSON(): SessionRow {
144
+ return { ...this.data }
145
+ }
146
+
147
+ /**
148
+ * Save current state to database
149
+ */
150
+ private async save(): Promise<void> {
151
+ const { error } = await this.db
152
+ .from('sessions')
153
+ .update({
154
+ memory_snapshot: this.data.memory_snapshot,
155
+ session_total_turns: this.data.session_total_turns,
156
+ updated_at: this.data.updated_at,
157
+ ended_at: this.data.ended_at
158
+ })
159
+ .eq('session_id', this.sessionId)
160
+
161
+ if (error) {
162
+ throw new Error(`Failed to save session: ${error.message}`)
163
+ }
164
+ }
165
+
166
+ /**
167
+ * Complete turn by updating session state
168
+ * Messages already persisted immediately via onMessageEvent callback
169
+ * @param snapshot - Agent memory snapshot
170
+ */
171
+ private async completeTurn(snapshot: AgentMemory): Promise<void> {
172
+ // Update session state
173
+ this.data.memory_snapshot = snapshot as unknown as Json
174
+ this.data.session_total_turns = (this.data.session_total_turns ?? 0) + 1
175
+ this.data.updated_at = new Date().toISOString()
176
+
177
+ // Persist session state (messages already in DB)
178
+ await this.save()
179
+ }
180
+ }
@@ -0,0 +1,98 @@
1
+ import type { Tables, TablesInsert } from '../../supabase/database.types'
2
+ import type { MessageEvent } from '../../execution/engine/base/types'
3
+ import type { AgentMemory } from '../../execution/engine/agent/memory/types'
4
+
5
+ // Database table types (use imported Supabase types)
6
+ export type SessionRow = Tables<'sessions'>
7
+ export type SessionInsert = TablesInsert<'sessions'>
8
+ export type SessionMessageRow = Tables<'session_messages'>
9
+ export type SessionMessageInsert = TablesInsert<'session_messages'>
10
+
11
+ // Extract all event types from MessageEvent discriminated union
12
+ export type MessageType = MessageEvent['type']
13
+
14
+ /**
15
+ * Session Data Transfer Object (DTO)
16
+ * Transform type for API responses (snake_case DB → camelCase frontend)
17
+ * Used by frontend apps to display session data
18
+ */
19
+ export interface SessionDTO {
20
+ sessionId: string
21
+ resourceId: string
22
+ organizationId: string
23
+ userId?: string | null
24
+ turnCount: number
25
+ isEnded: boolean
26
+ title?: string | null
27
+ memorySnapshot?: AgentMemory
28
+ metadata?: Record<string, unknown> | null
29
+ createdAt: Date
30
+ updatedAt: Date
31
+ endedAt?: Date | null
32
+ }
33
+
34
+ // Transform type (snake_case DB → camelCase domain)
35
+ export interface ChatMessage {
36
+ id: string
37
+ role: 'user' | 'assistant'
38
+ messageType: MessageType
39
+ text: string
40
+ metadata?: MessageEvent
41
+ turnNumber: number
42
+ messageIndex?: number // Optional - auto-generated by DB trigger, may be undefined for temp messages
43
+ createdAt: Date
44
+ }
45
+
46
+ export interface SessionTurnResult<TOutput> {
47
+ sessionId: string
48
+ executionId: string
49
+ turnNumber: number
50
+ output: TOutput | null // Null for side-effect agents with no output schema
51
+ duration: number
52
+ }
53
+
54
+ export interface CreateSessionParams {
55
+ resourceId: string
56
+ organizationId: string
57
+ userId?: string
58
+ metadata?: Record<string, unknown>
59
+ /** Context window size from the agent's model config (tokens) */
60
+ contextWindowSize?: number
61
+ }
62
+
63
+ export interface ListSessionsFilters {
64
+ organizationId: string
65
+ userId?: string
66
+ resourceId?: string
67
+ limit?: number
68
+ }
69
+
70
+ // API Request/Response Types
71
+
72
+ /**
73
+ * Execute turn request body
74
+ * Supports both object format (with message key) and plain string
75
+ */
76
+ export interface ExecuteTurnRequest {
77
+ input:
78
+ | {
79
+ message: string
80
+ }
81
+ | string
82
+ }
83
+
84
+ /** Token usage data sent with turn:complete WebSocket events */
85
+ export interface SessionTokenUsage {
86
+ /** Tokens consumed by this turn's input */
87
+ turnInputTokens: number
88
+ /** Tokens generated by this turn's output */
89
+ turnOutputTokens: number
90
+ /** Total tokens for this turn (turnInputTokens + turnOutputTokens) */
91
+ turnTotalTokens: number
92
+ /** Cumulative input tokens across all turns in this session */
93
+ cumulativeInputTokens: number
94
+ /** Cumulative output tokens across all turns in this session */
95
+ cumulativeOutputTokens: number
96
+ /** The model's context window size for this session (e.g., 200K) */
97
+ contextWindowSize: number
98
+ }
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Triggers Module
3
+ *
4
+ * Triggers start workflow executions. Types of triggers:
5
+ * - Webhook: External services send HTTP requests (Cal.com, Fillout, Instantly, etc.)
6
+ * - Scheduled: Cron-based execution (future)
7
+ * - Manual: User-initiated execution (future)
8
+ * - Event: Internal event-based execution (future)
9
+ */
10
+
11
+ // Webhook triggers (providers + definitions)
12
+ export * from './webhook/index'
@@ -0,0 +1,72 @@
1
+ /**
2
+ * Test: Instantly Reply Received Trigger Definition
3
+ *
4
+ * Tests for the Instantly webhook trigger definition.
5
+ */
6
+
7
+ import { describe, it, expect } from 'vitest'
8
+ import {
9
+ instantlyReplyReceivedTrigger,
10
+ type InstantlyReplyWebhookPayload
11
+ } from '../instantly-reply-received'
12
+
13
+ describe('instantlyReplyReceivedTrigger', () => {
14
+ describe('trigger definition structure', () => {
15
+ it('has correct triggerType', () => {
16
+ expect(instantlyReplyReceivedTrigger.triggerType).toBe('webhook')
17
+ })
18
+
19
+ it('has correct config provider', () => {
20
+ expect(instantlyReplyReceivedTrigger.config).toBeDefined()
21
+ expect((instantlyReplyReceivedTrigger.config as { provider: string }).provider).toBe('instantly')
22
+ })
23
+
24
+ it('has correct config event', () => {
25
+ expect(instantlyReplyReceivedTrigger.config).toBeDefined()
26
+ expect((instantlyReplyReceivedTrigger.config as { event: string }).event).toBe('reply_received')
27
+ })
28
+
29
+ it('has correct resourceId', () => {
30
+ expect(instantlyReplyReceivedTrigger.resourceId).toBe('trigger-instantly-reply-received')
31
+ })
32
+
33
+ it('has correct type', () => {
34
+ expect(instantlyReplyReceivedTrigger.type).toBe('trigger')
35
+ })
36
+
37
+ it('has required metadata fields', () => {
38
+ expect(instantlyReplyReceivedTrigger.name).toBe('Instantly Reply Received')
39
+ expect(instantlyReplyReceivedTrigger.description).toBeDefined()
40
+ expect(instantlyReplyReceivedTrigger.version).toBe('1.0.0')
41
+ expect(instantlyReplyReceivedTrigger.status).toBe('dev')
42
+ })
43
+
44
+ it('has webhookPath defined', () => {
45
+ expect(instantlyReplyReceivedTrigger.webhookPath).toBe('/webhooks/instantly/reply-received')
46
+ })
47
+ })
48
+
49
+ describe('type exports', () => {
50
+ it('exports InstantlyReplyWebhookPayload type', () => {
51
+ // Type assertion test - if this compiles, the type is exported
52
+ const payload: InstantlyReplyWebhookPayload = {
53
+ timestamp: '2025-01-15T10:30:00Z',
54
+ event_type: 'reply_received',
55
+ workspace: 'test',
56
+ campaign_id: 'camp-1',
57
+ lead_email: 'test@example.com',
58
+ email_account: 'sender@example.com',
59
+ unibox_url: 'https://instantly.ai/unibox/1',
60
+ reply_to_uuid: 'uuid-1',
61
+ reply_subject: 'Re: Test',
62
+ reply_text: 'Test reply',
63
+ reply_text_snippet: 'Test...',
64
+ reply_html: '<p>Test reply</p>',
65
+ step: 1,
66
+ variant: 0,
67
+ is_first: true
68
+ }
69
+ expect(payload.event_type).toBe('reply_received')
70
+ })
71
+ })
72
+ })
@@ -0,0 +1,44 @@
1
+ /**
2
+ * Instantly Account Error Trigger Definition
3
+ *
4
+ * Webhook trigger for Instantly email account error events.
5
+ * Uses Instantly's native snake_case format - no transformation needed.
6
+ */
7
+
8
+ import type { TriggerDefinition, WebhookTriggerConfig } from '../../../../platform/registry/types'
9
+
10
+ /**
11
+ * Instantly account error webhook payload structure
12
+ *
13
+ * Uses snake_case matching Instantly's API. Workflows receive this directly.
14
+ */
15
+ export interface InstantlyAccountErrorPayload {
16
+ timestamp: string
17
+ event_type: 'account_error'
18
+ workspace: string
19
+ email_account: string
20
+ error_type?: string
21
+ error_message?: string
22
+ }
23
+
24
+ /**
25
+ * Instantly Account Error Trigger Definition
26
+ *
27
+ * Trigger type: webhook
28
+ * Provider: instantly
29
+ * Event: account_error
30
+ */
31
+ export const instantlyAccountErrorTrigger: TriggerDefinition = {
32
+ resourceId: 'trigger-instantly-account-error',
33
+ type: 'trigger',
34
+ triggerType: 'webhook',
35
+ name: 'Instantly Account Error',
36
+ description: 'Webhook fired when an Instantly sending account encounters an error',
37
+ version: '1.0.0',
38
+ status: 'dev',
39
+ webhookPath: '/webhooks/instantly/account-error',
40
+ config: {
41
+ provider: 'instantly',
42
+ event: 'account_error'
43
+ } as WebhookTriggerConfig
44
+ }