@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.
- package/dist/index.d.ts +435 -0
- package/dist/index.js +403 -0
- package/dist/organization-model/index.d.ts +435 -0
- package/dist/organization-model/index.js +403 -0
- package/package.json +62 -0
- package/src/README.md +34 -0
- package/src/__tests__/observability-exports.test.ts +36 -0
- package/src/__tests__/publish.test.ts +18 -0
- package/src/__tests__/template-foundations-compatibility.test.ts +34 -0
- package/src/auth/index.ts +8 -0
- package/src/auth/multi-tenancy/credentials/README.md +38 -0
- package/src/auth/multi-tenancy/credentials/__tests__/encryption.test.ts +216 -0
- package/src/auth/multi-tenancy/credentials/__tests__/service.test.ts +174 -0
- package/src/auth/multi-tenancy/credentials/index.ts +6 -0
- package/src/auth/multi-tenancy/credentials/server/encryption.ts +39 -0
- package/src/auth/multi-tenancy/credentials/server/service.ts +60 -0
- package/src/auth/multi-tenancy/index.ts +17 -0
- package/src/auth/multi-tenancy/invitations/__tests__/invitation.test.ts +237 -0
- package/src/auth/multi-tenancy/invitations/api-schemas.ts +107 -0
- package/src/auth/multi-tenancy/invitations/index.ts +38 -0
- package/src/auth/multi-tenancy/invitations/invitation.ts +86 -0
- package/src/auth/multi-tenancy/invitations/server/index.ts +25 -0
- package/src/auth/multi-tenancy/invitations/server/transforms.ts +24 -0
- package/src/auth/multi-tenancy/invitations/server/workos.ts +24 -0
- package/src/auth/multi-tenancy/invitations/supabase.ts +50 -0
- package/src/auth/multi-tenancy/memberships/__tests__/membership.test.ts +227 -0
- package/src/auth/multi-tenancy/memberships/__tests__/supabase-transforms.test.ts +88 -0
- package/src/auth/multi-tenancy/memberships/__tests__/workos-transforms.test.ts +139 -0
- package/src/auth/multi-tenancy/memberships/api-schemas.ts +126 -0
- package/src/auth/multi-tenancy/memberships/index.ts +22 -0
- package/src/auth/multi-tenancy/memberships/membership.ts +138 -0
- package/src/auth/multi-tenancy/memberships/server/index.ts +15 -0
- package/src/auth/multi-tenancy/memberships/server/transforms.ts +32 -0
- package/src/auth/multi-tenancy/memberships/server/workos.ts +21 -0
- package/src/auth/multi-tenancy/memberships/supabase.ts +46 -0
- package/src/auth/multi-tenancy/organizations/__tests__/organization.test.ts +249 -0
- package/src/auth/multi-tenancy/organizations/api-schemas.ts +128 -0
- package/src/auth/multi-tenancy/organizations/index.ts +23 -0
- package/src/auth/multi-tenancy/organizations/organization.ts +25 -0
- package/src/auth/multi-tenancy/organizations/server/index.ts +10 -0
- package/src/auth/multi-tenancy/organizations/server/transforms.ts +35 -0
- package/src/auth/multi-tenancy/organizations/server/workos.ts +20 -0
- package/src/auth/multi-tenancy/types.ts +89 -0
- package/src/auth/multi-tenancy/users/__tests__/user.test.ts +208 -0
- package/src/auth/multi-tenancy/users/api-schemas.ts +194 -0
- package/src/auth/multi-tenancy/users/index.ts +28 -0
- package/src/auth/multi-tenancy/users/server/index.ts +19 -0
- package/src/auth/multi-tenancy/users/server/transforms.ts +21 -0
- package/src/auth/multi-tenancy/users/server/workos.ts +16 -0
- package/src/auth/multi-tenancy/users/user.ts +65 -0
- package/src/business/acquisition/api-schemas.ts +759 -0
- package/src/business/acquisition/index.ts +109 -0
- package/src/business/acquisition/types.ts +400 -0
- package/src/business/crm/api-schemas.ts +75 -0
- package/src/business/delivery/index.ts +1 -0
- package/src/business/delivery/types.ts +89 -0
- package/src/business/index.ts +12 -0
- package/src/business/pdf/assets/ElevasisLogo.png +0 -0
- package/src/business/pdf/browser/image-utils.ts +74 -0
- package/src/business/pdf/browser/index.ts +16 -0
- package/src/business/pdf/browser/pdfmake-browser.ts +229 -0
- package/src/business/pdf/index.ts +10 -0
- package/src/business/pdf/sections/acceptance.ts +112 -0
- package/src/business/pdf/sections/automation.ts +56 -0
- package/src/business/pdf/sections/cover.ts +51 -0
- package/src/business/pdf/sections/index.ts +57 -0
- package/src/business/pdf/sections/investment.ts +69 -0
- package/src/business/pdf/sections/proposal-document.ts +200 -0
- package/src/business/pdf/sections/summary-investment.ts +124 -0
- package/src/business/pdf/sections/summary.ts +55 -0
- package/src/business/pdf/sections/table-summary.ts +59 -0
- package/src/business/pdf/sections/types.ts +124 -0
- package/src/business/pdf/server/__tests__/pdfmake-test.ts +219 -0
- package/src/business/pdf/server/index.ts +21 -0
- package/src/business/pdf/server/pdfmake-service.ts +237 -0
- package/src/business/pdf/server/themes/default.ts +8 -0
- package/src/business/pdf/server/themes/index.ts +9 -0
- package/src/business/pdf/server/themes/types.ts +8 -0
- package/src/business/pdf/shared/convert.ts +514 -0
- package/src/business/pdf/shared/index.ts +12 -0
- package/src/business/pdf/themes.ts +78 -0
- package/src/business/pdf/types.ts +272 -0
- package/src/business/seo/__tests__/linking.test.ts +549 -0
- package/src/business/seo/__tests__/types.test.ts +404 -0
- package/src/business/seo/index.ts +2 -0
- package/src/business/seo/linking.ts +281 -0
- package/src/business/seo/types.ts +199 -0
- package/src/commands/index.ts +8 -0
- package/src/commands/queue/index.ts +3 -0
- package/src/commands/queue/schemas.test.ts +593 -0
- package/src/commands/queue/schemas.ts +125 -0
- package/src/commands/queue/sse-events.ts +61 -0
- package/src/commands/queue/types/action.ts +52 -0
- package/src/commands/queue/types/checkpoint.ts +44 -0
- package/src/commands/queue/types/index.ts +7 -0
- package/src/commands/queue/types/task.ts +116 -0
- package/src/commands/queue/types.ts +14 -0
- package/src/content/distribution-metadata.ts +61 -0
- package/src/content/index.ts +10 -0
- package/src/deployments/index.ts +22 -0
- package/src/execution/calibration/__tests__/schemas.test.ts +320 -0
- package/src/execution/calibration/index.ts +3 -0
- package/src/execution/calibration/schemas.ts +121 -0
- package/src/execution/calibration/sse-events.ts +125 -0
- package/src/execution/calibration/types.ts +190 -0
- package/src/execution/core/__tests__/api-schemas.test.ts +667 -0
- package/src/execution/core/__tests__/archived-logs.test.ts +72 -0
- package/src/execution/core/api-schemas.ts +312 -0
- package/src/execution/core/index.ts +11 -0
- package/src/execution/core/resource-validator.test.ts +63 -0
- package/src/execution/core/runner-types.ts +80 -0
- package/src/execution/core/server/environment.ts +31 -0
- package/src/execution/core/sse-executions.ts +119 -0
- package/src/execution/core/types.ts +29 -0
- package/src/execution/engine/__tests__/fixtures/index.ts +2 -0
- package/src/execution/engine/__tests__/fixtures/mock-scenarios.ts +60 -0
- package/src/execution/engine/__tests__/fixtures/test-agents.ts +85 -0
- package/src/execution/engine/__tests__/integration/agent-framework.integration.test.ts +1031 -0
- package/src/execution/engine/__tests__/timeout.test.ts +565 -0
- package/src/execution/engine/agent/__tests__/errors.test.ts +508 -0
- package/src/execution/engine/agent/actions/__tests__/processor.test.ts +531 -0
- package/src/execution/engine/agent/actions/executor.ts +205 -0
- package/src/execution/engine/agent/actions/navigate-knowledge-executor.ts +230 -0
- package/src/execution/engine/agent/actions/processor.ts +116 -0
- package/src/execution/engine/agent/actions/types.ts +70 -0
- package/src/execution/engine/agent/core/__tests__/agent.test.ts +614 -0
- package/src/execution/engine/agent/core/__tests__/error-passthrough.test.ts +134 -0
- package/src/execution/engine/agent/core/agent.ts +810 -0
- package/src/execution/engine/agent/core/types.ts +155 -0
- package/src/execution/engine/agent/errors.ts +251 -0
- package/src/execution/engine/agent/index.ts +78 -0
- package/src/execution/engine/agent/knowledge-map/__tests__/navigate-knowledge-executor.test.ts +580 -0
- package/src/execution/engine/agent/knowledge-map/__tests__/utils.test.ts +622 -0
- package/src/execution/engine/agent/knowledge-map/types.ts +106 -0
- package/src/execution/engine/agent/knowledge-map/utils.ts +101 -0
- package/src/execution/engine/agent/memory/__tests__/domains.test.ts +72 -0
- package/src/execution/engine/agent/memory/__tests__/manager.test.ts +754 -0
- package/src/execution/engine/agent/memory/__tests__/utils.test.ts +285 -0
- package/src/execution/engine/agent/memory/domains.ts +99 -0
- package/src/execution/engine/agent/memory/manager.ts +365 -0
- package/src/execution/engine/agent/memory/processor.ts +66 -0
- package/src/execution/engine/agent/memory/types.ts +90 -0
- package/src/execution/engine/agent/memory/utils.ts +134 -0
- package/src/execution/engine/agent/observability/logging.ts +467 -0
- package/src/execution/engine/agent/observability/types.ts +64 -0
- package/src/execution/engine/agent/reasoning/__tests__/request-builder.test.ts +209 -0
- package/src/execution/engine/agent/reasoning/adapters/agent-adapter-helpers.ts +349 -0
- package/src/execution/engine/agent/reasoning/processor.ts +92 -0
- package/src/execution/engine/agent/reasoning/prompt-sections/base-actions.ts +134 -0
- package/src/execution/engine/agent/reasoning/prompt-sections/completion.ts +49 -0
- package/src/execution/engine/agent/reasoning/prompt-sections/knowledge-map.ts +93 -0
- package/src/execution/engine/agent/reasoning/prompt-sections/memory.ts +65 -0
- package/src/execution/engine/agent/reasoning/prompt-sections/security.ts +32 -0
- package/src/execution/engine/agent/reasoning/prompt-sections/tools.ts +44 -0
- package/src/execution/engine/agent/reasoning/request-builder.ts +169 -0
- package/src/execution/engine/agent/reasoning/types.ts +18 -0
- package/src/execution/engine/base/__tests__/errors.test.ts +246 -0
- package/src/execution/engine/base/__tests__/serialization.test.ts +670 -0
- package/src/execution/engine/base/__tests__/utils.test.ts +45 -0
- package/src/execution/engine/base/errors.ts +118 -0
- package/src/execution/engine/base/index.ts +2 -0
- package/src/execution/engine/base/logging.ts +31 -0
- package/src/execution/engine/base/serialization.ts +324 -0
- package/src/execution/engine/base/types.ts +126 -0
- package/src/execution/engine/base/utils.ts +41 -0
- package/src/execution/engine/index.ts +440 -0
- package/src/execution/engine/interface/index.ts +1 -0
- package/src/execution/engine/interface/types.ts +62 -0
- package/src/execution/engine/llm/__tests__/errors.test.ts +318 -0
- package/src/execution/engine/llm/__tests__/input-sanitizer.test.ts +286 -0
- package/src/execution/engine/llm/__tests__/model-info.test.ts +50 -0
- package/src/execution/engine/llm/__tests__/model-validation.test.ts +321 -0
- package/src/execution/engine/llm/__tests__/response-schema-validator.test.ts +115 -0
- package/src/execution/engine/llm/adapters/__tests__/adapter-factory.test.ts +375 -0
- package/src/execution/engine/llm/adapters/__tests__/anthropic-adapter.test.ts +463 -0
- package/src/execution/engine/llm/adapters/__tests__/anthropic.integration.test.ts +177 -0
- package/src/execution/engine/llm/adapters/__tests__/circuit-breaker-error.test.ts +94 -0
- package/src/execution/engine/llm/adapters/__tests__/google-adapter.test.ts +722 -0
- package/src/execution/engine/llm/adapters/__tests__/google.integration.test.ts +376 -0
- package/src/execution/engine/llm/adapters/__tests__/mock-adapter.test.ts +432 -0
- package/src/execution/engine/llm/adapters/__tests__/openai-adapter.test.ts +551 -0
- package/src/execution/engine/llm/adapters/__tests__/openrouter-adapter.test.ts +563 -0
- package/src/execution/engine/llm/adapters/__tests__/openrouter.integration.test.ts +105 -0
- package/src/execution/engine/llm/adapters/__tests__/universal-adapter.test.ts +537 -0
- package/src/execution/engine/llm/adapters/circuit-breaker.ts +147 -0
- package/src/execution/engine/llm/adapters/index.ts +17 -0
- package/src/execution/engine/llm/adapters/mock-adapter.ts +116 -0
- package/src/execution/engine/llm/adapters/server/adapter-factory.ts +130 -0
- package/src/execution/engine/llm/adapters/server/anthropic.ts +137 -0
- package/src/execution/engine/llm/adapters/server/compose-signal.ts +18 -0
- package/src/execution/engine/llm/adapters/server/google.ts +283 -0
- package/src/execution/engine/llm/adapters/server/index.ts +12 -0
- package/src/execution/engine/llm/adapters/server/openai.ts +206 -0
- package/src/execution/engine/llm/adapters/server/openrouter.ts +235 -0
- package/src/execution/engine/llm/adapters/universal-adapter.ts +230 -0
- package/src/execution/engine/llm/errors.ts +186 -0
- package/src/execution/engine/llm/input-sanitizer.ts +129 -0
- package/src/execution/engine/llm/model-info.ts +332 -0
- package/src/execution/engine/llm/response-schema-validator.ts +113 -0
- package/src/execution/engine/llm/types.ts +86 -0
- package/src/execution/engine/test-utils/index.ts +6 -0
- package/src/execution/engine/test-utils/mocks.ts +56 -0
- package/src/execution/engine/tools/__tests__/tooling-error.test.ts +265 -0
- package/src/execution/engine/tools/__tests__/types.test.ts +47 -0
- package/src/execution/engine/tools/integration/base-integration-adapter.ts +50 -0
- package/src/execution/engine/tools/integration/index.ts +53 -0
- package/src/execution/engine/tools/integration/server/adapters/anymailfinder/anymailfinder-adapter.ts +73 -0
- package/src/execution/engine/tools/integration/server/adapters/anymailfinder/anymailfinder-tools.ts +209 -0
- package/src/execution/engine/tools/integration/server/adapters/anymailfinder/fetch/find-company-email/index.ts +82 -0
- package/src/execution/engine/tools/integration/server/adapters/anymailfinder/fetch/find-decision-maker-email/index.ts +122 -0
- package/src/execution/engine/tools/integration/server/adapters/anymailfinder/fetch/find-person-email/index.ts +89 -0
- package/src/execution/engine/tools/integration/server/adapters/anymailfinder/fetch/verify-email/index.ts +84 -0
- package/src/execution/engine/tools/integration/server/adapters/anymailfinder/index.ts +16 -0
- package/src/execution/engine/tools/integration/server/adapters/apify/__tests__/apify-run-actor.integration.test.ts +293 -0
- package/src/execution/engine/tools/integration/server/adapters/apify/apify-adapter.ts +100 -0
- package/src/execution/engine/tools/integration/server/adapters/apify/apify-tools.ts +217 -0
- package/src/execution/engine/tools/integration/server/adapters/apify/fetch/get-dataset-items/index.ts +92 -0
- package/src/execution/engine/tools/integration/server/adapters/apify/fetch/run-actor/index.ts +218 -0
- package/src/execution/engine/tools/integration/server/adapters/apify/fetch/start-actor/index.ts +87 -0
- package/src/execution/engine/tools/integration/server/adapters/apify/index.ts +11 -0
- package/src/execution/engine/tools/integration/server/adapters/attio/__tests__/attio-crud.integration.test.ts +362 -0
- package/src/execution/engine/tools/integration/server/adapters/attio/attio-adapter.ts +162 -0
- package/src/execution/engine/tools/integration/server/adapters/attio/attio-tools.ts +594 -0
- package/src/execution/engine/tools/integration/server/adapters/attio/fetch/README.md +632 -0
- package/src/execution/engine/tools/integration/server/adapters/attio/fetch/create-attribute/index.ts +214 -0
- package/src/execution/engine/tools/integration/server/adapters/attio/fetch/create-note/index.ts +152 -0
- package/src/execution/engine/tools/integration/server/adapters/attio/fetch/create-record/index.ts +141 -0
- package/src/execution/engine/tools/integration/server/adapters/attio/fetch/delete-note/index.ts +86 -0
- package/src/execution/engine/tools/integration/server/adapters/attio/fetch/delete-record/index.ts +105 -0
- package/src/execution/engine/tools/integration/server/adapters/attio/fetch/get-record/index.test.ts +186 -0
- package/src/execution/engine/tools/integration/server/adapters/attio/fetch/get-record/index.ts +118 -0
- package/src/execution/engine/tools/integration/server/adapters/attio/fetch/list-attributes/index.ts +165 -0
- package/src/execution/engine/tools/integration/server/adapters/attio/fetch/list-notes/index.ts +96 -0
- package/src/execution/engine/tools/integration/server/adapters/attio/fetch/list-objects/index.ts +104 -0
- package/src/execution/engine/tools/integration/server/adapters/attio/fetch/list-records/index.test.ts +338 -0
- package/src/execution/engine/tools/integration/server/adapters/attio/fetch/list-records/index.ts +156 -0
- package/src/execution/engine/tools/integration/server/adapters/attio/fetch/update-attribute/index.ts +220 -0
- package/src/execution/engine/tools/integration/server/adapters/attio/fetch/update-record/index.ts +140 -0
- package/src/execution/engine/tools/integration/server/adapters/attio/fetch/utils/types.ts +147 -0
- package/src/execution/engine/tools/integration/server/adapters/attio/index.ts +31 -0
- package/src/execution/engine/tools/integration/server/adapters/dropbox/__tests__/dropbox-adapter.test.ts +409 -0
- package/src/execution/engine/tools/integration/server/adapters/dropbox/dropbox-adapter.ts +281 -0
- package/src/execution/engine/tools/integration/server/adapters/dropbox/dropbox-tools.ts +106 -0
- package/src/execution/engine/tools/integration/server/adapters/dropbox/fetch/create-folder/__tests__/index.test.ts +451 -0
- package/src/execution/engine/tools/integration/server/adapters/dropbox/fetch/create-folder/index.ts +114 -0
- package/src/execution/engine/tools/integration/server/adapters/dropbox/fetch/upload-file/__tests__/index.test.ts +415 -0
- package/src/execution/engine/tools/integration/server/adapters/dropbox/fetch/upload-file/index.ts +111 -0
- package/src/execution/engine/tools/integration/server/adapters/dropbox/index.ts +25 -0
- package/src/execution/engine/tools/integration/server/adapters/gmail/gmail-adapter.ts +210 -0
- package/src/execution/engine/tools/integration/server/adapters/gmail/gmail-tools.ts +104 -0
- package/src/execution/engine/tools/integration/server/adapters/google-sheets/__tests__/google-sheets.integration.test.ts +261 -0
- package/src/execution/engine/tools/integration/server/adapters/google-sheets/google-sheets-adapter.ts +1189 -0
- package/src/execution/engine/tools/integration/server/adapters/google-sheets/google-sheets-tools.ts +641 -0
- package/src/execution/engine/tools/integration/server/adapters/google-sheets/index.ts +18 -0
- package/src/execution/engine/tools/integration/server/adapters/instantly/fetch/activate-campaign/index.ts +86 -0
- package/src/execution/engine/tools/integration/server/adapters/instantly/fetch/add-to-campaign/__tests__/index.test.ts +289 -0
- package/src/execution/engine/tools/integration/server/adapters/instantly/fetch/add-to-campaign/index.ts +154 -0
- package/src/execution/engine/tools/integration/server/adapters/instantly/fetch/bulk-add-leads/__tests__/index.test.ts +325 -0
- package/src/execution/engine/tools/integration/server/adapters/instantly/fetch/bulk-add-leads/index.ts +153 -0
- package/src/execution/engine/tools/integration/server/adapters/instantly/fetch/bulk-delete-leads/index.ts +84 -0
- package/src/execution/engine/tools/integration/server/adapters/instantly/fetch/create-campaign/index.ts +125 -0
- package/src/execution/engine/tools/integration/server/adapters/instantly/fetch/create-inbox-test/index.ts +107 -0
- package/src/execution/engine/tools/integration/server/adapters/instantly/fetch/delete-campaign/index.ts +85 -0
- package/src/execution/engine/tools/integration/server/adapters/instantly/fetch/get-account-health/index.ts +91 -0
- package/src/execution/engine/tools/integration/server/adapters/instantly/fetch/get-campaign/index.ts +92 -0
- package/src/execution/engine/tools/integration/server/adapters/instantly/fetch/get-campaign-analytics/__tests__/index.test.ts +195 -0
- package/src/execution/engine/tools/integration/server/adapters/instantly/fetch/get-campaign-analytics/index.ts +113 -0
- package/src/execution/engine/tools/integration/server/adapters/instantly/fetch/get-daily-campaign-analytics/index.ts +104 -0
- package/src/execution/engine/tools/integration/server/adapters/instantly/fetch/get-emails/index.ts +155 -0
- package/src/execution/engine/tools/integration/server/adapters/instantly/fetch/get-step-analytics/__tests__/index.test.ts +196 -0
- package/src/execution/engine/tools/integration/server/adapters/instantly/fetch/get-step-analytics/index.ts +102 -0
- package/src/execution/engine/tools/integration/server/adapters/instantly/fetch/list-campaigns/__tests__/index.test.ts +189 -0
- package/src/execution/engine/tools/integration/server/adapters/instantly/fetch/list-campaigns/index.ts +87 -0
- package/src/execution/engine/tools/integration/server/adapters/instantly/fetch/list-leads/index.ts +112 -0
- package/src/execution/engine/tools/integration/server/adapters/instantly/fetch/patch-lead/index.ts +76 -0
- package/src/execution/engine/tools/integration/server/adapters/instantly/fetch/pause-campaign/index.ts +86 -0
- package/src/execution/engine/tools/integration/server/adapters/instantly/fetch/remove-from-subsequence/index.ts +98 -0
- package/src/execution/engine/tools/integration/server/adapters/instantly/fetch/send-reply/index.ts +126 -0
- package/src/execution/engine/tools/integration/server/adapters/instantly/fetch/update-campaign/__tests__/index.test.ts +193 -0
- package/src/execution/engine/tools/integration/server/adapters/instantly/fetch/update-campaign/index.ts +99 -0
- package/src/execution/engine/tools/integration/server/adapters/instantly/fetch/update-interest-status/__tests__/index.test.ts +621 -0
- package/src/execution/engine/tools/integration/server/adapters/instantly/fetch/update-interest-status/index.ts +125 -0
- package/src/execution/engine/tools/integration/server/adapters/instantly/index.ts +29 -0
- package/src/execution/engine/tools/integration/server/adapters/instantly/instantly-adapter.ts +178 -0
- package/src/execution/engine/tools/integration/server/adapters/instantly/instantly-tools.ts +1473 -0
- package/src/execution/engine/tools/integration/server/adapters/millionverifier/fetch/check-credits/index.ts +59 -0
- package/src/execution/engine/tools/integration/server/adapters/millionverifier/fetch/verify-email/index.ts +102 -0
- package/src/execution/engine/tools/integration/server/adapters/millionverifier/index.ts +17 -0
- package/src/execution/engine/tools/integration/server/adapters/millionverifier/millionverifier-adapter.ts +80 -0
- package/src/execution/engine/tools/integration/server/adapters/millionverifier/millionverifier-tools.ts +102 -0
- package/src/execution/engine/tools/integration/server/adapters/resend/fetch/get-email/index.ts +102 -0
- package/src/execution/engine/tools/integration/server/adapters/resend/fetch/send-email/index.ts +134 -0
- package/src/execution/engine/tools/integration/server/adapters/resend/fetch/utils/types.ts +75 -0
- package/src/execution/engine/tools/integration/server/adapters/resend/index.ts +27 -0
- package/src/execution/engine/tools/integration/server/adapters/resend/resend-adapter.ts +108 -0
- package/src/execution/engine/tools/integration/server/adapters/resend/resend-tools.ts +132 -0
- package/src/execution/engine/tools/integration/server/adapters/resend/types.ts +44 -0
- package/src/execution/engine/tools/integration/server/adapters/signature-api/fetch/create-envelope/index.ts +274 -0
- package/src/execution/engine/tools/integration/server/adapters/signature-api/fetch/download-document/index.ts +230 -0
- package/src/execution/engine/tools/integration/server/adapters/signature-api/fetch/get-envelope/index.ts +133 -0
- package/src/execution/engine/tools/integration/server/adapters/signature-api/fetch/utils/types.ts +246 -0
- package/src/execution/engine/tools/integration/server/adapters/signature-api/fetch/void-envelope/index.ts +90 -0
- package/src/execution/engine/tools/integration/server/adapters/signature-api/index.ts +38 -0
- package/src/execution/engine/tools/integration/server/adapters/signature-api/signature-api-adapter.ts +87 -0
- package/src/execution/engine/tools/integration/server/adapters/signature-api/signature-api-tools.ts +179 -0
- package/src/execution/engine/tools/integration/server/adapters/stripe/fetch/utils/types.ts +210 -0
- package/src/execution/engine/tools/integration/server/adapters/stripe/index.ts +44 -0
- package/src/execution/engine/tools/integration/server/adapters/stripe/stripe-adapter.ts +517 -0
- package/src/execution/engine/tools/integration/server/adapters/stripe/stripe-tools.ts +309 -0
- package/src/execution/engine/tools/integration/server/adapters/tomba/fetch/domain-search/index.ts +133 -0
- package/src/execution/engine/tools/integration/server/adapters/tomba/fetch/email-finder/index.ts +122 -0
- package/src/execution/engine/tools/integration/server/adapters/tomba/fetch/email-verifier/index.ts +111 -0
- package/src/execution/engine/tools/integration/server/adapters/tomba/index.ts +11 -0
- package/src/execution/engine/tools/integration/server/adapters/tomba/tomba-adapter.ts +78 -0
- package/src/execution/engine/tools/integration/server/adapters/tomba/tomba-tools.ts +222 -0
- package/src/execution/engine/tools/integration/server/index.ts +61 -0
- package/src/execution/engine/tools/integration/service.ts +161 -0
- package/src/execution/engine/tools/integration/tool.ts +253 -0
- package/src/execution/engine/tools/integration/types/anymailfinder.ts +74 -0
- package/src/execution/engine/tools/integration/types/apify.ts +92 -0
- package/src/execution/engine/tools/integration/types/attio.ts +354 -0
- package/src/execution/engine/tools/integration/types/dropbox.ts +64 -0
- package/src/execution/engine/tools/integration/types/gmail.ts +35 -0
- package/src/execution/engine/tools/integration/types/google-sheets.ts +303 -0
- package/src/execution/engine/tools/integration/types/index.ts +19 -0
- package/src/execution/engine/tools/integration/types/instantly.ts +557 -0
- package/src/execution/engine/tools/integration/types/millionverifier.ts +56 -0
- package/src/execution/engine/tools/integration/types/resend.ts +63 -0
- package/src/execution/engine/tools/integration/types/signature-api.ts +164 -0
- package/src/execution/engine/tools/integration/types/stripe.ts +162 -0
- package/src/execution/engine/tools/integration/types/tomba.ts +94 -0
- package/src/execution/engine/tools/lead-service-types.ts +884 -0
- package/src/execution/engine/tools/llm/index.ts +11 -0
- package/src/execution/engine/tools/llm/server/index.ts +8 -0
- package/src/execution/engine/tools/llm/server/llm-call-tool.ts +118 -0
- package/src/execution/engine/tools/platform/__tests__/approval.test.ts +242 -0
- package/src/execution/engine/tools/platform/__tests__/email.test.ts +482 -0
- package/src/execution/engine/tools/platform/__tests__/hitl-cancel.test.ts +97 -0
- package/src/execution/engine/tools/platform/__tests__/notification.test.ts +208 -0
- package/src/execution/engine/tools/platform/__tests__/pdf.test.ts +441 -0
- package/src/execution/engine/tools/platform/__tests__/scheduler.test.ts +189 -0
- package/src/execution/engine/tools/platform/__tests__/schedules.test.ts +336 -0
- package/src/execution/engine/tools/platform/acquisition/company-tools.ts +248 -0
- package/src/execution/engine/tools/platform/acquisition/contact-tools.ts +319 -0
- package/src/execution/engine/tools/platform/acquisition/index.ts +43 -0
- package/src/execution/engine/tools/platform/acquisition/list-tools.ts +148 -0
- package/src/execution/engine/tools/platform/acquisition/types.ts +260 -0
- package/src/execution/engine/tools/platform/approval/cancel-by-metadata.ts +65 -0
- package/src/execution/engine/tools/platform/approval/index.ts +4 -0
- package/src/execution/engine/tools/platform/approval/tool.ts +99 -0
- package/src/execution/engine/tools/platform/email/index.ts +122 -0
- package/src/execution/engine/tools/platform/email/types.ts +96 -0
- package/src/execution/engine/tools/platform/index.ts +181 -0
- package/src/execution/engine/tools/platform/notification.ts +81 -0
- package/src/execution/engine/tools/platform/pdf/index.ts +110 -0
- package/src/execution/engine/tools/platform/pdf/types.ts +77 -0
- package/src/execution/engine/tools/platform/resource-invocation/__tests__/edge-cases.test.ts +507 -0
- package/src/execution/engine/tools/platform/resource-invocation/__tests__/resource-invocation-service.test.ts +500 -0
- package/src/execution/engine/tools/platform/resource-invocation/__tests__/tool.test.ts +555 -0
- package/src/execution/engine/tools/platform/resource-invocation/dynamic-tool.ts +94 -0
- package/src/execution/engine/tools/platform/resource-invocation/index.ts +14 -0
- package/src/execution/engine/tools/platform/resource-invocation/resource-invocation-service.ts +147 -0
- package/src/execution/engine/tools/platform/resource-invocation/tool.ts +115 -0
- package/src/execution/engine/tools/platform/resource-invocation/types.ts +31 -0
- package/src/execution/engine/tools/platform/scheduler.ts +87 -0
- package/src/execution/engine/tools/platform/schedules/cancel-by-key-tool.ts +48 -0
- package/src/execution/engine/tools/platform/schedules/cancel-by-metadata-tool.ts +42 -0
- package/src/execution/engine/tools/platform/schedules/delete-by-key-tool.ts +43 -0
- package/src/execution/engine/tools/platform/schedules/index.ts +13 -0
- package/src/execution/engine/tools/platform/schedules/list-tool.ts +56 -0
- package/src/execution/engine/tools/platform/schedules/types.ts +88 -0
- package/src/execution/engine/tools/platform/storage/__tests__/storage.test.ts +998 -0
- package/src/execution/engine/tools/platform/storage/index.ts +370 -0
- package/src/execution/engine/tools/platform/storage/types.ts +128 -0
- package/src/execution/engine/tools/platform/types.ts +148 -0
- package/src/execution/engine/tools/registry.ts +590 -0
- package/src/execution/engine/tools/tool-maps.ts +694 -0
- package/src/execution/engine/tools/types.ts +233 -0
- package/src/execution/engine/workflow/__tests__/errors.test.ts +139 -0
- package/src/execution/engine/workflow/__tests__/utils.test.ts +645 -0
- package/src/execution/engine/workflow/__tests__/workflow.test.ts +818 -0
- package/src/execution/engine/workflow/errors.ts +63 -0
- package/src/execution/engine/workflow/helpers/index.ts +11 -0
- package/src/execution/engine/workflow/helpers/server/index.ts +8 -0
- package/src/execution/engine/workflow/helpers/server/llm-call.ts +93 -0
- package/src/execution/engine/workflow/index.ts +19 -0
- package/src/execution/engine/workflow/log-truncate.ts +26 -0
- package/src/execution/engine/workflow/logging.ts +191 -0
- package/src/execution/engine/workflow/types.ts +183 -0
- package/src/execution/engine/workflow/utils.ts +280 -0
- package/src/execution/engine/workflow/workflow.ts +168 -0
- package/src/execution/index.ts +20 -0
- package/src/execution/scheduler/__tests__/api-schemas.test.ts +733 -0
- package/src/execution/scheduler/__tests__/retry.test.ts +37 -0
- package/src/execution/scheduler/__tests__/utils.test.ts +1009 -0
- package/src/execution/scheduler/api-schemas.ts +296 -0
- package/src/execution/scheduler/index.ts +50 -0
- package/src/execution/scheduler/schemas.ts +264 -0
- package/src/execution/scheduler/types.ts +111 -0
- package/src/execution/scheduler/utils.ts +364 -0
- package/src/forms/index.ts +7 -0
- package/src/forms/schemas.test.ts +113 -0
- package/src/forms/schemas.ts +69 -0
- package/src/forms/types.ts +70 -0
- package/src/index.ts +54 -0
- package/src/integrations/credentials/__tests__/api-schemas.test.ts +496 -0
- package/src/integrations/credentials/__tests__/schemas.test.ts +82 -0
- package/src/integrations/credentials/__tests__/utils.test.ts +144 -0
- package/src/integrations/credentials/api-schemas.ts +143 -0
- package/src/integrations/credentials/index.ts +32 -0
- package/src/integrations/credentials/schemas.ts +164 -0
- package/src/integrations/credentials/utils.ts +59 -0
- package/src/integrations/oauth/__tests__/provider-registry.test.ts +59 -0
- package/src/integrations/oauth/api-schemas.ts +92 -0
- package/src/integrations/oauth/index.ts +19 -0
- package/src/integrations/oauth/provider-registry.ts +61 -0
- package/src/integrations/oauth/server/__tests__/refresh-concurrent.test.ts +183 -0
- package/src/integrations/oauth/server/__tests__/refresh.integration.test.ts +257 -0
- package/src/integrations/oauth/server/__tests__/refresh.test.ts +577 -0
- package/src/integrations/oauth/server/credentials.ts +39 -0
- package/src/integrations/oauth/server/refresh.ts +214 -0
- package/src/integrations/oauth/types.ts +34 -0
- package/src/integrations/webhook-endpoints/__tests__/api-schemas.test.ts +318 -0
- package/src/integrations/webhook-endpoints/api-schemas.ts +102 -0
- package/src/integrations/webhook-endpoints/index.ts +28 -0
- package/src/integrations/webhook-endpoints/types.ts +51 -0
- package/src/operations/activities/api-schemas.ts +79 -0
- package/src/operations/activities/index.ts +9 -0
- package/src/operations/activities/sse-events.ts +30 -0
- package/src/operations/activities/types.ts +63 -0
- package/src/operations/debug-logs/client.ts +60 -0
- package/src/operations/debug-logs/debug-logger.ts +83 -0
- package/src/operations/debug-logs/index.ts +8 -0
- package/src/operations/debug-logs/server.ts +19 -0
- package/src/operations/debug-logs/types.ts +33 -0
- package/src/operations/index.ts +50 -0
- package/src/operations/notifications/__tests__/api-schemas.test.ts +216 -0
- package/src/operations/notifications/api-schemas.ts +91 -0
- package/src/operations/notifications/index.ts +3 -0
- package/src/operations/notifications/sse-events.ts +21 -0
- package/src/operations/notifications/types.ts +47 -0
- package/src/operations/observability/__tests__/openrouter-cost-flow.test.ts +297 -0
- package/src/operations/observability/__tests__/schemas.test.ts +151 -0
- package/src/operations/observability/__tests__/types.test.ts +109 -0
- package/src/operations/observability/__tests__/utils.test.ts +54 -0
- package/src/operations/observability/ai-usage-collector.ts +64 -0
- package/src/operations/observability/index.ts +13 -0
- package/src/operations/observability/metrics-collector.ts +49 -0
- package/src/operations/observability/schemas.ts +39 -0
- package/src/operations/observability/types.ts +463 -0
- package/src/operations/observability/utils.ts +77 -0
- package/src/operations/sessions/__tests__/api-schemas.test.ts +361 -0
- package/src/operations/sessions/__tests__/manager.test.ts +821 -0
- package/src/operations/sessions/api-schemas.ts +166 -0
- package/src/operations/sessions/index.ts +26 -0
- package/src/operations/sessions/server/manager.ts +90 -0
- package/src/operations/sessions/server/session.ts +180 -0
- package/src/operations/sessions/types.ts +98 -0
- package/src/operations/triggers/index.ts +12 -0
- package/src/operations/triggers/webhook/definitions/__tests__/instantly-reply-received.test.ts +72 -0
- package/src/operations/triggers/webhook/definitions/instantly-account-error.ts +44 -0
- package/src/operations/triggers/webhook/definitions/instantly-auto-reply-received.ts +51 -0
- package/src/operations/triggers/webhook/definitions/instantly-campaign-completed.ts +45 -0
- package/src/operations/triggers/webhook/definitions/instantly-email-bounced.ts +49 -0
- package/src/operations/triggers/webhook/definitions/instantly-lead-unsubscribed.ts +45 -0
- package/src/operations/triggers/webhook/definitions/instantly-reply-received.ts +54 -0
- package/src/operations/triggers/webhook/index.ts +35 -0
- package/src/operations/triggers/webhook/types.ts +74 -0
- package/src/organization-model/README.md +79 -0
- package/src/organization-model/__tests__/graph.test.ts +250 -0
- package/src/organization-model/__tests__/resolve.test.ts +47 -0
- package/src/organization-model/defaults.ts +60 -0
- package/src/organization-model/domains/branding.ts +22 -0
- package/src/organization-model/domains/crm.ts +46 -0
- package/src/organization-model/domains/delivery.ts +48 -0
- package/src/organization-model/domains/features.ts +57 -0
- package/src/organization-model/domains/lead-gen.ts +33 -0
- package/src/organization-model/domains/navigation.ts +103 -0
- package/src/organization-model/domains/shared.ts +42 -0
- package/src/organization-model/graph/build.ts +432 -0
- package/src/organization-model/graph/index.ts +4 -0
- package/src/organization-model/graph/schema.ts +50 -0
- package/src/organization-model/graph/types.ts +52 -0
- package/src/organization-model/index.ts +11 -0
- package/src/organization-model/published.ts +18 -0
- package/src/organization-model/resolve.ts +42 -0
- package/src/organization-model/schema.ts +21 -0
- package/src/organization-model/types.ts +27 -0
- package/src/platform/api/index.ts +1 -0
- package/src/platform/api/types.ts +35 -0
- package/src/platform/constants/http.ts +37 -0
- package/src/platform/constants/index.ts +5 -0
- package/src/platform/constants/limits.ts +32 -0
- package/src/platform/constants/resilience.ts +51 -0
- package/src/platform/constants/timeouts.ts +20 -0
- package/src/platform/constants/versions.ts +3 -0
- package/src/platform/index.ts +27 -0
- package/src/platform/registry/__tests__/command-view.test.ts +410 -0
- package/src/platform/registry/__tests__/resource-registry-static.test.ts +347 -0
- package/src/platform/registry/__tests__/resource-registry.integration.test.ts +1004 -0
- package/src/platform/registry/__tests__/resource-registry.list-executable.test.ts +393 -0
- package/src/platform/registry/__tests__/resource-registry.test.ts +1942 -0
- package/src/platform/registry/__tests__/serialization.test.ts +1127 -0
- package/src/platform/registry/__tests__/validation.test.ts +1086 -0
- package/src/platform/registry/command-view.ts +180 -0
- package/src/platform/registry/domains.ts +165 -0
- package/src/platform/registry/index.ts +93 -0
- package/src/platform/registry/reserved.ts +24 -0
- package/src/platform/registry/resource-metadata.ts +59 -0
- package/src/platform/registry/resource-registry.command-queue-groups.test.ts +129 -0
- package/src/platform/registry/resource-registry.ts +788 -0
- package/src/platform/registry/serialization.ts +273 -0
- package/src/platform/registry/serialized-types.ts +231 -0
- package/src/platform/registry/stats-types.ts +66 -0
- package/src/platform/registry/types.ts +404 -0
- package/src/platform/registry/validation.ts +513 -0
- package/src/platform/resilience/__tests__/circuit-breaker.test.ts +291 -0
- package/src/platform/resilience/__tests__/http-error-mapper.test.ts +173 -0
- package/src/platform/resilience/__tests__/rate-limiter.test.ts +471 -0
- package/src/platform/resilience/__tests__/retry.test.ts +380 -0
- package/src/platform/resilience/__tests__/timeout.test.ts +219 -0
- package/src/platform/resilience/circuit-breaker.ts +164 -0
- package/src/platform/resilience/errors.ts +68 -0
- package/src/platform/resilience/http-error-mapper.ts +129 -0
- package/src/platform/resilience/index.ts +93 -0
- package/src/platform/resilience/rate-limiter-types.ts +46 -0
- package/src/platform/resilience/rate-limiter.ts +140 -0
- package/src/platform/resilience/retry.ts +89 -0
- package/src/platform/resilience/timeout.ts +63 -0
- package/src/platform/sse/events.ts +67 -0
- package/src/platform/sse/index.ts +7 -0
- package/src/platform/utils/__tests__/currency.test.ts +77 -0
- package/src/platform/utils/__tests__/validation.test.ts +1083 -0
- package/src/platform/utils/currency.ts +96 -0
- package/src/platform/utils/debounce.ts +52 -0
- package/src/platform/utils/error.ts +42 -0
- package/src/platform/utils/hmac.test.ts +97 -0
- package/src/platform/utils/index.ts +32 -0
- package/src/platform/utils/server/betterstack-logger.ts +210 -0
- package/src/platform/utils/server/hmac.ts +44 -0
- package/src/platform/utils/server/unsubscribe.ts +111 -0
- package/src/platform/utils/token-counter.ts +96 -0
- package/src/platform/utils/validation.ts +425 -0
- package/src/projects/api-schemas.ts +265 -0
- package/src/published.ts +1 -0
- package/src/server.ts +273 -0
- package/src/supabase/__tests__/helpers.test.ts +51 -0
- package/src/supabase/database.types.ts +2674 -0
- package/src/supabase/helpers.ts +20 -0
- package/src/supabase/index.ts +52 -0
- package/src/supabase/server/client.ts +58 -0
- package/src/test-utils/README.md +150 -0
- package/src/test-utils/browser-mocks.ts +54 -0
- package/src/test-utils/fixtures/api-keys.ts +52 -0
- package/src/test-utils/fixtures/index.ts +4 -0
- package/src/test-utils/fixtures/memberships.ts +80 -0
- package/src/test-utils/fixtures/organizations.ts +69 -0
- package/src/test-utils/fixtures/users.ts +79 -0
- package/src/test-utils/index.ts +11 -0
- package/src/test-utils/mocks/index.ts +2 -0
- package/src/test-utils/mocks/supabase.ts +142 -0
- package/src/test-utils/mocks/workos.ts +108 -0
- package/src/test-utils/rls/RLSTestContext.ts +586 -0
- package/src/test-utils/rls/index.ts +1 -0
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Acquisition List Platform Tools
|
|
3
|
+
*
|
|
4
|
+
* Platform tools for managing acquisition lists. Lists work like Google Sheets tabs,
|
|
5
|
+
* organizing contacts into logical groups.
|
|
6
|
+
*
|
|
7
|
+
* Multi-tenancy: All operations are scoped by organizationId from ExecutionContext.
|
|
8
|
+
* Agents cannot specify organizationId - it is always derived from the execution context.
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
import { z } from 'zod'
|
|
12
|
+
import { getToolServices } from '../../registry'
|
|
13
|
+
import { serviceUnavailable } from '../../types'
|
|
14
|
+
import type { Tool } from '../../types'
|
|
15
|
+
import {
|
|
16
|
+
CreateListInputSchema,
|
|
17
|
+
UpdateListInputSchema,
|
|
18
|
+
DeleteListInputSchema,
|
|
19
|
+
ListOutputSchema,
|
|
20
|
+
ListArrayOutputSchema,
|
|
21
|
+
DeleteResultSchema
|
|
22
|
+
} from './types'
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Create a new acquisition list
|
|
26
|
+
*
|
|
27
|
+
* Creates a list for organizing contacts. Lists are organization-scoped
|
|
28
|
+
* and ordered by creation date (newest first) when retrieved.
|
|
29
|
+
*/
|
|
30
|
+
export function createAcqListCreateTool(): Tool {
|
|
31
|
+
return {
|
|
32
|
+
name: 'acq_list_create',
|
|
33
|
+
description: 'Create a new acquisition list for organizing contacts. Lists work like Google Sheets tabs.',
|
|
34
|
+
inputSchema: CreateListInputSchema,
|
|
35
|
+
outputSchema: ListOutputSchema,
|
|
36
|
+
execute: async ({ input, executionContext }) => {
|
|
37
|
+
const leadService = getToolServices().leadService
|
|
38
|
+
if (!leadService) throw serviceUnavailable('LeadService')
|
|
39
|
+
if (!executionContext?.organizationId) throw serviceUnavailable('ExecutionContext', { reason: 'organizationId required for multi-tenant isolation' })
|
|
40
|
+
|
|
41
|
+
const typedInput = input as { name: string; description?: string }
|
|
42
|
+
|
|
43
|
+
const result = await leadService.createList({
|
|
44
|
+
organizationId: executionContext.organizationId,
|
|
45
|
+
name: typedInput.name,
|
|
46
|
+
description: typedInput.description
|
|
47
|
+
})
|
|
48
|
+
|
|
49
|
+
return {
|
|
50
|
+
id: result.id,
|
|
51
|
+
organizationId: result.organizationId,
|
|
52
|
+
name: result.name,
|
|
53
|
+
description: result.description,
|
|
54
|
+
createdAt: result.createdAt.toISOString()
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* Update an existing acquisition list
|
|
62
|
+
*
|
|
63
|
+
* Updates list metadata (name and/or description). The list must exist
|
|
64
|
+
* and belong to the organization.
|
|
65
|
+
*/
|
|
66
|
+
export function createAcqListUpdateTool(): Tool {
|
|
67
|
+
return {
|
|
68
|
+
name: 'acq_list_update',
|
|
69
|
+
description: 'Update an existing acquisition list metadata (name or description).',
|
|
70
|
+
inputSchema: UpdateListInputSchema,
|
|
71
|
+
outputSchema: ListOutputSchema,
|
|
72
|
+
execute: async ({ input, executionContext }) => {
|
|
73
|
+
const leadService = getToolServices().leadService
|
|
74
|
+
if (!leadService) throw serviceUnavailable('LeadService')
|
|
75
|
+
if (!executionContext?.organizationId) throw serviceUnavailable('ExecutionContext', { reason: 'organizationId required for multi-tenant isolation' })
|
|
76
|
+
|
|
77
|
+
const typedInput = input as { id: string; name?: string; description?: string }
|
|
78
|
+
|
|
79
|
+
const result = await leadService.updateList(typedInput.id, {
|
|
80
|
+
name: typedInput.name,
|
|
81
|
+
description: typedInput.description
|
|
82
|
+
})
|
|
83
|
+
|
|
84
|
+
return {
|
|
85
|
+
id: result.id,
|
|
86
|
+
organizationId: result.organizationId,
|
|
87
|
+
name: result.name,
|
|
88
|
+
description: result.description,
|
|
89
|
+
createdAt: result.createdAt.toISOString()
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
/**
|
|
96
|
+
* Delete an acquisition list
|
|
97
|
+
*
|
|
98
|
+
* Deletes a list. Contacts in this list will have their list_ids updated
|
|
99
|
+
* to remove this list reference. The list must belong to the organization.
|
|
100
|
+
*/
|
|
101
|
+
export function createAcqListDeleteTool(): Tool {
|
|
102
|
+
return {
|
|
103
|
+
name: 'acq_list_delete',
|
|
104
|
+
description: 'Delete an acquisition list. Contacts in this list will have their list_ids updated to remove this list.',
|
|
105
|
+
inputSchema: DeleteListInputSchema,
|
|
106
|
+
outputSchema: DeleteResultSchema,
|
|
107
|
+
execute: async ({ input, executionContext }) => {
|
|
108
|
+
const leadService = getToolServices().leadService
|
|
109
|
+
if (!leadService) throw serviceUnavailable('LeadService')
|
|
110
|
+
if (!executionContext?.organizationId) throw serviceUnavailable('ExecutionContext', { reason: 'organizationId required for multi-tenant isolation' })
|
|
111
|
+
|
|
112
|
+
const typedInput = input as { id: string }
|
|
113
|
+
|
|
114
|
+
await leadService.deleteList(typedInput.id, executionContext.organizationId)
|
|
115
|
+
return { success: true }
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
/**
|
|
121
|
+
* List all acquisition lists for the organization
|
|
122
|
+
*
|
|
123
|
+
* Returns all lists ordered by creation date (newest first).
|
|
124
|
+
* No input parameters required - organization is derived from context.
|
|
125
|
+
*/
|
|
126
|
+
export function createAcqListListTool(): Tool {
|
|
127
|
+
return {
|
|
128
|
+
name: 'acq_list_list',
|
|
129
|
+
description: 'List all acquisition lists for the organization. Returns lists ordered by creation date (newest first).',
|
|
130
|
+
inputSchema: z.object({}),
|
|
131
|
+
outputSchema: ListArrayOutputSchema,
|
|
132
|
+
execute: async ({ executionContext }) => {
|
|
133
|
+
const leadService = getToolServices().leadService
|
|
134
|
+
if (!leadService) throw serviceUnavailable('LeadService')
|
|
135
|
+
if (!executionContext?.organizationId) throw serviceUnavailable('ExecutionContext', { reason: 'organizationId required for multi-tenant isolation' })
|
|
136
|
+
|
|
137
|
+
const results = await leadService.listLists(executionContext.organizationId)
|
|
138
|
+
|
|
139
|
+
return results.map(result => ({
|
|
140
|
+
id: result.id,
|
|
141
|
+
organizationId: result.organizationId,
|
|
142
|
+
name: result.name,
|
|
143
|
+
description: result.description,
|
|
144
|
+
createdAt: result.createdAt.toISOString()
|
|
145
|
+
}))
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
}
|
|
@@ -0,0 +1,260 @@
|
|
|
1
|
+
import { z } from 'zod'
|
|
2
|
+
|
|
3
|
+
// ============================================
|
|
4
|
+
// LIST SCHEMAS
|
|
5
|
+
// ============================================
|
|
6
|
+
|
|
7
|
+
export const CreateListInputSchema = z.object({
|
|
8
|
+
name: z.string().min(1),
|
|
9
|
+
description: z.string().optional()
|
|
10
|
+
})
|
|
11
|
+
|
|
12
|
+
export const UpdateListInputSchema = z.object({
|
|
13
|
+
id: z.string().uuid(),
|
|
14
|
+
name: z.string().min(1).optional(),
|
|
15
|
+
description: z.string().optional()
|
|
16
|
+
})
|
|
17
|
+
|
|
18
|
+
export const DeleteListInputSchema = z.object({
|
|
19
|
+
id: z.string().uuid()
|
|
20
|
+
})
|
|
21
|
+
|
|
22
|
+
export const ListOutputSchema = z.object({
|
|
23
|
+
id: z.string().uuid(),
|
|
24
|
+
organizationId: z.string().uuid(),
|
|
25
|
+
name: z.string(),
|
|
26
|
+
description: z.string().nullable(),
|
|
27
|
+
createdAt: z.string() // ISO date string
|
|
28
|
+
})
|
|
29
|
+
|
|
30
|
+
export const ListArrayOutputSchema = z.array(ListOutputSchema)
|
|
31
|
+
|
|
32
|
+
// ============================================
|
|
33
|
+
// COMPANY SCHEMAS
|
|
34
|
+
// ============================================
|
|
35
|
+
|
|
36
|
+
export const CreateCompanyInputSchema = z.object({
|
|
37
|
+
name: z.string().min(1),
|
|
38
|
+
domain: z.string().optional(),
|
|
39
|
+
linkedinUrl: z.string().url().optional(),
|
|
40
|
+
website: z.string().url().optional(),
|
|
41
|
+
numEmployees: z.number().int().positive().optional(),
|
|
42
|
+
foundedYear: z.number().int().min(1800).max(2100).optional(),
|
|
43
|
+
locationCity: z.string().optional(),
|
|
44
|
+
locationState: z.string().optional(),
|
|
45
|
+
source: z.string().optional(),
|
|
46
|
+
batchId: z.string().optional()
|
|
47
|
+
})
|
|
48
|
+
|
|
49
|
+
export const UpdateCompanyInputSchema = z.object({
|
|
50
|
+
id: z.string().uuid(),
|
|
51
|
+
name: z.string().min(1).optional(),
|
|
52
|
+
domain: z.string().optional(),
|
|
53
|
+
linkedinUrl: z.string().url().optional(),
|
|
54
|
+
website: z.string().url().optional(),
|
|
55
|
+
numEmployees: z.number().int().positive().optional(),
|
|
56
|
+
foundedYear: z.number().int().min(1800).max(2100).optional(),
|
|
57
|
+
locationCity: z.string().optional(),
|
|
58
|
+
locationState: z.string().optional(),
|
|
59
|
+
category: z.string().optional(),
|
|
60
|
+
segment: z.string().optional(),
|
|
61
|
+
pipelineStatus: z.record(z.string(), z.unknown()).optional(),
|
|
62
|
+
enrichmentData: z.record(z.string(), z.unknown()).optional(),
|
|
63
|
+
source: z.string().optional(),
|
|
64
|
+
batchId: z.string().optional()
|
|
65
|
+
})
|
|
66
|
+
|
|
67
|
+
export const UpsertCompanyInputSchema = CreateCompanyInputSchema.extend({
|
|
68
|
+
domain: z.string().min(1) // Domain required for upsert (unique key)
|
|
69
|
+
})
|
|
70
|
+
|
|
71
|
+
export const GetCompanyInputSchema = z.object({
|
|
72
|
+
id: z.string().uuid()
|
|
73
|
+
})
|
|
74
|
+
|
|
75
|
+
export const ListCompaniesInputSchema = z.object({
|
|
76
|
+
segment: z.string().optional(),
|
|
77
|
+
category: z.string().optional(),
|
|
78
|
+
domain: z.string().optional().describe('Exact domain match filter'),
|
|
79
|
+
website: z.string().optional().describe('Exact website match filter'),
|
|
80
|
+
pipelineStatus: z.record(z.string(), z.unknown()).optional().describe('JSONB containment filter for pipeline_status'),
|
|
81
|
+
batchId: z.string().optional(),
|
|
82
|
+
status: z
|
|
83
|
+
.enum(['active', 'invalid'])
|
|
84
|
+
.optional()
|
|
85
|
+
.describe('Filter by company status. Defaults to active if not set and includeAll is false'),
|
|
86
|
+
includeAll: z
|
|
87
|
+
.boolean()
|
|
88
|
+
.optional()
|
|
89
|
+
.describe('Bypass default active-only filter to return all companies regardless of status'),
|
|
90
|
+
excludeColumns: z
|
|
91
|
+
.array(z.enum(['enrichmentData', 'pipelineStatus']))
|
|
92
|
+
.optional()
|
|
93
|
+
.describe('Exclude large JSONB columns from the response to reduce query size')
|
|
94
|
+
})
|
|
95
|
+
|
|
96
|
+
export const DeleteCompanyInputSchema = z.object({
|
|
97
|
+
id: z.string().uuid()
|
|
98
|
+
})
|
|
99
|
+
|
|
100
|
+
export const CompanyOutputSchema = z.object({
|
|
101
|
+
id: z.string().uuid(),
|
|
102
|
+
organizationId: z.string().uuid(),
|
|
103
|
+
name: z.string(),
|
|
104
|
+
domain: z.string().nullable(),
|
|
105
|
+
linkedinUrl: z.string().nullable(),
|
|
106
|
+
website: z.string().nullable(),
|
|
107
|
+
numEmployees: z.number().nullable(),
|
|
108
|
+
foundedYear: z.number().nullable(),
|
|
109
|
+
locationCity: z.string().nullable(),
|
|
110
|
+
locationState: z.string().nullable(),
|
|
111
|
+
category: z.string().nullable(),
|
|
112
|
+
segment: z.string().nullable(),
|
|
113
|
+
pipelineStatus: z.record(z.string(), z.unknown()).nullable(),
|
|
114
|
+
enrichmentData: z.record(z.string(), z.unknown()).nullable(),
|
|
115
|
+
source: z.string().nullable(),
|
|
116
|
+
batchId: z.string().nullable().optional(),
|
|
117
|
+
status: z.enum(['active', 'invalid']),
|
|
118
|
+
createdAt: z.string(),
|
|
119
|
+
updatedAt: z.string()
|
|
120
|
+
})
|
|
121
|
+
|
|
122
|
+
export const CompanyArrayOutputSchema = z.array(CompanyOutputSchema)
|
|
123
|
+
|
|
124
|
+
// ============================================
|
|
125
|
+
// CONTACT SCHEMAS
|
|
126
|
+
// ============================================
|
|
127
|
+
|
|
128
|
+
export const CreateContactInputSchema = z.object({
|
|
129
|
+
email: z.string().email(),
|
|
130
|
+
companyId: z.string().uuid().optional(),
|
|
131
|
+
firstName: z.string().optional(),
|
|
132
|
+
lastName: z.string().optional(),
|
|
133
|
+
linkedinUrl: z.string().url().optional(),
|
|
134
|
+
title: z.string().optional(),
|
|
135
|
+
source: z.string().optional(),
|
|
136
|
+
sourceId: z.string().optional(),
|
|
137
|
+
batchId: z.string().optional()
|
|
138
|
+
})
|
|
139
|
+
|
|
140
|
+
export const UpdateContactInputSchema = z.object({
|
|
141
|
+
id: z.string().uuid(),
|
|
142
|
+
companyId: z.string().uuid().optional(),
|
|
143
|
+
emailValid: z.enum(['VALID', 'INVALID', 'RISKY', 'UNKNOWN']).optional(),
|
|
144
|
+
firstName: z.string().optional(),
|
|
145
|
+
lastName: z.string().optional(),
|
|
146
|
+
linkedinUrl: z.string().url().optional(),
|
|
147
|
+
title: z.string().optional(),
|
|
148
|
+
headline: z.string().optional(),
|
|
149
|
+
filterReason: z.string().optional(),
|
|
150
|
+
openingLine: z.string().optional(),
|
|
151
|
+
pipelineStatus: z.record(z.string(), z.unknown()).optional(),
|
|
152
|
+
enrichmentData: z.record(z.string(), z.unknown()).optional(),
|
|
153
|
+
status: z.enum(['active', 'invalid']).optional()
|
|
154
|
+
})
|
|
155
|
+
|
|
156
|
+
export const UpsertContactInputSchema = CreateContactInputSchema
|
|
157
|
+
|
|
158
|
+
export const GetContactInputSchema = z.object({
|
|
159
|
+
id: z.string().uuid()
|
|
160
|
+
})
|
|
161
|
+
|
|
162
|
+
export const ListContactsInputSchema = z.object({
|
|
163
|
+
openingLineIsNull: z.boolean().optional(), // Filter to contacts without personalization
|
|
164
|
+
batchId: z.string().optional(),
|
|
165
|
+
contactStatus: z.enum(['active', 'invalid']).optional().describe('Filter by contact status (soft-delete flag)'),
|
|
166
|
+
limit: z.number().int().min(1).max(1000).default(100),
|
|
167
|
+
offset: z.number().int().min(0).default(0)
|
|
168
|
+
})
|
|
169
|
+
|
|
170
|
+
export const DeleteContactInputSchema = z.object({
|
|
171
|
+
id: z.string().uuid()
|
|
172
|
+
})
|
|
173
|
+
|
|
174
|
+
export const DeactivateContactsByCompanyInputSchema = z.object({
|
|
175
|
+
companyId: z.string().uuid()
|
|
176
|
+
})
|
|
177
|
+
|
|
178
|
+
export const DeactivateContactsByCompanyResultSchema = z.object({
|
|
179
|
+
deactivated: z.number()
|
|
180
|
+
})
|
|
181
|
+
|
|
182
|
+
export const BulkImportInputSchema = z.object({
|
|
183
|
+
contacts: z.array(CreateContactInputSchema)
|
|
184
|
+
})
|
|
185
|
+
|
|
186
|
+
export const ContactOutputSchema = z.object({
|
|
187
|
+
id: z.string().uuid(),
|
|
188
|
+
organizationId: z.string().uuid(),
|
|
189
|
+
companyId: z.string().uuid().nullable(),
|
|
190
|
+
email: z.string(),
|
|
191
|
+
emailValid: z.enum(['VALID', 'INVALID', 'RISKY', 'UNKNOWN']).nullable(),
|
|
192
|
+
firstName: z.string().nullable(),
|
|
193
|
+
lastName: z.string().nullable(),
|
|
194
|
+
linkedinUrl: z.string().nullable(),
|
|
195
|
+
title: z.string().nullable(),
|
|
196
|
+
headline: z.string().nullable(),
|
|
197
|
+
filterReason: z.string().nullable(),
|
|
198
|
+
openingLine: z.string().nullable(),
|
|
199
|
+
source: z.string().nullable(),
|
|
200
|
+
sourceId: z.string().nullable(),
|
|
201
|
+
pipelineStatus: z.record(z.string(), z.unknown()).nullable(),
|
|
202
|
+
enrichmentData: z.record(z.string(), z.unknown()).nullable(),
|
|
203
|
+
batchId: z.string().nullable().optional(),
|
|
204
|
+
status: z.enum(['active', 'invalid']),
|
|
205
|
+
createdAt: z.string(),
|
|
206
|
+
updatedAt: z.string()
|
|
207
|
+
})
|
|
208
|
+
|
|
209
|
+
export const PaginatedContactsOutputSchema = z.object({
|
|
210
|
+
data: z.array(ContactOutputSchema),
|
|
211
|
+
total: z.number(),
|
|
212
|
+
limit: z.number(),
|
|
213
|
+
offset: z.number()
|
|
214
|
+
})
|
|
215
|
+
|
|
216
|
+
export const BulkImportResultSchema = z.object({
|
|
217
|
+
created: z.number(),
|
|
218
|
+
updated: z.number(),
|
|
219
|
+
errors: z.array(
|
|
220
|
+
z.object({
|
|
221
|
+
email: z.string(),
|
|
222
|
+
error: z.string()
|
|
223
|
+
})
|
|
224
|
+
)
|
|
225
|
+
})
|
|
226
|
+
|
|
227
|
+
export const DeleteResultSchema = z.object({
|
|
228
|
+
success: z.boolean()
|
|
229
|
+
})
|
|
230
|
+
|
|
231
|
+
// ============================================
|
|
232
|
+
// INFERRED TYPES
|
|
233
|
+
// ============================================
|
|
234
|
+
|
|
235
|
+
export type CreateListInput = z.infer<typeof CreateListInputSchema>
|
|
236
|
+
export type UpdateListInput = z.infer<typeof UpdateListInputSchema>
|
|
237
|
+
export type DeleteListInput = z.infer<typeof DeleteListInputSchema>
|
|
238
|
+
export type ListOutput = z.infer<typeof ListOutputSchema>
|
|
239
|
+
|
|
240
|
+
export type CreateCompanyInput = z.infer<typeof CreateCompanyInputSchema>
|
|
241
|
+
export type UpdateCompanyInput = z.infer<typeof UpdateCompanyInputSchema>
|
|
242
|
+
export type UpsertCompanyInput = z.infer<typeof UpsertCompanyInputSchema>
|
|
243
|
+
export type GetCompanyInput = z.infer<typeof GetCompanyInputSchema>
|
|
244
|
+
export type ListCompaniesInput = z.infer<typeof ListCompaniesInputSchema>
|
|
245
|
+
export type DeleteCompanyInput = z.infer<typeof DeleteCompanyInputSchema>
|
|
246
|
+
export type CompanyOutput = z.infer<typeof CompanyOutputSchema>
|
|
247
|
+
|
|
248
|
+
export type CreateContactInput = z.infer<typeof CreateContactInputSchema>
|
|
249
|
+
export type UpdateContactInput = z.infer<typeof UpdateContactInputSchema>
|
|
250
|
+
export type UpsertContactInput = z.infer<typeof UpsertContactInputSchema>
|
|
251
|
+
export type GetContactInput = z.infer<typeof GetContactInputSchema>
|
|
252
|
+
export type ListContactsInput = z.infer<typeof ListContactsInputSchema>
|
|
253
|
+
export type DeleteContactInput = z.infer<typeof DeleteContactInputSchema>
|
|
254
|
+
export type BulkImportInput = z.infer<typeof BulkImportInputSchema>
|
|
255
|
+
export type ContactOutput = z.infer<typeof ContactOutputSchema>
|
|
256
|
+
export type PaginatedContactsOutput = z.infer<typeof PaginatedContactsOutputSchema>
|
|
257
|
+
export type BulkImportResult = z.infer<typeof BulkImportResultSchema>
|
|
258
|
+
export type DeleteResult = z.infer<typeof DeleteResultSchema>
|
|
259
|
+
export type DeactivateContactsByCompanyInput = z.infer<typeof DeactivateContactsByCompanyInputSchema>
|
|
260
|
+
export type DeactivateContactsByCompanyResult = z.infer<typeof DeactivateContactsByCompanyResultSchema>
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* HITL Cancel by Metadata Tool
|
|
3
|
+
*
|
|
4
|
+
* Batch delete pending HITL (command queue) tasks matching metadata filters.
|
|
5
|
+
* Used for cleanup when a contact unsubscribes or a deal is closed.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import { z } from 'zod'
|
|
9
|
+
import { getToolServices } from '../../registry'
|
|
10
|
+
import type { Tool } from '../../types'
|
|
11
|
+
import { serviceUnavailable } from '../../types'
|
|
12
|
+
|
|
13
|
+
// ============================================
|
|
14
|
+
// Schemas
|
|
15
|
+
// ============================================
|
|
16
|
+
|
|
17
|
+
export const HitlCancelByMetadataInputSchema = z.object({
|
|
18
|
+
/** JSONB containment filter for metadata (e.g., { contactEmail: 'user@example.com' }) */
|
|
19
|
+
metadata: z.record(z.string(), z.unknown()),
|
|
20
|
+
/** Only delete tasks with this status (default: 'pending') */
|
|
21
|
+
status: z.string().default('pending')
|
|
22
|
+
})
|
|
23
|
+
|
|
24
|
+
export const HitlCancelByMetadataOutputSchema = z.object({
|
|
25
|
+
deleted: z.number()
|
|
26
|
+
})
|
|
27
|
+
|
|
28
|
+
export type HitlCancelByMetadataInput = z.infer<typeof HitlCancelByMetadataInputSchema>
|
|
29
|
+
export type HitlCancelByMetadataOutput = z.infer<typeof HitlCancelByMetadataOutputSchema>
|
|
30
|
+
|
|
31
|
+
// ============================================
|
|
32
|
+
// Tool Factory
|
|
33
|
+
// ============================================
|
|
34
|
+
|
|
35
|
+
export function createHitlCancelByMetadataTool(): Tool {
|
|
36
|
+
return {
|
|
37
|
+
name: 'hitl_cancel_by_metadata',
|
|
38
|
+
description:
|
|
39
|
+
'Delete pending HITL (human-in-the-loop) tasks matching metadata filters. Used for batch cleanup of command queue entries when a contact unsubscribes or a deal is closed.',
|
|
40
|
+
inputSchema: HitlCancelByMetadataInputSchema,
|
|
41
|
+
outputSchema: HitlCancelByMetadataOutputSchema,
|
|
42
|
+
async execute({ input, executionContext }) {
|
|
43
|
+
if (!executionContext?.organizationId) {
|
|
44
|
+
throw serviceUnavailable('ExecutionContext', { tool: 'hitl_cancel_by_metadata', reason: 'organizationId required for multi-tenant isolation' })
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
const { commandQueueService } = getToolServices()
|
|
48
|
+
if (!commandQueueService) {
|
|
49
|
+
throw serviceUnavailable('CommandQueueService', {
|
|
50
|
+
message:
|
|
51
|
+
'Ensure toolServicesRegistry.initialize() was called in apps/api/src/main.ts',
|
|
52
|
+
tool: 'hitl_cancel_by_metadata'
|
|
53
|
+
})
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
const { metadata, status } = input as HitlCancelByMetadataInput
|
|
57
|
+
|
|
58
|
+
return commandQueueService.deleteByMetadata(
|
|
59
|
+
executionContext.organizationId,
|
|
60
|
+
metadata,
|
|
61
|
+
status
|
|
62
|
+
)
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export { createApprovalTool } from './tool'
|
|
2
|
+
export { createHitlCancelByMetadataTool } from './cancel-by-metadata'
|
|
3
|
+
export type { HitlCancelByMetadataInput, HitlCancelByMetadataOutput } from './cancel-by-metadata'
|
|
4
|
+
export { HitlCancelByMetadataInputSchema, HitlCancelByMetadataOutputSchema } from './cancel-by-metadata'
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import type { Tool, ToolExecutionOptions } from '../../types'
|
|
2
|
+
import { serviceUnavailable } from '../../types'
|
|
3
|
+
import type { CreateTaskParams, ActionConfig } from '../../../../../commands/queue/types'
|
|
4
|
+
import { getToolServices } from '../../registry'
|
|
5
|
+
import type { ApprovalToolConfig } from '../types'
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Create an approval tool that sends tasks to the command queue for human approval
|
|
9
|
+
*
|
|
10
|
+
* Approval tools enable human-in-the-loop workflows by creating tasks that require
|
|
11
|
+
* human approval before proceeding. The task contains the input payload and routes
|
|
12
|
+
* to specified agents based on approval/rejection.
|
|
13
|
+
*
|
|
14
|
+
* @param config - Configuration for the approval tool
|
|
15
|
+
* @returns Tool that creates approval tasks in the command queue
|
|
16
|
+
*
|
|
17
|
+
* @example
|
|
18
|
+
* const approvalTool = createApprovalTool({
|
|
19
|
+
* name: 'request_payment_approval',
|
|
20
|
+
* description: 'Request approval for high-value payment',
|
|
21
|
+
* inputSchema: z.object({ amount: z.number(), recipient: z.string() }),
|
|
22
|
+
* outputSchema: z.object({ taskId: z.string() }),
|
|
23
|
+
* approveTargetResourceId: 'payment-processor-agent',
|
|
24
|
+
* rejectTargetResourceId: 'payment-rejection-handler',
|
|
25
|
+
* priority: 8
|
|
26
|
+
* })
|
|
27
|
+
*/
|
|
28
|
+
export function createApprovalTool(config: ApprovalToolConfig): Tool {
|
|
29
|
+
return {
|
|
30
|
+
name: config.name,
|
|
31
|
+
description: config.description,
|
|
32
|
+
inputSchema: config.inputSchema,
|
|
33
|
+
outputSchema: config.outputSchema,
|
|
34
|
+
|
|
35
|
+
async execute(options: ToolExecutionOptions): Promise<unknown> {
|
|
36
|
+
// ExecutionContext is required for platform tools
|
|
37
|
+
if (!options.executionContext) {
|
|
38
|
+
throw serviceUnavailable('ExecutionContext', { tool: config.name, reason: 'organizationId required for multi-tenant isolation' })
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
// Get command queue service from global registry
|
|
42
|
+
const { commandQueueService: commandQueue } = getToolServices()
|
|
43
|
+
if (!commandQueue) {
|
|
44
|
+
throw serviceUnavailable('CommandQueueService', {
|
|
45
|
+
message: 'Ensure toolServicesRegistry.initialize() was called in apps/api/src/main.ts',
|
|
46
|
+
tool: config.name
|
|
47
|
+
})
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
// Build task parameters using execution context
|
|
51
|
+
// Convert old approve/reject pattern to new action-based schema
|
|
52
|
+
const actions: ActionConfig[] = [
|
|
53
|
+
{
|
|
54
|
+
id: 'approve',
|
|
55
|
+
label: 'Approve',
|
|
56
|
+
type: 'primary',
|
|
57
|
+
icon: 'IconCheck',
|
|
58
|
+
color: 'green',
|
|
59
|
+
target: {
|
|
60
|
+
resourceType: 'agent',
|
|
61
|
+
resourceId: config.approveTargetResourceId
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
]
|
|
65
|
+
|
|
66
|
+
// Add reject action if configured
|
|
67
|
+
if (config.rejectTargetResourceId) {
|
|
68
|
+
actions.push({
|
|
69
|
+
id: 'reject',
|
|
70
|
+
label: 'Reject',
|
|
71
|
+
type: 'danger',
|
|
72
|
+
icon: 'IconX',
|
|
73
|
+
color: 'red',
|
|
74
|
+
target: {
|
|
75
|
+
resourceType: 'agent',
|
|
76
|
+
resourceId: config.rejectTargetResourceId
|
|
77
|
+
}
|
|
78
|
+
})
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
const params: CreateTaskParams = {
|
|
82
|
+
organizationId: options.executionContext.organizationId,
|
|
83
|
+
originExecutionId: options.executionContext.executionId,
|
|
84
|
+
originResourceType: 'agent',
|
|
85
|
+
originResourceId: options.executionContext.resourceId,
|
|
86
|
+
actions,
|
|
87
|
+
context: options.input,
|
|
88
|
+
priority: config.priority ?? 5,
|
|
89
|
+
expiresAt: config.expiresAt
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
// Create task in command queue
|
|
93
|
+
const task = await commandQueue.createTask(params)
|
|
94
|
+
|
|
95
|
+
// Return task ID for tracking
|
|
96
|
+
return { taskId: task.id }
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
}
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Platform Email Tool
|
|
3
|
+
*
|
|
4
|
+
* Factory function for creating a platform email tool that sends
|
|
5
|
+
* transactional emails from notifications@elevasis.io using platform Resend credentials.
|
|
6
|
+
*
|
|
7
|
+
* Usage:
|
|
8
|
+
* ```typescript
|
|
9
|
+
* const emailTool = createPlatformEmailTool({
|
|
10
|
+
* name: 'send_platform_email',
|
|
11
|
+
* description: 'Send platform notification emails to users'
|
|
12
|
+
* })
|
|
13
|
+
* ```
|
|
14
|
+
*/
|
|
15
|
+
|
|
16
|
+
import type { Tool, ToolExecutionOptions } from '../../types'
|
|
17
|
+
import { serviceUnavailable } from '../../types'
|
|
18
|
+
import { getToolServices } from '../../registry'
|
|
19
|
+
import type { SendPlatformEmailParams } from '../../registry'
|
|
20
|
+
import {
|
|
21
|
+
SendPlatformEmailInputSchema,
|
|
22
|
+
SendPlatformEmailOutputSchema,
|
|
23
|
+
type SendPlatformEmailInput,
|
|
24
|
+
type SendPlatformEmailOutput,
|
|
25
|
+
type PlatformEmailToolConfig
|
|
26
|
+
} from './types'
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* Create a platform email tool that sends emails to targeted users
|
|
30
|
+
*
|
|
31
|
+
* Platform email tools enable agents and workflows to send transactional emails
|
|
32
|
+
* from the platform email address (notifications@elevasis.io). Emails can target
|
|
33
|
+
* specific users, users with a role, or all organization members.
|
|
34
|
+
*
|
|
35
|
+
* @param config - Configuration for the email tool
|
|
36
|
+
* @returns Tool that sends platform emails
|
|
37
|
+
*
|
|
38
|
+
* @example
|
|
39
|
+
* const emailTool = createPlatformEmailTool({
|
|
40
|
+
* name: 'notify_admins',
|
|
41
|
+
* description: 'Send email notification to all admin users'
|
|
42
|
+
* })
|
|
43
|
+
*
|
|
44
|
+
* // Execute with explicit user targeting
|
|
45
|
+
* await emailTool.execute({
|
|
46
|
+
* input: {
|
|
47
|
+
* userIds: ['user-id-1', 'user-id-2'],
|
|
48
|
+
* subject: 'Workflow completed',
|
|
49
|
+
* html: '<p>Your workflow has completed successfully.</p>'
|
|
50
|
+
* },
|
|
51
|
+
* executionContext: context
|
|
52
|
+
* })
|
|
53
|
+
*
|
|
54
|
+
* // Execute with role-based targeting
|
|
55
|
+
* await emailTool.execute({
|
|
56
|
+
* input: {
|
|
57
|
+
* targetRole: 'admin',
|
|
58
|
+
* subject: 'System alert',
|
|
59
|
+
* text: 'A critical error occurred.'
|
|
60
|
+
* },
|
|
61
|
+
* executionContext: context
|
|
62
|
+
* })
|
|
63
|
+
*/
|
|
64
|
+
export function createPlatformEmailTool(config: PlatformEmailToolConfig): Tool {
|
|
65
|
+
return {
|
|
66
|
+
name: config.name,
|
|
67
|
+
description: config.description,
|
|
68
|
+
inputSchema: SendPlatformEmailInputSchema,
|
|
69
|
+
outputSchema: SendPlatformEmailOutputSchema,
|
|
70
|
+
|
|
71
|
+
async execute(options: ToolExecutionOptions): Promise<SendPlatformEmailOutput> {
|
|
72
|
+
// ExecutionContext is required for platform tools
|
|
73
|
+
if (!options.executionContext) {
|
|
74
|
+
throw serviceUnavailable('ExecutionContext', { tool: config.name, reason: 'organizationId required for multi-tenant isolation' })
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
// Get email service from global registry
|
|
78
|
+
const { emailService } = getToolServices()
|
|
79
|
+
if (!emailService) {
|
|
80
|
+
throw serviceUnavailable('EmailService', {
|
|
81
|
+
message: 'Ensure toolServicesRegistry.initialize() was called in apps/api/src/main.ts',
|
|
82
|
+
tool: config.name
|
|
83
|
+
})
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
// Build email parameters from input + context
|
|
87
|
+
const inputData = options.input as SendPlatformEmailInput
|
|
88
|
+
|
|
89
|
+
const params: SendPlatformEmailParams = {
|
|
90
|
+
organizationId: options.executionContext.organizationId,
|
|
91
|
+
|
|
92
|
+
// Targeting (exactly one will be set, validated by schema)
|
|
93
|
+
userIds: inputData.userIds,
|
|
94
|
+
targetRole: inputData.targetRole,
|
|
95
|
+
targetAll: inputData.targetAll,
|
|
96
|
+
|
|
97
|
+
// Content
|
|
98
|
+
subject: inputData.subject,
|
|
99
|
+
html: inputData.html,
|
|
100
|
+
text: inputData.text,
|
|
101
|
+
|
|
102
|
+
// Optional
|
|
103
|
+
replyTo: inputData.replyTo,
|
|
104
|
+
tags: inputData.tags
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
// Send email via service
|
|
108
|
+
const result = await emailService.send(params)
|
|
109
|
+
|
|
110
|
+
return result
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
// Re-export types for consumers
|
|
116
|
+
export {
|
|
117
|
+
SendPlatformEmailInputSchema,
|
|
118
|
+
SendPlatformEmailOutputSchema,
|
|
119
|
+
type SendPlatformEmailInput,
|
|
120
|
+
type SendPlatformEmailOutput,
|
|
121
|
+
type PlatformEmailToolConfig
|
|
122
|
+
} from './types'
|