@elevasis/core 0.38.0 → 0.40.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.
@@ -23,6 +23,7 @@ import {
23
23
  computeInterfaceReadiness,
24
24
  type SystemInterfaceReadinessIssueFamily
25
25
  } from '../../business/acquisition/ontology-validation'
26
+ import { SYSTEM_INTERFACE_PROFILES } from '../../organization-model/domains/systems'
26
27
  import type { OmTopologyNodeRef } from '../../organization-model/domains/topology'
27
28
  import type {
28
29
  TriggerDefinition,
@@ -615,20 +616,28 @@ function addSystemInterfaceIssue(
615
616
 
616
617
  /**
617
618
  * Detects systems that are API-backed (have resources with non-empty ontology
618
- * bindings) but have not declared `apiInterface` in the Organization Model.
619
+ * bindings), CAN adopt a platform-cataloged `apiInterface` readinessProfile
620
+ * (system path appears in `SYSTEM_INTERFACE_PROFILES`), but have not declared
621
+ * `apiInterface` in the Organization Model.
619
622
  *
620
- * Broad-by-design tighten via test-driven counterexample.
621
- * See _execution-plan.mdx Decision 1.
623
+ * Originally broad-by-design (flagged any system with ontology actions/writes
624
+ * lacking apiInterface). Tightened in @elevasis/sdk@1.30.1 after the template
625
+ * surfaced the unactionable-paradox case: custom systems (e.g. `sys.operations`,
626
+ * `sys.notifications`) have valid `ontology.actions` bindings but cannot adopt
627
+ * one of the closed-catalog readiness profiles, AND the documented guidance
628
+ * ("Custom Systems should not declare apiInterface") is incompatible with the
629
+ * broad heuristic. The gate now only flags systems where adoption is even
630
+ * possible — i.e. the system path matches a cataloged profile's `systemPath`.
622
631
  *
623
- * A system is flagged when:
632
+ * A system is flagged when ALL of:
624
633
  * (a) `system.apiInterface === undefined`, AND
625
634
  * (b) at least one resource in `organizationModel.resources` has
626
635
  * `resource.systemPath` matching the system path AND
627
- * `resource.ontology` non-empty (has `actions` and/or `writes` defined).
636
+ * `resource.ontology` non-empty (has `actions` and/or `writes` defined), AND
637
+ * (c) the system path appears as a cataloged `systemPath` in
638
+ * `SYSTEM_INTERFACE_PROFILES` (so adopting a profile is actually possible).
628
639
  *
629
640
  * Returns `[]` when `organizationModel` is undefined or no gaps are found.
630
- * The structured return value drives both CLI warnings and scaffold fill-mode
631
- * input payloads without any transformation on the caller side.
632
641
  */
633
642
  export function detectMissingApiInterfaceDeclarations(
634
643
  orgName: string,
@@ -655,10 +664,15 @@ export function detectMissingApiInterfaceDeclarations(
655
664
 
656
665
  if (apiBoundResourcesBySystemPath.size === 0) return []
657
666
 
667
+ // Closed-catalog filter: a system is only a candidate for missing apiInterface
668
+ // if it could actually adopt one of the cataloged platform profiles.
669
+ const catalogedSystemPaths = new Set<string>(SYSTEM_INTERFACE_PROFILES.map((profile) => profile.systemPath))
670
+
658
671
  const gaps: ApiInterfaceConformanceGap[] = []
659
672
 
660
673
  for (const { path, system } of listAllSystems(organizationModel)) {
661
674
  if (system.apiInterface !== undefined) continue
675
+ if (!catalogedSystemPaths.has(path)) continue
662
676
  const resourceIds = apiBoundResourcesBySystemPath.get(path)
663
677
  if (!resourceIds || resourceIds.length === 0) continue
664
678
  gaps.push({
package/src/server.ts CHANGED
@@ -1,289 +1,292 @@
1
- /**
2
- * Server-only exports for @repo/core
3
- *
4
- * WARNING: DO NOT import in browser/frontend code
5
- * This module uses Node.js APIs (crypto, process.env) and server-side libraries
6
- *
7
- * For browser-safe imports, use '@repo/core' instead
8
- */
9
-
10
- // Credential management (uses Node.js crypto)
11
- export {
12
- encryptCredential,
13
- decryptCredential,
14
- setKek,
15
- clearKeks,
16
- CURRENT_KEY_ID,
17
- LEGACY_KEY_ID
18
- } from './auth/multi-tenancy/credentials/server/encryption'
19
-
20
- export { loadCredentialKEKs } from './auth/multi-tenancy/credentials/server/kek-loader'
21
-
22
- export {
23
- prepareCredentialForInsert,
24
- decryptCredentialValue,
25
- transformToMetadata,
26
- type CreateCredentialParams,
27
- type CredentialMetadata
28
- } from './auth/multi-tenancy/credentials/server/service'
29
-
30
- // Session management (uses Supabase service client)
31
- export { SessionManager } from './operations/sessions/server/manager'
32
- export { Session } from './operations/sessions/server/session'
33
- export type {
34
- SessionTurnResult,
35
- CreateSessionParams,
36
- ListSessionsFilters,
37
- SessionRow,
38
- SessionInsert
39
- } from './operations/sessions/types'
40
-
41
- // Multi-tenancy WorkOS types and transforms (server-only)
42
- export * from './auth/multi-tenancy/organizations/server'
43
- export * from './auth/multi-tenancy/users/server'
44
- export * from './auth/multi-tenancy/memberships/server'
45
- export * from './auth/multi-tenancy/invitations/server'
46
-
47
- // Note: Browser-safe and Supabase types are re-exported from /server subdirectories
48
- // No additional re-exports needed here to avoid conflicts
49
-
50
- // Supabase client (service role with process.env credentials - lazy initialization)
51
- export { getSupabaseClient, supabaseClient } from './supabase/server/client'
52
- export type { SupabaseClient, Database, Tables, TablesInsert, TablesUpdate, Json } from './supabase'
53
-
54
- // OAuth credentials and token refresh (uses process.env for client credentials)
55
- export { getOAuthCredentials } from './integrations/oauth/server/credentials'
56
- export { refreshOAuthTokenIfExpired, forceRefreshOAuthToken } from './integrations/oauth/server/refresh'
57
-
58
- // Integration adapters (uses Node.js SDKs - googleapis, @slack/web-api)
59
- export { GmailAdapter } from './execution/engine/tools/integration/server/adapters/gmail/gmail-adapter'
60
- export { AttioAdapter } from './execution/engine/tools/integration/server/adapters/attio'
61
- export { GoogleSheetsAdapter } from './execution/engine/tools/integration/server/adapters/google-sheets'
62
- export { ApifyAdapter } from './execution/engine/tools/integration/server/adapters/apify'
63
- export { ApolloAdapter } from './execution/engine/tools/integration/server/adapters/apollo'
64
- export { InstantlyAdapter } from './execution/engine/tools/integration/server/adapters/instantly'
65
- export { ResendAdapter } from './execution/engine/tools/integration/server/adapters/resend'
66
- export { AnymailfinderAdapter } from './execution/engine/tools/integration/server/adapters/anymailfinder'
67
- export { TombaAdapter } from './execution/engine/tools/integration/server/adapters/tomba'
68
- export { MillionVerifierAdapter } from './execution/engine/tools/integration/server/adapters/millionverifier'
69
- export { StripeAdapter } from './execution/engine/tools/integration/server/adapters/stripe'
70
- export { SignatureApiAdapter } from './execution/engine/tools/integration/server/adapters/signature-api'
71
- export { DropboxAdapter } from './execution/engine/tools/integration/server/adapters/dropbox'
72
- export { ClickUpAdapter } from './execution/engine/tools/integration/server/adapters/clickup'
73
- export {
74
- GoogleCalendarAdapter,
75
- type CalendarEvent,
76
- type CalendarDateTime,
77
- type ListEventsResult
78
- } from './execution/engine/tools/integration/server/adapters/google-calendar'
79
-
80
- // Integration Tool Factories (server-only - uses adapters above)
81
- export {
82
- createGmailSendEmailTool,
83
- createGmailSendEmailToolNamed
84
- } from './execution/engine/tools/integration/server/adapters/gmail/gmail-tools'
85
- export {
86
- createAttioCreateRecordTool,
87
- createAttioUpdateRecordTool,
88
- createAttioListRecordsTool,
89
- createAttioGetRecordTool,
90
- createAttioDeleteRecordTool,
91
- createAttioToolNamed,
92
- // Schema operations
93
- createAttioListObjectsTool,
94
- createAttioListAttributesTool,
95
- createAttioCreateAttributeTool,
96
- createAttioUpdateAttributeTool,
97
- // Note operations
98
- createAttioCreateNoteTool
99
- } from './execution/engine/tools/integration/server/adapters/attio'
100
- export {
101
- // Core methods
102
- createGoogleSheetsReadTool,
103
- createGoogleSheetsWriteTool,
104
- createGoogleSheetsAppendTool,
105
- createGoogleSheetsClearTool,
106
- createGoogleSheetsMetadataTool,
107
- createGoogleSheetsBatchUpdateTool,
108
- // Workflow-friendly methods
109
- createGoogleSheetsGetHeadersTool,
110
- createGoogleSheetsGetLastRowTool,
111
- createGoogleSheetsFindRowTool,
112
- createGoogleSheetsUpdateRowTool,
113
- createGoogleSheetsUpsertRowTool,
114
- createGoogleSheetsFilterRowsTool,
115
- createGoogleSheetsDeleteRowTool
116
- } from './execution/engine/tools/integration/server/adapters/google-sheets'
117
- export { createApifyRunActorTool } from './execution/engine/tools/integration/server/adapters/apify'
118
- export {
119
- createInstantlySendReplyTool,
120
- createInstantlyRemoveFromSubsequenceTool,
121
- createInstantlyGetEmailsTool,
122
- createInstantlyUpdateInterestStatusTool,
123
- createInstantlyAddToCampaignTool
124
- } from './execution/engine/tools/integration/server/adapters/instantly'
125
- export {
126
- createResendSendEmailTool,
127
- createResendGetEmailTool,
128
- createResendSendEmailToolNamed
129
- } from './execution/engine/tools/integration/server/adapters/resend'
130
- export {
131
- createAnymailfinderFindCompanyEmailTool,
132
- createAnymailfinderFindPersonEmailTool,
133
- createAnymailfinderFindDecisionMakerEmailTool,
134
- createAnymailfinderVerifyEmailTool
135
- } from './execution/engine/tools/integration/server/adapters/anymailfinder'
136
- export {
137
- createTombaEmailFinderTool,
138
- createTombaDomainSearchTool,
139
- createTombaEmailVerifierTool
140
- } from './execution/engine/tools/integration/server/adapters/tomba'
141
- export {
142
- createMillionVerifierVerifyEmailTool,
143
- createMillionVerifierCheckCreditsTool
144
- } from './execution/engine/tools/integration/server/adapters/millionverifier'
145
- export {
146
- createDropboxUploadTool,
147
- createDropboxCreateFolderTool
148
- } from './execution/engine/tools/integration/server/adapters/dropbox'
149
- export {
150
- createStripeCreatePaymentLinkTool,
151
- createStripeGetPaymentLinkTool,
152
- createStripeUpdatePaymentLinkTool,
153
- createStripeListPaymentLinksTool,
154
- createStripeCheckoutSessionTool,
155
- createStripeAutoPaymentLinkTool
156
- } from './execution/engine/tools/integration/server/adapters/stripe'
157
-
158
- // Resend fetch functions (low-level API for platform email service)
159
- export { sendEmail as sendResendEmail } from './execution/engine/tools/integration/server/adapters/resend/fetch/send-email/index'
160
- export type {
161
- ResendCredentials,
162
- SendEmailParams as ResendSendEmailParams,
163
- SendEmailResult as ResendSendEmailResult
164
- } from './execution/engine/tools/integration/server/adapters/resend/fetch/utils/types'
165
-
166
- // Resend email configuration (high-level sender config for workflows)
167
- export type { ResendEmailConfig } from './execution/engine/tools/integration/server/adapters/resend/types'
168
-
169
- // SignatureAPI types (for eSignature envelope operations)
170
- export type {
171
- SignatureApiCredentials,
172
- CreateEnvelopeParams,
173
- CreateEnvelopeResult,
174
- VoidEnvelopeParams,
175
- VoidEnvelopeResult,
176
- DownloadDocumentParams,
177
- DownloadDocumentResult,
178
- EnvelopeDocument,
179
- Recipient,
180
- SigningPlace
181
- } from './execution/engine/tools/integration/server/adapters/signature-api'
182
-
183
- // Execution validators (uses process.env for environment detection)
184
- export { detectEnvironment, canExecuteResource, type Environment } from './execution/core/server/environment'
185
-
186
- // HMAC token utilities (uses Node.js crypto - server-only)
187
- export { generateHmacToken, verifyHmacToken, generateBrochureUrl } from './platform/utils/server/hmac'
188
- export {
189
- generateUnsubscribeToken,
190
- verifyUnsubscribeToken,
191
- generateUnsubscribeUrl,
192
- generateUnsubscribeHeaders
193
- } from './platform/utils/server/unsubscribe'
194
-
195
- // Better Stack error logging (uses @sentry/node - server-only)
196
- export {
197
- bslogExternalServiceError,
198
- bslogExecutionFailure,
199
- isSystemError
200
- } from './platform/utils/server/betterstack-logger'
201
-
202
- // LLM Adapters (uses betterstack-logger - server-only)
203
- export { OpenAIAdapter, isOpenAIModel, type OpenAIAdapterConfig } from './execution/engine/llm/adapters/server/openai'
204
- export {
205
- OpenRouterAdapter,
206
- isOpenRouterModel,
207
- type OpenRouterAdapterConfig
208
- } from './execution/engine/llm/adapters/server/openrouter'
209
- export { createLLMAdapter } from './execution/engine/llm/adapters/server/adapter-factory'
210
-
211
- // Browser-safe adapters (also exported from server for convenience)
212
- export { UniversalLLMAdapter } from './execution/engine/llm/adapters/universal-adapter'
213
- export { MockAdapter, isMockModel } from './execution/engine/llm/adapters/mock-adapter'
214
- export { configureCircuitBreakerAlerts } from './execution/engine/llm/adapters/circuit-breaker'
215
-
216
- // LLM Tool factory (uses server-only adapters)
217
- export { createLLMCallTool, type LLMCallToolConfig } from './execution/engine/tools/llm/server'
218
-
219
- // Workflow step helper (uses server-only adapters)
220
- export { llmCall, type LLMCallOptions } from './execution/engine/workflow/helpers/server'
221
-
222
- // Retained server-side resource invocation service types live under @repo/core/execution.
223
- // Deployed SDK workers use platform.call() -> dispatcher for nested execution.
224
-
225
- // Resilience utilities (timeout, circuit breaker, infrastructure errors)
226
- export {
227
- // Existing
228
- withTimeout,
229
- SERVICE_TIMEOUTS,
230
- createCircuitBreaker,
231
- CircuitState,
232
- ServiceTimeoutError,
233
- ServiceUnavailableError,
234
- isInfrastructureError,
235
- type CircuitBreaker,
236
- type CircuitBreakerConfig,
237
- // Rate limiting
238
- InMemoryRateLimiter,
239
- createRateLimiter,
240
- // Retry logic
241
- withRetry,
242
- calculateRetryDelay,
243
- sleep,
244
- DEFAULT_RETRY_POLICY,
245
- // HTTP error mapping
246
- createHttpError,
247
- mapHttpStatusToErrorType,
248
- type RateLimiter,
249
- type RetryPolicy,
250
- type HttpErrorContext,
251
- type ErrorParser
252
- } from './platform/resilience'
253
-
254
- // Acquisition Platform Tools (lead database)
255
- export {
256
- // List tools
257
- createAcqListCreateTool,
258
- createAcqListUpdateTool,
259
- createAcqListDeleteTool,
260
- createAcqListListTool,
261
- // Company tools
262
- createAcqCompanyCreateTool,
263
- createAcqCompanyUpdateTool,
264
- createAcqCompanyUpsertTool,
265
- createAcqCompanyGetTool,
266
- createAcqCompanyListTool,
267
- createAcqCompanyDeleteTool,
268
- // Contact tools
269
- createAcqContactCreateTool,
270
- createAcqContactUpdateTool,
271
- createAcqContactUpsertTool,
272
- createAcqContactGetTool,
273
- createAcqContactListTool,
274
- createAcqContactDeleteTool,
275
- createAcqContactBulkImportTool
276
- } from './execution/engine/tools/platform/acquisition'
277
-
278
- // PDF Tool (server-only - uses React-PDF renderToBuffer)
279
- export {
280
- createPdfRenderTool,
281
- type PdfRenderInput,
282
- type PdfRenderOutput,
283
- type PdfToolConfig,
284
- PdfRenderInputSchema,
285
- PdfRenderOutputSchema
286
- } from './execution/engine/tools/platform/pdf'
287
-
288
- // PDF Document types (for constructing documents programmatically)
289
- export type { PDFDocument, ContentBlock, Page as PDFPage } from './business/pdf/types'
1
+ /**
2
+ * Server-only exports for @repo/core
3
+ *
4
+ * WARNING: DO NOT import in browser/frontend code
5
+ * This module uses Node.js APIs (crypto, process.env) and server-side libraries
6
+ *
7
+ * For browser-safe imports, use '@repo/core' instead
8
+ */
9
+
10
+ // Credential management (uses Node.js crypto)
11
+ export {
12
+ encryptCredential,
13
+ decryptCredential,
14
+ setKek,
15
+ clearKeks,
16
+ CURRENT_KEY_ID,
17
+ LEGACY_KEY_ID
18
+ } from './auth/multi-tenancy/credentials/server/encryption'
19
+
20
+ export { loadCredentialKEKs } from './auth/multi-tenancy/credentials/server/kek-loader'
21
+
22
+ export {
23
+ prepareCredentialForInsert,
24
+ decryptCredentialValue,
25
+ transformToMetadata,
26
+ type CreateCredentialParams,
27
+ type CredentialMetadata
28
+ } from './auth/multi-tenancy/credentials/server/service'
29
+
30
+ // Session management (uses Supabase service client)
31
+ export { SessionManager } from './operations/sessions/server/manager'
32
+ export { Session } from './operations/sessions/server/session'
33
+ export type {
34
+ SessionTurnResult,
35
+ CreateSessionParams,
36
+ ListSessionsFilters,
37
+ SessionRow,
38
+ SessionInsert
39
+ } from './operations/sessions/types'
40
+
41
+ // Multi-tenancy WorkOS types and transforms (server-only)
42
+ export * from './auth/multi-tenancy/organizations/server'
43
+ export * from './auth/multi-tenancy/users/server'
44
+ export * from './auth/multi-tenancy/memberships/server'
45
+ export * from './auth/multi-tenancy/invitations/server'
46
+
47
+ // Note: Browser-safe and Supabase types are re-exported from /server subdirectories
48
+ // No additional re-exports needed here to avoid conflicts
49
+
50
+ // Supabase client (service role with process.env credentials - lazy initialization)
51
+ export { getSupabaseClient, supabaseClient } from './supabase/server/client'
52
+ export type { SupabaseClient, Database, Tables, TablesInsert, TablesUpdate, Json } from './supabase'
53
+
54
+ // OAuth credentials and token refresh (uses process.env for client credentials)
55
+ export { getOAuthCredentials } from './integrations/oauth/server/credentials'
56
+ export { refreshOAuthTokenIfExpired, forceRefreshOAuthToken } from './integrations/oauth/server/refresh'
57
+
58
+ // Integration adapters (uses Node.js SDKs - googleapis, @slack/web-api)
59
+ export { GmailAdapter } from './execution/engine/tools/integration/server/adapters/gmail/gmail-adapter'
60
+ export { AttioAdapter } from './execution/engine/tools/integration/server/adapters/attio'
61
+ export { GoogleSheetsAdapter } from './execution/engine/tools/integration/server/adapters/google-sheets'
62
+ export { ApifyAdapter } from './execution/engine/tools/integration/server/adapters/apify'
63
+ export { ApolloAdapter } from './execution/engine/tools/integration/server/adapters/apollo'
64
+ export { InstantlyAdapter } from './execution/engine/tools/integration/server/adapters/instantly'
65
+ export { ResendAdapter } from './execution/engine/tools/integration/server/adapters/resend'
66
+ export { AnymailfinderAdapter } from './execution/engine/tools/integration/server/adapters/anymailfinder'
67
+ export { TombaAdapter } from './execution/engine/tools/integration/server/adapters/tomba'
68
+ export { MillionVerifierAdapter } from './execution/engine/tools/integration/server/adapters/millionverifier'
69
+ export { StripeAdapter } from './execution/engine/tools/integration/server/adapters/stripe'
70
+ export { SignatureApiAdapter } from './execution/engine/tools/integration/server/adapters/signature-api'
71
+ export { DropboxAdapter } from './execution/engine/tools/integration/server/adapters/dropbox'
72
+ export { ClickUpAdapter } from './execution/engine/tools/integration/server/adapters/clickup'
73
+ export {
74
+ GoogleCalendarAdapter,
75
+ type CalendarEvent,
76
+ type CalendarDateTime,
77
+ type ListEventsResult
78
+ } from './execution/engine/tools/integration/server/adapters/google-calendar'
79
+
80
+ // Integration Tool Factories (server-only - uses adapters above)
81
+ export {
82
+ createGmailSendEmailTool,
83
+ createGmailSendEmailToolNamed
84
+ } from './execution/engine/tools/integration/server/adapters/gmail/gmail-tools'
85
+ export {
86
+ createAttioCreateRecordTool,
87
+ createAttioUpdateRecordTool,
88
+ createAttioListRecordsTool,
89
+ createAttioGetRecordTool,
90
+ createAttioDeleteRecordTool,
91
+ createAttioToolNamed,
92
+ // Schema operations
93
+ createAttioListObjectsTool,
94
+ createAttioListAttributesTool,
95
+ createAttioCreateAttributeTool,
96
+ createAttioUpdateAttributeTool,
97
+ // Note operations
98
+ createAttioCreateNoteTool
99
+ } from './execution/engine/tools/integration/server/adapters/attio'
100
+ export {
101
+ // Core methods
102
+ createGoogleSheetsReadTool,
103
+ createGoogleSheetsWriteTool,
104
+ createGoogleSheetsAppendTool,
105
+ createGoogleSheetsClearTool,
106
+ createGoogleSheetsMetadataTool,
107
+ createGoogleSheetsBatchUpdateTool,
108
+ // Workflow-friendly methods
109
+ createGoogleSheetsGetHeadersTool,
110
+ createGoogleSheetsGetLastRowTool,
111
+ createGoogleSheetsFindRowTool,
112
+ createGoogleSheetsUpdateRowTool,
113
+ createGoogleSheetsUpsertRowTool,
114
+ createGoogleSheetsFilterRowsTool,
115
+ createGoogleSheetsDeleteRowTool
116
+ } from './execution/engine/tools/integration/server/adapters/google-sheets'
117
+ export { createApifyRunActorTool } from './execution/engine/tools/integration/server/adapters/apify'
118
+ export {
119
+ createInstantlySendReplyTool,
120
+ createInstantlyRemoveFromSubsequenceTool,
121
+ createInstantlyGetEmailsTool,
122
+ createInstantlyUpdateInterestStatusTool,
123
+ createInstantlyAddToCampaignTool
124
+ } from './execution/engine/tools/integration/server/adapters/instantly'
125
+ export {
126
+ createResendSendEmailTool,
127
+ createResendGetEmailTool,
128
+ createResendSendEmailToolNamed
129
+ } from './execution/engine/tools/integration/server/adapters/resend'
130
+ export {
131
+ createAnymailfinderFindCompanyEmailTool,
132
+ createAnymailfinderFindPersonEmailTool,
133
+ createAnymailfinderFindDecisionMakerEmailTool,
134
+ createAnymailfinderVerifyEmailTool
135
+ } from './execution/engine/tools/integration/server/adapters/anymailfinder'
136
+ export {
137
+ createTombaEmailFinderTool,
138
+ createTombaDomainSearchTool,
139
+ createTombaEmailVerifierTool
140
+ } from './execution/engine/tools/integration/server/adapters/tomba'
141
+ export {
142
+ createMillionVerifierVerifyEmailTool,
143
+ createMillionVerifierCheckCreditsTool
144
+ } from './execution/engine/tools/integration/server/adapters/millionverifier'
145
+ export {
146
+ createDropboxUploadTool,
147
+ createDropboxCreateFolderTool
148
+ } from './execution/engine/tools/integration/server/adapters/dropbox'
149
+ export {
150
+ createStripeCreatePaymentLinkTool,
151
+ createStripeGetPaymentLinkTool,
152
+ createStripeUpdatePaymentLinkTool,
153
+ createStripeListPaymentLinksTool,
154
+ createStripeCheckoutSessionTool,
155
+ createStripeAutoPaymentLinkTool
156
+ } from './execution/engine/tools/integration/server/adapters/stripe'
157
+
158
+ // Resend fetch functions (low-level API for platform email service)
159
+ export { sendEmail as sendResendEmail } from './execution/engine/tools/integration/server/adapters/resend/fetch/send-email/index'
160
+ export type {
161
+ ResendCredentials,
162
+ SendEmailParams as ResendSendEmailParams,
163
+ SendEmailResult as ResendSendEmailResult
164
+ } from './execution/engine/tools/integration/server/adapters/resend/fetch/utils/types'
165
+
166
+ // Resend email configuration (high-level sender config for workflows)
167
+ export type { ResendEmailConfig } from './execution/engine/tools/integration/server/adapters/resend/types'
168
+
169
+ // SignatureAPI types (for eSignature envelope operations)
170
+ export type {
171
+ SignatureApiCredentials,
172
+ CreateEnvelopeParams,
173
+ CreateEnvelopeResult,
174
+ VoidEnvelopeParams,
175
+ VoidEnvelopeResult,
176
+ DownloadDocumentParams,
177
+ DownloadDocumentResult,
178
+ EnvelopeDocument,
179
+ Recipient,
180
+ SigningPlace
181
+ } from './execution/engine/tools/integration/server/adapters/signature-api'
182
+
183
+ // Execution validators (uses process.env for environment detection)
184
+ export { detectEnvironment, canExecuteResource, type Environment } from './execution/core/server/environment'
185
+
186
+ // Organization Model hash (uses Node.js crypto - server-only)
187
+ export { computeOrganizationModelSnapshotHash } from './organization-model/server/snapshot-hash-server'
188
+
189
+ // HMAC token utilities (uses Node.js crypto - server-only)
190
+ export { generateHmacToken, verifyHmacToken, generateBrochureUrl } from './platform/utils/server/hmac'
191
+ export {
192
+ generateUnsubscribeToken,
193
+ verifyUnsubscribeToken,
194
+ generateUnsubscribeUrl,
195
+ generateUnsubscribeHeaders
196
+ } from './platform/utils/server/unsubscribe'
197
+
198
+ // Better Stack error logging (uses @sentry/node - server-only)
199
+ export {
200
+ bslogExternalServiceError,
201
+ bslogExecutionFailure,
202
+ isSystemError
203
+ } from './platform/utils/server/betterstack-logger'
204
+
205
+ // LLM Adapters (uses betterstack-logger - server-only)
206
+ export { OpenAIAdapter, isOpenAIModel, type OpenAIAdapterConfig } from './execution/engine/llm/adapters/server/openai'
207
+ export {
208
+ OpenRouterAdapter,
209
+ isOpenRouterModel,
210
+ type OpenRouterAdapterConfig
211
+ } from './execution/engine/llm/adapters/server/openrouter'
212
+ export { createLLMAdapter } from './execution/engine/llm/adapters/server/adapter-factory'
213
+
214
+ // Browser-safe adapters (also exported from server for convenience)
215
+ export { UniversalLLMAdapter } from './execution/engine/llm/adapters/universal-adapter'
216
+ export { MockAdapter, isMockModel } from './execution/engine/llm/adapters/mock-adapter'
217
+ export { configureCircuitBreakerAlerts } from './execution/engine/llm/adapters/circuit-breaker'
218
+
219
+ // LLM Tool factory (uses server-only adapters)
220
+ export { createLLMCallTool, type LLMCallToolConfig } from './execution/engine/tools/llm/server'
221
+
222
+ // Workflow step helper (uses server-only adapters)
223
+ export { llmCall, type LLMCallOptions } from './execution/engine/workflow/helpers/server'
224
+
225
+ // Retained server-side resource invocation service types live under @repo/core/execution.
226
+ // Deployed SDK workers use platform.call() -> dispatcher for nested execution.
227
+
228
+ // Resilience utilities (timeout, circuit breaker, infrastructure errors)
229
+ export {
230
+ // Existing
231
+ withTimeout,
232
+ SERVICE_TIMEOUTS,
233
+ createCircuitBreaker,
234
+ CircuitState,
235
+ ServiceTimeoutError,
236
+ ServiceUnavailableError,
237
+ isInfrastructureError,
238
+ type CircuitBreaker,
239
+ type CircuitBreakerConfig,
240
+ // Rate limiting
241
+ InMemoryRateLimiter,
242
+ createRateLimiter,
243
+ // Retry logic
244
+ withRetry,
245
+ calculateRetryDelay,
246
+ sleep,
247
+ DEFAULT_RETRY_POLICY,
248
+ // HTTP error mapping
249
+ createHttpError,
250
+ mapHttpStatusToErrorType,
251
+ type RateLimiter,
252
+ type RetryPolicy,
253
+ type HttpErrorContext,
254
+ type ErrorParser
255
+ } from './platform/resilience'
256
+
257
+ // Acquisition Platform Tools (lead database)
258
+ export {
259
+ // List tools
260
+ createAcqListCreateTool,
261
+ createAcqListUpdateTool,
262
+ createAcqListDeleteTool,
263
+ createAcqListListTool,
264
+ // Company tools
265
+ createAcqCompanyCreateTool,
266
+ createAcqCompanyUpdateTool,
267
+ createAcqCompanyUpsertTool,
268
+ createAcqCompanyGetTool,
269
+ createAcqCompanyListTool,
270
+ createAcqCompanyDeleteTool,
271
+ // Contact tools
272
+ createAcqContactCreateTool,
273
+ createAcqContactUpdateTool,
274
+ createAcqContactUpsertTool,
275
+ createAcqContactGetTool,
276
+ createAcqContactListTool,
277
+ createAcqContactDeleteTool,
278
+ createAcqContactBulkImportTool
279
+ } from './execution/engine/tools/platform/acquisition'
280
+
281
+ // PDF Tool (server-only - uses React-PDF renderToBuffer)
282
+ export {
283
+ createPdfRenderTool,
284
+ type PdfRenderInput,
285
+ type PdfRenderOutput,
286
+ type PdfToolConfig,
287
+ PdfRenderInputSchema,
288
+ PdfRenderOutputSchema
289
+ } from './execution/engine/tools/platform/pdf'
290
+
291
+ // PDF Document types (for constructing documents programmatically)
292
+ export type { PDFDocument, ContentBlock, Page as PDFPage } from './business/pdf/types'