@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,332 +1,332 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Model Configuration
|
|
3
|
-
* Centralized model information, configuration, options, constraints, and validation
|
|
4
|
-
* Single source of truth for all model-related definitions
|
|
5
|
-
* Update manually when pricing changes or new models are added
|
|
6
|
-
*/
|
|
7
|
-
|
|
8
|
-
import { z } from 'zod'
|
|
9
|
-
|
|
10
|
-
// ============================================================================
|
|
11
|
-
// Model Types
|
|
12
|
-
// ============================================================================
|
|
13
|
-
|
|
14
|
-
/**
|
|
15
|
-
* Supported Open AI models (direct SDK access)
|
|
16
|
-
*/
|
|
17
|
-
export type OpenAIModel = 'gpt-5' | 'gpt-5.4-mini' | 'gpt-5.4-nano'
|
|
18
|
-
|
|
19
|
-
/**
|
|
20
|
-
* Supported OpenRouter models (explicit union for type safety)
|
|
21
|
-
*/
|
|
22
|
-
export type OpenRouterModel = 'openrouter/z-ai/glm-5'
|
|
23
|
-
|
|
24
|
-
/**
|
|
25
|
-
* Supported Google models (direct SDK access)
|
|
26
|
-
*/
|
|
27
|
-
export type GoogleModel = 'gemini-3-flash-preview' | 'gemini-3.1-flash-lite-preview'
|
|
28
|
-
|
|
29
|
-
/**
|
|
30
|
-
* Supported Anthropic models (direct SDK access via @anthropic-ai/sdk)
|
|
31
|
-
*/
|
|
32
|
-
export type AnthropicModel = 'claude-sonnet-4-5'
|
|
33
|
-
|
|
34
|
-
/** Supported LLM models */
|
|
35
|
-
export type LLMModel = OpenAIModel | OpenRouterModel | GoogleModel | AnthropicModel | 'mock'
|
|
36
|
-
|
|
37
|
-
// ============================================================================
|
|
38
|
-
// Model Configuration Schemas (Schema-First - Single Source of Truth)
|
|
39
|
-
// ============================================================================
|
|
40
|
-
|
|
41
|
-
/**
|
|
42
|
-
* GPT-5 model options schema
|
|
43
|
-
*/
|
|
44
|
-
const GPT5OptionsSchema = z.object({
|
|
45
|
-
reasoning_effort: z.enum(['minimal', 'low', 'medium', 'high']).optional(),
|
|
46
|
-
verbosity: z.enum(['low', 'medium', 'high']).optional()
|
|
47
|
-
})
|
|
48
|
-
|
|
49
|
-
/**
|
|
50
|
-
* GPT-5 family complete config schema
|
|
51
|
-
* Validates entire ModelConfig including constraints and options
|
|
52
|
-
* GPT-5, GPT-5.4-mini, and GPT-5.4-nano share same validation rules
|
|
53
|
-
*/
|
|
54
|
-
export const GPT5ConfigSchema = z.object({
|
|
55
|
-
model: z.enum(['gpt-5', 'gpt-5.4-mini', 'gpt-5.4-nano']),
|
|
56
|
-
provider: z.enum(['openai']),
|
|
57
|
-
apiKey: z.string(),
|
|
58
|
-
temperature: z.literal(1), // Required to be exactly 1
|
|
59
|
-
maxOutputTokens: z.number().min(4000).optional(),
|
|
60
|
-
topP: z.number().min(0).max(1).optional(),
|
|
61
|
-
modelOptions: GPT5OptionsSchema.optional()
|
|
62
|
-
})
|
|
63
|
-
|
|
64
|
-
/**
|
|
65
|
-
* Mock model config schema
|
|
66
|
-
*/
|
|
67
|
-
export const MockConfigSchema = z.object({
|
|
68
|
-
model: z.enum(['mock']),
|
|
69
|
-
provider: z.enum(['mock']),
|
|
70
|
-
apiKey: z.string(),
|
|
71
|
-
temperature: z.number().min(0).max(2).optional(),
|
|
72
|
-
maxOutputTokens: z.number().min(500).optional(),
|
|
73
|
-
topP: z.number().min(0).max(1).optional(),
|
|
74
|
-
modelOptions: z.object({}).strict().optional() // No options supported
|
|
75
|
-
})
|
|
76
|
-
|
|
77
|
-
/**
|
|
78
|
-
* OpenRouter model options schema
|
|
79
|
-
* OpenRouter-specific options for routing and transforms
|
|
80
|
-
*/
|
|
81
|
-
const OpenRouterOptionsSchema = z.object({
|
|
82
|
-
/** Optional transforms to apply (e.g., 'middle-out' for long context) */
|
|
83
|
-
transforms: z.array(z.string()).optional(),
|
|
84
|
-
/** Routing strategy (e.g., 'fallback' for automatic provider failover) */
|
|
85
|
-
route: z.enum(['fallback']).optional()
|
|
86
|
-
})
|
|
87
|
-
|
|
88
|
-
/**
|
|
89
|
-
* OpenRouter config schema
|
|
90
|
-
* Validates ModelConfig for OpenRouter provider
|
|
91
|
-
*/
|
|
92
|
-
export const OpenRouterConfigSchema = z.object({
|
|
93
|
-
model: z.enum(['openrouter/z-ai/glm-5']),
|
|
94
|
-
provider: z.literal('openrouter'),
|
|
95
|
-
apiKey: z.string(),
|
|
96
|
-
temperature: z.number().min(0).max(2).optional(),
|
|
97
|
-
maxOutputTokens: z.number().min(500).optional(),
|
|
98
|
-
topP: z.number().min(0).max(1).optional(),
|
|
99
|
-
modelOptions: OpenRouterOptionsSchema.optional()
|
|
100
|
-
})
|
|
101
|
-
|
|
102
|
-
/**
|
|
103
|
-
* Google model options schema
|
|
104
|
-
* Gemini 3 specific options for thinking depth control
|
|
105
|
-
*/
|
|
106
|
-
const GoogleOptionsSchema = z.object({
|
|
107
|
-
/** Thinking level for Gemini 3 models (controls reasoning depth) */
|
|
108
|
-
thinkingLevel: z.enum(['minimal', 'low', 'medium', 'high']).optional()
|
|
109
|
-
})
|
|
110
|
-
|
|
111
|
-
/**
|
|
112
|
-
* Google config schema
|
|
113
|
-
* Validates ModelConfig for Google provider (direct SDK access)
|
|
114
|
-
*/
|
|
115
|
-
export const GoogleConfigSchema = z.object({
|
|
116
|
-
model: z.enum(['gemini-3-flash-preview', 'gemini-3.1-flash-lite-preview']),
|
|
117
|
-
provider: z.literal('google'),
|
|
118
|
-
apiKey: z.string(),
|
|
119
|
-
temperature: z.number().min(0).max(2).optional(),
|
|
120
|
-
maxOutputTokens: z.number().min(500).optional(),
|
|
121
|
-
topP: z.number().min(0).max(1).optional(),
|
|
122
|
-
modelOptions: GoogleOptionsSchema.optional()
|
|
123
|
-
})
|
|
124
|
-
|
|
125
|
-
/**
|
|
126
|
-
* Anthropic model options schema
|
|
127
|
-
* Currently empty - future options: budget_tokens for extended thinking
|
|
128
|
-
*/
|
|
129
|
-
const AnthropicOptionsSchema = z.object({})
|
|
130
|
-
|
|
131
|
-
/**
|
|
132
|
-
* Anthropic config schema
|
|
133
|
-
* Validates ModelConfig for Anthropic provider (direct SDK access)
|
|
134
|
-
*/
|
|
135
|
-
export const AnthropicConfigSchema = z.object({
|
|
136
|
-
model: z.enum(['claude-sonnet-4-5']),
|
|
137
|
-
provider: z.literal('anthropic'),
|
|
138
|
-
apiKey: z.string(),
|
|
139
|
-
temperature: z.number().min(0).max(1).optional(),
|
|
140
|
-
maxOutputTokens: z.number().min(1000).optional(), // Anthropic requires max_tokens
|
|
141
|
-
topP: z.number().min(0).max(1).optional(),
|
|
142
|
-
modelOptions: AnthropicOptionsSchema.optional()
|
|
143
|
-
})
|
|
144
|
-
|
|
145
|
-
/**
|
|
146
|
-
* Infer TypeScript types from schemas
|
|
147
|
-
*/
|
|
148
|
-
export type GPT5Options = z.infer<typeof GPT5OptionsSchema>
|
|
149
|
-
export type MockOptions = Record<string, never>
|
|
150
|
-
export type OpenRouterOptions = z.infer<typeof OpenRouterOptionsSchema>
|
|
151
|
-
export type GoogleOptions = z.infer<typeof GoogleOptionsSchema>
|
|
152
|
-
export type AnthropicOptions = z.infer<typeof AnthropicOptionsSchema>
|
|
153
|
-
export type ModelSpecificOptions = GPT5Options | MockOptions | OpenRouterOptions | GoogleOptions | AnthropicOptions
|
|
154
|
-
|
|
155
|
-
// ============================================================================
|
|
156
|
-
// Model Configuration
|
|
157
|
-
// ============================================================================
|
|
158
|
-
|
|
159
|
-
/**
|
|
160
|
-
* Model configuration for LLM execution
|
|
161
|
-
* Belongs in resource definition (AgentDefinition, WorkflowDefinition, etc.)
|
|
162
|
-
*/
|
|
163
|
-
export interface ModelConfig {
|
|
164
|
-
model: LLMModel
|
|
165
|
-
provider: 'openai' | 'anthropic' | 'openrouter' | 'google' | 'mock'
|
|
166
|
-
apiKey: string
|
|
167
|
-
temperature?: number
|
|
168
|
-
/** Maximum output tokens per LLM call. NOT the model's context window — see ModelInfo.maxTokens for that. */
|
|
169
|
-
maxOutputTokens?: number
|
|
170
|
-
topP?: number
|
|
171
|
-
|
|
172
|
-
/**
|
|
173
|
-
* Model-specific options (flat structure)
|
|
174
|
-
* Options are model-specific, not vendor-specific
|
|
175
|
-
* Available options defined in MODEL_INFO per model
|
|
176
|
-
* Validated at build time via validateModelOptions()
|
|
177
|
-
*/
|
|
178
|
-
modelOptions?: ModelSpecificOptions
|
|
179
|
-
}
|
|
180
|
-
|
|
181
|
-
// ============================================================================
|
|
182
|
-
// Model Metadata
|
|
183
|
-
// ============================================================================
|
|
184
|
-
|
|
185
|
-
export interface ModelInfo {
|
|
186
|
-
/** Cost in cents per 1M input tokens */
|
|
187
|
-
inputCostPer1M: number
|
|
188
|
-
/** Cost in cents per 1M output tokens */
|
|
189
|
-
outputCostPer1M: number
|
|
190
|
-
/** Minimum tokens required for reliable output generation */
|
|
191
|
-
minTokens: number
|
|
192
|
-
/** Recommended tokens for production use (typically 2x minimum) */
|
|
193
|
-
recommendedTokens: number
|
|
194
|
-
/** Maximum context window size (total tokens: input + output) */
|
|
195
|
-
maxTokens: number
|
|
196
|
-
/** Model category for grouping and documentation */
|
|
197
|
-
category: 'reasoning' | 'standard' | 'embedding'
|
|
198
|
-
/** Zod schema for validating complete ModelConfig (replaces constraints + optionsSchema) */
|
|
199
|
-
configSchema?: z.ZodType<ModelConfig>
|
|
200
|
-
}
|
|
201
|
-
|
|
202
|
-
// Model configuration as of 2026-03-17
|
|
203
|
-
export const MODEL_INFO: Record<LLMModel, ModelInfo> = {
|
|
204
|
-
// OpenAI GPT-5 (Reasoning Models)
|
|
205
|
-
'gpt-5': {
|
|
206
|
-
inputCostPer1M: 125, // $1.25 per 1M tokens
|
|
207
|
-
outputCostPer1M: 1000, // $10.00 per 1M tokens
|
|
208
|
-
minTokens: 4000, // Reasoning models need more
|
|
209
|
-
recommendedTokens: 8000,
|
|
210
|
-
maxTokens: 400000, // 400k context window
|
|
211
|
-
category: 'reasoning',
|
|
212
|
-
configSchema: GPT5ConfigSchema
|
|
213
|
-
},
|
|
214
|
-
'gpt-5.4-mini': {
|
|
215
|
-
inputCostPer1M: 75, // $0.75 per 1M tokens
|
|
216
|
-
outputCostPer1M: 450, // $4.50 per 1M tokens
|
|
217
|
-
minTokens: 4000, // Reasoning models need more
|
|
218
|
-
recommendedTokens: 8000,
|
|
219
|
-
maxTokens: 400000, // 400k context window
|
|
220
|
-
category: 'reasoning',
|
|
221
|
-
configSchema: GPT5ConfigSchema
|
|
222
|
-
},
|
|
223
|
-
'gpt-5.4-nano': {
|
|
224
|
-
inputCostPer1M: 20, // $0.20 per 1M tokens
|
|
225
|
-
outputCostPer1M: 125, // $1.25 per 1M tokens
|
|
226
|
-
minTokens: 4000,
|
|
227
|
-
recommendedTokens: 8000,
|
|
228
|
-
maxTokens: 400000, // 400k context window
|
|
229
|
-
category: 'standard',
|
|
230
|
-
configSchema: GPT5ConfigSchema
|
|
231
|
-
},
|
|
232
|
-
// Mock model for testing
|
|
233
|
-
mock: {
|
|
234
|
-
inputCostPer1M: 0, // Free for tests
|
|
235
|
-
outputCostPer1M: 0,
|
|
236
|
-
minTokens: 500, // Low minimum for test flexibility
|
|
237
|
-
recommendedTokens: 1000,
|
|
238
|
-
maxTokens: 100000, // 100k for testing
|
|
239
|
-
category: 'standard',
|
|
240
|
-
configSchema: MockConfigSchema
|
|
241
|
-
},
|
|
242
|
-
// OpenRouter Models (via openrouter.ai)
|
|
243
|
-
'openrouter/z-ai/glm-5': {
|
|
244
|
-
inputCostPer1M: 72, // $0.72 per 1M tokens
|
|
245
|
-
outputCostPer1M: 230, // $2.30 per 1M tokens
|
|
246
|
-
minTokens: 4000,
|
|
247
|
-
recommendedTokens: 4000,
|
|
248
|
-
maxTokens: 202752, // 202,752 context window
|
|
249
|
-
category: 'standard',
|
|
250
|
-
configSchema: OpenRouterConfigSchema
|
|
251
|
-
},
|
|
252
|
-
// Google Gemini Models (direct SDK access via @google/genai)
|
|
253
|
-
'gemini-3-flash-preview': {
|
|
254
|
-
inputCostPer1M: 50, // $0.50 per 1M tokens
|
|
255
|
-
outputCostPer1M: 300, // $3.00 per 1M tokens
|
|
256
|
-
minTokens: 4000,
|
|
257
|
-
recommendedTokens: 8000,
|
|
258
|
-
maxTokens: 1000000, // 1M context window
|
|
259
|
-
category: 'standard',
|
|
260
|
-
configSchema: GoogleConfigSchema
|
|
261
|
-
},
|
|
262
|
-
'gemini-3.1-flash-lite-preview': {
|
|
263
|
-
inputCostPer1M: 25, // $0.25 per 1M tokens
|
|
264
|
-
outputCostPer1M: 150, // $1.50 per 1M tokens
|
|
265
|
-
minTokens: 4000,
|
|
266
|
-
recommendedTokens: 8000,
|
|
267
|
-
maxTokens: 1000000, // 1M context window
|
|
268
|
-
category: 'standard',
|
|
269
|
-
configSchema: GoogleConfigSchema
|
|
270
|
-
},
|
|
271
|
-
// Anthropic Claude Models (direct SDK access via @anthropic-ai/sdk)
|
|
272
|
-
'claude-sonnet-4-5': {
|
|
273
|
-
inputCostPer1M: 300, // $3.00 per 1M tokens
|
|
274
|
-
outputCostPer1M: 1500, // $15.00 per 1M tokens
|
|
275
|
-
minTokens: 4000,
|
|
276
|
-
recommendedTokens: 8000,
|
|
277
|
-
maxTokens: 200000, // 200k context window
|
|
278
|
-
category: 'standard',
|
|
279
|
-
configSchema: AnthropicConfigSchema
|
|
280
|
-
}
|
|
281
|
-
}
|
|
282
|
-
|
|
283
|
-
/**
|
|
284
|
-
* Get model information (pricing and token requirements)
|
|
285
|
-
* Supports exact match and prefix matching (e.g., 'gpt-5-preview' matches 'gpt-5')
|
|
286
|
-
*
|
|
287
|
-
* @param model - Model name (e.g., 'gpt-5.4-mini')
|
|
288
|
-
* @returns Model info or undefined if not found
|
|
289
|
-
*/
|
|
290
|
-
export function getModelInfo(model: string): ModelInfo | undefined {
|
|
291
|
-
// Check exact match first
|
|
292
|
-
if (model in MODEL_INFO) {
|
|
293
|
-
return MODEL_INFO[model as LLMModel]
|
|
294
|
-
}
|
|
295
|
-
|
|
296
|
-
// Check prefix match (e.g., gpt-5-preview -> gpt-5)
|
|
297
|
-
for (const [knownModel, info] of Object.entries(MODEL_INFO)) {
|
|
298
|
-
if (model.startsWith(knownModel)) {
|
|
299
|
-
return info
|
|
300
|
-
}
|
|
301
|
-
}
|
|
302
|
-
|
|
303
|
-
return undefined
|
|
304
|
-
}
|
|
305
|
-
|
|
306
|
-
/**
|
|
307
|
-
* Calculate cost in USD for LLM usage
|
|
308
|
-
*
|
|
309
|
-
* @param model - Model name (e.g., 'gpt-5.4-mini')
|
|
310
|
-
* @param inputTokens - Number of input tokens
|
|
311
|
-
* @param outputTokens - Number of output tokens
|
|
312
|
-
* @returns Cost in USD with full decimal precision (no rounding)
|
|
313
|
-
*/
|
|
314
|
-
export function calculateCost(model: string, inputTokens: number, outputTokens: number): number {
|
|
315
|
-
const info = getModelInfo(model)
|
|
316
|
-
|
|
317
|
-
if (!info) {
|
|
318
|
-
// Unknown model - return 0 cost but log warning
|
|
319
|
-
console.warn(
|
|
320
|
-
`[CostCalculator] Unknown model '${model}' - cannot calculate cost. Available models:`,
|
|
321
|
-
Object.keys(MODEL_INFO)
|
|
322
|
-
)
|
|
323
|
-
return 0
|
|
324
|
-
}
|
|
325
|
-
|
|
326
|
-
// Calculate in USD with full precision (pricing is in cents per 1M)
|
|
327
|
-
const inputCostUsd = (inputTokens / 1_000_000) * (info.inputCostPer1M / 100)
|
|
328
|
-
const outputCostUsd = (outputTokens / 1_000_000) * (info.outputCostPer1M / 100)
|
|
329
|
-
const totalCostUsd = inputCostUsd + outputCostUsd
|
|
330
|
-
|
|
331
|
-
return totalCostUsd
|
|
332
|
-
}
|
|
1
|
+
/**
|
|
2
|
+
* Model Configuration
|
|
3
|
+
* Centralized model information, configuration, options, constraints, and validation
|
|
4
|
+
* Single source of truth for all model-related definitions
|
|
5
|
+
* Update manually when pricing changes or new models are added
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import { z } from 'zod'
|
|
9
|
+
|
|
10
|
+
// ============================================================================
|
|
11
|
+
// Model Types
|
|
12
|
+
// ============================================================================
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Supported Open AI models (direct SDK access)
|
|
16
|
+
*/
|
|
17
|
+
export type OpenAIModel = 'gpt-5' | 'gpt-5.4-mini' | 'gpt-5.4-nano'
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Supported OpenRouter models (explicit union for type safety)
|
|
21
|
+
*/
|
|
22
|
+
export type OpenRouterModel = 'openrouter/z-ai/glm-5'
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Supported Google models (direct SDK access)
|
|
26
|
+
*/
|
|
27
|
+
export type GoogleModel = 'gemini-3-flash-preview' | 'gemini-3.1-flash-lite-preview'
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* Supported Anthropic models (direct SDK access via @anthropic-ai/sdk)
|
|
31
|
+
*/
|
|
32
|
+
export type AnthropicModel = 'claude-sonnet-4-5'
|
|
33
|
+
|
|
34
|
+
/** Supported LLM models */
|
|
35
|
+
export type LLMModel = OpenAIModel | OpenRouterModel | GoogleModel | AnthropicModel | 'mock'
|
|
36
|
+
|
|
37
|
+
// ============================================================================
|
|
38
|
+
// Model Configuration Schemas (Schema-First - Single Source of Truth)
|
|
39
|
+
// ============================================================================
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* GPT-5 model options schema
|
|
43
|
+
*/
|
|
44
|
+
const GPT5OptionsSchema = z.object({
|
|
45
|
+
reasoning_effort: z.enum(['minimal', 'low', 'medium', 'high']).optional(),
|
|
46
|
+
verbosity: z.enum(['low', 'medium', 'high']).optional()
|
|
47
|
+
})
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* GPT-5 family complete config schema
|
|
51
|
+
* Validates entire ModelConfig including constraints and options
|
|
52
|
+
* GPT-5, GPT-5.4-mini, and GPT-5.4-nano share same validation rules
|
|
53
|
+
*/
|
|
54
|
+
export const GPT5ConfigSchema = z.object({
|
|
55
|
+
model: z.enum(['gpt-5', 'gpt-5.4-mini', 'gpt-5.4-nano']),
|
|
56
|
+
provider: z.enum(['openai']),
|
|
57
|
+
apiKey: z.string(),
|
|
58
|
+
temperature: z.literal(1), // Required to be exactly 1
|
|
59
|
+
maxOutputTokens: z.number().min(4000).optional(),
|
|
60
|
+
topP: z.number().min(0).max(1).optional(),
|
|
61
|
+
modelOptions: GPT5OptionsSchema.optional()
|
|
62
|
+
})
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* Mock model config schema
|
|
66
|
+
*/
|
|
67
|
+
export const MockConfigSchema = z.object({
|
|
68
|
+
model: z.enum(['mock']),
|
|
69
|
+
provider: z.enum(['mock']),
|
|
70
|
+
apiKey: z.string(),
|
|
71
|
+
temperature: z.number().min(0).max(2).optional(),
|
|
72
|
+
maxOutputTokens: z.number().min(500).optional(),
|
|
73
|
+
topP: z.number().min(0).max(1).optional(),
|
|
74
|
+
modelOptions: z.object({}).strict().optional() // No options supported
|
|
75
|
+
})
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* OpenRouter model options schema
|
|
79
|
+
* OpenRouter-specific options for routing and transforms
|
|
80
|
+
*/
|
|
81
|
+
const OpenRouterOptionsSchema = z.object({
|
|
82
|
+
/** Optional transforms to apply (e.g., 'middle-out' for long context) */
|
|
83
|
+
transforms: z.array(z.string()).optional(),
|
|
84
|
+
/** Routing strategy (e.g., 'fallback' for automatic provider failover) */
|
|
85
|
+
route: z.enum(['fallback']).optional()
|
|
86
|
+
})
|
|
87
|
+
|
|
88
|
+
/**
|
|
89
|
+
* OpenRouter config schema
|
|
90
|
+
* Validates ModelConfig for OpenRouter provider
|
|
91
|
+
*/
|
|
92
|
+
export const OpenRouterConfigSchema = z.object({
|
|
93
|
+
model: z.enum(['openrouter/z-ai/glm-5']),
|
|
94
|
+
provider: z.literal('openrouter'),
|
|
95
|
+
apiKey: z.string(),
|
|
96
|
+
temperature: z.number().min(0).max(2).optional(),
|
|
97
|
+
maxOutputTokens: z.number().min(500).optional(),
|
|
98
|
+
topP: z.number().min(0).max(1).optional(),
|
|
99
|
+
modelOptions: OpenRouterOptionsSchema.optional()
|
|
100
|
+
})
|
|
101
|
+
|
|
102
|
+
/**
|
|
103
|
+
* Google model options schema
|
|
104
|
+
* Gemini 3 specific options for thinking depth control
|
|
105
|
+
*/
|
|
106
|
+
const GoogleOptionsSchema = z.object({
|
|
107
|
+
/** Thinking level for Gemini 3 models (controls reasoning depth) */
|
|
108
|
+
thinkingLevel: z.enum(['minimal', 'low', 'medium', 'high']).optional()
|
|
109
|
+
})
|
|
110
|
+
|
|
111
|
+
/**
|
|
112
|
+
* Google config schema
|
|
113
|
+
* Validates ModelConfig for Google provider (direct SDK access)
|
|
114
|
+
*/
|
|
115
|
+
export const GoogleConfigSchema = z.object({
|
|
116
|
+
model: z.enum(['gemini-3-flash-preview', 'gemini-3.1-flash-lite-preview']),
|
|
117
|
+
provider: z.literal('google'),
|
|
118
|
+
apiKey: z.string(),
|
|
119
|
+
temperature: z.number().min(0).max(2).optional(),
|
|
120
|
+
maxOutputTokens: z.number().min(500).optional(),
|
|
121
|
+
topP: z.number().min(0).max(1).optional(),
|
|
122
|
+
modelOptions: GoogleOptionsSchema.optional()
|
|
123
|
+
})
|
|
124
|
+
|
|
125
|
+
/**
|
|
126
|
+
* Anthropic model options schema
|
|
127
|
+
* Currently empty - future options: budget_tokens for extended thinking
|
|
128
|
+
*/
|
|
129
|
+
const AnthropicOptionsSchema = z.object({})
|
|
130
|
+
|
|
131
|
+
/**
|
|
132
|
+
* Anthropic config schema
|
|
133
|
+
* Validates ModelConfig for Anthropic provider (direct SDK access)
|
|
134
|
+
*/
|
|
135
|
+
export const AnthropicConfigSchema = z.object({
|
|
136
|
+
model: z.enum(['claude-sonnet-4-5']),
|
|
137
|
+
provider: z.literal('anthropic'),
|
|
138
|
+
apiKey: z.string(),
|
|
139
|
+
temperature: z.number().min(0).max(1).optional(),
|
|
140
|
+
maxOutputTokens: z.number().min(1000).optional(), // Anthropic requires max_tokens
|
|
141
|
+
topP: z.number().min(0).max(1).optional(),
|
|
142
|
+
modelOptions: AnthropicOptionsSchema.optional()
|
|
143
|
+
})
|
|
144
|
+
|
|
145
|
+
/**
|
|
146
|
+
* Infer TypeScript types from schemas
|
|
147
|
+
*/
|
|
148
|
+
export type GPT5Options = z.infer<typeof GPT5OptionsSchema>
|
|
149
|
+
export type MockOptions = Record<string, never>
|
|
150
|
+
export type OpenRouterOptions = z.infer<typeof OpenRouterOptionsSchema>
|
|
151
|
+
export type GoogleOptions = z.infer<typeof GoogleOptionsSchema>
|
|
152
|
+
export type AnthropicOptions = z.infer<typeof AnthropicOptionsSchema>
|
|
153
|
+
export type ModelSpecificOptions = GPT5Options | MockOptions | OpenRouterOptions | GoogleOptions | AnthropicOptions
|
|
154
|
+
|
|
155
|
+
// ============================================================================
|
|
156
|
+
// Model Configuration
|
|
157
|
+
// ============================================================================
|
|
158
|
+
|
|
159
|
+
/**
|
|
160
|
+
* Model configuration for LLM execution
|
|
161
|
+
* Belongs in resource definition (AgentDefinition, WorkflowDefinition, etc.)
|
|
162
|
+
*/
|
|
163
|
+
export interface ModelConfig {
|
|
164
|
+
model: LLMModel
|
|
165
|
+
provider: 'openai' | 'anthropic' | 'openrouter' | 'google' | 'mock'
|
|
166
|
+
apiKey: string
|
|
167
|
+
temperature?: number
|
|
168
|
+
/** Maximum output tokens per LLM call. NOT the model's context window — see ModelInfo.maxTokens for that. */
|
|
169
|
+
maxOutputTokens?: number
|
|
170
|
+
topP?: number
|
|
171
|
+
|
|
172
|
+
/**
|
|
173
|
+
* Model-specific options (flat structure)
|
|
174
|
+
* Options are model-specific, not vendor-specific
|
|
175
|
+
* Available options defined in MODEL_INFO per model
|
|
176
|
+
* Validated at build time via validateModelOptions()
|
|
177
|
+
*/
|
|
178
|
+
modelOptions?: ModelSpecificOptions
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
// ============================================================================
|
|
182
|
+
// Model Metadata
|
|
183
|
+
// ============================================================================
|
|
184
|
+
|
|
185
|
+
export interface ModelInfo {
|
|
186
|
+
/** Cost in cents per 1M input tokens */
|
|
187
|
+
inputCostPer1M: number
|
|
188
|
+
/** Cost in cents per 1M output tokens */
|
|
189
|
+
outputCostPer1M: number
|
|
190
|
+
/** Minimum tokens required for reliable output generation */
|
|
191
|
+
minTokens: number
|
|
192
|
+
/** Recommended tokens for production use (typically 2x minimum) */
|
|
193
|
+
recommendedTokens: number
|
|
194
|
+
/** Maximum context window size (total tokens: input + output) */
|
|
195
|
+
maxTokens: number
|
|
196
|
+
/** Model category for grouping and documentation */
|
|
197
|
+
category: 'reasoning' | 'standard' | 'embedding'
|
|
198
|
+
/** Zod schema for validating complete ModelConfig (replaces constraints + optionsSchema) */
|
|
199
|
+
configSchema?: z.ZodType<ModelConfig>
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
// Model configuration as of 2026-03-17
|
|
203
|
+
export const MODEL_INFO: Record<LLMModel, ModelInfo> = {
|
|
204
|
+
// OpenAI GPT-5 (Reasoning Models)
|
|
205
|
+
'gpt-5': {
|
|
206
|
+
inputCostPer1M: 125, // $1.25 per 1M tokens
|
|
207
|
+
outputCostPer1M: 1000, // $10.00 per 1M tokens
|
|
208
|
+
minTokens: 4000, // Reasoning models need more
|
|
209
|
+
recommendedTokens: 8000,
|
|
210
|
+
maxTokens: 400000, // 400k context window
|
|
211
|
+
category: 'reasoning',
|
|
212
|
+
configSchema: GPT5ConfigSchema
|
|
213
|
+
},
|
|
214
|
+
'gpt-5.4-mini': {
|
|
215
|
+
inputCostPer1M: 75, // $0.75 per 1M tokens
|
|
216
|
+
outputCostPer1M: 450, // $4.50 per 1M tokens
|
|
217
|
+
minTokens: 4000, // Reasoning models need more
|
|
218
|
+
recommendedTokens: 8000,
|
|
219
|
+
maxTokens: 400000, // 400k context window
|
|
220
|
+
category: 'reasoning',
|
|
221
|
+
configSchema: GPT5ConfigSchema
|
|
222
|
+
},
|
|
223
|
+
'gpt-5.4-nano': {
|
|
224
|
+
inputCostPer1M: 20, // $0.20 per 1M tokens
|
|
225
|
+
outputCostPer1M: 125, // $1.25 per 1M tokens
|
|
226
|
+
minTokens: 4000,
|
|
227
|
+
recommendedTokens: 8000,
|
|
228
|
+
maxTokens: 400000, // 400k context window
|
|
229
|
+
category: 'standard',
|
|
230
|
+
configSchema: GPT5ConfigSchema
|
|
231
|
+
},
|
|
232
|
+
// Mock model for testing
|
|
233
|
+
mock: {
|
|
234
|
+
inputCostPer1M: 0, // Free for tests
|
|
235
|
+
outputCostPer1M: 0,
|
|
236
|
+
minTokens: 500, // Low minimum for test flexibility
|
|
237
|
+
recommendedTokens: 1000,
|
|
238
|
+
maxTokens: 100000, // 100k for testing
|
|
239
|
+
category: 'standard',
|
|
240
|
+
configSchema: MockConfigSchema
|
|
241
|
+
},
|
|
242
|
+
// OpenRouter Models (via openrouter.ai)
|
|
243
|
+
'openrouter/z-ai/glm-5': {
|
|
244
|
+
inputCostPer1M: 72, // $0.72 per 1M tokens
|
|
245
|
+
outputCostPer1M: 230, // $2.30 per 1M tokens
|
|
246
|
+
minTokens: 4000,
|
|
247
|
+
recommendedTokens: 4000,
|
|
248
|
+
maxTokens: 202752, // 202,752 context window
|
|
249
|
+
category: 'standard',
|
|
250
|
+
configSchema: OpenRouterConfigSchema
|
|
251
|
+
},
|
|
252
|
+
// Google Gemini Models (direct SDK access via @google/genai)
|
|
253
|
+
'gemini-3-flash-preview': {
|
|
254
|
+
inputCostPer1M: 50, // $0.50 per 1M tokens
|
|
255
|
+
outputCostPer1M: 300, // $3.00 per 1M tokens
|
|
256
|
+
minTokens: 4000,
|
|
257
|
+
recommendedTokens: 8000,
|
|
258
|
+
maxTokens: 1000000, // 1M context window
|
|
259
|
+
category: 'standard',
|
|
260
|
+
configSchema: GoogleConfigSchema
|
|
261
|
+
},
|
|
262
|
+
'gemini-3.1-flash-lite-preview': {
|
|
263
|
+
inputCostPer1M: 25, // $0.25 per 1M tokens
|
|
264
|
+
outputCostPer1M: 150, // $1.50 per 1M tokens
|
|
265
|
+
minTokens: 4000,
|
|
266
|
+
recommendedTokens: 8000,
|
|
267
|
+
maxTokens: 1000000, // 1M context window
|
|
268
|
+
category: 'standard',
|
|
269
|
+
configSchema: GoogleConfigSchema
|
|
270
|
+
},
|
|
271
|
+
// Anthropic Claude Models (direct SDK access via @anthropic-ai/sdk)
|
|
272
|
+
'claude-sonnet-4-5': {
|
|
273
|
+
inputCostPer1M: 300, // $3.00 per 1M tokens
|
|
274
|
+
outputCostPer1M: 1500, // $15.00 per 1M tokens
|
|
275
|
+
minTokens: 4000,
|
|
276
|
+
recommendedTokens: 8000,
|
|
277
|
+
maxTokens: 200000, // 200k context window
|
|
278
|
+
category: 'standard',
|
|
279
|
+
configSchema: AnthropicConfigSchema
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
/**
|
|
284
|
+
* Get model information (pricing and token requirements)
|
|
285
|
+
* Supports exact match and prefix matching (e.g., 'gpt-5-preview' matches 'gpt-5')
|
|
286
|
+
*
|
|
287
|
+
* @param model - Model name (e.g., 'gpt-5.4-mini')
|
|
288
|
+
* @returns Model info or undefined if not found
|
|
289
|
+
*/
|
|
290
|
+
export function getModelInfo(model: string): ModelInfo | undefined {
|
|
291
|
+
// Check exact match first
|
|
292
|
+
if (model in MODEL_INFO) {
|
|
293
|
+
return MODEL_INFO[model as LLMModel]
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
// Check prefix match (e.g., gpt-5-preview -> gpt-5)
|
|
297
|
+
for (const [knownModel, info] of Object.entries(MODEL_INFO)) {
|
|
298
|
+
if (model.startsWith(knownModel)) {
|
|
299
|
+
return info
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
|
|
303
|
+
return undefined
|
|
304
|
+
}
|
|
305
|
+
|
|
306
|
+
/**
|
|
307
|
+
* Calculate cost in USD for LLM usage
|
|
308
|
+
*
|
|
309
|
+
* @param model - Model name (e.g., 'gpt-5.4-mini')
|
|
310
|
+
* @param inputTokens - Number of input tokens
|
|
311
|
+
* @param outputTokens - Number of output tokens
|
|
312
|
+
* @returns Cost in USD with full decimal precision (no rounding)
|
|
313
|
+
*/
|
|
314
|
+
export function calculateCost(model: string, inputTokens: number, outputTokens: number): number {
|
|
315
|
+
const info = getModelInfo(model)
|
|
316
|
+
|
|
317
|
+
if (!info) {
|
|
318
|
+
// Unknown model - return 0 cost but log warning
|
|
319
|
+
console.warn(
|
|
320
|
+
`[CostCalculator] Unknown model '${model}' - cannot calculate cost. Available models:`,
|
|
321
|
+
Object.keys(MODEL_INFO)
|
|
322
|
+
)
|
|
323
|
+
return 0
|
|
324
|
+
}
|
|
325
|
+
|
|
326
|
+
// Calculate in USD with full precision (pricing is in cents per 1M)
|
|
327
|
+
const inputCostUsd = (inputTokens / 1_000_000) * (info.inputCostPer1M / 100)
|
|
328
|
+
const outputCostUsd = (outputTokens / 1_000_000) * (info.outputCostPer1M / 100)
|
|
329
|
+
const totalCostUsd = inputCostUsd + outputCostUsd
|
|
330
|
+
|
|
331
|
+
return totalCostUsd
|
|
332
|
+
}
|