@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
package/src/execution/engine/tools/platform/resource-invocation/resource-invocation-service.ts
ADDED
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
import type { ExecutionContext } from '../../../base/types'
|
|
2
|
+
import type { ResourceRegistry } from '../../../../../platform/registry/resource-registry'
|
|
3
|
+
import type { ResourceExecutionRequest, ResourceInvocationResult } from './types'
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* ResourceInvocationService
|
|
7
|
+
* Handles execution of resources (agents and workflows) from agent context
|
|
8
|
+
*
|
|
9
|
+
* Responsibilities:
|
|
10
|
+
* - Validate resource exists and is accessible
|
|
11
|
+
* - Validate input against resource contract
|
|
12
|
+
* - Execute resource with parent execution context
|
|
13
|
+
* - Return typed invocation result
|
|
14
|
+
*
|
|
15
|
+
* Multi-tenancy: All resource lookups scoped by organizationName (passed as parameter)
|
|
16
|
+
*/
|
|
17
|
+
export class ResourceInvocationService {
|
|
18
|
+
constructor(
|
|
19
|
+
private registry: ResourceRegistry,
|
|
20
|
+
private executeResource: (
|
|
21
|
+
request: ResourceExecutionRequest,
|
|
22
|
+
parentContext: ExecutionContext
|
|
23
|
+
) => Promise<ResourceInvocationResult>
|
|
24
|
+
) {}
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* Execute resource synchronously (waits for completion)
|
|
28
|
+
*
|
|
29
|
+
* @param resourceId - ID of resource to execute (agent or workflow)
|
|
30
|
+
* @param input - Input payload for resource
|
|
31
|
+
* @param organizationName - Organization name for resource lookup (from execution request)
|
|
32
|
+
* @param parentContext - Parent execution context (provides organization ID and tracking)
|
|
33
|
+
* @returns Invocation result with success, output, executionId, and resourceType
|
|
34
|
+
*
|
|
35
|
+
* @example
|
|
36
|
+
* const result = await service.executeSync(
|
|
37
|
+
* 'lead-validation-workflow',
|
|
38
|
+
* { email: 'test@test.com', name: 'John Doe' },
|
|
39
|
+
* 'acme-corp',
|
|
40
|
+
* executionContext
|
|
41
|
+
* )
|
|
42
|
+
*
|
|
43
|
+
* if (result.success) {
|
|
44
|
+
* console.log('Validation result:', result.output)
|
|
45
|
+
* } else {
|
|
46
|
+
* console.error('Validation failed:', result.error)
|
|
47
|
+
* }
|
|
48
|
+
*/
|
|
49
|
+
async executeSync(
|
|
50
|
+
resourceId: string,
|
|
51
|
+
input: unknown,
|
|
52
|
+
organizationName: string,
|
|
53
|
+
parentContext: ExecutionContext
|
|
54
|
+
): Promise<ResourceInvocationResult> {
|
|
55
|
+
// 1. Validate resource exists (scoped to organization)
|
|
56
|
+
const definition = this.registry.getResourceDefinition(
|
|
57
|
+
organizationName,
|
|
58
|
+
resourceId
|
|
59
|
+
)
|
|
60
|
+
|
|
61
|
+
if (!definition) {
|
|
62
|
+
return {
|
|
63
|
+
success: false,
|
|
64
|
+
output: null,
|
|
65
|
+
executionId: '',
|
|
66
|
+
resourceType: 'workflow',
|
|
67
|
+
error: `Resource not found: ${resourceId}`
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
// Determine resource type from definition
|
|
72
|
+
const resourceType = definition.config.type as 'agent' | 'workflow'
|
|
73
|
+
|
|
74
|
+
// 2. Enforce relationship declaration
|
|
75
|
+
const relationships = this.registry.getRelationships(organizationName)
|
|
76
|
+
if (relationships) {
|
|
77
|
+
const callerRel = relationships[parentContext.resourceId]
|
|
78
|
+
const declaredTargets = [
|
|
79
|
+
...(callerRel?.triggers?.agents ?? []),
|
|
80
|
+
...(callerRel?.triggers?.workflows ?? [])
|
|
81
|
+
]
|
|
82
|
+
if (!declaredTargets.includes(resourceId)) {
|
|
83
|
+
throw new Error(
|
|
84
|
+
`Undeclared resource invocation: "${parentContext.resourceId}" -> "${resourceId}". ` +
|
|
85
|
+
`Add to relationships: { '${parentContext.resourceId}': { triggers: { ${resourceType}s: ['${resourceId}'] } } }`
|
|
86
|
+
)
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
// 3. Validate input against resource contract
|
|
91
|
+
const validationResult = definition.contract.inputSchema.safeParse(input)
|
|
92
|
+
if (!validationResult.success) {
|
|
93
|
+
return {
|
|
94
|
+
success: false,
|
|
95
|
+
output: null,
|
|
96
|
+
executionId: '',
|
|
97
|
+
resourceType,
|
|
98
|
+
error: `Input validation failed: ${validationResult.error.message}`
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
// 4. Execute resource with parent context
|
|
103
|
+
const result = await this.executeResource(
|
|
104
|
+
{
|
|
105
|
+
resourceId,
|
|
106
|
+
input: validationResult.data,
|
|
107
|
+
organizationId: parentContext.organizationId,
|
|
108
|
+
organizationName
|
|
109
|
+
},
|
|
110
|
+
parentContext
|
|
111
|
+
)
|
|
112
|
+
|
|
113
|
+
return {
|
|
114
|
+
...result,
|
|
115
|
+
resourceType
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
/**
|
|
121
|
+
* Factory function for creating ResourceInvocationService
|
|
122
|
+
* Validates dependencies at construction time (fail-fast)
|
|
123
|
+
*
|
|
124
|
+
* @param registry - ResourceRegistry for resource lookup
|
|
125
|
+
* @param executeResource - Callback to execute resource (delegates to coordinator)
|
|
126
|
+
* @returns ResourceInvocationService instance
|
|
127
|
+
* @throws Error if dependencies are missing
|
|
128
|
+
*
|
|
129
|
+
* @example
|
|
130
|
+
* const service = createResourceInvocationService(
|
|
131
|
+
* resourceRegistry,
|
|
132
|
+
* async (request, parentContext) => {
|
|
133
|
+
* return coordinator.executeNested(request, parentContext)
|
|
134
|
+
* }
|
|
135
|
+
* )
|
|
136
|
+
*/
|
|
137
|
+
export function createResourceInvocationService(
|
|
138
|
+
registry: ResourceRegistry,
|
|
139
|
+
executeResource: (
|
|
140
|
+
request: ResourceExecutionRequest,
|
|
141
|
+
parentContext: ExecutionContext
|
|
142
|
+
) => Promise<ResourceInvocationResult>
|
|
143
|
+
): ResourceInvocationService {
|
|
144
|
+
if (!registry) throw new Error('ResourceRegistry required')
|
|
145
|
+
if (!executeResource) throw new Error('executeResource callback required')
|
|
146
|
+
return new ResourceInvocationService(registry, executeResource)
|
|
147
|
+
}
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Resource Invocation Tool Factory
|
|
3
|
+
*
|
|
4
|
+
* Creates tools that invoke other resources (agents or workflows) as first-class tools.
|
|
5
|
+
* Schemas are derived directly from the resource's contract, eliminating duplication.
|
|
6
|
+
*
|
|
7
|
+
* @module resource-invocation/tool
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
import { z } from 'zod'
|
|
11
|
+
import { serviceUnavailable, apiError } from '../../types'
|
|
12
|
+
import type { Tool, ToolExecutionOptions } from '../../types'
|
|
13
|
+
import type { AgentDefinition } from '../../../agent/core/types'
|
|
14
|
+
import type { WorkflowDefinition } from '../../../workflow/types'
|
|
15
|
+
import { getToolServices } from '../../registry'
|
|
16
|
+
import { DEFAULT_RESOURCE_INVOCATION_TIMEOUT } from '../../../../../platform/constants/timeouts'
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Resource definition type (Agent or Workflow)
|
|
20
|
+
* Both types have config and contract fields needed for tool creation
|
|
21
|
+
*/
|
|
22
|
+
export type ResourceDefinition = AgentDefinition | WorkflowDefinition
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Configuration for creating a resource invocation tool
|
|
26
|
+
*
|
|
27
|
+
* The tool factory derives schemas from resource.contract automatically,
|
|
28
|
+
* ensuring type safety and eliminating manual schema duplication.
|
|
29
|
+
*/
|
|
30
|
+
export interface ResourceInvocationToolConfig {
|
|
31
|
+
/** Tool name for LLM selection (e.g., 'invoke_lead_validation') */
|
|
32
|
+
name: string
|
|
33
|
+
|
|
34
|
+
/** Description of what the tool does (shown to LLM) */
|
|
35
|
+
description: string
|
|
36
|
+
|
|
37
|
+
/** Target resource definition - schemas derived automatically from contract */
|
|
38
|
+
resource: ResourceDefinition
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* Create a tool that invokes another resource (agent or workflow)
|
|
43
|
+
*
|
|
44
|
+
* Schemas are derived directly from the resource's contract:
|
|
45
|
+
* - inputSchema: From resource.contract.inputSchema
|
|
46
|
+
* - outputSchema: From resource.contract.outputSchema (or z.null() if not defined)
|
|
47
|
+
*
|
|
48
|
+
* This ensures type safety and eliminates schema duplication.
|
|
49
|
+
*
|
|
50
|
+
* @param config - Tool configuration with name, description, and target resource
|
|
51
|
+
* @returns Tool that invokes the resource via ResourceInvocationService
|
|
52
|
+
*
|
|
53
|
+
* @example
|
|
54
|
+
* // Invoke workflow with derived schemas
|
|
55
|
+
* const leadValidationTool = createResourceInvocationTool({
|
|
56
|
+
* name: 'invoke_lead_validation',
|
|
57
|
+
* description: 'Validate scraped lead data for completeness and format',
|
|
58
|
+
* resource: leadValidationWorkflow // Schemas derived from contract
|
|
59
|
+
* })
|
|
60
|
+
*
|
|
61
|
+
* @example
|
|
62
|
+
* // Invoke agent with derived schemas
|
|
63
|
+
* const companyResearchTool = createResourceInvocationTool({
|
|
64
|
+
* name: 'invoke_company_research',
|
|
65
|
+
* description: 'Research company details using AI reasoning',
|
|
66
|
+
* resource: companyResearchAgent // Schemas derived from contract
|
|
67
|
+
* })
|
|
68
|
+
*/
|
|
69
|
+
export function createResourceInvocationTool(
|
|
70
|
+
config: ResourceInvocationToolConfig
|
|
71
|
+
): Tool {
|
|
72
|
+
const { resource } = config
|
|
73
|
+
|
|
74
|
+
// Derive schemas from resource contract - no manual duplication
|
|
75
|
+
const inputSchema = resource.contract.inputSchema
|
|
76
|
+
const outputSchema = resource.contract.outputSchema ?? z.null()
|
|
77
|
+
|
|
78
|
+
return {
|
|
79
|
+
name: config.name,
|
|
80
|
+
description: config.description,
|
|
81
|
+
inputSchema,
|
|
82
|
+
outputSchema,
|
|
83
|
+
timeout: DEFAULT_RESOURCE_INVOCATION_TIMEOUT,
|
|
84
|
+
|
|
85
|
+
async execute(options: ToolExecutionOptions): Promise<unknown> {
|
|
86
|
+
// Get resource invocation service from global registry
|
|
87
|
+
const { resourceInvocationService } = getToolServices()
|
|
88
|
+
|
|
89
|
+
if (!resourceInvocationService) {
|
|
90
|
+
throw serviceUnavailable('ResourceInvocationService')
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
if (!options.executionContext) {
|
|
94
|
+
throw serviceUnavailable('ExecutionContext', { tool: config.name, reason: 'organizationId required for multi-tenant isolation' })
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
// Execute resource and get result
|
|
98
|
+
// organizationName is guaranteed to be present in ExecutionContext (extends ExecutionMetadata)
|
|
99
|
+
const result = await resourceInvocationService.executeSync(
|
|
100
|
+
resource.config.resourceId,
|
|
101
|
+
options.input,
|
|
102
|
+
options.executionContext.organizationName,
|
|
103
|
+
options.executionContext
|
|
104
|
+
)
|
|
105
|
+
|
|
106
|
+
// Throw error if execution failed
|
|
107
|
+
if (!result.success) {
|
|
108
|
+
throw apiError(result.error || `${result.resourceType} execution failed`)
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
// Return output (null for fire-and-forget resources without outputSchema)
|
|
112
|
+
return result.output
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Resource execution request parameters
|
|
3
|
+
* Contains resource identification and input payload for execution
|
|
4
|
+
*/
|
|
5
|
+
export interface ResourceExecutionRequest {
|
|
6
|
+
/** Resource ID to execute (agent or workflow) */
|
|
7
|
+
resourceId: string
|
|
8
|
+
/** Input payload for the resource (validated against resource contract) */
|
|
9
|
+
input: unknown
|
|
10
|
+
/** Organization ID for multi-tenancy isolation */
|
|
11
|
+
organizationId: string
|
|
12
|
+
/** Organization name for resource lookup */
|
|
13
|
+
organizationName: string
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Resource invocation result
|
|
18
|
+
* Returned from executeSync() after resource execution completes
|
|
19
|
+
*/
|
|
20
|
+
export interface ResourceInvocationResult {
|
|
21
|
+
/** Whether execution succeeded */
|
|
22
|
+
success: boolean
|
|
23
|
+
/** Output from resource (TOutput from contract, or null if no outputSchema) */
|
|
24
|
+
output: unknown
|
|
25
|
+
/** Execution ID for tracking and observability */
|
|
26
|
+
executionId: string
|
|
27
|
+
/** Type of resource executed (agent or workflow) */
|
|
28
|
+
resourceType: 'agent' | 'workflow'
|
|
29
|
+
/** Error message if execution failed */
|
|
30
|
+
error?: string
|
|
31
|
+
}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import type { Tool, ToolExecutionOptions } from '../types'
|
|
2
|
+
import { serviceUnavailable } from '../types'
|
|
3
|
+
import type { CreateScheduleInput, AbsoluteScheduleConfig } from '../../../scheduler/types'
|
|
4
|
+
import { getToolServices } from '../registry'
|
|
5
|
+
import type { SchedulerToolConfig } from './types'
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Create a scheduler tool that schedules future execution of agents/workflows
|
|
9
|
+
*
|
|
10
|
+
* Scheduler tools enable time-based automation by creating scheduled tasks that
|
|
11
|
+
* execute at a specific time. The task contains the input payload and routes to
|
|
12
|
+
* the specified resource.
|
|
13
|
+
*
|
|
14
|
+
* @param config - Configuration for the scheduler tool
|
|
15
|
+
* @returns Tool that creates scheduled tasks
|
|
16
|
+
*
|
|
17
|
+
* @example
|
|
18
|
+
* const schedulerTool = createSchedulerTool({
|
|
19
|
+
* name: 'schedule_followup',
|
|
20
|
+
* description: 'Schedule a follow-up task for later',
|
|
21
|
+
* inputSchema: z.object({ message: z.string(), recipientId: z.string() }),
|
|
22
|
+
* outputSchema: z.object({ taskId: z.string() }),
|
|
23
|
+
* targetResourceId: 'followup-agent',
|
|
24
|
+
* targetResourceType: 'agent',
|
|
25
|
+
* runAt: new Date(Date.now() + 86400000), // 24 hours from now
|
|
26
|
+
* maxRetries: 3
|
|
27
|
+
* })
|
|
28
|
+
*/
|
|
29
|
+
export function createSchedulerTool(config: SchedulerToolConfig): Tool {
|
|
30
|
+
return {
|
|
31
|
+
name: config.name,
|
|
32
|
+
description: config.description,
|
|
33
|
+
inputSchema: config.inputSchema,
|
|
34
|
+
outputSchema: config.outputSchema,
|
|
35
|
+
|
|
36
|
+
async execute(options: ToolExecutionOptions): Promise<unknown> {
|
|
37
|
+
// ExecutionContext is required for platform tools
|
|
38
|
+
if (!options.executionContext) {
|
|
39
|
+
throw serviceUnavailable('ExecutionContext', { tool: config.name, reason: 'organizationId required for multi-tenant isolation' })
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
// Get task scheduler service from global registry
|
|
43
|
+
const { taskSchedulerService: taskScheduler } = getToolServices()
|
|
44
|
+
if (!taskScheduler) {
|
|
45
|
+
throw serviceUnavailable('TaskSchedulerService', {
|
|
46
|
+
message: 'Ensure toolServicesRegistry.initialize() was called in apps/api/src/main.ts',
|
|
47
|
+
tool: config.name
|
|
48
|
+
})
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
// Convert simple runAt to AbsoluteScheduleConfig (single-item schedule)
|
|
52
|
+
const scheduleConfig: AbsoluteScheduleConfig = {
|
|
53
|
+
type: 'absolute',
|
|
54
|
+
items: [{
|
|
55
|
+
runAt: config.runAt.toISOString(),
|
|
56
|
+
payload: options.input as Record<string, unknown>,
|
|
57
|
+
label: config.taskDescription
|
|
58
|
+
}]
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
// Build schedule input using execution context
|
|
62
|
+
const scheduleInput: CreateScheduleInput = {
|
|
63
|
+
organizationId: options.executionContext.organizationId,
|
|
64
|
+
name: config.taskDescription ?? `Scheduled: ${config.name}`,
|
|
65
|
+
description: `Created by ${config.name} tool`,
|
|
66
|
+
target: {
|
|
67
|
+
resourceType: config.targetResourceType,
|
|
68
|
+
resourceId: config.targetResourceId
|
|
69
|
+
},
|
|
70
|
+
scheduleConfig,
|
|
71
|
+
maxRetries: config.maxRetries ?? 3,
|
|
72
|
+
idempotencyKey: config.idempotencyKey,
|
|
73
|
+
|
|
74
|
+
// Origin tracking
|
|
75
|
+
originExecutionId: options.executionContext.executionId,
|
|
76
|
+
originResourceType: 'agent',
|
|
77
|
+
originResourceId: options.executionContext.resourceId
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
// Create schedule (returns TaskSchedule)
|
|
81
|
+
const schedule = await taskScheduler.createSchedule(scheduleInput)
|
|
82
|
+
|
|
83
|
+
// Return schedule ID for tracking (unchanged return shape)
|
|
84
|
+
return { taskId: schedule.id }
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Schedule Cancel by Key Tool
|
|
3
|
+
*
|
|
4
|
+
* Cancel a single schedule by its idempotency key (soft delete).
|
|
5
|
+
* Finds the schedule by key and cancels it. No-op if not found.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import { getToolServices } from '../../registry'
|
|
9
|
+
import type { Tool } from '../../types'
|
|
10
|
+
import { serviceUnavailable } from '../../types'
|
|
11
|
+
import { CancelScheduleByKeyInputSchema, CancelScheduleByKeyOutputSchema } from './types'
|
|
12
|
+
import type { CancelScheduleByKeyInput } from './types'
|
|
13
|
+
|
|
14
|
+
export function createScheduleCancelByKeyTool(): Tool {
|
|
15
|
+
return {
|
|
16
|
+
name: 'schedule_cancel_by_key',
|
|
17
|
+
description: 'Cancel a schedule by its idempotency key (soft delete). Sets status to cancelled. Returns whether a schedule was found and cancelled.',
|
|
18
|
+
inputSchema: CancelScheduleByKeyInputSchema,
|
|
19
|
+
outputSchema: CancelScheduleByKeyOutputSchema,
|
|
20
|
+
async execute({ input, executionContext }) {
|
|
21
|
+
if (!executionContext?.organizationId) {
|
|
22
|
+
throw serviceUnavailable('ExecutionContext', { tool: 'schedule_cancel_by_key', reason: 'organizationId required for multi-tenant isolation' })
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
const { taskSchedulerService } = getToolServices()
|
|
26
|
+
if (!taskSchedulerService) {
|
|
27
|
+
throw serviceUnavailable('TaskSchedulerService', {
|
|
28
|
+
message: 'Ensure toolServicesRegistry.initialize() was called in apps/api/src/main.ts',
|
|
29
|
+
tool: 'schedule_cancel_by_key'
|
|
30
|
+
})
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
const { idempotencyKey } = input as CancelScheduleByKeyInput
|
|
34
|
+
|
|
35
|
+
const schedule = await taskSchedulerService.findByIdempotencyKey(
|
|
36
|
+
executionContext.organizationId,
|
|
37
|
+
idempotencyKey
|
|
38
|
+
)
|
|
39
|
+
|
|
40
|
+
if (!schedule) {
|
|
41
|
+
return { cancelled: false }
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
await taskSchedulerService.cancelSchedule(schedule.id, executionContext.organizationId)
|
|
45
|
+
return { cancelled: true }
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Schedule Cancel by Metadata Tool
|
|
3
|
+
*
|
|
4
|
+
* Batch cancel (soft delete) task schedules matching metadata filters.
|
|
5
|
+
* Sets status to 'cancelled' and clears next_run_at.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import { getToolServices } from '../../registry'
|
|
9
|
+
import type { Tool } from '../../types'
|
|
10
|
+
import { serviceUnavailable } from '../../types'
|
|
11
|
+
import { CancelSchedulesByMetadataInputSchema, CancelSchedulesByMetadataOutputSchema } from './types'
|
|
12
|
+
import type { CancelSchedulesByMetadataInput } from './types'
|
|
13
|
+
|
|
14
|
+
export function createScheduleCancelByMetadataTool(): Tool {
|
|
15
|
+
return {
|
|
16
|
+
name: 'schedule_cancel_by_metadata',
|
|
17
|
+
description: 'Cancel all active schedules matching metadata filters. Performs a soft delete (sets status to cancelled). Use for batch cleanup when a contact unsubscribes or a deal is closed.',
|
|
18
|
+
inputSchema: CancelSchedulesByMetadataInputSchema,
|
|
19
|
+
outputSchema: CancelSchedulesByMetadataOutputSchema,
|
|
20
|
+
async execute({ input, executionContext }) {
|
|
21
|
+
if (!executionContext?.organizationId) {
|
|
22
|
+
throw serviceUnavailable('ExecutionContext', { tool: 'schedule_cancel_by_metadata', reason: 'organizationId required for multi-tenant isolation' })
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
const { taskSchedulerService } = getToolServices()
|
|
26
|
+
if (!taskSchedulerService) {
|
|
27
|
+
throw serviceUnavailable('TaskSchedulerService', {
|
|
28
|
+
message: 'Ensure toolServicesRegistry.initialize() was called in apps/api/src/main.ts',
|
|
29
|
+
tool: 'schedule_cancel_by_metadata'
|
|
30
|
+
})
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
const { metadata, status } = input as CancelSchedulesByMetadataInput
|
|
34
|
+
|
|
35
|
+
return taskSchedulerService.cancelSchedulesByMetadata(
|
|
36
|
+
executionContext.organizationId,
|
|
37
|
+
metadata,
|
|
38
|
+
status
|
|
39
|
+
)
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Schedule Delete by Key Tool
|
|
3
|
+
*
|
|
4
|
+
* Hard delete a schedule by its idempotency key.
|
|
5
|
+
* Removes the schedule from the database entirely so the key can be reused.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import { getToolServices } from '../../registry'
|
|
9
|
+
import type { Tool } from '../../types'
|
|
10
|
+
import { serviceUnavailable } from '../../types'
|
|
11
|
+
import { DeleteScheduleByKeyInputSchema, DeleteScheduleByKeyOutputSchema } from './types'
|
|
12
|
+
import type { DeleteScheduleByKeyInput } from './types'
|
|
13
|
+
|
|
14
|
+
export function createScheduleDeleteByKeyTool(): Tool {
|
|
15
|
+
return {
|
|
16
|
+
name: 'schedule_delete_by_key',
|
|
17
|
+
description: 'Hard delete a schedule by its idempotency key. Removes it from the database entirely so the key can be reused for a new schedule.',
|
|
18
|
+
inputSchema: DeleteScheduleByKeyInputSchema,
|
|
19
|
+
outputSchema: DeleteScheduleByKeyOutputSchema,
|
|
20
|
+
async execute({ input, executionContext }) {
|
|
21
|
+
if (!executionContext?.organizationId) {
|
|
22
|
+
throw serviceUnavailable('ExecutionContext', { tool: 'schedule_delete_by_key', reason: 'organizationId required for multi-tenant isolation' })
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
const { taskSchedulerService } = getToolServices()
|
|
26
|
+
if (!taskSchedulerService) {
|
|
27
|
+
throw serviceUnavailable('TaskSchedulerService', {
|
|
28
|
+
message: 'Ensure toolServicesRegistry.initialize() was called in apps/api/src/main.ts',
|
|
29
|
+
tool: 'schedule_delete_by_key'
|
|
30
|
+
})
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
const { idempotencyKey } = input as DeleteScheduleByKeyInput
|
|
34
|
+
|
|
35
|
+
await taskSchedulerService.deleteScheduleByIdempotencyKey(
|
|
36
|
+
idempotencyKey,
|
|
37
|
+
executionContext.organizationId
|
|
38
|
+
)
|
|
39
|
+
|
|
40
|
+
return { deleted: true }
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Schedule Management Platform Tools
|
|
3
|
+
*
|
|
4
|
+
* Tools for querying, cancelling, and deleting task schedules.
|
|
5
|
+
* Enables agents to manage schedules without direct database access.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
export * from './types'
|
|
9
|
+
|
|
10
|
+
export { createScheduleListTool } from './list-tool'
|
|
11
|
+
export { createScheduleCancelByMetadataTool } from './cancel-by-metadata-tool'
|
|
12
|
+
export { createScheduleCancelByKeyTool } from './cancel-by-key-tool'
|
|
13
|
+
export { createScheduleDeleteByKeyTool } from './delete-by-key-tool'
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Schedule List Tool
|
|
3
|
+
*
|
|
4
|
+
* List task schedules with optional metadata-based filtering.
|
|
5
|
+
* Supports JSONB containment queries for metadata fields.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import { getToolServices } from '../../registry'
|
|
9
|
+
import type { Tool } from '../../types'
|
|
10
|
+
import { serviceUnavailable } from '../../types'
|
|
11
|
+
import { ListSchedulesInputSchema, ListSchedulesOutputSchema } from './types'
|
|
12
|
+
import type { ListSchedulesInput } from './types'
|
|
13
|
+
|
|
14
|
+
export function createScheduleListTool(): Tool {
|
|
15
|
+
return {
|
|
16
|
+
name: 'schedule_list',
|
|
17
|
+
description: 'List task schedules with optional filters. Supports metadata-based JSONB filtering for finding schedules by contact email or other metadata fields.',
|
|
18
|
+
inputSchema: ListSchedulesInputSchema,
|
|
19
|
+
outputSchema: ListSchedulesOutputSchema,
|
|
20
|
+
async execute({ input, executionContext }) {
|
|
21
|
+
if (!executionContext?.organizationId) {
|
|
22
|
+
throw serviceUnavailable('ExecutionContext', { tool: 'schedule_list', reason: 'organizationId required for multi-tenant isolation' })
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
const { taskSchedulerService } = getToolServices()
|
|
26
|
+
if (!taskSchedulerService) {
|
|
27
|
+
throw serviceUnavailable('TaskSchedulerService', {
|
|
28
|
+
message: 'Ensure toolServicesRegistry.initialize() was called in apps/api/src/main.ts',
|
|
29
|
+
tool: 'schedule_list'
|
|
30
|
+
})
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
const { targetResourceId, status, metadata, limit } = input as ListSchedulesInput
|
|
34
|
+
|
|
35
|
+
const result = await taskSchedulerService.listSchedules({
|
|
36
|
+
organizationId: executionContext.organizationId,
|
|
37
|
+
targetResourceId,
|
|
38
|
+
status,
|
|
39
|
+
metadata,
|
|
40
|
+
limit
|
|
41
|
+
})
|
|
42
|
+
|
|
43
|
+
return {
|
|
44
|
+
schedules: result.schedules.map(s => ({
|
|
45
|
+
id: s.id,
|
|
46
|
+
name: s.name,
|
|
47
|
+
status: s.status,
|
|
48
|
+
nextRunAt: s.nextRunAt instanceof Date ? s.nextRunAt.toISOString() : s.nextRunAt ?? null,
|
|
49
|
+
idempotencyKey: s.idempotencyKey ?? null,
|
|
50
|
+
createdAt: s.createdAt instanceof Date ? s.createdAt.toISOString() : s.createdAt
|
|
51
|
+
})),
|
|
52
|
+
total: result.total
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Schedule Management Tool Types
|
|
3
|
+
*
|
|
4
|
+
* Zod schemas for schedule management platform tools.
|
|
5
|
+
* These tools enable agents to query, cancel, and delete task schedules.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import { z } from 'zod'
|
|
9
|
+
|
|
10
|
+
// ============================================
|
|
11
|
+
// List Schedules
|
|
12
|
+
// ============================================
|
|
13
|
+
|
|
14
|
+
export const ListSchedulesInputSchema = z.object({
|
|
15
|
+
/** Filter by target resource ID */
|
|
16
|
+
targetResourceId: z.string().optional(),
|
|
17
|
+
/** Filter by schedule status */
|
|
18
|
+
status: z.string().optional(),
|
|
19
|
+
/** JSONB containment filter for metadata (e.g., { contactEmail: 'user@example.com' }) */
|
|
20
|
+
metadata: z.record(z.string(), z.unknown()).optional(),
|
|
21
|
+
/** Maximum results to return (1-100, default: 20) */
|
|
22
|
+
limit: z.number().min(1).max(100).default(20)
|
|
23
|
+
})
|
|
24
|
+
|
|
25
|
+
export const ListSchedulesOutputSchema = z.object({
|
|
26
|
+
schedules: z.array(z.object({
|
|
27
|
+
id: z.string(),
|
|
28
|
+
name: z.string(),
|
|
29
|
+
status: z.string(),
|
|
30
|
+
nextRunAt: z.string().nullable(),
|
|
31
|
+
idempotencyKey: z.string().nullable(),
|
|
32
|
+
createdAt: z.string()
|
|
33
|
+
})),
|
|
34
|
+
total: z.number()
|
|
35
|
+
})
|
|
36
|
+
|
|
37
|
+
export type ListSchedulesInput = z.infer<typeof ListSchedulesInputSchema>
|
|
38
|
+
export type ListSchedulesOutput = z.infer<typeof ListSchedulesOutputSchema>
|
|
39
|
+
|
|
40
|
+
// ============================================
|
|
41
|
+
// Cancel Schedules by Metadata
|
|
42
|
+
// ============================================
|
|
43
|
+
|
|
44
|
+
export const CancelSchedulesByMetadataInputSchema = z.object({
|
|
45
|
+
/** JSONB containment filter for metadata (required) */
|
|
46
|
+
metadata: z.record(z.string(), z.unknown()),
|
|
47
|
+
/** Only cancel schedules with this status (default: 'active') */
|
|
48
|
+
status: z.string().default('active')
|
|
49
|
+
})
|
|
50
|
+
|
|
51
|
+
export const CancelSchedulesByMetadataOutputSchema = z.object({
|
|
52
|
+
cancelled: z.number()
|
|
53
|
+
})
|
|
54
|
+
|
|
55
|
+
export type CancelSchedulesByMetadataInput = z.infer<typeof CancelSchedulesByMetadataInputSchema>
|
|
56
|
+
export type CancelSchedulesByMetadataOutput = z.infer<typeof CancelSchedulesByMetadataOutputSchema>
|
|
57
|
+
|
|
58
|
+
// ============================================
|
|
59
|
+
// Cancel Schedule by Idempotency Key
|
|
60
|
+
// ============================================
|
|
61
|
+
|
|
62
|
+
export const CancelScheduleByKeyInputSchema = z.object({
|
|
63
|
+
/** Idempotency key of the schedule to cancel */
|
|
64
|
+
idempotencyKey: z.string()
|
|
65
|
+
})
|
|
66
|
+
|
|
67
|
+
export const CancelScheduleByKeyOutputSchema = z.object({
|
|
68
|
+
cancelled: z.boolean()
|
|
69
|
+
})
|
|
70
|
+
|
|
71
|
+
export type CancelScheduleByKeyInput = z.infer<typeof CancelScheduleByKeyInputSchema>
|
|
72
|
+
export type CancelScheduleByKeyOutput = z.infer<typeof CancelScheduleByKeyOutputSchema>
|
|
73
|
+
|
|
74
|
+
// ============================================
|
|
75
|
+
// Delete Schedule by Idempotency Key
|
|
76
|
+
// ============================================
|
|
77
|
+
|
|
78
|
+
export const DeleteScheduleByKeyInputSchema = z.object({
|
|
79
|
+
/** Idempotency key of the schedule to hard-delete */
|
|
80
|
+
idempotencyKey: z.string()
|
|
81
|
+
})
|
|
82
|
+
|
|
83
|
+
export const DeleteScheduleByKeyOutputSchema = z.object({
|
|
84
|
+
deleted: z.boolean()
|
|
85
|
+
})
|
|
86
|
+
|
|
87
|
+
export type DeleteScheduleByKeyInput = z.infer<typeof DeleteScheduleByKeyInputSchema>
|
|
88
|
+
export type DeleteScheduleByKeyOutput = z.infer<typeof DeleteScheduleByKeyOutputSchema>
|