@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,365 @@
1
+ /**
2
+ * Memory Manager
3
+ * Encapsulates all memory operations with ultra-simple agent API
4
+ * Agent provides strings, framework handles wrapping and auto-compaction
5
+ */
6
+
7
+ import type { AgentMemory, MemoryEntry, MemoryStatus, MemoryConstraints } from './types'
8
+ import { estimateTokens } from '../../../../platform/utils'
9
+ import type { AgentScopedLogger } from '../observability/logging'
10
+ import { AgentMemoryValidationError } from '../errors'
11
+ import {
12
+ MAX_SESSION_MEMORY_KEYS,
13
+ MAX_MEMORY_TOKENS,
14
+ MAX_SINGLE_ENTRY_TOKENS,
15
+ MAX_TOOL_RESULT_TOKENS
16
+ } from '../../../../platform/constants/limits'
17
+
18
+ /**
19
+ * Truncate tool result content if it exceeds the token limit.
20
+ * Uses character-based estimation (1 token ~ 3.5 chars, matching estimateTokens).
21
+ * Appends a notice so the agent knows data was cut.
22
+ *
23
+ * @param content - Raw tool result string
24
+ * @param maxTokens - Maximum allowed tokens
25
+ * @returns Original content if under limit, truncated content with notice otherwise
26
+ */
27
+ export function truncateToolResult(content: string, maxTokens: number): string {
28
+ const estimated = estimateTokens(content)
29
+ if (estimated <= maxTokens) return content
30
+
31
+ // Use same ratio as estimateTokens (3.5 chars per token)
32
+ const maxChars = Math.floor(maxTokens * 3.5)
33
+ const truncated = content.slice(0, maxChars)
34
+ const omitted = estimated - maxTokens
35
+ return (
36
+ truncated +
37
+ `\n\n[Response truncated — estimated ${omitted} tokens omitted. Use more specific filters to get smaller results.]`
38
+ )
39
+ }
40
+
41
+ /**
42
+ * Memory Manager - Agent memory orchestration
43
+ * Provides ultra-simple API for agents (strings only)
44
+ * Handles automatic compaction and token management
45
+ */
46
+ export class MemoryManager {
47
+ private cachedSnapshot?: AgentMemory
48
+
49
+ constructor(
50
+ private memory: AgentMemory,
51
+ private constraints: MemoryConstraints = {},
52
+ private logger?: AgentScopedLogger
53
+ ) {}
54
+
55
+ // === Agent Operations (Ultra-Simple) ===
56
+
57
+ /**
58
+ * Set session memory entry (agent provides string, framework wraps it)
59
+ * @param key - Session memory key
60
+ * @param content - String content from agent
61
+ */
62
+ set(key: string, content: string): void {
63
+ // Check single entry token limit
64
+ const entryTokens = estimateTokens(content)
65
+ if (entryTokens > MAX_SINGLE_ENTRY_TOKENS) {
66
+ const truncateTime = Date.now()
67
+ this.logger?.action(
68
+ 'memory-truncate',
69
+ `Single entry exceeds token limit (${entryTokens}/${MAX_SINGLE_ENTRY_TOKENS}): ${key}`,
70
+ 0,
71
+ truncateTime,
72
+ truncateTime,
73
+ 0
74
+ )
75
+ // Truncate content to fit limit
76
+ const maxChars = MAX_SINGLE_ENTRY_TOKENS * 4
77
+ content = content.slice(0, maxChars) + '... [truncated]'
78
+ }
79
+
80
+ this.memory.sessionMemory[key] = {
81
+ type: 'context',
82
+ content,
83
+ timestamp: Date.now(),
84
+ turnNumber: null, // Session memory entries are not turn-specific
85
+ iterationNumber: null // Session memory entries are not iteration-specific
86
+ }
87
+ }
88
+
89
+ /**
90
+ * Get session memory entry content
91
+ * @param key - Session memory key
92
+ * @returns String content if exists, undefined otherwise
93
+ */
94
+ get(key: string): string | undefined {
95
+ const entry = this.memory.sessionMemory[key]
96
+ return entry?.content
97
+ }
98
+
99
+ /**
100
+ * Delete session memory entry
101
+ * @param key - Key to delete
102
+ * @returns True if key existed and was deleted
103
+ */
104
+ delete(key: string): boolean {
105
+ if (key in this.memory.sessionMemory) {
106
+ delete this.memory.sessionMemory[key]
107
+ return true
108
+ }
109
+ return false
110
+ }
111
+
112
+ // === Framework Operations (Automatic) ===
113
+
114
+ /**
115
+ * Add entry to history (called by framework after tool results, reasoning, etc.)
116
+ * Automatically sets timestamp to current time
117
+ * @param entry - Memory entry to add (without timestamp - auto-generated)
118
+ */
119
+ addToHistory(entry: Omit<MemoryEntry, 'timestamp'>): void {
120
+ // Validate turnNumber is provided for history entries (use null for session memory)
121
+ if (entry.turnNumber === undefined && entry.type !== 'context') {
122
+ throw new AgentMemoryValidationError('turnNumber required for history entries (use null for session memory)', {
123
+ entryType: entry.type,
124
+ missingField: 'turnNumber',
125
+ iterationNumber: entry.iterationNumber
126
+ })
127
+ }
128
+
129
+ // Truncate tool-result content if it exceeds the tool result token limit
130
+ let content = entry.content
131
+ if (entry.type === 'tool-result') {
132
+ const before = content
133
+ content = truncateToolResult(content, MAX_TOOL_RESULT_TOKENS)
134
+ if (content !== before) {
135
+ const truncateTime = Date.now()
136
+ this.logger?.action(
137
+ 'memory-tool-result-truncate',
138
+ `Tool result truncated (${estimateTokens(before)} -> ${MAX_TOOL_RESULT_TOKENS} tokens)`,
139
+ entry.iterationNumber ?? 0,
140
+ truncateTime,
141
+ truncateTime,
142
+ 0
143
+ )
144
+ }
145
+ }
146
+
147
+ this.memory.history.push({
148
+ ...entry,
149
+ content,
150
+ timestamp: Date.now()
151
+ })
152
+ // Auto-compact after adding (if needed)
153
+ this.autoCompact()
154
+ }
155
+
156
+ /**
157
+ * Auto-compact history if approaching token budget
158
+ * Uses preserve-anchors strategy: keep first + recent entries
159
+ */
160
+ autoCompact(): void {
161
+ const status = this.getStatus()
162
+
163
+ // Auto-compact when at 100% of token budget
164
+ if (status.historyPercent >= 100) {
165
+ const before = this.memory.history.length
166
+
167
+ // Preserve-anchors strategy: first entry + last 10 entries
168
+ this.memory.history = [
169
+ this.memory.history[0], // First (original input)
170
+ ...this.memory.history.slice(-10) // Last 10
171
+ ]
172
+
173
+ const compactTime = Date.now()
174
+ this.logger?.action(
175
+ 'memory-auto-compact',
176
+ `Auto-compacted: ${before} -> ${this.memory.history.length} entries`,
177
+ 0,
178
+ compactTime,
179
+ compactTime,
180
+ 0
181
+ )
182
+ }
183
+ }
184
+
185
+ /**
186
+ * Enforce hard limits (called before LLM request)
187
+ * Emergency fallback if agent exceeds limits
188
+ */
189
+ enforceHardLimits(): void {
190
+ const maxSessionMemoryKeys = this.constraints.maxSessionMemoryKeys || MAX_SESSION_MEMORY_KEYS
191
+
192
+ // Check session memory count
193
+ const sessionMemoryKeys = Object.keys(this.memory.sessionMemory)
194
+ if (sessionMemoryKeys.length > maxSessionMemoryKeys) {
195
+ const limitTime = Date.now()
196
+ this.logger?.action(
197
+ 'memory-limit-exceeded',
198
+ `Session memory exceeds hard limit (${sessionMemoryKeys.length}/${maxSessionMemoryKeys})`,
199
+ 0,
200
+ limitTime,
201
+ limitTime,
202
+ 0
203
+ )
204
+
205
+ // Remove oldest entries by timestamp
206
+ const sorted = Object.entries(this.memory.sessionMemory).sort((a, b) => a[1].timestamp - b[1].timestamp)
207
+
208
+ this.memory.sessionMemory = Object.fromEntries(sorted.slice(-maxSessionMemoryKeys))
209
+ }
210
+
211
+ // Check total token budget (emergency compaction)
212
+ const status = this.getStatus()
213
+ const maxTokens = this.constraints.maxMemoryTokens || MAX_MEMORY_TOKENS
214
+
215
+ if (status.historyTokens > maxTokens) {
216
+ const before = this.memory.history.length
217
+ const emergencyStartTime = Date.now()
218
+ this.logger?.action(
219
+ 'memory-emergency',
220
+ `Total memory exceeds token budget (${status.historyTokens}/${maxTokens}), forcing emergency compaction`,
221
+ 0,
222
+ emergencyStartTime,
223
+ emergencyStartTime,
224
+ 0
225
+ )
226
+
227
+ // Emergency: Aggressively compact history
228
+ this.memory.history = [
229
+ this.memory.history[0],
230
+ ...this.memory.history.slice(-5) // Keep only last 5
231
+ ]
232
+
233
+ const emergencyEndTime = Date.now()
234
+ this.logger?.action(
235
+ 'memory-emergency-compact',
236
+ `Emergency compaction: ${before} -> ${this.memory.history.length} entries`,
237
+ 0,
238
+ emergencyStartTime,
239
+ emergencyEndTime,
240
+ emergencyEndTime - emergencyStartTime
241
+ )
242
+ }
243
+ }
244
+
245
+ /**
246
+ * Get history length (for logging and introspection)
247
+ * @returns Number of entries in history
248
+ */
249
+ getHistoryLength(): number {
250
+ return this.memory.history.length
251
+ }
252
+
253
+ /**
254
+ * Get memory status for agent awareness
255
+ * @returns Memory status with token usage and key counts
256
+ */
257
+ getStatus(): MemoryStatus {
258
+ const sessionMemoryKeys = Object.keys(this.memory.sessionMemory)
259
+
260
+ // Calculate tokens
261
+ const sessionMemoryContent = Object.values(this.memory.sessionMemory)
262
+ .map((entry) => entry.content)
263
+ .join('')
264
+ const historyContent = this.memory.history.map((entry) => entry.content).join('')
265
+ const sessionMemoryTokens = estimateTokens(sessionMemoryContent)
266
+ const historyTokens = estimateTokens(historyContent)
267
+ const totalTokens = sessionMemoryTokens + historyTokens
268
+
269
+ // Token budget
270
+ const tokenBudget = this.constraints.maxMemoryTokens || MAX_MEMORY_TOKENS
271
+ const sessionMemoryLimit = this.constraints.maxSessionMemoryKeys || MAX_SESSION_MEMORY_KEYS
272
+
273
+ return {
274
+ sessionMemoryKeys: sessionMemoryKeys.length,
275
+ sessionMemoryLimit,
276
+ currentKeys: sessionMemoryKeys,
277
+ historyPercent: Math.round((totalTokens / tokenBudget) * 100),
278
+ historyTokens: totalTokens,
279
+ tokenBudget
280
+ }
281
+ }
282
+
283
+ /**
284
+ * Create memory snapshot for persistence
285
+ * Caches snapshot internally for later retrieval
286
+ * @returns Deep copy of current memory state
287
+ */
288
+ toSnapshot(): AgentMemory {
289
+ this.cachedSnapshot = structuredClone(this.memory)
290
+ return this.cachedSnapshot
291
+ }
292
+
293
+ /**
294
+ * Get cached memory snapshot
295
+ * Returns snapshot created by toSnapshot()
296
+ * @returns Cached snapshot (undefined if toSnapshot() not called yet)
297
+ */
298
+ getSnapshot(): AgentMemory | undefined {
299
+ return this.cachedSnapshot
300
+ }
301
+
302
+ /**
303
+ * Build context string for LLM
304
+ * Serializes sessionmemory + history memory with clear sections
305
+ * Shows current iteration entries FIRST (reverse chronological) for LLM attention
306
+ * @param currentIteration - Current iteration number (0 = pre-iteration)
307
+ * @param currentTurn - Current turn number (optional, for session context filtering)
308
+ * @returns Formatted memory context for LLM prompt
309
+ */
310
+ toContext(currentIteration: number, currentTurn?: number): string {
311
+ const status = this.getStatus()
312
+
313
+ // Split by turn and iteration number
314
+ // DUAL FILTERING: Turn scope first (if provided), then iteration scope
315
+ // null iterations are session memory entries (excluded from history context)
316
+ // undefined/null turnNumbers are treated as legacy entries (pre-migration) or one-off executions
317
+ const currentContext = this.memory.history
318
+ .filter(
319
+ (entry) =>
320
+ (!currentTurn || entry.turnNumber === currentTurn || entry.turnNumber === undefined) &&
321
+ entry.iterationNumber === currentIteration
322
+ )
323
+ .reverse() // Most recent first (LLM positional bias)
324
+
325
+ const earlierContext = this.memory.history.filter(
326
+ (entry) =>
327
+ (!currentTurn || entry.turnNumber === currentTurn || entry.turnNumber === undefined) &&
328
+ entry.iterationNumber !== null &&
329
+ entry.iterationNumber < currentIteration
330
+ )
331
+ // Earlier entries stay chronological
332
+
333
+ // Format entry with simple label
334
+ const formatEntry = (entry: MemoryEntry): string => {
335
+ const label = `[${entry.type.toUpperCase()}]`
336
+ return `${label}\n${entry.content}`
337
+ }
338
+
339
+ // Serialize session memory
340
+ const sessionMemoryContext = Object.entries(this.memory.sessionMemory)
341
+ .map(([key, entry]) => `[SESSION:${key}]\n${entry.content}`)
342
+ .join('\n\n')
343
+
344
+ const currentSection = currentContext.map(formatEntry).join('\n\n')
345
+ const earlierSection =
346
+ earlierContext.length > 0 ? earlierContext.map(formatEntry).join('\n\n') : '(no earlier context)'
347
+
348
+ return `
349
+ === MEMORY STATUS ===
350
+ ${status.sessionMemoryKeys}/${status.sessionMemoryLimit} session keys
351
+ ${status.historyPercent}% of token budget
352
+
353
+ === SESSION MEMORY (Persists for conversation) ===
354
+ ${sessionMemoryContext || '(empty)'}
355
+
356
+ === ITERATION ${currentIteration} - CURRENT CONTEXT ===
357
+
358
+ ${currentSection}
359
+
360
+ === EARLIER CONTEXT ===
361
+
362
+ ${earlierSection}
363
+ `.trim()
364
+ }
365
+ }
@@ -0,0 +1,66 @@
1
+ /**
2
+ * Memory Phase Processor
3
+ * Handles memory operations from LLM responses
4
+ * Phase 2 of iteration: REASON -> MEMORY -> ACT
5
+ */
6
+
7
+ import type { LLMIterationResponse } from '../reasoning/types'
8
+ import type { MemoryManager } from './manager'
9
+ import type { AgentScopedLogger } from '../observability/logging'
10
+ import { validateMemoryKeyOwnership } from './utils'
11
+
12
+ /**
13
+ * Process memory operations from LLM response
14
+ * Applies agent-directed memory management (set/delete)
15
+ *
16
+ * @param memoryManager - Memory manager instance
17
+ * @param response - LLM iteration response with optional memoryOps
18
+ * @param logger - Scoped logger for memory operations
19
+ * @param iteration - Current iteration number
20
+ */
21
+ export async function processMemory(
22
+ memoryManager: MemoryManager,
23
+ response: LLMIterationResponse,
24
+ logger: AgentScopedLogger,
25
+ iteration: number
26
+ ): Promise<void> {
27
+ if (!response.memoryOps) return
28
+
29
+ const { memoryOps } = response
30
+
31
+ // Apply set operations with domain validation
32
+ if (memoryOps.set) {
33
+ for (const [key, content] of Object.entries(memoryOps.set)) {
34
+ // Validate ownership - skip if system-managed
35
+ if (!validateMemoryKeyOwnership(key, logger, iteration)) {
36
+ continue
37
+ }
38
+
39
+ const startTime = Date.now()
40
+ // Auto-stringify non-string values (arrays, objects, etc.)
41
+ const stringValue = typeof content === 'string' ? content : JSON.stringify(content)
42
+ memoryManager.set(key, stringValue)
43
+ const endTime = Date.now()
44
+ logger.action('memory-set', `Set: ${key}`, iteration, startTime, endTime, endTime - startTime)
45
+ }
46
+ }
47
+
48
+ // Apply delete operations with domain validation
49
+ if (memoryOps.delete) {
50
+ for (const key of memoryOps.delete) {
51
+ // Validate ownership - skip if system-managed
52
+ if (!validateMemoryKeyOwnership(key, logger, iteration)) {
53
+ continue
54
+ }
55
+
56
+ const startTime = Date.now()
57
+ const deleted = memoryManager.delete(key)
58
+ const endTime = Date.now()
59
+ if (deleted) {
60
+ logger.action('memory-delete', `Deleted: ${key}`, iteration, startTime, endTime, endTime - startTime)
61
+ } else {
62
+ logger.action('memory-delete-missing', `Attempted to delete non-existent key: ${key}`, iteration, startTime, endTime, endTime - startTime)
63
+ }
64
+ }
65
+ }
66
+ }
@@ -0,0 +1,90 @@
1
+ /**
2
+ * Memory type definitions
3
+ * Types for agent memory management with semantic entry types
4
+ */
5
+
6
+ /**
7
+ * Semantic memory entry types
8
+ * Use-case agnostic types that describe the purpose of each entry
9
+ * Memory types mirror action types for clarity and filtering
10
+ */
11
+ export type MemoryEntryType =
12
+ | 'context' // Pre-loaded context entry (before execution)
13
+ | 'input' // User request or event payload
14
+ | 'reasoning' // LLM thought process
15
+ | 'tool-result' // Result from tool execution
16
+ | 'delegation-result' // Result from sub-agent delegation (future)
17
+ | 'error' // Error from failed action (tool error, validation error, etc.)
18
+
19
+ /**
20
+ * Memory entry - represents a single entry in agent memory
21
+ * Stored in agent memory, translated by adapters to vendor-specific formats
22
+ */
23
+ export interface MemoryEntry {
24
+ type: MemoryEntryType
25
+ content: string
26
+ timestamp: number
27
+ turnNumber: number | null // Which turn/execution created this entry (1, 2, 3... for session turns, null for session memory or one-off executions)
28
+ iterationNumber: number | null // Which iteration created this entry (0 = pre-iteration input, null = session memory/non-iteration-specific)
29
+ }
30
+
31
+ /**
32
+ * Agent memory - Self-orchestrated memory with session + working storage
33
+ * Agent has full control over what persists, framework handles auto-compaction
34
+ */
35
+ export interface AgentMemory {
36
+ /**
37
+ * Session memory - Persists for session/conversation duration
38
+ * Never auto-trimmed by framework
39
+ * Agent-managed key-value store for critical information
40
+ * Agent provides strings, framework wraps in MemoryEntry
41
+ */
42
+ sessionMemory: Record<string, MemoryEntry>
43
+
44
+ /**
45
+ * Working memory - Execution history
46
+ * Automatically compacted by framework when needed
47
+ * Agent doesn't control compaction
48
+ */
49
+ history: MemoryEntry[]
50
+ }
51
+
52
+ /**
53
+ * Memory operations - Agent-directed memory management
54
+ * Agent provides string content, framework wraps in MemoryEntry structure
55
+ */
56
+ export interface MemoryOperations {
57
+ /**
58
+ * Add/update session memory
59
+ * Agent provides string content, framework wraps in MemoryEntry
60
+ */
61
+ set?: Record<string, string> // key -> content string
62
+
63
+ /**
64
+ * Remove from session memory
65
+ */
66
+ delete?: string[] // array of keys to delete
67
+ }
68
+
69
+ /**
70
+ * Memory status for agent awareness
71
+ */
72
+ export interface MemoryStatus {
73
+ // Session memory
74
+ sessionMemoryKeys: number // Current count
75
+ sessionMemoryLimit: number // Max allowed (default: 10)
76
+ currentKeys: string[] // List of keys currently stored
77
+
78
+ // History memory (token-based)
79
+ historyPercent: number // 0-100 (percentage of token budget used)
80
+ historyTokens: number // Current token count
81
+ tokenBudget: number // Total token budget for memory
82
+ }
83
+
84
+ /**
85
+ * Memory constraints (optional limits)
86
+ */
87
+ export interface MemoryConstraints {
88
+ maxSessionMemoryKeys?: number // Max session memory keys (default: 10)
89
+ maxMemoryTokens?: number // Total token budget for all memory (default: 14000)
90
+ }
@@ -0,0 +1,134 @@
1
+ /**
2
+ * Memory utilities
3
+ * Helper functions for memory manipulation (formatting, snapshots)
4
+ */
5
+
6
+ import type { AgentMemory } from './types'
7
+ import type { ExecutionContext } from '../../base/types'
8
+ import type { SupabaseClient } from '../../../../supabase'
9
+
10
+ /**
11
+ * Load session memory from database
12
+ *
13
+ * Standard pattern for preloadMemory callback:
14
+ * - If sessionId exists: restore memory snapshot from database
15
+ * - If no sessionId: return fresh memory (one-off task)
16
+ * - Handles errors gracefully by returning empty memory
17
+ *
18
+ * @param supabaseClient - Supabase client instance
19
+ * @param context - Execution context (must include organizationId, optional sessionId)
20
+ * @returns Agent memory (restored from DB or fresh)
21
+ *
22
+ * @example
23
+ * ```typescript
24
+ * import { loadSessionMemory } from '@repo/core'
25
+ * import { supabaseClient } from '@repo/core/server'
26
+ *
27
+ * async function preloadMemory(context: ExecutionContext): Promise<AgentMemory> {
28
+ * return loadSessionMemory(supabaseClient, context)
29
+ * }
30
+ * ```
31
+ */
32
+ export async function loadSessionMemory(
33
+ supabaseClient: SupabaseClient,
34
+ context: ExecutionContext
35
+ ): Promise<AgentMemory> {
36
+ // If session turn, restore memory snapshot from database
37
+ if (context.sessionId) {
38
+ const { data: session, error } = await supabaseClient
39
+ .from('sessions')
40
+ .select('memory_snapshot')
41
+ .eq('session_id', context.sessionId)
42
+ .eq('organization_id', context.organizationId)
43
+ .single()
44
+
45
+ if (error) {
46
+ console.error('Failed to load session from DB', {
47
+ sessionId: context.sessionId,
48
+ error: error.message
49
+ })
50
+ return { sessionMemory: {}, history: [] }
51
+ }
52
+
53
+ const result = (session?.memory_snapshot as unknown as AgentMemory) || { sessionMemory: {}, history: [] }
54
+ return result
55
+ }
56
+
57
+ // One-off task: start with fresh memory
58
+ return { sessionMemory: {}, history: [] }
59
+ }
60
+
61
+ // ============================================================================
62
+ // Memory Helpers
63
+ // Utility functions for memory manipulation during action execution
64
+ // ============================================================================
65
+
66
+ import type { ToolCallAction } from '../actions/types'
67
+ import type { MemoryManager } from './manager'
68
+ import type { AgentScopedLogger } from '../observability/logging'
69
+ import { isToolOwnedKey, isActionOwnedKey, getKeyOwner } from './domains'
70
+
71
+ /**
72
+ * Add tool execution error to memory
73
+ * Errors are stored as 'error' type entries and returned to LLM as tool results
74
+ * This allows the LLM to recover from errors and try alternative approaches
75
+ *
76
+ * @param memoryManager - Memory manager to add error to
77
+ * @param action - Tool call that failed
78
+ * @param errorMessage - Error description
79
+ * @param iteration - Iteration number when error occurred
80
+ * @param turnNumber - Turn number when error occurred (optional, defaults to null for one-off executions)
81
+ * @param metadata - Structured error metadata from ToolingError (optional)
82
+ */
83
+ export function addToolError(
84
+ memoryManager: MemoryManager,
85
+ action: ToolCallAction,
86
+ errorMessage: string,
87
+ iteration: number,
88
+ turnNumber: number | null = null,
89
+ metadata?: {
90
+ errorType?: string
91
+ severity?: string
92
+ isRetryable?: boolean
93
+ }
94
+ ): void {
95
+ memoryManager.addToHistory({
96
+ type: 'error',
97
+ content: JSON.stringify({
98
+ error: errorMessage,
99
+ toolName: action.name,
100
+ toolCallId: action.id,
101
+ ...(metadata?.errorType && { errorType: metadata.errorType }),
102
+ ...(metadata?.severity && { severity: metadata.severity }),
103
+ ...(metadata?.isRetryable !== undefined && { isRetryable: metadata.isRetryable })
104
+ }),
105
+ turnNumber,
106
+ iterationNumber: iteration
107
+ })
108
+ }
109
+
110
+ /**
111
+ * Validate memory key ownership
112
+ * Prevents LLM from updating system-managed keys (tool-owned or action-owned)
113
+ *
114
+ * @param key - Memory key to validate
115
+ * @param logger - Logger for rejected operations
116
+ * @param iteration - Current iteration number
117
+ * @returns true if key can be updated by LLM, false if rejected
118
+ */
119
+ export function validateMemoryKeyOwnership(key: string, logger: AgentScopedLogger, iteration: number): boolean {
120
+ // VALIDATION: Prevent LLM from updating system-managed keys
121
+ if (isToolOwnedKey(key) || isActionOwnedKey(key)) {
122
+ const owner = getKeyOwner(key)
123
+ logger.action(
124
+ 'memory-set-rejected',
125
+ `Rejected LLM update to ${owner}-managed key: ${key}`,
126
+ iteration,
127
+ Date.now(),
128
+ Date.now(),
129
+ 0
130
+ )
131
+ return false
132
+ }
133
+ return true
134
+ }