@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,614 @@
|
|
|
1
|
+
import { describe, it, expect, vi } from 'vitest'
|
|
2
|
+
import { Agent } from '../agent'
|
|
3
|
+
import type { AgentDefinition, AgentConfig, LLMAdapterFactory } from '../types'
|
|
4
|
+
import type { Contract } from '../../../base/types'
|
|
5
|
+
import { z } from 'zod'
|
|
6
|
+
import { createMockExecutionContext, createMockTool } from '../../../test-utils/mocks'
|
|
7
|
+
import { MockAdapter } from '../../../llm/adapters/mock-adapter'
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Create a mock LLMAdapterFactory that returns a MockAdapter instance.
|
|
11
|
+
* Used to satisfy the Agent constructor's second parameter.
|
|
12
|
+
*/
|
|
13
|
+
function createMockAdapterFactory(): LLMAdapterFactory {
|
|
14
|
+
const adapter = new MockAdapter()
|
|
15
|
+
return () => adapter
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
describe('Agent Execution', () => {
|
|
19
|
+
|
|
20
|
+
// Helper: Create minimal agent definition with mock provider
|
|
21
|
+
const createAgentDefinition = (overrides?: Partial<AgentDefinition>): AgentDefinition => {
|
|
22
|
+
const config: AgentConfig = {
|
|
23
|
+
type: 'agent',
|
|
24
|
+
resourceId: 'test-agent',
|
|
25
|
+
name: 'Test Agent',
|
|
26
|
+
description: 'Agent for testing',
|
|
27
|
+
environment: 'dev',
|
|
28
|
+
systemPrompt: 'You are a test agent'
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
const contract: Contract = {
|
|
32
|
+
inputSchema: z.object({ query: z.string() }),
|
|
33
|
+
outputSchema: z.object({ response: z.string(), processedAt: z.string() })
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
return {
|
|
37
|
+
config,
|
|
38
|
+
contract,
|
|
39
|
+
tools: [],
|
|
40
|
+
modelConfig: {
|
|
41
|
+
model: 'mock',
|
|
42
|
+
provider: 'mock',
|
|
43
|
+
apiKey: 'test-key'
|
|
44
|
+
},
|
|
45
|
+
...overrides
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
describe('Constructor', () => {
|
|
51
|
+
it('creates agent instance from definition', () => {
|
|
52
|
+
const definition = createAgentDefinition()
|
|
53
|
+
const agent = new Agent(definition, createMockAdapterFactory())
|
|
54
|
+
|
|
55
|
+
expect(agent.config).toEqual(definition.config)
|
|
56
|
+
expect(agent.contract).toEqual(definition.contract)
|
|
57
|
+
expect(agent.getTools()).toEqual(definition.tools)
|
|
58
|
+
expect(agent.modelConfig).toEqual(definition.modelConfig)
|
|
59
|
+
})
|
|
60
|
+
|
|
61
|
+
it('stores tools from definition', () => {
|
|
62
|
+
const tools = [createMockTool('toolA'), createMockTool('toolB')]
|
|
63
|
+
const definition = createAgentDefinition({ tools })
|
|
64
|
+
const agent = new Agent(definition, createMockAdapterFactory())
|
|
65
|
+
|
|
66
|
+
const registeredTools = agent.getTools()
|
|
67
|
+
expect(registeredTools).toHaveLength(2)
|
|
68
|
+
expect(registeredTools[0].name).toBe('toolA')
|
|
69
|
+
expect(registeredTools[1].name).toBe('toolB')
|
|
70
|
+
})
|
|
71
|
+
})
|
|
72
|
+
|
|
73
|
+
describe('Phase 1: Initialization', () => {
|
|
74
|
+
it('validates input against contract schema', async () => {
|
|
75
|
+
const definition = createAgentDefinition()
|
|
76
|
+
const agent = new Agent(definition, createMockAdapterFactory())
|
|
77
|
+
const context = createMockExecutionContext()
|
|
78
|
+
|
|
79
|
+
const input = { query: 'test query' }
|
|
80
|
+
const output = await agent.execute(input, context)
|
|
81
|
+
|
|
82
|
+
// If input validation failed, execution would throw
|
|
83
|
+
expect(output).toBeDefined()
|
|
84
|
+
expect(output).toHaveProperty('response')
|
|
85
|
+
})
|
|
86
|
+
|
|
87
|
+
it('throws error on invalid input', async () => {
|
|
88
|
+
const definition = createAgentDefinition()
|
|
89
|
+
const agent = new Agent(definition, createMockAdapterFactory())
|
|
90
|
+
const context = createMockExecutionContext()
|
|
91
|
+
|
|
92
|
+
const invalidInput = { wrong: 'field' }
|
|
93
|
+
|
|
94
|
+
await expect(agent.execute(invalidInput as unknown, context)).rejects.toThrow()
|
|
95
|
+
})
|
|
96
|
+
|
|
97
|
+
it('creates memory manager with empty memory by default', async () => {
|
|
98
|
+
const definition = createAgentDefinition()
|
|
99
|
+
const agent = new Agent(definition, createMockAdapterFactory())
|
|
100
|
+
const context = createMockExecutionContext()
|
|
101
|
+
|
|
102
|
+
const input = { query: 'test' }
|
|
103
|
+
await agent.execute(input, context)
|
|
104
|
+
|
|
105
|
+
expect(agent.memoryManager).toBeDefined()
|
|
106
|
+
const snapshot = agent.getMemorySnapshot()
|
|
107
|
+
expect(snapshot).toBeDefined()
|
|
108
|
+
})
|
|
109
|
+
|
|
110
|
+
it('preloads memory if preloadMemory callback provided', async () => {
|
|
111
|
+
const preloadMemory = vi.fn(async () => ({
|
|
112
|
+
sessionMemory: {
|
|
113
|
+
context: {
|
|
114
|
+
type: 'context' as const,
|
|
115
|
+
content: 'Preloaded context',
|
|
116
|
+
timestamp: Date.now()
|
|
117
|
+
}
|
|
118
|
+
},
|
|
119
|
+
history: []
|
|
120
|
+
}))
|
|
121
|
+
|
|
122
|
+
const definition = createAgentDefinition({ preloadMemory })
|
|
123
|
+
const agent = new Agent(definition, createMockAdapterFactory())
|
|
124
|
+
const context = createMockExecutionContext()
|
|
125
|
+
|
|
126
|
+
const input = { query: 'test' }
|
|
127
|
+
await agent.execute(input, context)
|
|
128
|
+
|
|
129
|
+
expect(preloadMemory).toHaveBeenCalledWith(context)
|
|
130
|
+
|
|
131
|
+
const snapshot = agent.getMemorySnapshot()
|
|
132
|
+
expect(snapshot?.sessionMemory['context']).toBeDefined()
|
|
133
|
+
expect(snapshot?.sessionMemory['context'].content).toBe('Preloaded context')
|
|
134
|
+
})
|
|
135
|
+
|
|
136
|
+
it('adds input entry to memory history', async () => {
|
|
137
|
+
const definition = createAgentDefinition()
|
|
138
|
+
const agent = new Agent(definition, createMockAdapterFactory())
|
|
139
|
+
const context = createMockExecutionContext()
|
|
140
|
+
|
|
141
|
+
const input = { query: 'test query' }
|
|
142
|
+
await agent.execute(input, context)
|
|
143
|
+
|
|
144
|
+
const snapshot = agent.getMemorySnapshot()
|
|
145
|
+
const inputEntry = snapshot?.history.find((entry) => entry.type === 'input')
|
|
146
|
+
|
|
147
|
+
expect(inputEntry).toBeDefined()
|
|
148
|
+
expect(inputEntry?.content).toContain('test query')
|
|
149
|
+
})
|
|
150
|
+
})
|
|
151
|
+
|
|
152
|
+
describe('Phase 2: Iteration Loop (Mock Adapter)', () => {
|
|
153
|
+
it('completes execution with mock adapter', async () => {
|
|
154
|
+
const definition = createAgentDefinition()
|
|
155
|
+
const agent = new Agent(definition, createMockAdapterFactory())
|
|
156
|
+
const context = createMockExecutionContext()
|
|
157
|
+
|
|
158
|
+
const input = { query: 'test' }
|
|
159
|
+
const output = await agent.execute(input, context)
|
|
160
|
+
|
|
161
|
+
// Mock adapter returns immediately with complete action
|
|
162
|
+
expect(output).toBeDefined()
|
|
163
|
+
expect(output.response).toBe('Mock response')
|
|
164
|
+
})
|
|
165
|
+
|
|
166
|
+
it('respects maxIterations constraint', async () => {
|
|
167
|
+
const definition = createAgentDefinition({
|
|
168
|
+
config: {
|
|
169
|
+
type: 'agent',
|
|
170
|
+
resourceId: 'test-agent',
|
|
171
|
+
name: 'Test Agent',
|
|
172
|
+
description: 'Agent for testing',
|
|
173
|
+
environment: 'dev',
|
|
174
|
+
systemPrompt: 'Test',
|
|
175
|
+
constraints: { maxIterations: 1 }
|
|
176
|
+
}
|
|
177
|
+
})
|
|
178
|
+
|
|
179
|
+
const agent = new Agent(definition, createMockAdapterFactory())
|
|
180
|
+
const context = createMockExecutionContext()
|
|
181
|
+
|
|
182
|
+
const input = { query: 'test' }
|
|
183
|
+
|
|
184
|
+
// Mock adapter completes immediately, so this won't hit the limit
|
|
185
|
+
const output = await agent.execute(input, context)
|
|
186
|
+
expect(output).toBeDefined()
|
|
187
|
+
})
|
|
188
|
+
|
|
189
|
+
it('stores reasoning to memory history', async () => {
|
|
190
|
+
const definition = createAgentDefinition()
|
|
191
|
+
const agent = new Agent(definition, createMockAdapterFactory())
|
|
192
|
+
const context = createMockExecutionContext()
|
|
193
|
+
|
|
194
|
+
const input = { query: 'test' }
|
|
195
|
+
await agent.execute(input, context)
|
|
196
|
+
|
|
197
|
+
const snapshot = agent.getMemorySnapshot()
|
|
198
|
+
const reasoningEntry = snapshot?.history.find((entry) => entry.type === 'reasoning')
|
|
199
|
+
|
|
200
|
+
expect(reasoningEntry).toBeDefined()
|
|
201
|
+
expect(reasoningEntry?.content).toContain('Mock reasoning')
|
|
202
|
+
})
|
|
203
|
+
})
|
|
204
|
+
|
|
205
|
+
describe('Phase 3: Completion', () => {
|
|
206
|
+
it('generates final output from execution history', async () => {
|
|
207
|
+
const definition = createAgentDefinition()
|
|
208
|
+
const agent = new Agent(definition, createMockAdapterFactory())
|
|
209
|
+
const context = createMockExecutionContext()
|
|
210
|
+
|
|
211
|
+
const input = { query: 'test' }
|
|
212
|
+
const output = await agent.execute(input, context)
|
|
213
|
+
|
|
214
|
+
expect(output).toBeDefined()
|
|
215
|
+
expect(output.response).toBe('Mock response')
|
|
216
|
+
expect(output.processedAt).toBeDefined()
|
|
217
|
+
})
|
|
218
|
+
|
|
219
|
+
it('validates output against contract schema', async () => {
|
|
220
|
+
const definition = createAgentDefinition()
|
|
221
|
+
const agent = new Agent(definition, createMockAdapterFactory())
|
|
222
|
+
const context = createMockExecutionContext()
|
|
223
|
+
|
|
224
|
+
const input = { query: 'test' }
|
|
225
|
+
const output = await agent.execute(input, context)
|
|
226
|
+
|
|
227
|
+
// If validation failed, execute would throw
|
|
228
|
+
expect(output).toBeDefined()
|
|
229
|
+
expect(output).toHaveProperty('response')
|
|
230
|
+
expect(output).toHaveProperty('processedAt')
|
|
231
|
+
})
|
|
232
|
+
|
|
233
|
+
it('captures memory snapshot after completion', async () => {
|
|
234
|
+
const definition = createAgentDefinition()
|
|
235
|
+
const agent = new Agent(definition, createMockAdapterFactory())
|
|
236
|
+
const context = createMockExecutionContext()
|
|
237
|
+
|
|
238
|
+
const input = { query: 'test' }
|
|
239
|
+
await agent.execute(input, context)
|
|
240
|
+
|
|
241
|
+
const snapshot = agent.getMemorySnapshot()
|
|
242
|
+
|
|
243
|
+
expect(snapshot).toBeDefined()
|
|
244
|
+
expect(snapshot?.history).toBeDefined()
|
|
245
|
+
expect(snapshot?.sessionMemory).toBeDefined()
|
|
246
|
+
})
|
|
247
|
+
})
|
|
248
|
+
|
|
249
|
+
describe('Error Handling', () => {
|
|
250
|
+
it('throws error from initialization phase on invalid input', async () => {
|
|
251
|
+
const definition = createAgentDefinition()
|
|
252
|
+
const agent = new Agent(definition, createMockAdapterFactory())
|
|
253
|
+
const context = createMockExecutionContext()
|
|
254
|
+
|
|
255
|
+
// Invalid input will cause initialization to fail
|
|
256
|
+
const invalidInput = { wrong: 'field' }
|
|
257
|
+
|
|
258
|
+
await expect(agent.execute(invalidInput as unknown, context)).rejects.toThrow()
|
|
259
|
+
})
|
|
260
|
+
|
|
261
|
+
it('validates output schema strictly', async () => {
|
|
262
|
+
// Create definition with strict output schema
|
|
263
|
+
const strictDefinition = createAgentDefinition({
|
|
264
|
+
contract: {
|
|
265
|
+
inputSchema: z.object({ query: z.string() }),
|
|
266
|
+
outputSchema: z.object({
|
|
267
|
+
response: z.string(),
|
|
268
|
+
count: z.number() // Mock adapter won't provide this
|
|
269
|
+
})
|
|
270
|
+
}
|
|
271
|
+
})
|
|
272
|
+
|
|
273
|
+
const agent = new Agent(strictDefinition, createMockAdapterFactory())
|
|
274
|
+
const context = createMockExecutionContext()
|
|
275
|
+
|
|
276
|
+
const input = { query: 'test' }
|
|
277
|
+
|
|
278
|
+
// Should fail because mock adapter doesn't match strict schema
|
|
279
|
+
await expect(agent.execute(input, context)).rejects.toThrow()
|
|
280
|
+
})
|
|
281
|
+
|
|
282
|
+
it('handles preloadMemory callback errors gracefully', async () => {
|
|
283
|
+
const preloadMemory = vi.fn(async () => {
|
|
284
|
+
throw new Error('Failed to load memory from database')
|
|
285
|
+
})
|
|
286
|
+
|
|
287
|
+
const definition = createAgentDefinition({ preloadMemory })
|
|
288
|
+
const agent = new Agent(definition, createMockAdapterFactory())
|
|
289
|
+
const context = createMockExecutionContext()
|
|
290
|
+
|
|
291
|
+
const input = { query: 'test' }
|
|
292
|
+
|
|
293
|
+
await expect(agent.execute(input, context)).rejects.toThrow('Failed to load memory from database')
|
|
294
|
+
expect(preloadMemory).toHaveBeenCalledWith(context)
|
|
295
|
+
})
|
|
296
|
+
|
|
297
|
+
it('handles null input gracefully', async () => {
|
|
298
|
+
const definition = createAgentDefinition()
|
|
299
|
+
const agent = new Agent(definition, createMockAdapterFactory())
|
|
300
|
+
const context = createMockExecutionContext()
|
|
301
|
+
|
|
302
|
+
await expect(agent.execute(null as unknown, context)).rejects.toThrow()
|
|
303
|
+
})
|
|
304
|
+
|
|
305
|
+
it('handles undefined input gracefully', async () => {
|
|
306
|
+
const definition = createAgentDefinition()
|
|
307
|
+
const agent = new Agent(definition, createMockAdapterFactory())
|
|
308
|
+
const context = createMockExecutionContext()
|
|
309
|
+
|
|
310
|
+
await expect(agent.execute(undefined as unknown, context)).rejects.toThrow()
|
|
311
|
+
})
|
|
312
|
+
|
|
313
|
+
it('handles empty object when required fields missing', async () => {
|
|
314
|
+
const definition = createAgentDefinition({
|
|
315
|
+
contract: {
|
|
316
|
+
inputSchema: z.object({
|
|
317
|
+
query: z.string(),
|
|
318
|
+
requiredField: z.string()
|
|
319
|
+
}),
|
|
320
|
+
outputSchema: z.object({ response: z.string() })
|
|
321
|
+
}
|
|
322
|
+
})
|
|
323
|
+
|
|
324
|
+
const agent = new Agent(definition, createMockAdapterFactory())
|
|
325
|
+
const context = createMockExecutionContext()
|
|
326
|
+
|
|
327
|
+
const invalidInput = { query: 'test' } // missing requiredField
|
|
328
|
+
|
|
329
|
+
await expect(agent.execute(invalidInput as unknown, context)).rejects.toThrow()
|
|
330
|
+
})
|
|
331
|
+
|
|
332
|
+
it('handles input with extra unexpected fields', async () => {
|
|
333
|
+
const definition = createAgentDefinition({
|
|
334
|
+
contract: {
|
|
335
|
+
inputSchema: z.object({ query: z.string() }).strict(),
|
|
336
|
+
outputSchema: z.object({ response: z.string(), processedAt: z.string() })
|
|
337
|
+
}
|
|
338
|
+
})
|
|
339
|
+
|
|
340
|
+
const agent = new Agent(definition, createMockAdapterFactory())
|
|
341
|
+
const context = createMockExecutionContext()
|
|
342
|
+
|
|
343
|
+
const inputWithExtras = {
|
|
344
|
+
query: 'test',
|
|
345
|
+
unexpected: 'field',
|
|
346
|
+
another: 'value'
|
|
347
|
+
}
|
|
348
|
+
|
|
349
|
+
// Strict schema should reject extra fields
|
|
350
|
+
await expect(agent.execute(inputWithExtras as unknown, context)).rejects.toThrow()
|
|
351
|
+
})
|
|
352
|
+
|
|
353
|
+
it('validates complex nested input schemas', async () => {
|
|
354
|
+
const definition = createAgentDefinition({
|
|
355
|
+
contract: {
|
|
356
|
+
inputSchema: z.object({
|
|
357
|
+
query: z.string(),
|
|
358
|
+
options: z.object({
|
|
359
|
+
temperature: z.number().min(0).max(1),
|
|
360
|
+
maxTokens: z.number().positive()
|
|
361
|
+
})
|
|
362
|
+
}),
|
|
363
|
+
outputSchema: z.object({ response: z.string(), processedAt: z.string() })
|
|
364
|
+
}
|
|
365
|
+
})
|
|
366
|
+
|
|
367
|
+
const agent = new Agent(definition, createMockAdapterFactory())
|
|
368
|
+
const context = createMockExecutionContext()
|
|
369
|
+
|
|
370
|
+
// Invalid nested field (temperature > 1)
|
|
371
|
+
const invalidInput = {
|
|
372
|
+
query: 'test',
|
|
373
|
+
options: {
|
|
374
|
+
temperature: 1.5, // exceeds max
|
|
375
|
+
maxTokens: 100
|
|
376
|
+
}
|
|
377
|
+
}
|
|
378
|
+
|
|
379
|
+
await expect(agent.execute(invalidInput as unknown, context)).rejects.toThrow()
|
|
380
|
+
})
|
|
381
|
+
|
|
382
|
+
it('handles output validation failures with detailed error', async () => {
|
|
383
|
+
const definition = createAgentDefinition({
|
|
384
|
+
contract: {
|
|
385
|
+
inputSchema: z.object({ query: z.string() }),
|
|
386
|
+
outputSchema: z.object({
|
|
387
|
+
response: z.string().min(10), // Mock returns shorter string
|
|
388
|
+
processedAt: z.string(),
|
|
389
|
+
requiredField: z.string() // Mock won't provide this
|
|
390
|
+
})
|
|
391
|
+
}
|
|
392
|
+
})
|
|
393
|
+
|
|
394
|
+
const agent = new Agent(definition, createMockAdapterFactory())
|
|
395
|
+
const context = createMockExecutionContext()
|
|
396
|
+
|
|
397
|
+
const input = { query: 'test' }
|
|
398
|
+
|
|
399
|
+
await expect(agent.execute(input, context)).rejects.toThrow()
|
|
400
|
+
})
|
|
401
|
+
|
|
402
|
+
it('logs errors to context logger', async () => {
|
|
403
|
+
const definition = createAgentDefinition()
|
|
404
|
+
const agent = new Agent(definition, createMockAdapterFactory())
|
|
405
|
+
const context = createMockExecutionContext()
|
|
406
|
+
|
|
407
|
+
const invalidInput = { wrong: 'field' }
|
|
408
|
+
|
|
409
|
+
try {
|
|
410
|
+
await agent.execute(invalidInput as unknown, context)
|
|
411
|
+
} catch {
|
|
412
|
+
// Expected to throw
|
|
413
|
+
}
|
|
414
|
+
|
|
415
|
+
// Logger should have recorded the error (implementation detail, but useful to verify)
|
|
416
|
+
expect(context.logger.info).toHaveBeenCalled()
|
|
417
|
+
})
|
|
418
|
+
|
|
419
|
+
it('handles maxIterations edge case (zero iterations)', async () => {
|
|
420
|
+
const definition = createAgentDefinition({
|
|
421
|
+
config: {
|
|
422
|
+
type: 'agent',
|
|
423
|
+
resourceId: 'test-agent',
|
|
424
|
+
name: 'Test Agent',
|
|
425
|
+
description: 'Agent for testing',
|
|
426
|
+
environment: 'dev',
|
|
427
|
+
systemPrompt: 'Test',
|
|
428
|
+
constraints: { maxIterations: 0 } // Edge case: no iterations allowed
|
|
429
|
+
}
|
|
430
|
+
})
|
|
431
|
+
|
|
432
|
+
const agent = new Agent(definition, createMockAdapterFactory())
|
|
433
|
+
const context = createMockExecutionContext()
|
|
434
|
+
|
|
435
|
+
const input = { query: 'test' }
|
|
436
|
+
|
|
437
|
+
// Mock adapter completes immediately regardless of maxIterations
|
|
438
|
+
// Test that zero iterations doesn't cause crash
|
|
439
|
+
const output = await agent.execute(input, context)
|
|
440
|
+
expect(output).toBeDefined()
|
|
441
|
+
})
|
|
442
|
+
|
|
443
|
+
it('handles negative maxIterations', async () => {
|
|
444
|
+
const definition = createAgentDefinition({
|
|
445
|
+
config: {
|
|
446
|
+
type: 'agent',
|
|
447
|
+
resourceId: 'test-agent',
|
|
448
|
+
name: 'Test Agent',
|
|
449
|
+
description: 'Agent for testing',
|
|
450
|
+
environment: 'dev',
|
|
451
|
+
systemPrompt: 'Test',
|
|
452
|
+
constraints: { maxIterations: -1 } // Invalid constraint
|
|
453
|
+
}
|
|
454
|
+
})
|
|
455
|
+
|
|
456
|
+
const agent = new Agent(definition, createMockAdapterFactory())
|
|
457
|
+
const context = createMockExecutionContext()
|
|
458
|
+
|
|
459
|
+
const input = { query: 'test' }
|
|
460
|
+
|
|
461
|
+
// Should handle invalid constraint gracefully
|
|
462
|
+
await expect(agent.execute(input, context)).rejects.toThrow()
|
|
463
|
+
})
|
|
464
|
+
})
|
|
465
|
+
|
|
466
|
+
describe('Memory Management', () => {
|
|
467
|
+
it('maintains memory across iteration and completion phases', async () => {
|
|
468
|
+
const definition = createAgentDefinition()
|
|
469
|
+
const agent = new Agent(definition, createMockAdapterFactory())
|
|
470
|
+
const context = createMockExecutionContext()
|
|
471
|
+
|
|
472
|
+
const input = { query: 'test' }
|
|
473
|
+
await agent.execute(input, context)
|
|
474
|
+
|
|
475
|
+
const snapshot = agent.getMemorySnapshot()
|
|
476
|
+
|
|
477
|
+
// Should have input entry, reasoning entry
|
|
478
|
+
expect(snapshot?.history.length).toBeGreaterThanOrEqual(2)
|
|
479
|
+
|
|
480
|
+
const inputEntry = snapshot?.history.find((e) => e.type === 'input')
|
|
481
|
+
const reasoningEntry = snapshot?.history.find((e) => e.type === 'reasoning')
|
|
482
|
+
|
|
483
|
+
expect(inputEntry).toBeDefined()
|
|
484
|
+
expect(reasoningEntry).toBeDefined()
|
|
485
|
+
})
|
|
486
|
+
|
|
487
|
+
it('preloaded session memory is preserved', async () => {
|
|
488
|
+
const preloadMemory = async () => ({
|
|
489
|
+
sessionMemory: {
|
|
490
|
+
task: {
|
|
491
|
+
type: 'context' as const,
|
|
492
|
+
content: 'Build feature X',
|
|
493
|
+
timestamp: Date.now()
|
|
494
|
+
},
|
|
495
|
+
guidelines: {
|
|
496
|
+
type: 'context' as const,
|
|
497
|
+
content: 'Follow best practices',
|
|
498
|
+
timestamp: Date.now()
|
|
499
|
+
}
|
|
500
|
+
},
|
|
501
|
+
history: []
|
|
502
|
+
})
|
|
503
|
+
|
|
504
|
+
const definition = createAgentDefinition({ preloadMemory })
|
|
505
|
+
const agent = new Agent(definition, createMockAdapterFactory())
|
|
506
|
+
const context = createMockExecutionContext()
|
|
507
|
+
|
|
508
|
+
const input = { query: 'test' }
|
|
509
|
+
await agent.execute(input, context)
|
|
510
|
+
|
|
511
|
+
const snapshot = agent.getMemorySnapshot()
|
|
512
|
+
|
|
513
|
+
expect(snapshot?.sessionMemory['task']).toBeDefined()
|
|
514
|
+
expect(snapshot?.sessionMemory['task'].content).toBe('Build feature X')
|
|
515
|
+
expect(snapshot?.sessionMemory['guidelines']).toBeDefined()
|
|
516
|
+
expect(snapshot?.sessionMemory['guidelines'].content).toBe('Follow best practices')
|
|
517
|
+
})
|
|
518
|
+
})
|
|
519
|
+
|
|
520
|
+
describe('Execution Context', () => {
|
|
521
|
+
it('passes execution context to all phases', async () => {
|
|
522
|
+
const definition = createAgentDefinition()
|
|
523
|
+
const agent = new Agent(definition, createMockAdapterFactory())
|
|
524
|
+
const context = createMockExecutionContext()
|
|
525
|
+
|
|
526
|
+
const input = { query: 'test' }
|
|
527
|
+
await agent.execute(input, context)
|
|
528
|
+
|
|
529
|
+
// Execution completed successfully, context was passed through
|
|
530
|
+
expect(context.executionId).toBe('test-exec-123')
|
|
531
|
+
expect(context.organizationId).toBe('test-org-123')
|
|
532
|
+
expect(context.userId).toBe('test-user-123')
|
|
533
|
+
})
|
|
534
|
+
|
|
535
|
+
it('uses scoped logger for execution tracking', async () => {
|
|
536
|
+
const definition = createAgentDefinition()
|
|
537
|
+
const agent = new Agent(definition, createMockAdapterFactory())
|
|
538
|
+
const context = createMockExecutionContext()
|
|
539
|
+
|
|
540
|
+
const input = { query: 'test' }
|
|
541
|
+
await agent.execute(input, context)
|
|
542
|
+
|
|
543
|
+
// Logger should have been called for lifecycle events
|
|
544
|
+
expect(context.logger.info).toHaveBeenCalled()
|
|
545
|
+
})
|
|
546
|
+
})
|
|
547
|
+
|
|
548
|
+
describe('Tool Registry', () => {
|
|
549
|
+
it('initializes registry with base tools', () => {
|
|
550
|
+
const tools = [createMockTool('tool1'), createMockTool('tool2')]
|
|
551
|
+
const definition = createAgentDefinition({ tools })
|
|
552
|
+
const agent = new Agent(definition, createMockAdapterFactory())
|
|
553
|
+
|
|
554
|
+
const registeredTools = agent.getTools()
|
|
555
|
+
expect(registeredTools).toHaveLength(2)
|
|
556
|
+
expect(registeredTools.find(t => t.name === 'tool1')).toBeDefined()
|
|
557
|
+
expect(registeredTools.find(t => t.name === 'tool2')).toBeDefined()
|
|
558
|
+
})
|
|
559
|
+
|
|
560
|
+
it('registers new tools dynamically', () => {
|
|
561
|
+
const tool1 = createMockTool('tool1')
|
|
562
|
+
const definition = createAgentDefinition({ tools: [tool1] })
|
|
563
|
+
const agent = new Agent(definition, createMockAdapterFactory())
|
|
564
|
+
|
|
565
|
+
const newTools = [createMockTool('tool2'), createMockTool('tool3')]
|
|
566
|
+
agent.registerTools(newTools)
|
|
567
|
+
|
|
568
|
+
const registeredTools = agent.getTools()
|
|
569
|
+
expect(registeredTools).toHaveLength(3)
|
|
570
|
+
expect(registeredTools.find(t => t.name === 'tool1')).toBeDefined()
|
|
571
|
+
expect(registeredTools.find(t => t.name === 'tool2')).toBeDefined()
|
|
572
|
+
expect(registeredTools.find(t => t.name === 'tool3')).toBeDefined()
|
|
573
|
+
})
|
|
574
|
+
|
|
575
|
+
it('gracefully skips duplicate tool registration', () => {
|
|
576
|
+
const tool1 = createMockTool('tool1')
|
|
577
|
+
const definition = createAgentDefinition({ tools: [tool1] })
|
|
578
|
+
const agent = new Agent(definition, createMockAdapterFactory())
|
|
579
|
+
|
|
580
|
+
const duplicateTool = createMockTool('tool1')
|
|
581
|
+
// Should not throw - gracefully skips duplicate
|
|
582
|
+
agent.registerTools([duplicateTool])
|
|
583
|
+
|
|
584
|
+
// Tool count should remain 1 (duplicate skipped)
|
|
585
|
+
const registeredTools = agent.getTools()
|
|
586
|
+
expect(registeredTools).toHaveLength(1)
|
|
587
|
+
})
|
|
588
|
+
|
|
589
|
+
it('getTools returns array of all registered tools', () => {
|
|
590
|
+
const tools = [createMockTool('tool1'), createMockTool('tool2'), createMockTool('tool3')]
|
|
591
|
+
const definition = createAgentDefinition({ tools })
|
|
592
|
+
const agent = new Agent(definition, createMockAdapterFactory())
|
|
593
|
+
|
|
594
|
+
const registeredTools = agent.getTools()
|
|
595
|
+
expect(registeredTools).toHaveLength(3)
|
|
596
|
+
})
|
|
597
|
+
|
|
598
|
+
it('allows registering multiple tools at once', () => {
|
|
599
|
+
const tool1 = createMockTool('tool1')
|
|
600
|
+
const definition = createAgentDefinition({ tools: [tool1] })
|
|
601
|
+
const agent = new Agent(definition, createMockAdapterFactory())
|
|
602
|
+
|
|
603
|
+
const newTools = [
|
|
604
|
+
createMockTool('tool2'),
|
|
605
|
+
createMockTool('tool3'),
|
|
606
|
+
createMockTool('tool4')
|
|
607
|
+
]
|
|
608
|
+
agent.registerTools(newTools)
|
|
609
|
+
|
|
610
|
+
const registeredTools = agent.getTools()
|
|
611
|
+
expect(registeredTools).toHaveLength(4)
|
|
612
|
+
})
|
|
613
|
+
})
|
|
614
|
+
})
|