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