@elevasis/sdk 0.4.9 → 0.4.11

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.
@@ -1,26 +1,24 @@
1
1
  ---
2
2
  title: Integration Examples
3
- description: Common platform.call() patterns for email, CRM, PDF, LLM inference, resource triggering, and storage
3
+ description: Working code examples for email, CRM, PDF, LLM inference, resource triggering, and storage using typed adapters and platform.call()
4
4
  loadWhen: "Implementing a platform tool call in a workflow step"
5
5
  ---
6
6
 
7
- Common `platform.call()` patterns ready to use in your SDK workflows. Each example shows the complete invocation including tool name, method, params, and credential (where required).
7
+ Working code examples for common tool integrations. All tools shown here have [typed adapters](adapters.mdx) that provide full autocomplete and compile-time checking -- prefer adapters in new code. The `platform.call()` patterns below are kept as reference and for tools without adapters yet (supabase).
8
8
 
9
9
  ## Sending Email via Resend
10
10
 
11
11
  Send a transactional email through your Resend account. Store your Resend API key as a credential named `resend` using the [Elevasis CLI](../cli/index.mdx).
12
12
 
13
13
  ```typescript
14
- const result = await platform.call({
15
- tool: 'resend',
16
- method: 'sendEmail',
17
- credential: 'resend',
18
- params: {
19
- from: 'hello@yourapp.com',
20
- to: 'customer@example.com',
21
- subject: 'Your order is confirmed',
22
- html: '<p>Thank you for your order!</p>'
23
- }
14
+ import { createResendAdapter } from '@elevasis/sdk/worker'
15
+
16
+ const resend = createResendAdapter('resend')
17
+ const result = await resend.sendEmail({
18
+ from: 'hello@yourapp.com',
19
+ to: 'customer@example.com',
20
+ subject: 'Your order is confirmed',
21
+ html: '\<p\>Thank you for your order!\</p\>',
24
22
  })
25
23
  ```
26
24
 
@@ -31,95 +29,86 @@ The `credential` value must match the name you used when storing the API key. Re
31
29
  Create a contact or company record in Attio. Store your Attio API key as a credential named `attio`.
32
30
 
33
31
  ```typescript
34
- const result = await platform.call({
35
- tool: 'attio',
36
- method: 'createRecord',
37
- credential: 'attio',
38
- params: {
39
- objectType: 'people',
40
- attributes: {
41
- name: [{ full_name: 'Jane Smith' }],
42
- email_addresses: [{ email_address: 'jane@example.com' }],
43
- company: 'Acme Corp'
44
- }
45
- }
32
+ import { createAttioAdapter } from '@elevasis/sdk/worker'
33
+
34
+ const attio = createAttioAdapter('attio')
35
+ const result = await attio.createRecord({
36
+ object: 'people',
37
+ values: {
38
+ name: [{ full_name: 'Jane Smith' }],
39
+ email_addresses: [{ email_address: 'jane@example.com' }],
40
+ },
46
41
  })
47
42
 
48
- // result.data.id is the new record ID
49
43
  const recordId = result.data.id
50
44
  ```
51
45
 
52
- Attio exposes 11 tools covering CRUD operations, schema inspection, and notes. See the Attio adapter documentation for the full method list.
46
+ Attio exposes 12 methods covering CRUD operations, schema inspection, and notes. See the [typed adapter reference](adapters.mdx#attio-crm-adapter) for the full method list.
53
47
 
54
48
  ## Generating a PDF
55
49
 
56
- Render a PDF from an HTML string or a registered template. No credential required -- PDF generation is a built-in platform service.
50
+ Render a PDF from a document structure or template. No credential required -- PDF generation is a built-in platform service.
57
51
 
58
52
  ```typescript
59
- const pdfBuffer = await platform.call({
60
- tool: 'pdf',
61
- method: 'renderToBuffer',
62
- params: {
63
- html: `
64
- <h1>Invoice #1042</h1>
65
- <p>Customer: Jane Smith</p>
66
- <p>Amount due: $450.00</p>
67
- `,
68
- options: {
69
- format: 'A4',
70
- margin: { top: '20mm', bottom: '20mm', left: '15mm', right: '15mm' }
71
- }
72
- }
53
+ import { pdf, storage } from '@elevasis/sdk/worker'
54
+
55
+ // Render to storage directly
56
+ const result = await pdf.render({
57
+ document: proposalDocument,
58
+ storage: { bucket: 'invoices', path: 'invoice-1042.pdf' },
59
+ })
60
+ console.log(result.pdfUrl)
61
+
62
+ // Or render to buffer for inline processing
63
+ const { buffer } = await pdf.renderToBuffer({
64
+ document: proposalDocument,
73
65
  })
74
66
 
75
- // Upload the buffer to storage for later retrieval
76
- await platform.call({
77
- tool: 'storage',
78
- method: 'upload',
79
- params: {
80
- path: 'invoices/invoice-1042.pdf',
81
- data: pdfBuffer,
82
- contentType: 'application/pdf'
83
- }
67
+ // Then upload manually if needed
68
+ await storage.upload({
69
+ bucket: 'invoices',
70
+ path: 'invoice-1042.pdf',
71
+ content: buffer,
72
+ contentType: 'application/pdf',
84
73
  })
85
74
  ```
86
75
 
87
76
  ## Making an LLM Call with Structured Output
88
77
 
89
- Use the `llm` tool to call any supported model with a JSON Schema for structured output. No API keys are needed in your code -- keys are resolved server-side.
78
+ Use the `llm` adapter to call any supported model with a JSON Schema for structured output. No API keys are needed in your code -- keys are resolved server-side.
90
79
 
91
80
  ```typescript
92
- const classification = await platform.call({
93
- tool: 'llm',
94
- method: 'generate',
95
- params: {
96
- provider: 'anthropic',
97
- model: 'claude-sonnet-4-5',
98
- messages: [
99
- {
100
- role: 'system',
101
- content: 'You extract structured data from support tickets. Return valid JSON matching the schema.'
102
- },
103
- {
104
- role: 'user',
105
- content: ticketText
106
- }
107
- ],
108
- responseSchema: {
109
- type: 'object',
110
- properties: {
111
- priority: { type: 'string', enum: ['low', 'medium', 'high', 'critical'] },
112
- category: { type: 'string', enum: ['billing', 'technical', 'account', 'other'] },
113
- sentiment: { type: 'string', enum: ['positive', 'neutral', 'negative'] },
114
- summary: { type: 'string' }
115
- },
116
- required: ['priority', 'category', 'sentiment', 'summary']
81
+ import { llm } from '@elevasis/sdk/worker'
82
+
83
+ interface TicketClassification {
84
+ priority: 'low' | 'medium' | 'high' | 'critical'
85
+ category: 'billing' | 'technical' | 'account' | 'other'
86
+ sentiment: 'positive' | 'neutral' | 'negative'
87
+ summary: string
88
+ }
89
+
90
+ const response = await llm.generate\<TicketClassification\>({
91
+ provider: 'anthropic',
92
+ model: 'claude-sonnet-4-5',
93
+ messages: [
94
+ { role: 'system', content: 'You extract structured data from support tickets.' },
95
+ { role: 'user', content: ticketText },
96
+ ],
97
+ responseSchema: {
98
+ type: 'object',
99
+ properties: {
100
+ priority: { type: 'string', enum: ['low', 'medium', 'high', 'critical'] },
101
+ category: { type: 'string', enum: ['billing', 'technical', 'account', 'other'] },
102
+ sentiment: { type: 'string', enum: ['positive', 'neutral', 'negative'] },
103
+ summary: { type: 'string' },
117
104
  },
118
- temperature: 0.1
119
- }
105
+ required: ['priority', 'category', 'sentiment', 'summary'],
106
+ },
107
+ temperature: 0.1,
120
108
  })
121
109
 
122
- // classification = { priority: 'high', category: 'technical', sentiment: 'negative', summary: '...' }
110
+ // response.output is typed as TicketClassification
111
+ const { priority, category, summary } = response.output
123
112
  ```
124
113
 
125
114
  Supported providers: `google`, `openai`, `anthropic`, `openrouter`. See [Platform Tools](index.mdx) for the full model list.
@@ -129,17 +118,15 @@ Supported providers: `google`, `openai`, `anthropic`, `openrouter`. See [Platfor
129
118
  Trigger a separate workflow or agent as a nested child execution. The call is synchronous -- your workflow waits for the child to complete and receives its output.
130
119
 
131
120
  ```typescript
132
- const outcome = await platform.call({
133
- tool: 'execution',
134
- method: 'trigger',
135
- params: {
136
- resourceId: 'send-welcome-sequence',
137
- input: {
138
- userId: newUser.id,
139
- email: newUser.email,
140
- plan: 'pro'
141
- }
142
- }
121
+ import { execution } from '@elevasis/sdk/worker'
122
+
123
+ const outcome = await execution.trigger({
124
+ resourceId: 'send-welcome-sequence',
125
+ input: {
126
+ userId: newUser.id,
127
+ email: newUser.email,
128
+ plan: 'pro',
129
+ },
143
130
  })
144
131
 
145
132
  if (!outcome.success) {
@@ -156,25 +143,21 @@ Nested executions are tracked with depth up to a maximum of 5 levels. Both the c
156
143
  Upload a file to Elevasis-managed storage and generate a signed URL for temporary access. No credential required.
157
144
 
158
145
  ```typescript
146
+ import { storage } from '@elevasis/sdk/worker'
147
+
159
148
  // Upload a processed file
160
- await platform.call({
161
- tool: 'storage',
162
- method: 'upload',
163
- params: {
164
- path: `exports/${organizationSlug}/report-${Date.now()}.csv`,
165
- data: csvContent,
166
- contentType: 'text/csv'
167
- }
149
+ const reportPath = `exports/report-${Date.now()}.csv`
150
+ await storage.upload({
151
+ bucket: 'exports',
152
+ path: reportPath,
153
+ content: csvContent,
154
+ contentType: 'text/csv',
168
155
  })
169
156
 
170
157
  // Generate a signed URL valid for 1 hour (3600 seconds)
171
- const { signedUrl } = await platform.call({
172
- tool: 'storage',
173
- method: 'createSignedUrl',
174
- params: {
175
- path: `exports/${organizationSlug}/report-${Date.now()}.csv`,
176
- expiresIn: 3600
177
- }
158
+ const { signedUrl } = await storage.createSignedUrl({
159
+ bucket: 'exports',
160
+ path: reportPath,
178
161
  })
179
162
 
180
163
  // Share signedUrl with the user or include in an email
@@ -184,4 +167,4 @@ Storage also supports `download`, `delete`, and `list` operations. Use `list` to
184
167
 
185
168
  ---
186
169
 
187
- **Last Updated:** 2026-02-25
170
+ **Last Updated:** 2026-03-02
@@ -1,25 +1,42 @@
1
1
  ---
2
2
  title: Platform Tools
3
- description: Access 70+ tools across integration adapters and platform services from your SDK workflows via platform.call()
3
+ description: Access 70+ tools across integration adapters and platform services from your SDK workflows -- typed adapters with full autocomplete for all tools, plus platform.call() as a fallback
4
4
  loadWhen: "Connecting to external services"
5
5
  ---
6
6
 
7
- `platform.call()` gives your SDK workflows access to the same 70+ tools that internal Elevasis agents use -- Gmail, Stripe, Google Sheets, PDF generation, human-in-the-loop approvals, storage, scheduling, and more. Credentials are managed server-side and never appear in your code. You pass a tool name, method, and parameters; Elevasis handles credential lookup, rate limiting, and retry transparently.
7
+ Your SDK workflows have access to 70+ tools -- Gmail, Stripe, Google Sheets, PDF generation, human-in-the-loop approvals, storage, scheduling, and more. Credentials are managed server-side and never appear in your code.
8
8
 
9
- All tools share the same interface regardless of type: integration adapters (third-party APIs) and platform services (built-in Elevasis capabilities) are both called the same way.
9
+ **Typed adapters** are the recommended way to call tools. They provide full TypeScript autocomplete, compile-time method checking, and eliminate boilerplate. Use `platform.call()` only for tools that don't have an adapter yet.
10
10
 
11
11
  ## Usage
12
12
 
13
+ **Preferred: Typed adapters** (available for all integration tools + key platform services)
14
+
15
+ ```typescript
16
+ import { createResendAdapter, scheduler, llm } from '@elevasis/sdk/worker'
17
+
18
+ // Integration tools: factory pattern (credential bound once)
19
+ const resend = createResendAdapter('my-resend')
20
+ await resend.sendEmail({ from: 'hi@app.com', to: 'user@example.com', subject: '...' })
21
+
22
+ // Platform services: singleton (no credential needed)
23
+ await scheduler.createSchedule({ ... })
24
+ const result = await llm.generate({ messages: [...] })
25
+ ```
26
+
27
+ **Fallback: `platform.call()`** (for tools without typed adapters)
28
+
13
29
  ```typescript
30
+ import { platform } from '@elevasis/sdk/worker'
31
+
14
32
  const result = await platform.call({
15
- tool: 'resend', // tool name (integration adapter or platform service)
16
- method: 'sendEmail', // method exposed by that tool
17
- params: { ... }, // method-specific parameters
18
- credential: 'my-resend' // credential name (integration tools only)
33
+ tool: 'lead', // tool name
34
+ method: 'upsertDeal', // method exposed by that tool
35
+ params: { ... }, // method-specific parameters
19
36
  })
20
37
  ```
21
38
 
22
- `platform.call()` returns a Promise that resolves with the tool result or rejects with a `PlatformToolError` containing a message, error code, and a `retryable` flag.
39
+ Both patterns return a Promise that resolves with the tool result or rejects with a `PlatformToolError` containing a message, error code, and a `retryable` flag.
23
40
 
24
41
  ## Integration Adapters
25
42
 
@@ -45,45 +62,43 @@ Credentials are stored in the Elevasis credentials table and injected server-sid
45
62
 
46
63
  ## Platform Services
47
64
 
48
- Nine built-in platform services are available without a `credential` field. These are Elevasis-managed capabilities.
65
+ Nine built-in platform services are available without a `credential` field. These are Elevasis-managed capabilities. All have typed singleton adapters imported from `@elevasis/sdk/worker`.
49
66
 
50
67
  | Tool Key | Methods | Purpose |
51
68
  | --- | --- | --- |
52
- | `email` | `send` | Send transactional email via Elevasis email service |
53
- | `storage` | `upload`, `download`, `createSignedUrl`, `delete`, `list` | File storage operations |
54
- | `pdf` | `render`, `renderToBuffer` | Generate PDFs from templates or HTML |
55
- | `notification` | `create` | Create in-app notifications |
56
- | `approval` | `create`, `deleteByMetadata` | Human-in-the-loop approval gates |
57
- | `scheduler` | `createSchedule`, `updateAnchor`, `deleteSchedule`, `findByIdempotencyKey`, `deleteScheduleByIdempotencyKey`, `listSchedules`, `getSchedule`, `cancelSchedule`, `cancelSchedulesByMetadata` | Task scheduling |
58
- | `lead` | Dynamic (all methods) | Lead management operations |
59
- | `llm` | `generate` | LLM inference across multiple providers |
60
- | `execution` | `trigger` | Trigger another resource as a nested child execution |
69
+ | `lead` | 35 methods (CRUD + sync) | Lead management -- `lead` singleton adapter |
70
+ | `email` | `send` | Send platform email to org members -- `email` singleton adapter |
71
+ | `storage` | `upload`, `download`, `createSignedUrl`, `delete`, `list` | File storage -- `storage` singleton adapter |
72
+ | `pdf` | `render`, `renderToBuffer` | PDF rendering -- `pdf` singleton adapter |
73
+ | `notification` | `create` | In-app notifications -- `notifications` singleton adapter |
74
+ | `approval` | `create`, `deleteByMetadata` | HITL approval gates -- `approval` singleton adapter |
75
+ | `scheduler` | `createSchedule`, `updateAnchor`, `deleteSchedule`, `findByIdempotencyKey`, `deleteScheduleByIdempotencyKey`, `listSchedules`, `getSchedule`, `cancelSchedule`, `cancelSchedulesByMetadata` | Task scheduling -- `scheduler` singleton adapter |
76
+ | `llm` | `generate` | LLM inference -- `llm` singleton adapter |
77
+ | `execution` | `trigger` | Nested child execution -- `execution` singleton adapter |
61
78
 
62
79
  ## LLM Tool
63
80
 
64
- Call any supported LLM from your workflow with no API keys required. Keys are resolved server-side from environment variables.
81
+ Call any supported LLM from your workflow with no API keys required. Keys are resolved server-side from environment variables. Use the `llm` typed adapter for full autocomplete.
65
82
 
66
83
  ```typescript
67
- const result = await platform.call({
68
- tool: 'llm',
69
- method: 'generate',
70
- params: {
71
- provider: 'google',
72
- model: 'gemini-3-flash-preview',
73
- messages: [
74
- { role: 'system', content: 'Classify this email reply.' },
75
- { role: 'user', content: emailText }
76
- ],
77
- responseSchema: {
78
- type: 'object',
79
- properties: {
80
- category: { type: 'string', enum: ['interested', 'not-interested', 'bounced'] },
81
- confidence: { type: 'number', minimum: 0, maximum: 1 }
82
- },
83
- required: ['category', 'confidence']
84
+ import { llm } from '@elevasis/sdk/worker'
85
+
86
+ const result = await llm.generate({
87
+ provider: 'google',
88
+ model: 'gemini-3-flash-preview',
89
+ messages: [
90
+ { role: 'system', content: 'Classify this email reply.' },
91
+ { role: 'user', content: emailText }
92
+ ],
93
+ responseSchema: {
94
+ type: 'object',
95
+ properties: {
96
+ category: { type: 'string', enum: ['interested', 'not-interested', 'bounced'] },
97
+ confidence: { type: 'number', minimum: 0, maximum: 1 }
84
98
  },
85
- temperature: 0.2
86
- }
99
+ required: ['category', 'confidence']
100
+ },
101
+ temperature: 0.2
87
102
  })
88
103
  ```
89
104
 
@@ -109,13 +124,11 @@ const result = await platform.call({
109
124
  Trigger another resource (workflow or agent) as a nested child of the current execution. The child runs synchronously and its result is returned. Depth is tracked automatically up to a maximum of 5 levels to prevent infinite recursion.
110
125
 
111
126
  ```typescript
112
- const result = await platform.call({
113
- tool: 'execution',
114
- method: 'trigger',
115
- params: {
116
- resourceId: 'my-other-workflow',
117
- input: { key: 'value' }
118
- }
127
+ import { execution } from '@elevasis/sdk/worker'
128
+
129
+ const result = await execution.trigger({
130
+ resourceId: 'my-other-workflow',
131
+ input: { key: 'value' },
119
132
  })
120
133
  // result = { success: true, executionId: '...', output: { ... }, error: undefined }
121
134
  ```
@@ -175,8 +188,9 @@ const qualified = await platform.call({
175
188
 
176
189
  ## Documentation
177
190
 
178
- - [Integration Examples](examples.mdx) - Common `platform.call()` patterns with working code for email, CRM, PDF, LLM, and more
191
+ - [Typed Adapters](adapters.mdx) - Type-safe wrappers for all 12 integrations + 4 platform services with full autocomplete (recommended)
192
+ - [Integration Examples](examples.mdx) - Working code examples for email, CRM, PDF, LLM, and more
179
193
 
180
194
  ---
181
195
 
182
- **Last Updated:** 2026-02-25
196
+ **Last Updated:** 2026-03-02
@@ -63,6 +63,42 @@ This is the static SDK-level error catalog. Check `.claude/memory/errors/` first
63
63
 
64
64
  ---
65
65
 
66
+ ## Relationship Validation Errors
67
+
68
+ ### Relationship declared for non-existent resource
69
+
70
+ **Message:** `Relationship source 'resource-id' is not a known resource in 'org-name'`
71
+
72
+ **Cause:** The `relationships` map in your organization export contains a key that does not match any workflow, agent, trigger, or external resource ID.
73
+
74
+ **Fix:** Check the resource ID in your `relationships` declaration. Each key must exactly match a `resourceId` defined in your workflows, agents, triggers, or external resources.
75
+
76
+ ### Resource triggers non-existent agent
77
+
78
+ **Message:** `Relationship target 'agent-id' (agent) not found in 'org-name'`
79
+
80
+ **Cause:** A relationship's `triggers.agents` array references an agent ID that does not exist.
81
+
82
+ **Fix:** Verify the agent ID spelling in `triggers: \{ agents: ['agent-id'] \}`. The ID must match the `resourceId` of an agent defined in your organization.
83
+
84
+ ### Resource triggers non-existent workflow
85
+
86
+ **Message:** `Relationship target 'workflow-id' (workflow) not found in 'org-name'`
87
+
88
+ **Cause:** A relationship's `triggers.workflows` array references a workflow ID that does not exist.
89
+
90
+ **Fix:** Verify the workflow ID spelling in `triggers: \{ workflows: ['workflow-id'] \}`. The ID must match the `resourceId` of a workflow defined in your organization.
91
+
92
+ ### Resource uses non-existent integration
93
+
94
+ **Message:** `Relationship target 'integration-id' (integration) not found in 'org-name'`
95
+
96
+ **Cause:** A relationship's `uses.integrations` array references an integration ID that does not exist.
97
+
98
+ **Fix:** Verify the integration ID spelling in `uses: \{ integrations: ['integration-id'] \}`. The ID must match the `resourceId` of an integration defined in your organization.
99
+
100
+ ---
101
+
66
102
  ## Schema Validation Errors
67
103
 
68
104
  ### Schema validation failed (input)
@@ -1,95 +0,0 @@
1
- # SDK Reference Documentation
2
-
3
- 29 pages bundled from the Elevasis documentation site.
4
-
5
- Browse these files for complete SDK reference including platform tools catalog,
6
- resource types, runtime limits, deployment details, and CLI commands.
7
-
8
- ## Pages
9
-
10
- - **CLI Reference** -- `cli/index.mdx`
11
- Full reference for every elevasis CLI command -- scaffold, validate, deploy, execute, and inspect resources
12
-
13
- - **Concepts Reference** -- `concepts/index.mdx`
14
- Plain-English explanations of Elevasis SDK concepts -- glossary, workflow analogies, Zod schemas, execution model, platform tools, common errors, and design decisions
15
-
16
- - **Execution API** -- `deployment/api.mdx`
17
- REST endpoints for executing resources, querying execution history, and managing deployments via the Elevasis external API
18
-
19
- - **Deploying Resources** -- `deployment/index.mdx`
20
- How to deploy your Elevasis SDK resources to the platform using elevasis deploy, including configuration, validation, and environment setup
21
-
22
- - **Interaction Guidance** -- `developer/interaction-guidance.mdx`
23
- Full dimensional adaptation rules per skill axis -- programming, TypeScript, API integration, automation concepts, domain expertise -- with growth tracking protocol
24
-
25
- - **Agent System** -- `framework/agent.mdx`
26
- CLAUDE.md drives all agent behavior -- project instructions, slash commands, memory-based developer profile, and three-tier adaptive guidance
27
-
28
- - **Resource Documentation** -- `framework/documentation.mdx`
29
- Write and deploy MDX documentation alongside your Elevasis resources
30
-
31
- - **Development Framework** -- `framework/index.mdx`
32
- The SDK scaffolds a complete development environment for Claude Code -- project instructions, slash commands, cross-session memory, and template versioning
33
-
34
- - **Memory System** -- `framework/memory.mdx`
35
- Cross-session project knowledge stored in .claude/memory/ -- deployment state, environment, decisions, and error patterns that persist between Claude Code sessions
36
-
37
- - **Project Structure** -- `framework/project-structure.mdx`
38
- Each file scaffolded by elevasis init and its purpose in the development workflow
39
-
40
- - **Getting Started** -- `getting-started/index.mdx`
41
- Install the Elevasis SDK, scaffold a project, and run your first deployment
42
-
43
- - **Elevasis SDK** -- `index.mdx`
44
- Build and deploy workflows, agents, and resources with the Elevasis SDK
45
-
46
- - **Integration Examples** -- `platform-tools/examples.mdx`
47
- Common platform.call() patterns for email, CRM, PDF, LLM inference, resource triggering, and storage
48
-
49
- - **Platform Tools** -- `platform-tools/index.mdx`
50
- Access 70+ tools across integration adapters and platform services from your SDK workflows via platform.call()
51
-
52
- - **Writing Resources** -- `resources/index.mdx`
53
- Guide to creating workflows and agents using WorkflowDefinition, AgentDefinition, and OrganizationResources with the Elevasis SDK
54
-
55
- - **Common Patterns** -- `resources/patterns.mdx`
56
- Common resource patterns for Elevasis SDK developers -- sequential steps, conditional branching, platform tools, error handling, and resource status management
57
-
58
- - **SDK Types** -- `resources/types.mdx`
59
- Complete type reference for @elevasis/sdk -- package exports, re-exported platform types, ElevasConfig interface, StepHandler context, and runtime values
60
-
61
- - **Roadmap** -- `roadmap/index.mdx`
62
- Planned SDK features -- error taxonomy, retry semantics, circuit breaker, metrics, alerting, and resource lifecycle extensions
63
-
64
- - **Execution Runtime** -- `runtime/index.mdx`
65
- How your code runs on the Elevasis platform -- execution lifecycle, concurrency, timeouts, cancellation, error handling, and observability
66
-
67
- - **Resource Limits & Quotas** -- `runtime/limits.mdx`
68
- Memory limits, execution timeouts, scale quotas, networking constraints, and v1 platform limitations for SDK resources
69
-
70
- - **Credential Security** -- `security/credentials.mdx`
71
- Three-layer credential model: platform tools (server-side injection), http tool (arbitrary APIs), getCredential() (explicit opt-in raw access) -- .env scope and security boundaries
72
-
73
- - **Template: Data Enrichment** -- `templates/data-enrichment.mdx`
74
- LLM-powered enrichment of existing database records -- read rows, enrich each with an LLM, write results back to Supabase
75
-
76
- - **Template: Email Sender** -- `templates/email-sender.mdx`
77
- Transactional email via Resend with template support -- send styled emails to one or multiple recipients
78
-
79
- - **Template: Lead Scorer** -- `templates/lead-scorer.mdx`
80
- LLM-based lead scoring with Supabase storage -- receive a lead, score it with an LLM, store the result
81
-
82
- - **Template: PDF Generator** -- `templates/pdf-generator.mdx`
83
- PDF generation from structured data with platform storage upload -- render a PDF from a template and upload to platform storage
84
-
85
- - **Template: Recurring Job** -- `templates/recurring-job.mdx`
86
- Scheduler-triggered periodic workflow -- run a task on a schedule (daily, weekly, hourly, or custom cron)
87
-
88
- - **Template: Text Classifier** -- `templates/text-classifier.mdx`
89
- Multi-label text classification with structured output -- classify text into predefined categories using an LLM with JSON output
90
-
91
- - **Template: Web Scraper** -- `templates/web-scraper.mdx`
92
- Apify-based web scraper that stores results in Supabase -- fetch structured data from any website via Apify actors
93
-
94
- - **Common Errors** -- `troubleshooting/common-errors.mdx`
95
- Static SDK-level error catalog -- CLI errors, deployment errors, schema validation, platform tool failures, and runtime errors with diagnostic steps