@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,205 @@
1
+ /**
2
+ * Action Executor
3
+ * Executes individual actions (tool calls, delegation)
4
+ */
5
+
6
+ import type { IterationContext } from '../core/types'
7
+ import type { ToolCallAction } from './types'
8
+ import { addToolError } from '../memory/utils'
9
+ import { ToolingError, timeoutError } from '../../tools/types'
10
+ import { DEFAULT_TOOL_TIMEOUT } from '../../../../platform/constants/timeouts'
11
+
12
+ /**
13
+ * Execute a single tool call action
14
+ * Handles tool lookup, validation, execution, and error handling
15
+ *
16
+ * Results (success or error) are added to memory as tool-result messages
17
+ *
18
+ * @param iterationContext - Agent execution context
19
+ * @param action - Tool call action to execute
20
+ */
21
+ export async function executeToolCall(iterationContext: IterationContext, action: ToolCallAction): Promise<void> {
22
+ // Emit tool call event (before execution)
23
+ await iterationContext.executionContext.onMessageEvent?.({
24
+ type: 'agent:tool_call',
25
+ toolName: action.name,
26
+ args: action.input
27
+ })
28
+
29
+ // Track tool call timing
30
+ const toolStartTime = Date.now()
31
+
32
+ // Look up tool via registry (O(1) instead of O(n))
33
+ const tool = iterationContext.toolRegistry.get(action.name)
34
+ if (!tool) {
35
+ const toolEndTime = Date.now()
36
+ const toolDuration = toolEndTime - toolStartTime
37
+
38
+ // Emit tool error event
39
+ await iterationContext.executionContext.onMessageEvent?.({
40
+ type: 'agent:tool_result',
41
+ toolName: action.name,
42
+ success: false,
43
+ error: `Tool '${action.name}' not found`
44
+ })
45
+
46
+ // Log tool call event (failed - tool not found)
47
+ iterationContext.logger.toolCall(
48
+ action.name,
49
+ iterationContext.iteration,
50
+ toolStartTime,
51
+ toolEndTime,
52
+ toolDuration,
53
+ false,
54
+ `Tool '${action.name}' not found`,
55
+ action.input,
56
+ undefined
57
+ )
58
+
59
+ addToolError(
60
+ iterationContext.memoryManager,
61
+ action,
62
+ `Tool '${action.name}' not found`,
63
+ iterationContext.iteration,
64
+ iterationContext.executionContext.sessionTurnNumber ?? null
65
+ )
66
+ return
67
+ }
68
+
69
+ try {
70
+ // Validate input against tool's schema
71
+ const validatedInput = tool.inputSchema.parse(action.input)
72
+
73
+ // Compose timeout signal: per-tool timeout OR execution ceiling, whichever fires first
74
+ const toolTimeout = tool.timeout ?? DEFAULT_TOOL_TIMEOUT
75
+ const signals: AbortSignal[] = [AbortSignal.timeout(toolTimeout)]
76
+ if (iterationContext.executionContext.signal) {
77
+ signals.push(iterationContext.executionContext.signal)
78
+ }
79
+ const composedSignal = AbortSignal.any(signals)
80
+
81
+ // Execute tool with Promise.race to enforce timeout even if tool ignores the signal
82
+ const rawResult = await Promise.race([
83
+ tool.execute({
84
+ input: validatedInput,
85
+ executionContext: iterationContext.executionContext,
86
+ iterationContext,
87
+ signal: composedSignal
88
+ }),
89
+ new Promise<never>((_, reject) => {
90
+ if (composedSignal.aborted) {
91
+ reject(timeoutError(action.name))
92
+ return
93
+ }
94
+ composedSignal.addEventListener('abort', () => reject(timeoutError(action.name)), { once: true })
95
+ })
96
+ ])
97
+
98
+ // Validate output against schema
99
+ const validatedResult = tool.outputSchema.parse(rawResult)
100
+
101
+ const toolEndTime = Date.now()
102
+ const toolDuration = toolEndTime - toolStartTime
103
+
104
+ // Emit tool success event
105
+ await iterationContext.executionContext.onMessageEvent?.({
106
+ type: 'agent:tool_result',
107
+ toolName: action.name,
108
+ success: true,
109
+ result: validatedResult
110
+ })
111
+
112
+ // Log tool call event (success)
113
+ iterationContext.logger.toolCall(
114
+ action.name,
115
+ iterationContext.iteration,
116
+ toolStartTime,
117
+ toolEndTime,
118
+ toolDuration,
119
+ true,
120
+ undefined,
121
+ action.input,
122
+ validatedResult
123
+ )
124
+
125
+ // Add validated result to memory
126
+ const memoryStartTime = Date.now()
127
+
128
+ iterationContext.memoryManager.addToHistory({
129
+ type: 'tool-result',
130
+ content: JSON.stringify(validatedResult),
131
+ turnNumber: iterationContext.executionContext.sessionTurnNumber ?? null,
132
+ iterationNumber: iterationContext.iteration
133
+ })
134
+
135
+ const memoryEndTime = Date.now()
136
+ const memoryDuration = memoryEndTime - memoryStartTime
137
+
138
+ iterationContext.logger.action(
139
+ 'memory-tool-result',
140
+ `Stored tool-result for ${action.name} (${JSON.stringify(validatedResult).length} chars), history size: ${iterationContext.memoryManager.getHistoryLength()}`,
141
+ iterationContext.iteration,
142
+ memoryStartTime,
143
+ memoryEndTime,
144
+ memoryDuration
145
+ )
146
+ } catch (error) {
147
+ const errorMessage = error instanceof Error ? error.message : String(error)
148
+ const toolEndTime = Date.now()
149
+ const toolDuration = toolEndTime - toolStartTime
150
+
151
+ // Emit tool error event
152
+ await iterationContext.executionContext.onMessageEvent?.({
153
+ type: 'agent:tool_result',
154
+ toolName: action.name,
155
+ success: false,
156
+ error: errorMessage
157
+ })
158
+
159
+ // Log tool call event (failed)
160
+ iterationContext.logger.toolCall(
161
+ action.name,
162
+ iterationContext.iteration,
163
+ toolStartTime,
164
+ toolEndTime,
165
+ toolDuration,
166
+ false,
167
+ errorMessage,
168
+ action.input,
169
+ undefined
170
+ )
171
+
172
+ // Add error to memory (don't throw - continue with other actions)
173
+ const memoryStartTime = Date.now()
174
+
175
+ // Extract structured metadata if available
176
+ const metadata = error instanceof ToolingError
177
+ ? {
178
+ errorType: error.errorType,
179
+ severity: error.severity,
180
+ isRetryable: error.isRetryable()
181
+ }
182
+ : undefined
183
+
184
+ addToolError(
185
+ iterationContext.memoryManager,
186
+ action,
187
+ errorMessage,
188
+ iterationContext.iteration,
189
+ iterationContext.executionContext.sessionTurnNumber ?? null,
190
+ metadata
191
+ )
192
+
193
+ const memoryEndTime = Date.now()
194
+ const memoryDuration = memoryEndTime - memoryStartTime
195
+
196
+ iterationContext.logger.action(
197
+ 'memory-tool-error',
198
+ `Stored error for ${action.name}: ${errorMessage}, history size: ${iterationContext.memoryManager.getHistoryLength()}`,
199
+ iterationContext.iteration,
200
+ memoryStartTime,
201
+ memoryEndTime,
202
+ memoryDuration
203
+ )
204
+ }
205
+ }
@@ -0,0 +1,230 @@
1
+ /**
2
+ * Navigate Knowledge Action Executor
3
+ * Loads knowledge nodes and registers their tools dynamically
4
+ *
5
+ * Features:
6
+ * - Dynamic tool registration with duplicate checking
7
+ * - Memory scoping (session vs task)
8
+ * - Hierarchical navigation (flattens child nodes into main map)
9
+ * - Cross-turn persistence (tracks loaded nodes in sessionMemory)
10
+ */
11
+
12
+ import type { IterationContext } from '../core/types'
13
+ import type { NavigateKnowledgeAction } from './types'
14
+ import type { KnowledgeMapState } from '../knowledge-map/types'
15
+
16
+ /**
17
+ * Execute a navigate-knowledge action
18
+ * Loads knowledge node content and registers tools with the agent
19
+ *
20
+ * @param iterationContext - Agent execution context
21
+ * @param action - Navigate knowledge action to execute
22
+ */
23
+ export async function executeNavigateKnowledge(
24
+ iterationContext: IterationContext,
25
+ action: NavigateKnowledgeAction
26
+ ): Promise<void> {
27
+ const { knowledgeMap, toolRegistry, memoryManager, executionContext, iteration, logger } = iterationContext
28
+
29
+ // Emit navigate knowledge event (before execution)
30
+ await executionContext.onMessageEvent?.({
31
+ type: 'agent:tool_call',
32
+ toolName: 'navigate_knowledge',
33
+ args: { nodeId: action.nodeId }
34
+ })
35
+
36
+ const startTime = Date.now()
37
+
38
+ try {
39
+ // Validate knowledge map exists
40
+ if (!knowledgeMap) {
41
+ throw new Error('Knowledge map not available - agent does not have knowledge navigation enabled')
42
+ }
43
+
44
+ // Look up knowledge node
45
+ const node = knowledgeMap.nodes[action.nodeId]
46
+ if (!node) {
47
+ throw new Error(`Knowledge node '${action.nodeId}' not found in knowledge map`)
48
+ }
49
+
50
+ // Load knowledge content
51
+ const content = await node.load(executionContext)
52
+
53
+ // Cache prompt and set loaded flag (minimal caching)
54
+ node.loaded = true
55
+ node.prompt = content.prompt
56
+
57
+ // Flatten child nodes into main knowledge map (hierarchical navigation)
58
+ let childNodesCount = 0
59
+ if (content.nodes && Object.keys(content.nodes).length > 0) {
60
+ for (const [childId, childNode] of Object.entries(content.nodes)) {
61
+ if (!knowledgeMap.nodes[childId]) {
62
+ knowledgeMap.nodes[childId] = childNode
63
+ childNodesCount++
64
+ }
65
+ }
66
+
67
+ if (childNodesCount > 0) {
68
+ logger.action(
69
+ 'knowledge-nodes-discovered',
70
+ `Discovered ${childNodesCount} child nodes from '${action.nodeId}': ${Object.keys(content.nodes).join(', ')}`,
71
+ iteration,
72
+ startTime,
73
+ startTime,
74
+ 0
75
+ )
76
+ }
77
+ }
78
+
79
+ // Register tools if provided (skip tools that are already registered)
80
+ if (content.tools && content.tools.length > 0) {
81
+ const newTools: string[] = []
82
+ const skippedTools: string[] = []
83
+
84
+ for (const tool of content.tools) {
85
+ if (toolRegistry.has(tool.name)) {
86
+ skippedTools.push(tool.name)
87
+ } else {
88
+ toolRegistry.set(tool.name, tool)
89
+ newTools.push(tool.name)
90
+ }
91
+ }
92
+
93
+ if (newTools.length > 0) {
94
+ logger.action(
95
+ 'knowledge-tools-registered',
96
+ `Registered ${newTools.length} tools from knowledge node '${action.nodeId}': ${newTools.join(', ')}`,
97
+ iteration,
98
+ startTime,
99
+ startTime,
100
+ 0
101
+ )
102
+ }
103
+
104
+ if (skippedTools.length > 0) {
105
+ logger.action(
106
+ 'knowledge-tools-skipped',
107
+ `Skipped ${skippedTools.length} already-registered tools: ${skippedTools.join(', ')}`,
108
+ iteration,
109
+ startTime,
110
+ startTime,
111
+ 0
112
+ )
113
+ }
114
+ }
115
+
116
+ // Track loaded node in sessionMemory state for cross-turn persistence
117
+ // Note: Prompt is now cached on node.content and serialized into system prompt
118
+ // No separate sessionMemory/history storage needed
119
+ const stateKey = 'knowledge-map-state'
120
+ const existingState = memoryManager.get(stateKey)
121
+ let state: KnowledgeMapState
122
+
123
+ if (existingState) {
124
+ try {
125
+ state = JSON.parse(existingState) as KnowledgeMapState
126
+ } catch {
127
+ // Invalid state, create new
128
+ state = { loadedNodes: [], version: 1 }
129
+ }
130
+ } else {
131
+ state = { loadedNodes: [], version: 1 }
132
+ }
133
+
134
+ // Add node to loaded list if not already present
135
+ if (!state.loadedNodes.includes(action.nodeId)) {
136
+ state.loadedNodes.push(action.nodeId)
137
+ memoryManager.set(stateKey, JSON.stringify(state))
138
+
139
+ logger.action(
140
+ 'knowledge-state-updated',
141
+ `Added '${action.nodeId}' to loaded nodes (total: ${state.loadedNodes.length})`,
142
+ iteration,
143
+ startTime,
144
+ startTime,
145
+ 0
146
+ )
147
+ }
148
+
149
+ const endTime = Date.now()
150
+ const duration = endTime - startTime
151
+
152
+ // Emit success event
153
+ await executionContext.onMessageEvent?.({
154
+ type: 'agent:tool_result',
155
+ toolName: 'navigate_knowledge',
156
+ success: true,
157
+ result: {
158
+ nodeId: action.nodeId,
159
+ toolsLoaded: content.tools?.length ?? 0,
160
+ childNodesDiscovered: childNodesCount,
161
+ promptLength: content.prompt.length
162
+ }
163
+ })
164
+
165
+ // Log tool call event (success)
166
+ logger.toolCall(
167
+ 'navigate_knowledge',
168
+ iteration,
169
+ startTime,
170
+ endTime,
171
+ duration,
172
+ true,
173
+ undefined,
174
+ { nodeId: action.nodeId },
175
+ {
176
+ nodeId: action.nodeId,
177
+ toolsLoaded: content.tools?.length ?? 0,
178
+ childNodesDiscovered: childNodesCount,
179
+ promptLength: content.prompt.length
180
+ }
181
+ )
182
+
183
+ // Build result message
184
+ let resultMessage = `Knowledge node '${action.nodeId}' loaded successfully. ${content.tools?.length ?? 0} tools registered.`
185
+ if (childNodesCount > 0) {
186
+ resultMessage += ` ${childNodesCount} child nodes discovered.`
187
+ }
188
+
189
+ // Add success result to memory
190
+ memoryManager.addToHistory({
191
+ type: 'tool-result',
192
+ content: resultMessage,
193
+ turnNumber: executionContext.sessionTurnNumber ?? null,
194
+ iterationNumber: iteration
195
+ })
196
+ } catch (error) {
197
+ const errorMessage = error instanceof Error ? error.message : String(error)
198
+ const endTime = Date.now()
199
+ const duration = endTime - startTime
200
+
201
+ // Emit error event
202
+ await executionContext.onMessageEvent?.({
203
+ type: 'agent:tool_result',
204
+ toolName: 'navigate_knowledge',
205
+ success: false,
206
+ error: errorMessage
207
+ })
208
+
209
+ // Log tool call event (failed)
210
+ logger.toolCall(
211
+ 'navigate_knowledge',
212
+ iteration,
213
+ startTime,
214
+ endTime,
215
+ duration,
216
+ false,
217
+ errorMessage,
218
+ { nodeId: action.nodeId },
219
+ undefined
220
+ )
221
+
222
+ // Add error to memory
223
+ memoryManager.addToHistory({
224
+ type: 'error',
225
+ content: `Error loading knowledge node '${action.nodeId}': ${errorMessage}`,
226
+ turnNumber: executionContext.sessionTurnNumber ?? null,
227
+ iterationNumber: iteration
228
+ })
229
+ }
230
+ }
@@ -0,0 +1,116 @@
1
+ /**
2
+ * Action Phase Processor
3
+ * Orchestrates execution of LLM-planned actions
4
+ */
5
+
6
+ import type { IterationContext } from '../core/types'
7
+ import type { LLMIterationResponse } from '../reasoning/types'
8
+ import type { AgentAction, ToolCallAction } from './types'
9
+ import { executeToolCall } from './executor'
10
+ import { executeNavigateKnowledge } from './navigate-knowledge-executor'
11
+
12
+ /**
13
+ * Validate action sequence for correctness
14
+ * Ensures no invalid patterns that would cause undefined behavior
15
+ *
16
+ * Rules:
17
+ * - No multiple 'complete' actions
18
+ * - 'complete' cannot mix with 'navigate-knowledge' (loading knowledge without
19
+ * reasoning about it is always wasteful — the LLM should iterate instead)
20
+ * - 'complete' CAN mix with 'tool-call' (side-effect tools like navigate_user,
21
+ * update_filters are fire-and-forget — tool calls execute first via
22
+ * Promise.allSettled before completion is signaled)
23
+ * - 'message' actions ARE allowed before 'complete' (user-facing communication)
24
+ *
25
+ * @param actions - Action array to validate
26
+ * @throws Error if validation fails
27
+ */
28
+ function validateActionSequence(actions: AgentAction[]): void {
29
+ // Count completion actions
30
+ const completeActions = actions.filter((a) => a.type === 'complete')
31
+
32
+ // Rule 1: No duplicate completions
33
+ if (completeActions.length > 1) {
34
+ throw new Error('Multiple complete actions not allowed in single iteration')
35
+ }
36
+
37
+ // Rule 2: Completion cannot mix with navigate-knowledge
38
+ // (tool-call + complete is allowed — side-effect tools execute before completion)
39
+ if (completeActions.length === 1) {
40
+ const hasNavigateKnowledge = actions.some((a) => a.type === 'navigate-knowledge')
41
+ if (hasNavigateKnowledge) {
42
+ throw new Error('Complete action cannot mix with navigate-knowledge actions')
43
+ }
44
+ }
45
+ }
46
+
47
+ /**
48
+ * Process all actions from LLM response
49
+ * Executes tool calls in parallel, handles completion, and messages sequentially
50
+ *
51
+ * Tool calls are parallelized using Promise.allSettled() for performance:
52
+ * - Independent tool calls execute concurrently (up to 5x faster)
53
+ * - Partial failures don't abort successful tools
54
+ * - Results added to memory as they complete
55
+ *
56
+ * Other actions (navigate-knowledge, message, complete) remain sequential
57
+ * because they are order-dependent.
58
+ *
59
+ * @param iterationContext - Agent execution context
60
+ * @param response - LLM response with actions to execute
61
+ * @returns Object with shouldComplete flag (no finalAnswer - generated in completion phase)
62
+ */
63
+ export async function processActions(
64
+ iterationContext: IterationContext,
65
+ response: LLMIterationResponse
66
+ ): Promise<{ shouldComplete: boolean }> {
67
+ // Validate action sequence before processing
68
+ validateActionSequence(response.nextActions)
69
+
70
+ let shouldComplete = false
71
+
72
+ // Group actions by parallelizability
73
+ const toolCalls: ToolCallAction[] = []
74
+ const otherActions: AgentAction[] = []
75
+
76
+ for (const action of response.nextActions) {
77
+ if (action.type === 'tool-call') {
78
+ toolCalls.push(action)
79
+ } else {
80
+ otherActions.push(action)
81
+ }
82
+ }
83
+
84
+ // Execute tool calls in parallel (if any)
85
+ // Uses Promise.allSettled() for partial success handling:
86
+ // - If 4/5 tools succeed, we get those results
87
+ // - Each tool handles errors independently and adds to memory
88
+ // - No result aggregation needed (each tool call adds to memory directly)
89
+ if (toolCalls.length > 0) {
90
+ await Promise.allSettled(toolCalls.map((action) => executeToolCall(iterationContext, action)))
91
+ }
92
+
93
+ // Execute other actions sequentially (order matters)
94
+ for (const action of otherActions) {
95
+ switch (action.type) {
96
+ case 'navigate-knowledge':
97
+ await executeNavigateKnowledge(iterationContext, action)
98
+ break
99
+
100
+ case 'complete':
101
+ shouldComplete = true
102
+ break
103
+
104
+ case 'message': {
105
+ // Emit assistant message event (immediate persistence + streaming)
106
+ await iterationContext.executionContext.onMessageEvent?.({
107
+ type: 'assistant_message',
108
+ text: action.text
109
+ })
110
+ break
111
+ }
112
+ }
113
+ }
114
+
115
+ return { shouldComplete }
116
+ }
@@ -0,0 +1,70 @@
1
+ /**
2
+ * Action Type Definitions
3
+ * All action-related types and validation schemas
4
+ */
5
+
6
+ import { z } from 'zod'
7
+
8
+ /**
9
+ * Agent action types
10
+ * Discriminated union for type-safe action handling
11
+ */
12
+ export type AgentAction =
13
+ | ToolCallAction
14
+ | CompleteAction
15
+ | MessageAction
16
+ | NavigateKnowledgeAction
17
+
18
+ export interface ToolCallAction {
19
+ type: 'tool-call'
20
+ id: string // Unique ID for tracking tool call/result pairs
21
+ name: string // Tool name
22
+ input: Record<string, unknown> // Tool input (validated against tool's inputSchema)
23
+ }
24
+
25
+ export interface CompleteAction {
26
+ type: 'complete'
27
+ }
28
+
29
+ export interface MessageAction {
30
+ type: 'message'
31
+ text: string // User-facing message text
32
+ }
33
+
34
+ export interface NavigateKnowledgeAction {
35
+ type: 'navigate-knowledge'
36
+ id: string // Unique ID for tracking action/result pairs
37
+ nodeId: string // Knowledge node identifier
38
+ }
39
+
40
+ /**
41
+ * Zod schemas for runtime validation
42
+ */
43
+ export const ToolCallActionSchema = z.object({
44
+ type: z.literal('tool-call'),
45
+ id: z.string(),
46
+ name: z.string(),
47
+ input: z.any() // Use z.any() instead of z.unknown() for JSON Schema compatibility
48
+ })
49
+
50
+ export const CompleteActionSchema = z.object({
51
+ type: z.literal('complete')
52
+ })
53
+
54
+ export const MessageActionSchema = z.object({
55
+ type: z.literal('message'),
56
+ text: z.string()
57
+ })
58
+
59
+ export const NavigateKnowledgeActionSchema = z.object({
60
+ type: z.literal('navigate-knowledge'),
61
+ id: z.string(),
62
+ nodeId: z.string()
63
+ })
64
+
65
+ export const AgentActionSchema = z.discriminatedUnion('type', [
66
+ ToolCallActionSchema,
67
+ CompleteActionSchema,
68
+ MessageActionSchema,
69
+ NavigateKnowledgeActionSchema
70
+ ])