@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,186 @@
1
+ /**
2
+ * LLM-related error classes
3
+ * Thrown from adapter layer, caught by execution layer
4
+ */
5
+
6
+ import { ExecutionError } from '../base/errors'
7
+
8
+ /**
9
+ * Base class for LLM-related errors
10
+ * Thrown from adapter layer, caught by execution layer
11
+ *
12
+ * Severity: warning (transient failures that may be retryable)
13
+ * Category: llm (LLM provider errors)
14
+ */
15
+ export class LLMError extends ExecutionError {
16
+ readonly type: string = 'llm_error'
17
+ readonly severity: 'warning' | 'critical' = 'warning' as const
18
+ readonly category = 'llm' as const
19
+
20
+ constructor(message: string, context?: Record<string, unknown>) {
21
+ super(message, context)
22
+ }
23
+
24
+ override isRetryable(): boolean {
25
+ return true
26
+ }
27
+ }
28
+
29
+ /**
30
+ * Thrown when token configuration is insufficient for the model
31
+ * Wrapped as ExecutionError with code: AGENT_INSUFFICIENT_TOKENS
32
+ *
33
+ * Severity: critical (execution cannot continue without sufficient tokens)
34
+ * Category: llm
35
+ */
36
+ export class InsufficientTokensError extends LLMError {
37
+ override readonly type = 'insufficient_tokens' as const
38
+ override readonly severity = 'critical' as const
39
+
40
+ constructor(message: string, context?: Record<string, unknown>) {
41
+ super(message, context)
42
+ }
43
+
44
+ override isRetryable(): boolean {
45
+ return false
46
+ }
47
+ }
48
+
49
+ /**
50
+ * Thrown when LLM hits token limit during generation
51
+ * Wrapped as ExecutionError with code: AGENT_TOKEN_LIMIT_EXCEEDED
52
+ *
53
+ * Severity: critical (execution cannot continue, token limit exceeded)
54
+ * Category: llm
55
+ */
56
+ export class TokenLimitExceededError extends LLMError {
57
+ override readonly type = 'token_limit_exceeded' as const
58
+ override readonly severity = 'critical' as const
59
+
60
+ constructor(message: string, context?: Record<string, unknown>) {
61
+ super(message, context)
62
+ }
63
+
64
+ override isRetryable(): boolean {
65
+ return false
66
+ }
67
+ }
68
+
69
+ /**
70
+ * Thrown when LLM response cannot be parsed as valid JSON
71
+ * This is a transient error - the LLM may produce valid JSON on retry
72
+ *
73
+ * Severity: warning (transient failure that may succeed on retry)
74
+ * Category: llm
75
+ */
76
+ export class LLMResponseParseError extends LLMError {
77
+ override readonly type = 'llm_response_parse_error' as const
78
+ override readonly severity = 'warning' as const
79
+
80
+ constructor(message: string, context?: Record<string, unknown>) {
81
+ super(message, context)
82
+ }
83
+
84
+ override isRetryable(): boolean {
85
+ return true // JSON parse failures are transient LLM errors
86
+ }
87
+ }
88
+
89
+ /**
90
+ * Thrown when model configuration is invalid
91
+ * Provides structured information for debugging
92
+ *
93
+ * Severity: warning (configuration error that blocks execution but is user-correctable)
94
+ * Category: validation (user/developer input validation)
95
+ */
96
+ export class ModelConfigError extends ExecutionError {
97
+ readonly type = 'model_config_error' as const
98
+ readonly severity = 'warning' as const
99
+ readonly category = 'validation' as const
100
+
101
+ constructor(
102
+ message: string,
103
+ public field: string,
104
+ public model: string,
105
+ context?: Record<string, unknown>
106
+ ) {
107
+ super(message, { ...context, field, model })
108
+ }
109
+ }
110
+
111
+ /**
112
+ * Thrown when input is blocked by prompt injection sanitization
113
+ * This is NOT a service failure - it means the security layer is working correctly
114
+ *
115
+ * Severity: warning (system working as designed, not a failure)
116
+ * Category: validation (input validation, not infrastructure)
117
+ */
118
+ export class LLMInputBlockedError extends ExecutionError {
119
+ readonly type = 'input_blocked' as const
120
+ readonly severity = 'warning' as const
121
+ readonly category = 'validation' as const
122
+
123
+ constructor(warnings: string[]) {
124
+ super(`Input blocked: ${warnings.join(', ')} prompt injection patterns detected`, {
125
+ warnings,
126
+ patternCount: warnings.length
127
+ })
128
+ }
129
+
130
+ override isRetryable(): boolean {
131
+ return false // Same input will always be blocked
132
+ }
133
+ }
134
+
135
+ // ============================================================================
136
+ // Model Configuration Validation
137
+ // ============================================================================
138
+
139
+ import { getModelInfo, type ModelConfig } from './model-info'
140
+
141
+ /**
142
+ * Validate model configuration using consolidated Zod schema
143
+ * Validates constraints (temperature, maxOutputTokens) AND model-specific options
144
+ *
145
+ * @example
146
+ * // Valid config
147
+ * validateModelConfig({ model: 'gpt-5', temperature: 1, modelOptions: { reasoning_effort: 'low' } }) // ✓
148
+ *
149
+ * // Invalid temperature
150
+ * validateModelConfig({ model: 'gpt-5', temperature: 0.7 }) // ✗ Throws ModelConfigError
151
+ *
152
+ * // Invalid option
153
+ * validateModelConfig({ model: 'mock', modelOptions: { reasoning_effort: 'low' } }) // ✗ Throws ModelConfigError
154
+ *
155
+ * @param config - Complete model configuration to validate
156
+ * @throws {ModelConfigError} If validation fails (uses Zod for runtime validation)
157
+ */
158
+ export function validateModelConfig(config: ModelConfig): void {
159
+ const model = config.model as string
160
+
161
+ if (!model) {
162
+ throw new ModelConfigError('Missing model field', 'model', 'unknown')
163
+ }
164
+
165
+ const modelInfo = getModelInfo(model)
166
+
167
+ if (!modelInfo) {
168
+ throw new ModelConfigError(`Unknown model: ${model}`, 'model', model)
169
+ }
170
+
171
+ // If model has no schema, skip validation
172
+ if (!modelInfo.configSchema) {
173
+ return
174
+ }
175
+
176
+ // Validate using consolidated Zod schema
177
+ const result = modelInfo.configSchema.safeParse(config)
178
+
179
+ if (!result.success) {
180
+ const firstError = result.error.issues[0]
181
+ const fieldPath = firstError.path.join('.')
182
+ const fieldName = fieldPath || 'config'
183
+
184
+ throw new ModelConfigError(`Invalid config for ${model}: ${firstError.message}`, fieldName, model)
185
+ }
186
+ }
@@ -0,0 +1,129 @@
1
+ // SECURITY FIX: Rank 5A - Basic Prompt Injection Pattern Blocking
2
+ // Sanitizes user input to detect and block common prompt injection attacks
3
+
4
+ /**
5
+ * Result of input sanitization
6
+ */
7
+ export interface SanitizationResult {
8
+ /** Original input (use this if not blocked) */
9
+ original: unknown
10
+ /** Sanitized input text (with attack patterns redacted) */
11
+ sanitized: string
12
+ /** List of detected attack pattern types */
13
+ warnings: string[]
14
+ /** Whether input is blocked (3+ distinct attack types) */
15
+ blocked: boolean
16
+ }
17
+
18
+ /**
19
+ * Sanitize user input to detect and block prompt injection attacks
20
+ *
21
+ * Basic pattern blocking for common attack vectors:
22
+ * 1. System prompt extraction attempts
23
+ * 2. Role manipulation attempts
24
+ * 3. Delimiter injection (fake system sections)
25
+ * 4. Tool/function injection attempts
26
+ *
27
+ * Blocking threshold: 3+ distinct warning types indicates sophisticated attack
28
+ *
29
+ * @param input - User input (any format)
30
+ * @returns Sanitization result with warnings, sanitized text, and blocked status
31
+ */
32
+ export function sanitizeUserInput(input: unknown): SanitizationResult {
33
+ let text: string
34
+
35
+ // Extract text from input (string or {message: "..."} format)
36
+ if (typeof input === 'string') {
37
+ text = input
38
+ } else if (input && typeof input === 'object' && 'message' in input) {
39
+ text = String((input as Record<string, unknown>).message)
40
+ } else if (input === null || input === undefined) {
41
+ text = ''
42
+ } else {
43
+ text = JSON.stringify(input)
44
+ }
45
+
46
+ const warnings: string[] = []
47
+ let sanitized = text
48
+
49
+ // Pattern 1: System prompt extraction attempts
50
+ const systemPromptPatterns = [
51
+ /ignore\s+(all\s+)?instructions?/i,
52
+ /ignore\s+(all\s+)?(previous|prior|above)/i,
53
+ /disregard\s+(all\s+)?(previous|system)\s+instructions?/i,
54
+ /print\s+(your\s+)?(system\s+)?prompt/i,
55
+ /(show|tell)\s+(me\s+)?your\s+(system\s+)?prompt/i,
56
+ /what\s+(are|is)\s+your\s+(system\s+)?instructions?/i,
57
+ /show\s+(me\s+)?your\s+configuration/i,
58
+ /repeat\s+everything\s+before/i
59
+ ]
60
+
61
+ for (const pattern of systemPromptPatterns) {
62
+ if (pattern.test(text)) {
63
+ warnings.push('system_prompt_extraction')
64
+ sanitized = sanitized.replace(pattern, '[REDACTED: system prompt extraction attempt]')
65
+ break
66
+ }
67
+ }
68
+
69
+ // Pattern 2: Role manipulation attempts
70
+ const rolePatterns = [
71
+ /you\s+are\s+now\s+(a|an|the)/i,
72
+ /act\s+as\s+(a|an|the)/i,
73
+ /pretend\s+(you\s+are|to\s+be)/i,
74
+ /from\s+now\s+on,?\s+you/i,
75
+ /forget\s+your\s+(previous\s+)?role/i,
76
+ /jailbreak/i
77
+ ]
78
+
79
+ for (const pattern of rolePatterns) {
80
+ if (pattern.test(text)) {
81
+ warnings.push('role_manipulation')
82
+ sanitized = sanitized.replace(pattern, '[REDACTED: role manipulation attempt]')
83
+ break
84
+ }
85
+ }
86
+
87
+ // Pattern 3: Delimiter injection (fake system sections)
88
+ const delimiterPatterns = [
89
+ /^\s*={3,}/m, // === at line start (with optional whitespace)
90
+ /^\s*-{3,}/m, // --- at line start (with optional whitespace)
91
+ /^\s*#{2,}\s*SYSTEM/mi, // ## SYSTEM headers (with optional whitespace)
92
+ /<\|?system\|?>/i // <system> or <|system|> tags
93
+ ]
94
+
95
+ for (const pattern of delimiterPatterns) {
96
+ if (pattern.test(text)) {
97
+ warnings.push('delimiter_injection')
98
+ sanitized = sanitized.replace(pattern, '[REDACTED: delimiter injection]')
99
+ break
100
+ }
101
+ }
102
+
103
+ // Pattern 4: Tool/function injection attempts
104
+ const toolPatterns = [
105
+ /<function[>\s]/i,
106
+ /<tool[>\s]/i,
107
+ /"type":\s*"tool_call"/i
108
+ ]
109
+
110
+ for (const pattern of toolPatterns) {
111
+ if (pattern.test(text)) {
112
+ warnings.push('tool_injection')
113
+ sanitized = sanitized.replace(pattern, '[REDACTED: tool injection attempt]')
114
+ break
115
+ }
116
+ }
117
+
118
+ // Decision: Block if 3+ distinct warning types detected
119
+ // (This indicates a sophisticated, multi-vector attack)
120
+ const uniqueWarnings = [...new Set(warnings)]
121
+ const blocked = uniqueWarnings.length >= 3
122
+
123
+ return {
124
+ original: input,
125
+ sanitized,
126
+ warnings: uniqueWarnings,
127
+ blocked
128
+ }
129
+ }
@@ -0,0 +1,332 @@
1
+ /**
2
+ * Model Configuration
3
+ * Centralized model information, configuration, options, constraints, and validation
4
+ * Single source of truth for all model-related definitions
5
+ * Update manually when pricing changes or new models are added
6
+ */
7
+
8
+ import { z } from 'zod'
9
+
10
+ // ============================================================================
11
+ // Model Types
12
+ // ============================================================================
13
+
14
+ /**
15
+ * Supported Open AI models (direct SDK access)
16
+ */
17
+ export type OpenAIModel = 'gpt-5' | 'gpt-5.4-mini' | 'gpt-5.4-nano'
18
+
19
+ /**
20
+ * Supported OpenRouter models (explicit union for type safety)
21
+ */
22
+ export type OpenRouterModel = 'openrouter/z-ai/glm-5'
23
+
24
+ /**
25
+ * Supported Google models (direct SDK access)
26
+ */
27
+ export type GoogleModel = 'gemini-3-flash-preview' | 'gemini-3.1-flash-lite-preview'
28
+
29
+ /**
30
+ * Supported Anthropic models (direct SDK access via @anthropic-ai/sdk)
31
+ */
32
+ export type AnthropicModel = 'claude-sonnet-4-5'
33
+
34
+ /** Supported LLM models */
35
+ export type LLMModel = OpenAIModel | OpenRouterModel | GoogleModel | AnthropicModel | 'mock'
36
+
37
+ // ============================================================================
38
+ // Model Configuration Schemas (Schema-First - Single Source of Truth)
39
+ // ============================================================================
40
+
41
+ /**
42
+ * GPT-5 model options schema
43
+ */
44
+ const GPT5OptionsSchema = z.object({
45
+ reasoning_effort: z.enum(['minimal', 'low', 'medium', 'high']).optional(),
46
+ verbosity: z.enum(['low', 'medium', 'high']).optional()
47
+ })
48
+
49
+ /**
50
+ * GPT-5 family complete config schema
51
+ * Validates entire ModelConfig including constraints and options
52
+ * GPT-5, GPT-5.4-mini, and GPT-5.4-nano share same validation rules
53
+ */
54
+ export const GPT5ConfigSchema = z.object({
55
+ model: z.enum(['gpt-5', 'gpt-5.4-mini', 'gpt-5.4-nano']),
56
+ provider: z.enum(['openai']),
57
+ apiKey: z.string(),
58
+ temperature: z.literal(1), // Required to be exactly 1
59
+ maxOutputTokens: z.number().min(4000).optional(),
60
+ topP: z.number().min(0).max(1).optional(),
61
+ modelOptions: GPT5OptionsSchema.optional()
62
+ })
63
+
64
+ /**
65
+ * Mock model config schema
66
+ */
67
+ export const MockConfigSchema = z.object({
68
+ model: z.enum(['mock']),
69
+ provider: z.enum(['mock']),
70
+ apiKey: z.string(),
71
+ temperature: z.number().min(0).max(2).optional(),
72
+ maxOutputTokens: z.number().min(500).optional(),
73
+ topP: z.number().min(0).max(1).optional(),
74
+ modelOptions: z.object({}).strict().optional() // No options supported
75
+ })
76
+
77
+ /**
78
+ * OpenRouter model options schema
79
+ * OpenRouter-specific options for routing and transforms
80
+ */
81
+ const OpenRouterOptionsSchema = z.object({
82
+ /** Optional transforms to apply (e.g., 'middle-out' for long context) */
83
+ transforms: z.array(z.string()).optional(),
84
+ /** Routing strategy (e.g., 'fallback' for automatic provider failover) */
85
+ route: z.enum(['fallback']).optional()
86
+ })
87
+
88
+ /**
89
+ * OpenRouter config schema
90
+ * Validates ModelConfig for OpenRouter provider
91
+ */
92
+ export const OpenRouterConfigSchema = z.object({
93
+ model: z.enum(['openrouter/z-ai/glm-5']),
94
+ provider: z.literal('openrouter'),
95
+ apiKey: z.string(),
96
+ temperature: z.number().min(0).max(2).optional(),
97
+ maxOutputTokens: z.number().min(500).optional(),
98
+ topP: z.number().min(0).max(1).optional(),
99
+ modelOptions: OpenRouterOptionsSchema.optional()
100
+ })
101
+
102
+ /**
103
+ * Google model options schema
104
+ * Gemini 3 specific options for thinking depth control
105
+ */
106
+ const GoogleOptionsSchema = z.object({
107
+ /** Thinking level for Gemini 3 models (controls reasoning depth) */
108
+ thinkingLevel: z.enum(['minimal', 'low', 'medium', 'high']).optional()
109
+ })
110
+
111
+ /**
112
+ * Google config schema
113
+ * Validates ModelConfig for Google provider (direct SDK access)
114
+ */
115
+ export const GoogleConfigSchema = z.object({
116
+ model: z.enum(['gemini-3-flash-preview', 'gemini-3.1-flash-lite-preview']),
117
+ provider: z.literal('google'),
118
+ apiKey: z.string(),
119
+ temperature: z.number().min(0).max(2).optional(),
120
+ maxOutputTokens: z.number().min(500).optional(),
121
+ topP: z.number().min(0).max(1).optional(),
122
+ modelOptions: GoogleOptionsSchema.optional()
123
+ })
124
+
125
+ /**
126
+ * Anthropic model options schema
127
+ * Currently empty - future options: budget_tokens for extended thinking
128
+ */
129
+ const AnthropicOptionsSchema = z.object({})
130
+
131
+ /**
132
+ * Anthropic config schema
133
+ * Validates ModelConfig for Anthropic provider (direct SDK access)
134
+ */
135
+ export const AnthropicConfigSchema = z.object({
136
+ model: z.enum(['claude-sonnet-4-5']),
137
+ provider: z.literal('anthropic'),
138
+ apiKey: z.string(),
139
+ temperature: z.number().min(0).max(1).optional(),
140
+ maxOutputTokens: z.number().min(1000).optional(), // Anthropic requires max_tokens
141
+ topP: z.number().min(0).max(1).optional(),
142
+ modelOptions: AnthropicOptionsSchema.optional()
143
+ })
144
+
145
+ /**
146
+ * Infer TypeScript types from schemas
147
+ */
148
+ export type GPT5Options = z.infer<typeof GPT5OptionsSchema>
149
+ export type MockOptions = Record<string, never>
150
+ export type OpenRouterOptions = z.infer<typeof OpenRouterOptionsSchema>
151
+ export type GoogleOptions = z.infer<typeof GoogleOptionsSchema>
152
+ export type AnthropicOptions = z.infer<typeof AnthropicOptionsSchema>
153
+ export type ModelSpecificOptions = GPT5Options | MockOptions | OpenRouterOptions | GoogleOptions | AnthropicOptions
154
+
155
+ // ============================================================================
156
+ // Model Configuration
157
+ // ============================================================================
158
+
159
+ /**
160
+ * Model configuration for LLM execution
161
+ * Belongs in resource definition (AgentDefinition, WorkflowDefinition, etc.)
162
+ */
163
+ export interface ModelConfig {
164
+ model: LLMModel
165
+ provider: 'openai' | 'anthropic' | 'openrouter' | 'google' | 'mock'
166
+ apiKey: string
167
+ temperature?: number
168
+ /** Maximum output tokens per LLM call. NOT the model's context window — see ModelInfo.maxTokens for that. */
169
+ maxOutputTokens?: number
170
+ topP?: number
171
+
172
+ /**
173
+ * Model-specific options (flat structure)
174
+ * Options are model-specific, not vendor-specific
175
+ * Available options defined in MODEL_INFO per model
176
+ * Validated at build time via validateModelOptions()
177
+ */
178
+ modelOptions?: ModelSpecificOptions
179
+ }
180
+
181
+ // ============================================================================
182
+ // Model Metadata
183
+ // ============================================================================
184
+
185
+ export interface ModelInfo {
186
+ /** Cost in cents per 1M input tokens */
187
+ inputCostPer1M: number
188
+ /** Cost in cents per 1M output tokens */
189
+ outputCostPer1M: number
190
+ /** Minimum tokens required for reliable output generation */
191
+ minTokens: number
192
+ /** Recommended tokens for production use (typically 2x minimum) */
193
+ recommendedTokens: number
194
+ /** Maximum context window size (total tokens: input + output) */
195
+ maxTokens: number
196
+ /** Model category for grouping and documentation */
197
+ category: 'reasoning' | 'standard' | 'embedding'
198
+ /** Zod schema for validating complete ModelConfig (replaces constraints + optionsSchema) */
199
+ configSchema?: z.ZodType<ModelConfig>
200
+ }
201
+
202
+ // Model configuration as of 2026-03-17
203
+ export const MODEL_INFO: Record<LLMModel, ModelInfo> = {
204
+ // OpenAI GPT-5 (Reasoning Models)
205
+ 'gpt-5': {
206
+ inputCostPer1M: 125, // $1.25 per 1M tokens
207
+ outputCostPer1M: 1000, // $10.00 per 1M tokens
208
+ minTokens: 4000, // Reasoning models need more
209
+ recommendedTokens: 8000,
210
+ maxTokens: 400000, // 400k context window
211
+ category: 'reasoning',
212
+ configSchema: GPT5ConfigSchema
213
+ },
214
+ 'gpt-5.4-mini': {
215
+ inputCostPer1M: 75, // $0.75 per 1M tokens
216
+ outputCostPer1M: 450, // $4.50 per 1M tokens
217
+ minTokens: 4000, // Reasoning models need more
218
+ recommendedTokens: 8000,
219
+ maxTokens: 400000, // 400k context window
220
+ category: 'reasoning',
221
+ configSchema: GPT5ConfigSchema
222
+ },
223
+ 'gpt-5.4-nano': {
224
+ inputCostPer1M: 20, // $0.20 per 1M tokens
225
+ outputCostPer1M: 125, // $1.25 per 1M tokens
226
+ minTokens: 4000,
227
+ recommendedTokens: 8000,
228
+ maxTokens: 400000, // 400k context window
229
+ category: 'standard',
230
+ configSchema: GPT5ConfigSchema
231
+ },
232
+ // Mock model for testing
233
+ mock: {
234
+ inputCostPer1M: 0, // Free for tests
235
+ outputCostPer1M: 0,
236
+ minTokens: 500, // Low minimum for test flexibility
237
+ recommendedTokens: 1000,
238
+ maxTokens: 100000, // 100k for testing
239
+ category: 'standard',
240
+ configSchema: MockConfigSchema
241
+ },
242
+ // OpenRouter Models (via openrouter.ai)
243
+ 'openrouter/z-ai/glm-5': {
244
+ inputCostPer1M: 72, // $0.72 per 1M tokens
245
+ outputCostPer1M: 230, // $2.30 per 1M tokens
246
+ minTokens: 4000,
247
+ recommendedTokens: 4000,
248
+ maxTokens: 202752, // 202,752 context window
249
+ category: 'standard',
250
+ configSchema: OpenRouterConfigSchema
251
+ },
252
+ // Google Gemini Models (direct SDK access via @google/genai)
253
+ 'gemini-3-flash-preview': {
254
+ inputCostPer1M: 50, // $0.50 per 1M tokens
255
+ outputCostPer1M: 300, // $3.00 per 1M tokens
256
+ minTokens: 4000,
257
+ recommendedTokens: 8000,
258
+ maxTokens: 1000000, // 1M context window
259
+ category: 'standard',
260
+ configSchema: GoogleConfigSchema
261
+ },
262
+ 'gemini-3.1-flash-lite-preview': {
263
+ inputCostPer1M: 25, // $0.25 per 1M tokens
264
+ outputCostPer1M: 150, // $1.50 per 1M tokens
265
+ minTokens: 4000,
266
+ recommendedTokens: 8000,
267
+ maxTokens: 1000000, // 1M context window
268
+ category: 'standard',
269
+ configSchema: GoogleConfigSchema
270
+ },
271
+ // Anthropic Claude Models (direct SDK access via @anthropic-ai/sdk)
272
+ 'claude-sonnet-4-5': {
273
+ inputCostPer1M: 300, // $3.00 per 1M tokens
274
+ outputCostPer1M: 1500, // $15.00 per 1M tokens
275
+ minTokens: 4000,
276
+ recommendedTokens: 8000,
277
+ maxTokens: 200000, // 200k context window
278
+ category: 'standard',
279
+ configSchema: AnthropicConfigSchema
280
+ }
281
+ }
282
+
283
+ /**
284
+ * Get model information (pricing and token requirements)
285
+ * Supports exact match and prefix matching (e.g., 'gpt-5-preview' matches 'gpt-5')
286
+ *
287
+ * @param model - Model name (e.g., 'gpt-5.4-mini')
288
+ * @returns Model info or undefined if not found
289
+ */
290
+ export function getModelInfo(model: string): ModelInfo | undefined {
291
+ // Check exact match first
292
+ if (model in MODEL_INFO) {
293
+ return MODEL_INFO[model as LLMModel]
294
+ }
295
+
296
+ // Check prefix match (e.g., gpt-5-preview -> gpt-5)
297
+ for (const [knownModel, info] of Object.entries(MODEL_INFO)) {
298
+ if (model.startsWith(knownModel)) {
299
+ return info
300
+ }
301
+ }
302
+
303
+ return undefined
304
+ }
305
+
306
+ /**
307
+ * Calculate cost in USD for LLM usage
308
+ *
309
+ * @param model - Model name (e.g., 'gpt-5.4-mini')
310
+ * @param inputTokens - Number of input tokens
311
+ * @param outputTokens - Number of output tokens
312
+ * @returns Cost in USD with full decimal precision (no rounding)
313
+ */
314
+ export function calculateCost(model: string, inputTokens: number, outputTokens: number): number {
315
+ const info = getModelInfo(model)
316
+
317
+ if (!info) {
318
+ // Unknown model - return 0 cost but log warning
319
+ console.warn(
320
+ `[CostCalculator] Unknown model '${model}' - cannot calculate cost. Available models:`,
321
+ Object.keys(MODEL_INFO)
322
+ )
323
+ return 0
324
+ }
325
+
326
+ // Calculate in USD with full precision (pricing is in cents per 1M)
327
+ const inputCostUsd = (inputTokens / 1_000_000) * (info.inputCostPer1M / 100)
328
+ const outputCostUsd = (outputTokens / 1_000_000) * (info.outputCostPer1M / 100)
329
+ const totalCostUsd = inputCostUsd + outputCostUsd
330
+
331
+ return totalCostUsd
332
+ }