@elevasis/core 0.7.0 → 0.8.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/package.json +3 -3
- package/src/README.md +41 -41
- package/src/__tests__/publish.test.ts +18 -18
- package/src/__tests__/{template-foundations-compatibility.test.ts → template-core-compatibility.test.ts} +99 -99
- package/src/_gen/__tests__/__snapshots__/contracts.md.snap +1135 -1131
- package/src/_gen/__tests__/scaffold-contracts.test.ts +53 -53
- package/src/_gen/scaffold-contracts.ts +45 -45
- package/src/auth/multi-tenancy/credentials/README.md +38 -38
- package/src/auth/multi-tenancy/credentials/index.ts +6 -6
- package/src/auth/multi-tenancy/credentials/server/encryption.ts +39 -39
- package/src/auth/multi-tenancy/credentials/server/service.ts +60 -60
- package/src/auth/multi-tenancy/index.ts +17 -17
- package/src/auth/multi-tenancy/invitations/api-schemas.ts +107 -107
- package/src/auth/multi-tenancy/invitations/index.ts +37 -37
- package/src/auth/multi-tenancy/invitations/invitation.ts +86 -86
- package/src/auth/multi-tenancy/invitations/server/index.ts +25 -25
- package/src/auth/multi-tenancy/invitations/server/transforms.ts +24 -24
- package/src/auth/multi-tenancy/invitations/server/workos.ts +24 -24
- package/src/auth/multi-tenancy/invitations/supabase.ts +50 -50
- package/src/auth/multi-tenancy/memberships/api-schemas.ts +126 -126
- package/src/auth/multi-tenancy/memberships/index.ts +21 -21
- package/src/auth/multi-tenancy/memberships/membership.ts +138 -138
- package/src/auth/multi-tenancy/memberships/server/index.ts +15 -15
- package/src/auth/multi-tenancy/memberships/server/transforms.ts +32 -32
- package/src/auth/multi-tenancy/memberships/server/workos.ts +21 -21
- package/src/auth/multi-tenancy/memberships/supabase.ts +46 -46
- package/src/auth/multi-tenancy/organizations/api-schemas.ts +128 -128
- package/src/auth/multi-tenancy/organizations/index.ts +23 -23
- package/src/auth/multi-tenancy/organizations/organization.ts +24 -24
- package/src/auth/multi-tenancy/organizations/server/index.ts +10 -10
- package/src/auth/multi-tenancy/organizations/server/transforms.ts +35 -35
- package/src/auth/multi-tenancy/organizations/server/workos.ts +20 -20
- package/src/auth/multi-tenancy/types.ts +83 -83
- package/src/auth/multi-tenancy/users/api-schemas.ts +194 -194
- package/src/auth/multi-tenancy/users/index.ts +27 -27
- package/src/auth/multi-tenancy/users/server/index.ts +19 -19
- package/src/auth/multi-tenancy/users/server/transforms.ts +21 -21
- package/src/auth/multi-tenancy/users/server/workos.ts +16 -16
- package/src/auth/multi-tenancy/users/user.ts +65 -65
- package/src/business/README.md +52 -52
- package/src/business/__tests__/entities-published.test.ts +33 -33
- package/src/business/acquisition/api-schemas.ts +759 -759
- package/src/business/acquisition/index.ts +109 -109
- package/src/business/acquisition/types.ts +402 -402
- package/src/business/base-entities.test.ts +481 -481
- package/src/business/base-entities.ts +241 -241
- package/src/business/entities-published.ts +24 -24
- package/src/business/index.ts +15 -15
- package/src/business/pdf/browser/pdfmake-browser.ts +229 -229
- package/src/business/pdf/index.ts +10 -10
- package/src/business/pdf/server/index.ts +21 -21
- package/src/business/pdf/server/themes/default.ts +8 -8
- package/src/business/pdf/server/themes/index.ts +9 -9
- package/src/business/pdf/server/themes/types.ts +8 -8
- package/src/business/pdf/types.ts +272 -272
- package/src/business/projects/index.ts +2 -1
- package/src/business/projects/sse-events.ts +21 -0
- package/src/business/projects/types.ts +89 -89
- package/src/business/sales/api-schemas.ts +75 -75
- package/src/business/seo/__tests__/linking.test.ts +549 -549
- package/src/business/seo/__tests__/types.test.ts +404 -404
- package/src/business/seo/index.ts +2 -2
- package/src/business/seo/linking.ts +281 -281
- package/src/business/seo/types.ts +199 -199
- package/src/commands/queue/index.ts +3 -3
- package/src/commands/queue/schemas.test.ts +593 -593
- package/src/commands/queue/schemas.ts +125 -125
- package/src/commands/queue/sse-events.ts +61 -61
- package/src/commands/queue/types/action.ts +52 -52
- package/src/commands/queue/types/checkpoint.ts +44 -44
- package/src/commands/queue/types/index.ts +7 -7
- package/src/commands/queue/types/task.ts +116 -116
- package/src/commands/queue/types.ts +14 -14
- package/src/content/distribution-metadata.ts +61 -61
- package/src/content/index.ts +10 -10
- package/src/deployments/index.ts +22 -22
- package/src/execution/core/__tests__/archived-logs.test.ts +72 -72
- package/src/execution/core/index.ts +11 -11
- package/src/execution/core/runner-types.ts +80 -80
- package/src/execution/core/server/environment.ts +31 -31
- package/src/execution/core/sse-executions.ts +119 -119
- package/src/execution/core/types.ts +29 -29
- package/src/execution/engine/__tests__/fixtures/test-agents.ts +4 -4
- package/src/execution/engine/__tests__/timeout.test.ts +565 -565
- package/src/execution/engine/agent/__tests__/errors.test.ts +508 -508
- package/src/execution/engine/agent/actions/__tests__/processor.test.ts +531 -531
- package/src/execution/engine/agent/actions/executor.ts +205 -205
- package/src/execution/engine/agent/actions/navigate-knowledge-executor.ts +230 -230
- package/src/execution/engine/agent/actions/processor.ts +116 -116
- package/src/execution/engine/agent/actions/types.ts +70 -70
- package/src/execution/engine/agent/core/agent.ts +810 -810
- package/src/execution/engine/agent/core/types.ts +155 -155
- package/src/execution/engine/agent/errors.ts +251 -251
- package/src/execution/engine/agent/index.ts +78 -78
- package/src/execution/engine/agent/knowledge-map/types.ts +106 -106
- package/src/execution/engine/agent/knowledge-map/utils.ts +101 -101
- package/src/execution/engine/agent/memory/__tests__/manager.test.ts +754 -754
- package/src/execution/engine/agent/memory/domains.ts +99 -99
- package/src/execution/engine/agent/memory/manager.ts +365 -365
- package/src/execution/engine/agent/memory/processor.ts +66 -66
- package/src/execution/engine/agent/memory/types.ts +90 -90
- package/src/execution/engine/agent/memory/utils.ts +134 -134
- package/src/execution/engine/agent/observability/logging.ts +467 -467
- package/src/execution/engine/agent/observability/types.ts +64 -64
- package/src/execution/engine/agent/reasoning/adapters/agent-adapter-helpers.ts +349 -349
- package/src/execution/engine/agent/reasoning/processor.ts +92 -92
- package/src/execution/engine/agent/reasoning/prompt-sections/base-actions.ts +134 -134
- package/src/execution/engine/agent/reasoning/prompt-sections/completion.ts +49 -49
- package/src/execution/engine/agent/reasoning/prompt-sections/knowledge-map.ts +93 -93
- package/src/execution/engine/agent/reasoning/prompt-sections/memory.ts +65 -65
- package/src/execution/engine/agent/reasoning/prompt-sections/tools.ts +44 -44
- package/src/execution/engine/agent/reasoning/request-builder.ts +169 -169
- package/src/execution/engine/agent/reasoning/types.ts +18 -18
- package/src/execution/engine/base/errors.ts +118 -118
- package/src/execution/engine/base/index.ts +2 -2
- package/src/execution/engine/base/logging.ts +31 -31
- package/src/execution/engine/base/serialization.ts +324 -324
- package/src/execution/engine/base/types.ts +126 -126
- package/src/execution/engine/base/utils.ts +41 -41
- package/src/execution/engine/index.ts +434 -434
- package/src/execution/engine/interface/index.ts +1 -1
- package/src/execution/engine/interface/types.ts +62 -62
- package/src/execution/engine/llm/__tests__/model-info.test.ts +50 -50
- package/src/execution/engine/llm/__tests__/model-validation.test.ts +321 -321
- package/src/execution/engine/llm/__tests__/response-schema-validator.test.ts +115 -115
- package/src/execution/engine/llm/adapters/__tests__/adapter-factory.test.ts +375 -375
- package/src/execution/engine/llm/adapters/__tests__/anthropic-adapter.test.ts +463 -463
- package/src/execution/engine/llm/adapters/__tests__/anthropic.integration.test.ts +177 -177
- package/src/execution/engine/llm/adapters/__tests__/google-adapter.test.ts +722 -722
- package/src/execution/engine/llm/adapters/__tests__/google.integration.test.ts +376 -376
- package/src/execution/engine/llm/adapters/__tests__/openai-adapter.test.ts +551 -551
- package/src/execution/engine/llm/adapters/__tests__/openrouter-adapter.test.ts +563 -563
- package/src/execution/engine/llm/adapters/__tests__/openrouter.integration.test.ts +105 -105
- package/src/execution/engine/llm/adapters/__tests__/universal-adapter.test.ts +537 -537
- package/src/execution/engine/llm/adapters/circuit-breaker.ts +147 -147
- package/src/execution/engine/llm/adapters/index.ts +17 -17
- package/src/execution/engine/llm/adapters/mock-adapter.ts +116 -116
- package/src/execution/engine/llm/adapters/server/adapter-factory.ts +130 -130
- package/src/execution/engine/llm/adapters/server/anthropic.ts +137 -137
- package/src/execution/engine/llm/adapters/server/google.ts +283 -283
- package/src/execution/engine/llm/adapters/server/index.ts +12 -12
- package/src/execution/engine/llm/adapters/server/openai.ts +206 -206
- package/src/execution/engine/llm/adapters/server/openrouter.ts +235 -235
- package/src/execution/engine/llm/adapters/universal-adapter.ts +230 -230
- package/src/execution/engine/llm/errors.ts +186 -186
- package/src/execution/engine/llm/model-info.ts +332 -332
- package/src/execution/engine/llm/response-schema-validator.ts +113 -113
- package/src/execution/engine/llm/types.ts +86 -86
- package/src/execution/engine/test-utils/index.ts +6 -6
- package/src/execution/engine/test-utils/mocks.ts +56 -56
- package/src/execution/engine/tools/integration/base-integration-adapter.ts +50 -50
- package/src/execution/engine/tools/integration/index.ts +53 -53
- package/src/execution/engine/tools/integration/server/adapters/anymailfinder/anymailfinder-adapter.ts +73 -73
- package/src/execution/engine/tools/integration/server/adapters/anymailfinder/anymailfinder-tools.ts +209 -209
- package/src/execution/engine/tools/integration/server/adapters/anymailfinder/fetch/find-company-email/index.ts +82 -82
- package/src/execution/engine/tools/integration/server/adapters/anymailfinder/fetch/find-decision-maker-email/index.ts +122 -122
- package/src/execution/engine/tools/integration/server/adapters/anymailfinder/fetch/find-person-email/index.ts +89 -89
- package/src/execution/engine/tools/integration/server/adapters/anymailfinder/fetch/verify-email/index.ts +84 -84
- package/src/execution/engine/tools/integration/server/adapters/anymailfinder/index.ts +16 -16
- package/src/execution/engine/tools/integration/server/adapters/apify/__tests__/apify-run-actor.integration.test.ts +293 -293
- package/src/execution/engine/tools/integration/server/adapters/apify/apify-adapter.ts +100 -100
- package/src/execution/engine/tools/integration/server/adapters/apify/apify-tools.ts +217 -217
- package/src/execution/engine/tools/integration/server/adapters/apify/fetch/get-dataset-items/index.ts +92 -92
- package/src/execution/engine/tools/integration/server/adapters/apify/fetch/run-actor/index.ts +218 -218
- package/src/execution/engine/tools/integration/server/adapters/apify/fetch/start-actor/index.ts +87 -87
- package/src/execution/engine/tools/integration/server/adapters/apify/index.ts +11 -11
- package/src/execution/engine/tools/integration/server/adapters/attio/__tests__/attio-crud.integration.test.ts +361 -361
- package/src/execution/engine/tools/integration/server/adapters/attio/attio-adapter.ts +162 -162
- package/src/execution/engine/tools/integration/server/adapters/attio/attio-tools.ts +594 -594
- package/src/execution/engine/tools/integration/server/adapters/attio/fetch/create-attribute/index.ts +214 -214
- package/src/execution/engine/tools/integration/server/adapters/attio/fetch/create-note/index.ts +152 -152
- package/src/execution/engine/tools/integration/server/adapters/attio/fetch/create-record/index.ts +141 -141
- package/src/execution/engine/tools/integration/server/adapters/attio/fetch/delete-note/index.ts +86 -86
- package/src/execution/engine/tools/integration/server/adapters/attio/fetch/delete-record/index.ts +105 -105
- package/src/execution/engine/tools/integration/server/adapters/attio/fetch/get-record/index.ts +118 -118
- package/src/execution/engine/tools/integration/server/adapters/attio/fetch/list-attributes/index.ts +165 -165
- package/src/execution/engine/tools/integration/server/adapters/attio/fetch/list-notes/index.ts +96 -96
- package/src/execution/engine/tools/integration/server/adapters/attio/fetch/list-objects/index.ts +104 -104
- package/src/execution/engine/tools/integration/server/adapters/attio/fetch/list-records/index.ts +156 -156
- package/src/execution/engine/tools/integration/server/adapters/attio/fetch/update-attribute/index.ts +220 -220
- package/src/execution/engine/tools/integration/server/adapters/attio/fetch/update-record/index.ts +140 -140
- package/src/execution/engine/tools/integration/server/adapters/attio/fetch/utils/types.ts +146 -146
- package/src/execution/engine/tools/integration/server/adapters/attio/index.ts +31 -31
- package/src/execution/engine/tools/integration/server/adapters/gmail/gmail-adapter.ts +210 -210
- package/src/execution/engine/tools/integration/server/adapters/gmail/gmail-tools.ts +104 -104
- package/src/execution/engine/tools/integration/server/adapters/google-sheets/__tests__/google-sheets.integration.test.ts +261 -261
- package/src/execution/engine/tools/integration/server/adapters/google-sheets/google-sheets-adapter.ts +1189 -1189
- package/src/execution/engine/tools/integration/server/adapters/google-sheets/google-sheets-tools.ts +641 -641
- package/src/execution/engine/tools/integration/server/adapters/google-sheets/index.ts +18 -18
- package/src/execution/engine/tools/integration/server/adapters/instantly/fetch/activate-campaign/index.ts +86 -86
- package/src/execution/engine/tools/integration/server/adapters/instantly/fetch/add-to-campaign/__tests__/index.test.ts +289 -289
- package/src/execution/engine/tools/integration/server/adapters/instantly/fetch/add-to-campaign/index.ts +154 -154
- package/src/execution/engine/tools/integration/server/adapters/instantly/fetch/bulk-add-leads/__tests__/index.test.ts +325 -325
- package/src/execution/engine/tools/integration/server/adapters/instantly/fetch/bulk-add-leads/index.ts +153 -153
- package/src/execution/engine/tools/integration/server/adapters/instantly/fetch/bulk-delete-leads/index.ts +84 -84
- package/src/execution/engine/tools/integration/server/adapters/instantly/fetch/create-campaign/index.ts +125 -125
- package/src/execution/engine/tools/integration/server/adapters/instantly/fetch/create-inbox-test/index.ts +107 -107
- package/src/execution/engine/tools/integration/server/adapters/instantly/fetch/delete-campaign/index.ts +85 -85
- package/src/execution/engine/tools/integration/server/adapters/instantly/fetch/get-account-health/index.ts +91 -91
- package/src/execution/engine/tools/integration/server/adapters/instantly/fetch/get-campaign/index.ts +92 -92
- package/src/execution/engine/tools/integration/server/adapters/instantly/fetch/get-campaign-analytics/__tests__/index.test.ts +195 -195
- package/src/execution/engine/tools/integration/server/adapters/instantly/fetch/get-campaign-analytics/index.ts +113 -113
- package/src/execution/engine/tools/integration/server/adapters/instantly/fetch/get-daily-campaign-analytics/index.ts +104 -104
- package/src/execution/engine/tools/integration/server/adapters/instantly/fetch/get-emails/index.ts +155 -155
- package/src/execution/engine/tools/integration/server/adapters/instantly/fetch/get-step-analytics/__tests__/index.test.ts +196 -196
- package/src/execution/engine/tools/integration/server/adapters/instantly/fetch/get-step-analytics/index.ts +102 -102
- package/src/execution/engine/tools/integration/server/adapters/instantly/fetch/list-campaigns/__tests__/index.test.ts +189 -189
- package/src/execution/engine/tools/integration/server/adapters/instantly/fetch/list-campaigns/index.ts +87 -87
- package/src/execution/engine/tools/integration/server/adapters/instantly/fetch/list-leads/index.ts +112 -112
- package/src/execution/engine/tools/integration/server/adapters/instantly/fetch/patch-lead/index.ts +76 -76
- package/src/execution/engine/tools/integration/server/adapters/instantly/fetch/pause-campaign/index.ts +86 -86
- package/src/execution/engine/tools/integration/server/adapters/instantly/fetch/remove-from-subsequence/index.ts +98 -98
- package/src/execution/engine/tools/integration/server/adapters/instantly/fetch/send-reply/index.ts +126 -126
- package/src/execution/engine/tools/integration/server/adapters/instantly/fetch/update-campaign/__tests__/index.test.ts +193 -193
- package/src/execution/engine/tools/integration/server/adapters/instantly/fetch/update-campaign/index.ts +99 -99
- package/src/execution/engine/tools/integration/server/adapters/instantly/fetch/update-interest-status/__tests__/index.test.ts +621 -621
- package/src/execution/engine/tools/integration/server/adapters/instantly/fetch/update-interest-status/index.ts +125 -125
- package/src/execution/engine/tools/integration/server/adapters/instantly/index.ts +29 -29
- package/src/execution/engine/tools/integration/server/adapters/instantly/instantly-adapter.ts +178 -178
- package/src/execution/engine/tools/integration/server/adapters/instantly/instantly-tools.ts +1473 -1473
- package/src/execution/engine/tools/integration/server/adapters/millionverifier/fetch/check-credits/index.ts +59 -59
- package/src/execution/engine/tools/integration/server/adapters/millionverifier/fetch/verify-email/index.ts +102 -102
- package/src/execution/engine/tools/integration/server/adapters/millionverifier/index.ts +17 -17
- package/src/execution/engine/tools/integration/server/adapters/millionverifier/millionverifier-adapter.ts +80 -80
- package/src/execution/engine/tools/integration/server/adapters/millionverifier/millionverifier-tools.ts +102 -102
- package/src/execution/engine/tools/integration/server/adapters/resend/fetch/get-email/index.ts +102 -102
- package/src/execution/engine/tools/integration/server/adapters/resend/fetch/send-email/index.ts +134 -134
- package/src/execution/engine/tools/integration/server/adapters/resend/fetch/utils/types.ts +75 -75
- package/src/execution/engine/tools/integration/server/adapters/resend/index.ts +27 -27
- package/src/execution/engine/tools/integration/server/adapters/resend/resend-adapter.ts +108 -108
- package/src/execution/engine/tools/integration/server/adapters/resend/resend-tools.ts +132 -132
- package/src/execution/engine/tools/integration/server/adapters/signature-api/fetch/create-envelope/index.ts +274 -274
- package/src/execution/engine/tools/integration/server/adapters/signature-api/fetch/download-document/index.ts +230 -230
- package/src/execution/engine/tools/integration/server/adapters/signature-api/fetch/get-envelope/index.ts +133 -133
- package/src/execution/engine/tools/integration/server/adapters/signature-api/fetch/void-envelope/index.ts +90 -90
- package/src/execution/engine/tools/integration/server/adapters/stripe/fetch/utils/types.ts +210 -210
- package/src/execution/engine/tools/integration/server/adapters/stripe/stripe-adapter.ts +517 -517
- package/src/execution/engine/tools/integration/server/adapters/stripe/stripe-tools.ts +309 -309
- package/src/execution/engine/tools/integration/server/adapters/tomba/fetch/domain-search/index.ts +133 -133
- package/src/execution/engine/tools/integration/server/adapters/tomba/fetch/email-finder/index.ts +122 -122
- package/src/execution/engine/tools/integration/server/adapters/tomba/fetch/email-verifier/index.ts +111 -111
- package/src/execution/engine/tools/integration/server/adapters/tomba/index.ts +11 -11
- package/src/execution/engine/tools/integration/server/adapters/tomba/tomba-adapter.ts +78 -78
- package/src/execution/engine/tools/integration/server/adapters/tomba/tomba-tools.ts +222 -222
- package/src/execution/engine/tools/integration/server/index.ts +61 -61
- package/src/execution/engine/tools/integration/service.ts +161 -161
- package/src/execution/engine/tools/integration/tool.ts +253 -253
- package/src/execution/engine/tools/integration/types/anymailfinder.ts +74 -74
- package/src/execution/engine/tools/integration/types/apify.ts +92 -92
- package/src/execution/engine/tools/integration/types/index.ts +19 -19
- package/src/execution/engine/tools/integration/types/instantly.ts +557 -557
- package/src/execution/engine/tools/integration/types/millionverifier.ts +56 -56
- package/src/execution/engine/tools/integration/types/stripe.ts +162 -162
- package/src/execution/engine/tools/integration/types/tomba.ts +94 -94
- package/src/execution/engine/tools/lead-service-types.ts +884 -884
- package/src/execution/engine/tools/llm/index.ts +11 -11
- package/src/execution/engine/tools/llm/server/index.ts +8 -8
- package/src/execution/engine/tools/llm/server/llm-call-tool.ts +118 -118
- package/src/execution/engine/tools/platform/__tests__/pdf.test.ts +441 -441
- package/src/execution/engine/tools/platform/acquisition/company-tools.ts +248 -248
- package/src/execution/engine/tools/platform/acquisition/contact-tools.ts +319 -319
- package/src/execution/engine/tools/platform/acquisition/index.ts +43 -43
- package/src/execution/engine/tools/platform/acquisition/list-tools.ts +148 -148
- package/src/execution/engine/tools/platform/acquisition/types.ts +260 -260
- package/src/execution/engine/tools/platform/email/index.ts +122 -122
- package/src/execution/engine/tools/platform/email/types.ts +96 -96
- package/src/execution/engine/tools/platform/index.ts +157 -157
- package/src/execution/engine/tools/platform/notification.ts +81 -81
- package/src/execution/engine/tools/platform/pdf/index.ts +110 -110
- package/src/execution/engine/tools/platform/pdf/types.ts +77 -77
- package/src/execution/engine/tools/platform/scheduler.ts +87 -87
- package/src/execution/engine/tools/platform/storage/index.ts +370 -370
- package/src/execution/engine/tools/platform/types.ts +148 -148
- package/src/execution/engine/tools/registry.ts +700 -699
- package/src/execution/engine/tools/tool-maps.ts +786 -786
- package/src/execution/engine/tools/types.ts +233 -233
- package/src/execution/engine/workflow/__tests__/errors.test.ts +139 -139
- package/src/execution/engine/workflow/errors.ts +63 -63
- package/src/execution/engine/workflow/helpers/index.ts +11 -11
- package/src/execution/engine/workflow/helpers/server/index.ts +8 -8
- package/src/execution/engine/workflow/helpers/server/llm-call.ts +93 -93
- package/src/execution/engine/workflow/index.ts +19 -19
- package/src/execution/engine/workflow/log-truncate.ts +26 -26
- package/src/execution/engine/workflow/logging.ts +191 -191
- package/src/execution/engine/workflow/types.ts +182 -182
- package/src/execution/engine/workflow/utils.ts +280 -280
- package/src/execution/engine/workflow/workflow.ts +168 -168
- package/src/execution/index.ts +3 -3
- package/src/execution/scheduler/__tests__/api-schemas.test.ts +733 -733
- package/src/execution/scheduler/__tests__/utils.test.ts +1009 -1009
- package/src/execution/scheduler/api-schemas.ts +296 -296
- package/src/execution/scheduler/index.ts +50 -50
- package/src/execution/scheduler/schemas.ts +264 -264
- package/src/execution/scheduler/types.ts +111 -111
- package/src/execution/scheduler/utils.ts +364 -364
- package/src/forms/index.ts +7 -7
- package/src/forms/schemas.ts +69 -69
- package/src/forms/types.ts +70 -70
- package/src/index.ts +71 -60
- package/src/integrations/credentials/__tests__/schemas.test.ts +82 -82
- package/src/integrations/credentials/__tests__/utils.test.ts +144 -144
- package/src/integrations/credentials/api-schemas.ts +143 -143
- package/src/integrations/credentials/index.ts +32 -32
- package/src/integrations/credentials/schemas.ts +164 -164
- package/src/integrations/credentials/utils.ts +59 -59
- package/src/integrations/oauth/__tests__/provider-registry.test.ts +59 -59
- package/src/integrations/oauth/api-schemas.ts +92 -92
- package/src/integrations/oauth/index.ts +19 -19
- package/src/integrations/oauth/provider-registry.ts +61 -61
- package/src/integrations/oauth/server/__tests__/refresh-concurrent.test.ts +183 -183
- package/src/integrations/oauth/server/__tests__/refresh.test.ts +577 -577
- package/src/integrations/oauth/server/credentials.ts +39 -39
- package/src/integrations/oauth/server/refresh.ts +214 -214
- package/src/integrations/oauth/types.ts +34 -34
- package/src/integrations/webhook-endpoints/__tests__/api-schemas.test.ts +318 -318
- package/src/integrations/webhook-endpoints/api-schemas.ts +102 -102
- package/src/integrations/webhook-endpoints/index.ts +28 -28
- package/src/integrations/webhook-endpoints/types.ts +51 -51
- package/src/operations/activities/api-schemas.ts +79 -79
- package/src/operations/activities/index.ts +9 -9
- package/src/operations/activities/sse-events.ts +30 -30
- package/src/operations/activities/types.ts +63 -63
- package/src/operations/debug-logs/client.ts +60 -60
- package/src/operations/debug-logs/debug-logger.ts +83 -83
- package/src/operations/debug-logs/index.ts +8 -8
- package/src/operations/debug-logs/server.ts +19 -19
- package/src/operations/debug-logs/types.ts +33 -33
- package/src/operations/index.ts +50 -50
- package/src/operations/notifications/api-schemas.ts +91 -91
- package/src/operations/notifications/index.ts +3 -3
- package/src/operations/notifications/sse-events.ts +21 -21
- package/src/operations/notifications/types.ts +47 -47
- package/src/operations/observability/__tests__/openrouter-cost-flow.test.ts +297 -297
- package/src/operations/observability/__tests__/utils.test.ts +54 -54
- package/src/operations/observability/ai-usage-collector.ts +64 -64
- package/src/operations/observability/index.ts +13 -13
- package/src/operations/observability/metrics-collector.ts +49 -49
- package/src/operations/observability/schemas.ts +39 -39
- package/src/operations/observability/types.ts +463 -463
- package/src/operations/observability/utils.ts +77 -77
- package/src/operations/sessions/__tests__/manager.test.ts +821 -821
- package/src/operations/sessions/index.ts +26 -26
- package/src/operations/sessions/server/manager.ts +90 -90
- package/src/operations/sessions/server/session.ts +180 -180
- package/src/operations/sessions/types.ts +98 -98
- package/src/operations/triggers/index.ts +12 -12
- package/src/operations/triggers/webhook/definitions/instantly-account-error.ts +44 -44
- package/src/operations/triggers/webhook/definitions/instantly-auto-reply-received.ts +51 -51
- package/src/operations/triggers/webhook/definitions/instantly-campaign-completed.ts +45 -45
- package/src/operations/triggers/webhook/definitions/instantly-email-bounced.ts +49 -49
- package/src/operations/triggers/webhook/definitions/instantly-lead-unsubscribed.ts +45 -45
- package/src/operations/triggers/webhook/definitions/instantly-reply-received.ts +54 -54
- package/src/operations/triggers/webhook/index.ts +35 -35
- package/src/operations/triggers/webhook/types.ts +74 -74
- package/src/organization-model/README.md +97 -97
- package/src/organization-model/__tests__/defaults.test.ts +175 -175
- package/src/organization-model/__tests__/domains/customers.test.ts +295 -295
- package/src/organization-model/__tests__/domains/goals.test.ts +479 -479
- package/src/organization-model/__tests__/domains/identity.test.ts +279 -279
- package/src/organization-model/__tests__/domains/navigation.test.ts +212 -212
- package/src/organization-model/__tests__/domains/offerings.test.ts +419 -419
- package/src/organization-model/__tests__/domains/operations.test.ts +203 -203
- package/src/organization-model/__tests__/domains/resource-mappings.test.ts +362 -362
- package/src/organization-model/__tests__/domains/roles.test.ts +347 -347
- package/src/organization-model/__tests__/domains/statuses.test.ts +243 -243
- package/src/organization-model/__tests__/foundation.test.ts +105 -105
- package/src/organization-model/__tests__/graph.test.ts +894 -894
- package/src/organization-model/__tests__/resolve.test.ts +690 -690
- package/src/organization-model/__tests__/schema.test.ts +407 -407
- package/src/organization-model/contracts.ts +14 -14
- package/src/organization-model/defaults.ts +148 -148
- package/src/organization-model/domains/branding.ts +22 -22
- package/src/organization-model/domains/customers.ts +75 -75
- package/src/organization-model/domains/features.ts +22 -22
- package/src/organization-model/domains/goals.ts +80 -80
- package/src/organization-model/domains/identity.ts +94 -94
- package/src/organization-model/domains/navigation.ts +391 -391
- package/src/organization-model/domains/offerings.ts +66 -66
- package/src/organization-model/domains/operations.ts +85 -85
- package/src/organization-model/domains/projects.ts +48 -48
- package/src/organization-model/domains/prospecting.ts +33 -33
- package/src/organization-model/domains/roles.ts +55 -55
- package/src/organization-model/domains/sales.ts +94 -94
- package/src/organization-model/domains/shared.ts +62 -62
- package/src/organization-model/domains/statuses.ts +130 -130
- package/src/organization-model/foundation.ts +97 -97
- package/src/organization-model/graph/build.ts +399 -399
- package/src/organization-model/graph/index.ts +4 -4
- package/src/organization-model/graph/schema.ts +48 -48
- package/src/organization-model/graph/types.ts +40 -40
- package/src/organization-model/index.ts +13 -13
- package/src/organization-model/organization-graph.mdx +272 -272
- package/src/organization-model/organization-model.mdx +320 -320
- package/src/organization-model/published.ts +85 -85
- package/src/organization-model/resolve.ts +66 -66
- package/src/organization-model/schema.ts +287 -287
- package/src/organization-model/types.ts +46 -46
- package/src/platform/api/index.ts +1 -1
- package/src/platform/api/types.ts +35 -35
- package/src/platform/constants/http.ts +37 -37
- package/src/platform/constants/index.ts +5 -5
- package/src/platform/constants/limits.ts +32 -32
- package/src/platform/constants/resilience.ts +51 -51
- package/src/platform/constants/timeouts.ts +20 -20
- package/src/platform/constants/versions.ts +3 -3
- package/src/platform/registry/__tests__/resource-registry-static.test.ts +347 -347
- package/src/platform/registry/__tests__/resource-registry.integration.test.ts +1028 -1028
- package/src/platform/registry/__tests__/resource-registry.list-executable.test.ts +393 -393
- package/src/platform/registry/__tests__/resource-registry.test.ts +2005 -2005
- package/src/platform/registry/__tests__/serialization.test.ts +1127 -1127
- package/src/platform/registry/command-view.ts +180 -180
- package/src/platform/registry/domains.ts +165 -165
- package/src/platform/registry/index.ts +93 -93
- package/src/platform/registry/reserved.ts +24 -24
- package/src/platform/registry/resource-metadata.ts +59 -59
- package/src/platform/registry/resource-registry.command-queue-groups.test.ts +129 -129
- package/src/platform/registry/resource-registry.ts +876 -876
- package/src/platform/registry/serialization.ts +273 -273
- package/src/platform/registry/serialized-types.ts +231 -231
- package/src/platform/registry/stats-types.ts +66 -66
- package/src/platform/registry/types.ts +404 -404
- package/src/platform/registry/validation.ts +513 -513
- package/src/platform/resilience/__tests__/rate-limiter.test.ts +471 -471
- package/src/platform/resilience/circuit-breaker.ts +164 -164
- package/src/platform/resilience/errors.ts +68 -68
- package/src/platform/resilience/http-error-mapper.ts +129 -129
- package/src/platform/resilience/index.ts +93 -93
- package/src/platform/resilience/rate-limiter-types.ts +46 -46
- package/src/platform/resilience/rate-limiter.ts +140 -140
- package/src/platform/resilience/retry.ts +89 -89
- package/src/platform/resilience/timeout.ts +63 -63
- package/src/platform/sse/events.ts +37 -34
- package/src/platform/sse/index.ts +7 -7
- package/src/platform/utils/__tests__/validation.test.ts +1083 -1083
- package/src/platform/utils/currency.ts +96 -96
- package/src/platform/utils/debounce.ts +52 -52
- package/src/platform/utils/error.ts +41 -41
- package/src/platform/utils/hmac.test.ts +97 -97
- package/src/platform/utils/index.ts +32 -32
- package/src/platform/utils/server/betterstack-logger.ts +210 -210
- package/src/platform/utils/server/hmac.ts +44 -44
- package/src/platform/utils/server/unsubscribe.ts +111 -111
- package/src/platform/utils/token-counter.ts +96 -96
- package/src/platform/utils/validation.ts +425 -425
- package/src/projects/api-schemas.ts +268 -268
- package/src/published.ts +1 -1
- package/src/reference/_generated/contracts.md +611 -607
- package/src/reference/glossary.md +105 -105
- package/src/requests/__tests__/api-schemas.test.ts +277 -277
- package/src/requests/api-schemas.ts +83 -83
- package/src/requests/index.ts +1 -1
- package/src/scaffold-registry/__tests__/index.test.ts +17 -0
- package/src/scaffold-registry/__tests__/schema.test.ts +329 -230
- package/src/scaffold-registry/index.ts +205 -189
- package/src/scaffold-registry/schema.ts +196 -128
- package/src/server.ts +272 -272
- package/src/supabase/database.types.ts +2719 -2719
- package/src/supabase/helpers.ts +20 -20
- package/src/supabase/index.ts +52 -52
- package/src/supabase/server/client.ts +58 -58
- package/src/test-utils/README.md +38 -38
- package/src/test-utils/browser-mocks.ts +54 -54
- package/src/test-utils/fixtures/api-keys.ts +52 -52
- package/src/test-utils/fixtures/index.ts +4 -4
- package/src/test-utils/fixtures/memberships.ts +80 -80
- package/src/test-utils/fixtures/organizations.ts +69 -69
- package/src/test-utils/fixtures/users.ts +79 -79
- package/src/test-utils/index.ts +11 -11
- package/src/test-utils/mocks/index.ts +2 -2
- package/src/test-utils/mocks/supabase.ts +142 -142
- package/src/test-utils/mocks/workos.ts +108 -108
- package/src/test-utils/rls/RLSTestContext.ts +556 -556
- package/src/test-utils/rls/index.ts +1 -1
|
@@ -1,26 +1,26 @@
|
|
|
1
|
-
// Session classes are server-only - import from @repo/core/server
|
|
2
|
-
// Only types are exported here for browser-safe access
|
|
3
|
-
export type {
|
|
4
|
-
SessionTurnResult,
|
|
5
|
-
SessionTokenUsage,
|
|
6
|
-
CreateSessionParams,
|
|
7
|
-
ListSessionsFilters,
|
|
8
|
-
SessionRow,
|
|
9
|
-
SessionInsert,
|
|
10
|
-
ExecuteTurnRequest
|
|
11
|
-
} from './types'
|
|
12
|
-
|
|
13
|
-
// Export validation schemas
|
|
14
|
-
export {
|
|
15
|
-
CreateSessionSchema,
|
|
16
|
-
ExecuteTurnSchema,
|
|
17
|
-
ListSessionsQuerySchema,
|
|
18
|
-
SessionIdParamSchema,
|
|
19
|
-
ExecutionIdParamsSchema,
|
|
20
|
-
WebSocketSessionTurnSchema,
|
|
21
|
-
UuidSchema,
|
|
22
|
-
type CreateSessionInput,
|
|
23
|
-
type ExecuteTurnInput,
|
|
24
|
-
type ListSessionsQuery,
|
|
25
|
-
type WebSocketSessionTurnMessage
|
|
26
|
-
} from './api-schemas'
|
|
1
|
+
// Session classes are server-only - import from @repo/core/server
|
|
2
|
+
// Only types are exported here for browser-safe access
|
|
3
|
+
export type {
|
|
4
|
+
SessionTurnResult,
|
|
5
|
+
SessionTokenUsage,
|
|
6
|
+
CreateSessionParams,
|
|
7
|
+
ListSessionsFilters,
|
|
8
|
+
SessionRow,
|
|
9
|
+
SessionInsert,
|
|
10
|
+
ExecuteTurnRequest
|
|
11
|
+
} from './types'
|
|
12
|
+
|
|
13
|
+
// Export validation schemas
|
|
14
|
+
export {
|
|
15
|
+
CreateSessionSchema,
|
|
16
|
+
ExecuteTurnSchema,
|
|
17
|
+
ListSessionsQuerySchema,
|
|
18
|
+
SessionIdParamSchema,
|
|
19
|
+
ExecutionIdParamsSchema,
|
|
20
|
+
WebSocketSessionTurnSchema,
|
|
21
|
+
UuidSchema,
|
|
22
|
+
type CreateSessionInput,
|
|
23
|
+
type ExecuteTurnInput,
|
|
24
|
+
type ListSessionsQuery,
|
|
25
|
+
type WebSocketSessionTurnMessage
|
|
26
|
+
} from './api-schemas'
|
|
@@ -1,90 +1,90 @@
|
|
|
1
|
-
import type { SupabaseClient } from '../../../supabase'
|
|
2
|
-
import { Session } from './session'
|
|
3
|
-
import type { CreateSessionParams, ListSessionsFilters } from '../types'
|
|
4
|
-
|
|
5
|
-
export class SessionManager {
|
|
6
|
-
constructor(private db: SupabaseClient) {}
|
|
7
|
-
|
|
8
|
-
async create(params: CreateSessionParams): Promise<Session> {
|
|
9
|
-
const { resourceId, organizationId, userId, metadata, contextWindowSize } = params
|
|
10
|
-
|
|
11
|
-
const { data, error } = await this.db
|
|
12
|
-
.from('sessions')
|
|
13
|
-
.insert({
|
|
14
|
-
resource_id: resourceId,
|
|
15
|
-
organization_id: organizationId,
|
|
16
|
-
user_id: userId ?? null,
|
|
17
|
-
memory_snapshot: { sessionMemory: {}, history: [] },
|
|
18
|
-
metadata: (metadata as Record<string, never> | null) ?? null,
|
|
19
|
-
session_total_turns: 0,
|
|
20
|
-
...(contextWindowSize !== undefined && { context_window_size: contextWindowSize })
|
|
21
|
-
})
|
|
22
|
-
.select()
|
|
23
|
-
.single()
|
|
24
|
-
|
|
25
|
-
if (error) {
|
|
26
|
-
throw new Error(`Failed to create session: ${error.message}`)
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
return new Session(this.db, data)
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
async get(sessionId: string, organizationId: string): Promise<Session | null> {
|
|
33
|
-
const { data, error } = await this.db
|
|
34
|
-
.from('sessions')
|
|
35
|
-
.select()
|
|
36
|
-
.eq('session_id', sessionId)
|
|
37
|
-
.eq('organization_id', organizationId)
|
|
38
|
-
.is('deleted_at', null)
|
|
39
|
-
.single()
|
|
40
|
-
|
|
41
|
-
if (error) {
|
|
42
|
-
if (error.code === 'PGRST116') {
|
|
43
|
-
return null // Not found
|
|
44
|
-
}
|
|
45
|
-
throw new Error(`Failed to get session: ${error.message}`)
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
return new Session(this.db, data)
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
async list(filters: ListSessionsFilters): Promise<Session[]> {
|
|
52
|
-
const { organizationId, userId, resourceId, limit = 50 } = filters
|
|
53
|
-
|
|
54
|
-
let query = this.db
|
|
55
|
-
.from('sessions')
|
|
56
|
-
.select()
|
|
57
|
-
.eq('organization_id', organizationId)
|
|
58
|
-
.is('deleted_at', null)
|
|
59
|
-
.order('created_at', { ascending: false })
|
|
60
|
-
.limit(limit)
|
|
61
|
-
|
|
62
|
-
if (userId) {
|
|
63
|
-
query = query.eq('user_id', userId)
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
if (resourceId) {
|
|
67
|
-
query = query.eq('resource_id', resourceId)
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
const { data, error } = await query
|
|
71
|
-
|
|
72
|
-
if (error) {
|
|
73
|
-
throw new Error(`Failed to list sessions: ${error.message}`)
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
return data.map((row) => new Session(this.db, row))
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
async delete(sessionId: string, organizationId: string): Promise<void> {
|
|
80
|
-
const { error } = await this.db
|
|
81
|
-
.from('sessions')
|
|
82
|
-
.update({ deleted_at: new Date().toISOString() })
|
|
83
|
-
.eq('session_id', sessionId)
|
|
84
|
-
.eq('organization_id', organizationId)
|
|
85
|
-
|
|
86
|
-
if (error) {
|
|
87
|
-
throw new Error(`Failed to delete session: ${error.message}`)
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
}
|
|
1
|
+
import type { SupabaseClient } from '../../../supabase'
|
|
2
|
+
import { Session } from './session'
|
|
3
|
+
import type { CreateSessionParams, ListSessionsFilters } from '../types'
|
|
4
|
+
|
|
5
|
+
export class SessionManager {
|
|
6
|
+
constructor(private db: SupabaseClient) {}
|
|
7
|
+
|
|
8
|
+
async create(params: CreateSessionParams): Promise<Session> {
|
|
9
|
+
const { resourceId, organizationId, userId, metadata, contextWindowSize } = params
|
|
10
|
+
|
|
11
|
+
const { data, error } = await this.db
|
|
12
|
+
.from('sessions')
|
|
13
|
+
.insert({
|
|
14
|
+
resource_id: resourceId,
|
|
15
|
+
organization_id: organizationId,
|
|
16
|
+
user_id: userId ?? null,
|
|
17
|
+
memory_snapshot: { sessionMemory: {}, history: [] },
|
|
18
|
+
metadata: (metadata as Record<string, never> | null) ?? null,
|
|
19
|
+
session_total_turns: 0,
|
|
20
|
+
...(contextWindowSize !== undefined && { context_window_size: contextWindowSize })
|
|
21
|
+
})
|
|
22
|
+
.select()
|
|
23
|
+
.single()
|
|
24
|
+
|
|
25
|
+
if (error) {
|
|
26
|
+
throw new Error(`Failed to create session: ${error.message}`)
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
return new Session(this.db, data)
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
async get(sessionId: string, organizationId: string): Promise<Session | null> {
|
|
33
|
+
const { data, error } = await this.db
|
|
34
|
+
.from('sessions')
|
|
35
|
+
.select()
|
|
36
|
+
.eq('session_id', sessionId)
|
|
37
|
+
.eq('organization_id', organizationId)
|
|
38
|
+
.is('deleted_at', null)
|
|
39
|
+
.single()
|
|
40
|
+
|
|
41
|
+
if (error) {
|
|
42
|
+
if (error.code === 'PGRST116') {
|
|
43
|
+
return null // Not found
|
|
44
|
+
}
|
|
45
|
+
throw new Error(`Failed to get session: ${error.message}`)
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
return new Session(this.db, data)
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
async list(filters: ListSessionsFilters): Promise<Session[]> {
|
|
52
|
+
const { organizationId, userId, resourceId, limit = 50 } = filters
|
|
53
|
+
|
|
54
|
+
let query = this.db
|
|
55
|
+
.from('sessions')
|
|
56
|
+
.select()
|
|
57
|
+
.eq('organization_id', organizationId)
|
|
58
|
+
.is('deleted_at', null)
|
|
59
|
+
.order('created_at', { ascending: false })
|
|
60
|
+
.limit(limit)
|
|
61
|
+
|
|
62
|
+
if (userId) {
|
|
63
|
+
query = query.eq('user_id', userId)
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
if (resourceId) {
|
|
67
|
+
query = query.eq('resource_id', resourceId)
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
const { data, error } = await query
|
|
71
|
+
|
|
72
|
+
if (error) {
|
|
73
|
+
throw new Error(`Failed to list sessions: ${error.message}`)
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
return data.map((row) => new Session(this.db, row))
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
async delete(sessionId: string, organizationId: string): Promise<void> {
|
|
80
|
+
const { error } = await this.db
|
|
81
|
+
.from('sessions')
|
|
82
|
+
.update({ deleted_at: new Date().toISOString() })
|
|
83
|
+
.eq('session_id', sessionId)
|
|
84
|
+
.eq('organization_id', organizationId)
|
|
85
|
+
|
|
86
|
+
if (error) {
|
|
87
|
+
throw new Error(`Failed to delete session: ${error.message}`)
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
}
|
|
@@ -1,180 +1,180 @@
|
|
|
1
|
-
import type { SupabaseClient, Json } from '../../../supabase'
|
|
2
|
-
import type { ExecutionContext } from '../../../execution/engine/base/types'
|
|
3
|
-
import type { AgentDefinition } from '../../../execution/engine/agent/core/types'
|
|
4
|
-
import type { AgentMemory } from '../../../execution/engine/agent/memory/types'
|
|
5
|
-
import type { SessionRow, SessionTurnResult } from '../types'
|
|
6
|
-
import { createLLMAdapter } from '../../../execution/engine/llm/adapters/server/adapter-factory'
|
|
7
|
-
|
|
8
|
-
export class Session {
|
|
9
|
-
constructor(
|
|
10
|
-
private db: SupabaseClient,
|
|
11
|
-
private data: SessionRow
|
|
12
|
-
) {}
|
|
13
|
-
|
|
14
|
-
// Getters
|
|
15
|
-
get sessionId(): string {
|
|
16
|
-
return this.data.session_id
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
get organizationId(): string {
|
|
20
|
-
return this.data.organization_id
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
get userId(): string | null {
|
|
24
|
-
return this.data.user_id
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
get resourceId(): string {
|
|
28
|
-
return this.data.resource_id
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
get totalTurns(): number {
|
|
32
|
-
return this.data.session_total_turns ?? 0
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
get memorySnapshot(): AgentMemory {
|
|
36
|
-
return this.data.memory_snapshot as unknown as AgentMemory
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
get metadata(): Record<string, unknown> | null {
|
|
40
|
-
return this.data.metadata as Record<string, unknown> | null
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
/** Title derived from the first user message, stored in metadata */
|
|
44
|
-
get title(): string | null {
|
|
45
|
-
const meta = this.data.metadata as Record<string, unknown> | null
|
|
46
|
-
return (meta?.title as string) ?? null
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
get createdAt(): Date {
|
|
50
|
-
return new Date(this.data.created_at!)
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
get updatedAt(): Date {
|
|
54
|
-
return new Date(this.data.updated_at!)
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
get isEnded(): boolean {
|
|
58
|
-
return !!this.data.ended_at
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
get contextWindowSize(): number {
|
|
62
|
-
return this.data.context_window_size
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
/**
|
|
66
|
-
* Execute a turn in this session
|
|
67
|
-
*
|
|
68
|
-
* Uses database transaction with row-level lock to prevent concurrent turn execution.
|
|
69
|
-
* Pattern: Lock → Read → Validate → Execute → Save
|
|
70
|
-
*
|
|
71
|
-
* @param agentDefinition - Agent definition to execute
|
|
72
|
-
* @param input - Input for this turn
|
|
73
|
-
* @param context - Full execution context (including sessionTurnMessages if streaming)
|
|
74
|
-
* @returns Turn result with output and metadata
|
|
75
|
-
*/
|
|
76
|
-
async executeTurn<TInput, TOutput>(
|
|
77
|
-
agentDefinition: AgentDefinition,
|
|
78
|
-
input: TInput,
|
|
79
|
-
context: ExecutionContext
|
|
80
|
-
): Promise<SessionTurnResult<TOutput>> {
|
|
81
|
-
const turnStartTime = Date.now()
|
|
82
|
-
|
|
83
|
-
// NOTE: Using RPC to acquire row-level lock and get fresh state
|
|
84
|
-
// This ensures atomic lock acquisition for concurrent turn prevention
|
|
85
|
-
const { data, error } = await this.db.rpc('execute_session_turn', {
|
|
86
|
-
p_session_id: this.sessionId
|
|
87
|
-
})
|
|
88
|
-
|
|
89
|
-
if (error) {
|
|
90
|
-
throw new Error(`Failed to acquire session lock: ${error.message}`)
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
// Reload fresh state from lock result
|
|
94
|
-
const lockResult = (Array.isArray(data) ? data[0] : data) as unknown
|
|
95
|
-
if (!lockResult) {
|
|
96
|
-
throw new Error('Session not found')
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
this.data = lockResult as SessionRow
|
|
100
|
-
|
|
101
|
-
// Validate
|
|
102
|
-
if (this.isEnded) {
|
|
103
|
-
throw new Error('Cannot execute turn on ended session')
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
// Create agent instance (stateless, recreated per turn)
|
|
107
|
-
const { Agent } = await import('../../../execution/engine/agent/core/agent')
|
|
108
|
-
const agent = new Agent<TInput, TOutput>(agentDefinition, createLLMAdapter)
|
|
109
|
-
|
|
110
|
-
// Execute agent (preloadMemory callback will restore session memory)
|
|
111
|
-
const output = await agent.execute(input, context)
|
|
112
|
-
|
|
113
|
-
// Update state and persist
|
|
114
|
-
const snapshot = agent.getMemorySnapshot()
|
|
115
|
-
if (!snapshot) {
|
|
116
|
-
throw new Error('Agent did not produce memory snapshot')
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
// Complete turn (messages already persisted immediately via onMessageEvent)
|
|
120
|
-
await this.completeTurn(snapshot)
|
|
121
|
-
|
|
122
|
-
return {
|
|
123
|
-
sessionId: this.sessionId,
|
|
124
|
-
executionId: context.executionId,
|
|
125
|
-
turnNumber: this.data.session_total_turns ?? 0,
|
|
126
|
-
output,
|
|
127
|
-
duration: Date.now() - turnStartTime
|
|
128
|
-
}
|
|
129
|
-
}
|
|
130
|
-
|
|
131
|
-
/**
|
|
132
|
-
* End this session (marks as ended, prevents future turns)
|
|
133
|
-
*/
|
|
134
|
-
async end(): Promise<void> {
|
|
135
|
-
this.data.ended_at = new Date().toISOString()
|
|
136
|
-
this.data.updated_at = new Date().toISOString()
|
|
137
|
-
await this.save()
|
|
138
|
-
}
|
|
139
|
-
|
|
140
|
-
/**
|
|
141
|
-
* Convert to JSON representation
|
|
142
|
-
*/
|
|
143
|
-
toJSON(): SessionRow {
|
|
144
|
-
return { ...this.data }
|
|
145
|
-
}
|
|
146
|
-
|
|
147
|
-
/**
|
|
148
|
-
* Save current state to database
|
|
149
|
-
*/
|
|
150
|
-
private async save(): Promise<void> {
|
|
151
|
-
const { error } = await this.db
|
|
152
|
-
.from('sessions')
|
|
153
|
-
.update({
|
|
154
|
-
memory_snapshot: this.data.memory_snapshot,
|
|
155
|
-
session_total_turns: this.data.session_total_turns,
|
|
156
|
-
updated_at: this.data.updated_at,
|
|
157
|
-
ended_at: this.data.ended_at
|
|
158
|
-
})
|
|
159
|
-
.eq('session_id', this.sessionId)
|
|
160
|
-
|
|
161
|
-
if (error) {
|
|
162
|
-
throw new Error(`Failed to save session: ${error.message}`)
|
|
163
|
-
}
|
|
164
|
-
}
|
|
165
|
-
|
|
166
|
-
/**
|
|
167
|
-
* Complete turn by updating session state
|
|
168
|
-
* Messages already persisted immediately via onMessageEvent callback
|
|
169
|
-
* @param snapshot - Agent memory snapshot
|
|
170
|
-
*/
|
|
171
|
-
private async completeTurn(snapshot: AgentMemory): Promise<void> {
|
|
172
|
-
// Update session state
|
|
173
|
-
this.data.memory_snapshot = snapshot as unknown as Json
|
|
174
|
-
this.data.session_total_turns = (this.data.session_total_turns ?? 0) + 1
|
|
175
|
-
this.data.updated_at = new Date().toISOString()
|
|
176
|
-
|
|
177
|
-
// Persist session state (messages already in DB)
|
|
178
|
-
await this.save()
|
|
179
|
-
}
|
|
180
|
-
}
|
|
1
|
+
import type { SupabaseClient, Json } from '../../../supabase'
|
|
2
|
+
import type { ExecutionContext } from '../../../execution/engine/base/types'
|
|
3
|
+
import type { AgentDefinition } from '../../../execution/engine/agent/core/types'
|
|
4
|
+
import type { AgentMemory } from '../../../execution/engine/agent/memory/types'
|
|
5
|
+
import type { SessionRow, SessionTurnResult } from '../types'
|
|
6
|
+
import { createLLMAdapter } from '../../../execution/engine/llm/adapters/server/adapter-factory'
|
|
7
|
+
|
|
8
|
+
export class Session {
|
|
9
|
+
constructor(
|
|
10
|
+
private db: SupabaseClient,
|
|
11
|
+
private data: SessionRow
|
|
12
|
+
) {}
|
|
13
|
+
|
|
14
|
+
// Getters
|
|
15
|
+
get sessionId(): string {
|
|
16
|
+
return this.data.session_id
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
get organizationId(): string {
|
|
20
|
+
return this.data.organization_id
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
get userId(): string | null {
|
|
24
|
+
return this.data.user_id
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
get resourceId(): string {
|
|
28
|
+
return this.data.resource_id
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
get totalTurns(): number {
|
|
32
|
+
return this.data.session_total_turns ?? 0
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
get memorySnapshot(): AgentMemory {
|
|
36
|
+
return this.data.memory_snapshot as unknown as AgentMemory
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
get metadata(): Record<string, unknown> | null {
|
|
40
|
+
return this.data.metadata as Record<string, unknown> | null
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
/** Title derived from the first user message, stored in metadata */
|
|
44
|
+
get title(): string | null {
|
|
45
|
+
const meta = this.data.metadata as Record<string, unknown> | null
|
|
46
|
+
return (meta?.title as string) ?? null
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
get createdAt(): Date {
|
|
50
|
+
return new Date(this.data.created_at!)
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
get updatedAt(): Date {
|
|
54
|
+
return new Date(this.data.updated_at!)
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
get isEnded(): boolean {
|
|
58
|
+
return !!this.data.ended_at
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
get contextWindowSize(): number {
|
|
62
|
+
return this.data.context_window_size
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
/**
|
|
66
|
+
* Execute a turn in this session
|
|
67
|
+
*
|
|
68
|
+
* Uses database transaction with row-level lock to prevent concurrent turn execution.
|
|
69
|
+
* Pattern: Lock → Read → Validate → Execute → Save
|
|
70
|
+
*
|
|
71
|
+
* @param agentDefinition - Agent definition to execute
|
|
72
|
+
* @param input - Input for this turn
|
|
73
|
+
* @param context - Full execution context (including sessionTurnMessages if streaming)
|
|
74
|
+
* @returns Turn result with output and metadata
|
|
75
|
+
*/
|
|
76
|
+
async executeTurn<TInput, TOutput>(
|
|
77
|
+
agentDefinition: AgentDefinition,
|
|
78
|
+
input: TInput,
|
|
79
|
+
context: ExecutionContext
|
|
80
|
+
): Promise<SessionTurnResult<TOutput>> {
|
|
81
|
+
const turnStartTime = Date.now()
|
|
82
|
+
|
|
83
|
+
// NOTE: Using RPC to acquire row-level lock and get fresh state
|
|
84
|
+
// This ensures atomic lock acquisition for concurrent turn prevention
|
|
85
|
+
const { data, error } = await this.db.rpc('execute_session_turn', {
|
|
86
|
+
p_session_id: this.sessionId
|
|
87
|
+
})
|
|
88
|
+
|
|
89
|
+
if (error) {
|
|
90
|
+
throw new Error(`Failed to acquire session lock: ${error.message}`)
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
// Reload fresh state from lock result
|
|
94
|
+
const lockResult = (Array.isArray(data) ? data[0] : data) as unknown
|
|
95
|
+
if (!lockResult) {
|
|
96
|
+
throw new Error('Session not found')
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
this.data = lockResult as SessionRow
|
|
100
|
+
|
|
101
|
+
// Validate
|
|
102
|
+
if (this.isEnded) {
|
|
103
|
+
throw new Error('Cannot execute turn on ended session')
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
// Create agent instance (stateless, recreated per turn)
|
|
107
|
+
const { Agent } = await import('../../../execution/engine/agent/core/agent')
|
|
108
|
+
const agent = new Agent<TInput, TOutput>(agentDefinition, createLLMAdapter)
|
|
109
|
+
|
|
110
|
+
// Execute agent (preloadMemory callback will restore session memory)
|
|
111
|
+
const output = await agent.execute(input, context)
|
|
112
|
+
|
|
113
|
+
// Update state and persist
|
|
114
|
+
const snapshot = agent.getMemorySnapshot()
|
|
115
|
+
if (!snapshot) {
|
|
116
|
+
throw new Error('Agent did not produce memory snapshot')
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
// Complete turn (messages already persisted immediately via onMessageEvent)
|
|
120
|
+
await this.completeTurn(snapshot)
|
|
121
|
+
|
|
122
|
+
return {
|
|
123
|
+
sessionId: this.sessionId,
|
|
124
|
+
executionId: context.executionId,
|
|
125
|
+
turnNumber: this.data.session_total_turns ?? 0,
|
|
126
|
+
output,
|
|
127
|
+
duration: Date.now() - turnStartTime
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
/**
|
|
132
|
+
* End this session (marks as ended, prevents future turns)
|
|
133
|
+
*/
|
|
134
|
+
async end(): Promise<void> {
|
|
135
|
+
this.data.ended_at = new Date().toISOString()
|
|
136
|
+
this.data.updated_at = new Date().toISOString()
|
|
137
|
+
await this.save()
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
/**
|
|
141
|
+
* Convert to JSON representation
|
|
142
|
+
*/
|
|
143
|
+
toJSON(): SessionRow {
|
|
144
|
+
return { ...this.data }
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
/**
|
|
148
|
+
* Save current state to database
|
|
149
|
+
*/
|
|
150
|
+
private async save(): Promise<void> {
|
|
151
|
+
const { error } = await this.db
|
|
152
|
+
.from('sessions')
|
|
153
|
+
.update({
|
|
154
|
+
memory_snapshot: this.data.memory_snapshot,
|
|
155
|
+
session_total_turns: this.data.session_total_turns,
|
|
156
|
+
updated_at: this.data.updated_at,
|
|
157
|
+
ended_at: this.data.ended_at
|
|
158
|
+
})
|
|
159
|
+
.eq('session_id', this.sessionId)
|
|
160
|
+
|
|
161
|
+
if (error) {
|
|
162
|
+
throw new Error(`Failed to save session: ${error.message}`)
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
/**
|
|
167
|
+
* Complete turn by updating session state
|
|
168
|
+
* Messages already persisted immediately via onMessageEvent callback
|
|
169
|
+
* @param snapshot - Agent memory snapshot
|
|
170
|
+
*/
|
|
171
|
+
private async completeTurn(snapshot: AgentMemory): Promise<void> {
|
|
172
|
+
// Update session state
|
|
173
|
+
this.data.memory_snapshot = snapshot as unknown as Json
|
|
174
|
+
this.data.session_total_turns = (this.data.session_total_turns ?? 0) + 1
|
|
175
|
+
this.data.updated_at = new Date().toISOString()
|
|
176
|
+
|
|
177
|
+
// Persist session state (messages already in DB)
|
|
178
|
+
await this.save()
|
|
179
|
+
}
|
|
180
|
+
}
|