@elevasis/sdk 0.5.12 → 0.5.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli.cjs +144 -118
- package/dist/index.d.ts +19 -253
- package/dist/index.js +20 -9
- package/dist/templates.js +62 -59
- package/dist/types/worker/adapters/index.d.ts +0 -1
- package/dist/worker/index.js +47 -53
- package/package.json +1 -1
- package/reference/_navigation.md +13 -57
- package/reference/{cli/index.mdx → cli.mdx} +568 -505
- package/reference/concepts.mdx +164 -0
- package/reference/deployment/api.mdx +297 -297
- package/reference/deployment/command-center.mdx +226 -0
- package/reference/deployment/index.mdx +158 -153
- package/reference/framework/agent.mdx +156 -151
- package/reference/framework/index.mdx +182 -103
- package/reference/{developer → framework}/interaction-guidance.mdx +182 -182
- package/reference/framework/memory.mdx +326 -347
- package/reference/framework/project-structure.mdx +277 -298
- package/reference/framework/tutorial-system.mdx +222 -0
- package/reference/{getting-started/index.mdx → getting-started.mdx} +152 -148
- package/reference/index.mdx +131 -114
- package/reference/platform-tools/adapters.mdx +868 -929
- package/reference/platform-tools/index.mdx +354 -195
- package/reference/resources/index.mdx +339 -336
- package/reference/resources/patterns.mdx +355 -354
- package/reference/resources/types.mdx +207 -207
- package/reference/{roadmap/index.mdx → roadmap.mdx} +163 -147
- package/reference/{runtime/index.mdx → runtime.mdx} +173 -141
- package/reference/{troubleshooting/common-errors.mdx → troubleshooting.mdx} +223 -210
- package/dist/types/worker/adapters/trello.d.ts +0 -14
- package/reference/concepts/index.mdx +0 -203
- package/reference/deployment/command-center-ui.mdx +0 -151
- package/reference/deployment/command-view.mdx +0 -154
- package/reference/framework/documentation.mdx +0 -92
- package/reference/platform-tools/examples.mdx +0 -170
- package/reference/runtime/limits.mdx +0 -75
- package/reference/security/credentials.mdx +0 -141
|
@@ -1,151 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
title: Command Center UI
|
|
3
|
-
description: Reference for the Elevasis Command Center -- what each page does, when to use it post-deployment, and how SDK concepts map to UI actions
|
|
4
|
-
loadWhen: "User asks about the Command Center UI, post-deployment workflow, or monitoring deployed resources"
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
The Command Center is the browser UI for interacting with deployed resources. After you run `elevasis-sdk deploy`, this is where you run workflows, monitor executions, manage approvals, schedule tasks, and review logs. This reference covers each page and how it connects to your SDK code.
|
|
8
|
-
|
|
9
|
-
---
|
|
10
|
-
|
|
11
|
-
## Quick Reference
|
|
12
|
-
|
|
13
|
-
| Task | Page | Path |
|
|
14
|
-
| -------------------------------------------------- | -------------- | ----------------------- |
|
|
15
|
-
| Browse deployed resources, view the resource graph | Command View | `/command-view` |
|
|
16
|
-
| Approve or reject pending HITL requests | Command Queue | `/queue` |
|
|
17
|
-
| Browse deployed documentation | Knowledge Base | `/knowledge-base` |
|
|
18
|
-
| Search execution history across all resources | Execution Logs | `/logs` |
|
|
19
|
-
| Create API key and OAuth credentials | Credentials | `/settings/credentials` |
|
|
20
|
-
| View deployment history and active version | Deployments | `/settings/deployments` |
|
|
21
|
-
|
|
22
|
-
---
|
|
23
|
-
|
|
24
|
-
## Command View
|
|
25
|
-
|
|
26
|
-
The Command View is a visual graph of your deployed resources. Each node is a resource (workflow, agent, trigger, integration). Edges are the relationships you declared in `OrganizationResources`.
|
|
27
|
-
|
|
28
|
-
**What you can do here:**
|
|
29
|
-
|
|
30
|
-
- See all deployed resources at a glance
|
|
31
|
-
- Trace data flow between resources via declared relationships
|
|
32
|
-
- Identify which resources depend on which integrations
|
|
33
|
-
- Click a node to view resource details (ID, status, type)
|
|
34
|
-
|
|
35
|
-
**Graph accuracy:** The graph reflects your `relationships` declarations, not runtime behavior. If your handler calls another resource without a declared relationship, the edge is missing from the graph. Keep declarations in sync with your code.
|
|
36
|
-
|
|
37
|
-
For the full relationship model and what is enforced vs. decorative, see `reference/deployment/command-view.mdx`.
|
|
38
|
-
|
|
39
|
-
> **SDK takeaway:** Declare relationships in `OrganizationResources` to keep the Command View accurate as your system grows.
|
|
40
|
-
|
|
41
|
-
---
|
|
42
|
-
|
|
43
|
-
## Command Queue
|
|
44
|
-
|
|
45
|
-
The Command Queue surfaces all pending Human-in-the-Loop (HITL) approval requests from running workflows.
|
|
46
|
-
|
|
47
|
-
**What you can do here:**
|
|
48
|
-
|
|
49
|
-
- View pending approval requests with context provided by the workflow
|
|
50
|
-
- Filter by resource, status, or date
|
|
51
|
-
- Approve or reject with an optional comment
|
|
52
|
-
- See the history of past decisions
|
|
53
|
-
|
|
54
|
-
**How it connects to your code:** Approval requests appear here when a workflow step calls `approval.requestApproval()`. The workflow pauses at that step and waits for a decision before continuing.
|
|
55
|
-
|
|
56
|
-
```typescript
|
|
57
|
-
import { approval } from '@elevasis/sdk/worker'
|
|
58
|
-
|
|
59
|
-
const result = await approval.requestApproval({
|
|
60
|
-
title: 'Approve proposal before sending',
|
|
61
|
-
context: { dealId, proposalUrl },
|
|
62
|
-
})
|
|
63
|
-
|
|
64
|
-
if (result.approved) {
|
|
65
|
-
// continue
|
|
66
|
-
}
|
|
67
|
-
```
|
|
68
|
-
|
|
69
|
-
> **SDK takeaway:** Use `approval.requestApproval()` to create approval gates that surface here. Provide rich `context` so reviewers have what they need to decide.
|
|
70
|
-
|
|
71
|
-
---
|
|
72
|
-
|
|
73
|
-
## Knowledge Base
|
|
74
|
-
|
|
75
|
-
The Knowledge Base renders the `docs/` directory of your deployed workspace as browsable documentation.
|
|
76
|
-
|
|
77
|
-
**What you can do here:**
|
|
78
|
-
|
|
79
|
-
- Browse pages you created in `docs/*.mdx`
|
|
80
|
-
- Search across all documentation
|
|
81
|
-
- Share links to specific pages with team members
|
|
82
|
-
|
|
83
|
-
**How it connects to your code:** Every `.mdx` file in your workspace's `docs/` directory is bundled at deploy time and rendered here. Pages appear in the order defined by their `order` frontmatter field.
|
|
84
|
-
|
|
85
|
-
> **SDK takeaway:** Write `docs/*.mdx` pages for your team -- business process docs, schema references, usage guides. They appear here automatically after each deploy.
|
|
86
|
-
|
|
87
|
-
---
|
|
88
|
-
|
|
89
|
-
## Execution Logs
|
|
90
|
-
|
|
91
|
-
The Execution Logs page shows the history of all executions across every deployed resource.
|
|
92
|
-
|
|
93
|
-
**What you can do here:**
|
|
94
|
-
|
|
95
|
-
- Search and filter by resource, status (completed/failed/running), date range
|
|
96
|
-
- Click any execution to view full detail: input, output, step-level trace, duration
|
|
97
|
-
- Identify failed executions and see error messages with stack traces
|
|
98
|
-
- Navigate from a log entry directly to the resource in Command View
|
|
99
|
-
|
|
100
|
-
**Filtering tips:**
|
|
101
|
-
|
|
102
|
-
- Filter by resource name to debug a specific workflow
|
|
103
|
-
- Filter by `failed` status to triage production issues
|
|
104
|
-
- Use date range to narrow down incidents
|
|
105
|
-
|
|
106
|
-
> **SDK takeaway:** Every `elevasis-sdk exec` and every scheduled run appears here. Use this page to verify behavior after deploy and to diagnose failures before opening code.
|
|
107
|
-
|
|
108
|
-
---
|
|
109
|
-
|
|
110
|
-
## Credentials
|
|
111
|
-
|
|
112
|
-
The Credentials page manages encrypted API keys and OAuth tokens used by your workflows at runtime.
|
|
113
|
-
|
|
114
|
-
**What you can do here:**
|
|
115
|
-
|
|
116
|
-
- Create API key and webhook-secret credentials via a form
|
|
117
|
-
- Connect OAuth providers (Notion, Google Sheets, Dropbox) via browser flow
|
|
118
|
-
- View existing credentials (values are never shown after creation)
|
|
119
|
-
- Delete credentials that are no longer needed
|
|
120
|
-
|
|
121
|
-
**Two credential types:**
|
|
122
|
-
|
|
123
|
-
| Type | Created via | Notes |
|
|
124
|
-
| ------------------------ | -------------------------------------------- | ------------------------------------------------------ |
|
|
125
|
-
| API key / webhook secret | CLI (`elevasis-sdk creds create`) or UI form | Either method works |
|
|
126
|
-
| OAuth | UI only | Requires browser redirect -- cannot be created via CLI |
|
|
127
|
-
|
|
128
|
-
**OAuth credentials require the UI.** When a workflow uses an OAuth-connected service, the user must complete the OAuth flow here first. The CLI `creds` skill handles API keys; redirect OAuth credential setup to this page.
|
|
129
|
-
|
|
130
|
-
> **SDK takeaway:** Reference credentials in your code by name (`credential: 'my-cred-name'`). Create API keys via CLI or UI; OAuth credentials require this page.
|
|
131
|
-
|
|
132
|
-
---
|
|
133
|
-
|
|
134
|
-
## Deployments
|
|
135
|
-
|
|
136
|
-
The Deployments page shows the history of all deployments for your organization.
|
|
137
|
-
|
|
138
|
-
**What you can do here:**
|
|
139
|
-
|
|
140
|
-
- View a chronological list of past deployments
|
|
141
|
-
- See which resources changed in each deployment
|
|
142
|
-
- Identify the currently active version
|
|
143
|
-
- Compare resource counts across deployments
|
|
144
|
-
|
|
145
|
-
**How it connects to your code:** Each `elevasis-sdk deploy` run creates a new deployment entry. The platform activates the new version atomically -- in-flight executions complete against the previous version while new executions start against the new one.
|
|
146
|
-
|
|
147
|
-
> **SDK takeaway:** Check this page after `elevasis-sdk deploy` to confirm your resources are active. If something behaves unexpectedly, look here to confirm the latest version is live.
|
|
148
|
-
|
|
149
|
-
---
|
|
150
|
-
|
|
151
|
-
**Last Updated:** 2026-03-03
|
|
@@ -1,154 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
title: Command View
|
|
3
|
-
description: How the Command View graph works -- node types, relationships, what is enforced vs decorative, and what the platform needs to render your resource graph
|
|
4
|
-
loadWhen: "Deploying resources or building resources that invoke other resources"
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
The Command View is a visual graph in the Elevasis command center that shows how your organization's resources connect. Nodes are resources (workflows, agents, integrations). Edges are relationships you declare between them. The graph helps operators understand how automation flows through the system at a glance.
|
|
8
|
-
|
|
9
|
-
---
|
|
10
|
-
|
|
11
|
-
## Node Types
|
|
12
|
-
|
|
13
|
-
Every resource you deploy becomes a node in the Command View. Some nodes are executable (the platform runs them); others are visual-only (they exist for the graph but have no runtime behavior).
|
|
14
|
-
|
|
15
|
-
### Executable Nodes
|
|
16
|
-
|
|
17
|
-
| Type | What It Does | Deployed By |
|
|
18
|
-
| ---- | ------------ | ----------- |
|
|
19
|
-
| Workflow | Runs step handlers in sequence or branching paths | `elevasis-sdk deploy` |
|
|
20
|
-
| Agent | Autonomous LLM-powered resource with tools | `elevasis-sdk deploy` |
|
|
21
|
-
|
|
22
|
-
### Visual-Only Nodes
|
|
23
|
-
|
|
24
|
-
These exist solely for the Command View graph. They have no runtime behavior -- the platform does not execute them.
|
|
25
|
-
|
|
26
|
-
| Type | What It Represents | Why It Exists |
|
|
27
|
-
| ---- | ------------------ | ------------- |
|
|
28
|
-
| Trigger | A webhook or schedule that starts a workflow | Shows how executions begin |
|
|
29
|
-
| Integration | A credential reference (provider + credential name) | Shows which external services a resource uses |
|
|
30
|
-
| External Resource | A third-party automation (n8n, Make, Zapier) | Documents automations outside the platform |
|
|
31
|
-
| Human Checkpoint | A point where a human makes a decision | Shows where HITL approval gates exist |
|
|
32
|
-
|
|
33
|
-
Visual-only nodes are declarations. A `TriggerDefinition` does not set up actual trigger routing -- the webhook gateway routes independently. An `IntegrationDefinition` does not configure or connect to anything -- it is a visual node referencing a credential.
|
|
34
|
-
|
|
35
|
-
---
|
|
36
|
-
|
|
37
|
-
## Relationships
|
|
38
|
-
|
|
39
|
-
Relationships are edges in the Command View graph. You declare them in `OrganizationResources` to tell the platform how resources connect.
|
|
40
|
-
|
|
41
|
-
### Declaring Relationships
|
|
42
|
-
|
|
43
|
-
```typescript
|
|
44
|
-
const org: OrganizationResources = {
|
|
45
|
-
workflows: {
|
|
46
|
-
'score-lead': scoreLeadWorkflow,
|
|
47
|
-
'send-proposal': sendProposalWorkflow,
|
|
48
|
-
},
|
|
49
|
-
agents: {
|
|
50
|
-
'research-agent': researchAgent,
|
|
51
|
-
},
|
|
52
|
-
relationships: {
|
|
53
|
-
'score-lead': {
|
|
54
|
-
triggers: {
|
|
55
|
-
workflows: ['send-proposal'], // score-lead triggers send-proposal
|
|
56
|
-
agents: ['research-agent'], // score-lead triggers research-agent
|
|
57
|
-
},
|
|
58
|
-
uses: {
|
|
59
|
-
integrations: ['attio-integration'], // score-lead uses Attio
|
|
60
|
-
},
|
|
61
|
-
},
|
|
62
|
-
},
|
|
63
|
-
};
|
|
64
|
-
```
|
|
65
|
-
|
|
66
|
-
### Relationship Fields
|
|
67
|
-
|
|
68
|
-
| Field | Type | Meaning |
|
|
69
|
-
| ----- | ---- | ------- |
|
|
70
|
-
| `triggers.workflows` | `string[]` | Workflows this resource starts |
|
|
71
|
-
| `triggers.agents` | `string[]` | Agents this resource starts |
|
|
72
|
-
| `uses.integrations` | `string[]` | Integrations this resource depends on |
|
|
73
|
-
|
|
74
|
-
All referenced IDs must exist in the same organization. Missing targets cause a validation error at deploy time.
|
|
75
|
-
|
|
76
|
-
### Relationships Are Declarations, Not Routing
|
|
77
|
-
|
|
78
|
-
Relationships tell the Command View what edges to draw. They do **not** create execution paths. If you declare that workflow A triggers workflow B, the platform does not automatically route A's output to B. Your handler code must explicitly invoke B using the `execution` adapter or `platform.call()`.
|
|
79
|
-
|
|
80
|
-
This means the graph can drift from reality:
|
|
81
|
-
|
|
82
|
-
- If your code invokes resource B but you forgot to declare the relationship, the edge is **missing** from the graph
|
|
83
|
-
- If you declared a relationship to resource B but your code never invokes it, the edge is **stale** in the graph
|
|
84
|
-
|
|
85
|
-
---
|
|
86
|
-
|
|
87
|
-
## What Is Enforced vs Decorative
|
|
88
|
-
|
|
89
|
-
| Category | Validated at Deploy | Matches Runtime | Status |
|
|
90
|
-
| -------- | ------------------- | --------------- | ------ |
|
|
91
|
-
| Resource IDs unique | Yes | Yes | **Enforced** |
|
|
92
|
-
| Input schema matches execution interface | Yes | Yes | **Enforced** |
|
|
93
|
-
| Relationship targets exist | Yes | No -- invocations are hardcoded strings in handlers | **Decorative** |
|
|
94
|
-
| Trigger routing | No | No -- webhook handlers route independently | **Decorative** |
|
|
95
|
-
| Tool availability per agent | No | No -- tools built dynamically at runtime | **Decorative** |
|
|
96
|
-
| Model config | Yes (provider + model valid) | No -- runtime uses environment config | **Decorative** |
|
|
97
|
-
| Integration usage | Partial (IDs checked) | No -- credentials resolved at runtime | **Decorative** |
|
|
98
|
-
|
|
99
|
-
**Enforced** means the platform rejects invalid state. **Decorative** means the platform trusts your declaration but does not verify it matches what the code actually does.
|
|
100
|
-
|
|
101
|
-
### What This Means for You
|
|
102
|
-
|
|
103
|
-
- Keep relationships in sync with your handler code. When you add an `execution.trigger('other-resource')` call, add the corresponding relationship declaration.
|
|
104
|
-
- When you remove an invocation, remove the relationship.
|
|
105
|
-
- The Command View is only as accurate as your declarations.
|
|
106
|
-
|
|
107
|
-
---
|
|
108
|
-
|
|
109
|
-
## Deploy-Time Validation
|
|
110
|
-
|
|
111
|
-
When you run `elevasis-sdk deploy` or `elevasis-sdk check`, the SDK validates your resource definitions locally using the same `ResourceRegistry` the platform uses.
|
|
112
|
-
|
|
113
|
-
### What Gets Checked
|
|
114
|
-
|
|
115
|
-
- **Duplicate resource IDs** -- two resources with the same key in `workflows` or `agents`
|
|
116
|
-
- **Relationship targets exist** -- every ID in `triggers` and `uses` must match a resource or integration in the same `OrganizationResources`
|
|
117
|
-
- **Model configuration** -- agent model params (provider, model name, temperature bounds) are valid
|
|
118
|
-
- **Step chains** -- `next.target` values in multi-step workflows point to existing step names
|
|
119
|
-
|
|
120
|
-
### What Does Not Get Checked
|
|
121
|
-
|
|
122
|
-
- Whether your handler code actually invokes the resources you declared in relationships
|
|
123
|
-
- Whether your handler code invokes resources you did **not** declare in relationships
|
|
124
|
-
- Whether triggers route to the workflows you declared
|
|
125
|
-
- Whether agents use the tools you expect
|
|
126
|
-
|
|
127
|
-
These are the decorative gaps listed above. The graph is a best-effort representation that depends on you keeping declarations in sync with code.
|
|
128
|
-
|
|
129
|
-
### Validation Error Examples
|
|
130
|
-
|
|
131
|
-
```
|
|
132
|
-
ERROR Relationship target 'send-proposal' not found in organization resources
|
|
133
|
-
Resource: score-lead
|
|
134
|
-
Field: relationships.triggers.workflows
|
|
135
|
-
|
|
136
|
-
ERROR Duplicate resource ID 'score-lead' in organization
|
|
137
|
-
```
|
|
138
|
-
|
|
139
|
-
Fix relationship errors by checking that the target resource ID is spelled correctly and exists in your `OrganizationResources` export. If the resource was renamed or removed, update the relationship to match.
|
|
140
|
-
|
|
141
|
-
---
|
|
142
|
-
|
|
143
|
-
## Graph Serialization
|
|
144
|
-
|
|
145
|
-
The platform converts your resource definitions and relationships into a visual graph using two data structures:
|
|
146
|
-
|
|
147
|
-
- **`CommandViewNode`** -- one per resource (workflow, agent, trigger, integration, etc.). Contains the resource ID, type, name, status, and metadata.
|
|
148
|
-
- **`CommandViewEdge`** -- one per relationship. Contains source node, target node, and edge type (triggers, uses).
|
|
149
|
-
|
|
150
|
-
The `buildEdges()` function in the platform registry reads your `relationships` declarations and produces `CommandViewEdge[]`. This is a pure transformation -- it does not add or remove edges based on runtime behavior.
|
|
151
|
-
|
|
152
|
-
---
|
|
153
|
-
|
|
154
|
-
**Last Updated:** 2026-03-02
|
|
@@ -1,92 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
title: Resource Documentation
|
|
3
|
-
description: Write and deploy MDX documentation alongside your Elevasis resources
|
|
4
|
-
loadWhen: "Writing or updating project documentation"
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
`elevasis-sdk deploy` ships your code and your documentation atomically -- one command, no version drift. Documentation files live in a `docs/` directory at your project root and render in the Elevasis platform UI for operators using your resources.
|
|
8
|
-
|
|
9
|
-
## Directory Structure
|
|
10
|
-
|
|
11
|
-
Create `.mdx` files inside a `docs/` directory at your project root. `elevasis-sdk init` scaffolds a starter structure:
|
|
12
|
-
|
|
13
|
-
```
|
|
14
|
-
my-project/
|
|
15
|
-
├── docs/
|
|
16
|
-
│ └── index.mdx # Resource overview (scaffolded by init)
|
|
17
|
-
├── src/
|
|
18
|
-
│ └── index.ts # Resource definitions
|
|
19
|
-
├── elevasis.config.ts
|
|
20
|
-
└── ...
|
|
21
|
-
```
|
|
22
|
-
|
|
23
|
-
A missing `docs/` directory is silently ignored -- documentation is optional. If the directory exists, its contents are included in the deploy payload alongside resource schemas.
|
|
24
|
-
|
|
25
|
-
## Frontmatter Schema
|
|
26
|
-
|
|
27
|
-
Every documentation file supports a frontmatter block at the top:
|
|
28
|
-
|
|
29
|
-
```yaml
|
|
30
|
-
---
|
|
31
|
-
title: string # Page title (required)
|
|
32
|
-
description: string # Short description (optional)
|
|
33
|
-
order: number # Sort order within directory (optional, default: 0)
|
|
34
|
-
---
|
|
35
|
-
```
|
|
36
|
-
|
|
37
|
-
## Naming Conventions
|
|
38
|
-
|
|
39
|
-
- `docs/index.mdx` is the root documentation page and is always rendered first
|
|
40
|
-
- Nested directories create sections: `docs/guides/getting-started.mdx`
|
|
41
|
-
- File names become URL slugs: `setup-guide.mdx` renders at `/docs/setup-guide`
|
|
42
|
-
- Arbitrary nesting is supported -- there is no depth limit
|
|
43
|
-
|
|
44
|
-
## Size Limits
|
|
45
|
-
|
|
46
|
-
- 100KB per file
|
|
47
|
-
- 1MB total across all files in a deployment
|
|
48
|
-
|
|
49
|
-
These limits are enforced by the CLI before the deploy request is sent. Validation errors include the file name and size.
|
|
50
|
-
|
|
51
|
-
## Starter Template
|
|
52
|
-
|
|
53
|
-
`elevasis-sdk init` writes this starter file to `docs/index.mdx`:
|
|
54
|
-
|
|
55
|
-
```mdx
|
|
56
|
-
---
|
|
57
|
-
title: Overview
|
|
58
|
-
description: Documentation for this Elevasis project
|
|
59
|
-
---
|
|
60
|
-
|
|
61
|
-
# Overview
|
|
62
|
-
|
|
63
|
-
Welcome to the documentation for this project.
|
|
64
|
-
|
|
65
|
-
## Resources
|
|
66
|
-
|
|
67
|
-
Describe your workflows and agents here. This documentation is deployed alongside your
|
|
68
|
-
code and rendered in the Elevasis platform UI.
|
|
69
|
-
|
|
70
|
-
## Getting Started
|
|
71
|
-
|
|
72
|
-
\`\`\`bash
|
|
73
|
-
elevasis-sdk check # Validate resources
|
|
74
|
-
elevasis-sdk deploy # Deploy to platform
|
|
75
|
-
elevasis-sdk exec <resourceId> --input '{"key": "value"}'
|
|
76
|
-
\`\`\`
|
|
77
|
-
```
|
|
78
|
-
|
|
79
|
-
## Deploy Behavior
|
|
80
|
-
|
|
81
|
-
When you run `elevasis-sdk deploy`:
|
|
82
|
-
|
|
83
|
-
1. The CLI scans `docs/` recursively for `.mdx` files
|
|
84
|
-
2. Each file's frontmatter (title, description, order) is parsed and stripped from the content
|
|
85
|
-
3. Total size is validated against the 1MB limit and individual files against 100KB
|
|
86
|
-
4. The documentation array is included in the deploy metadata alongside your resource schemas
|
|
87
|
-
|
|
88
|
-
Documentation and code ship in the same transaction. There is no separate upload step and no way for documentation to drift out of sync with the deployed version.
|
|
89
|
-
|
|
90
|
-
---
|
|
91
|
-
|
|
92
|
-
**Last Updated:** 2026-02-25
|
|
@@ -1,170 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
title: Integration Examples
|
|
3
|
-
description: Working code examples for email, CRM, PDF, LLM inference, resource triggering, and storage using typed adapters and platform.call()
|
|
4
|
-
loadWhen: "Implementing a platform tool call in a workflow step"
|
|
5
|
-
---
|
|
6
|
-
|
|
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
|
-
|
|
9
|
-
## Sending Email via Resend
|
|
10
|
-
|
|
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
|
-
|
|
13
|
-
```typescript
|
|
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\>',
|
|
22
|
-
})
|
|
23
|
-
```
|
|
24
|
-
|
|
25
|
-
The `credential` value must match the name you used when storing the API key. Resend supports `{ apiKey }` as its credential shape.
|
|
26
|
-
|
|
27
|
-
## Creating a CRM Record via Attio
|
|
28
|
-
|
|
29
|
-
Create a contact or company record in Attio. Store your Attio API key as a credential named `attio`.
|
|
30
|
-
|
|
31
|
-
```typescript
|
|
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
|
-
},
|
|
41
|
-
})
|
|
42
|
-
|
|
43
|
-
const recordId = result.data.id
|
|
44
|
-
```
|
|
45
|
-
|
|
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.
|
|
47
|
-
|
|
48
|
-
## Generating a PDF
|
|
49
|
-
|
|
50
|
-
Render a PDF from a document structure or template. No credential required -- PDF generation is a built-in platform service.
|
|
51
|
-
|
|
52
|
-
```typescript
|
|
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,
|
|
65
|
-
})
|
|
66
|
-
|
|
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',
|
|
73
|
-
})
|
|
74
|
-
```
|
|
75
|
-
|
|
76
|
-
## Making an LLM Call with Structured Output
|
|
77
|
-
|
|
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.
|
|
79
|
-
|
|
80
|
-
```typescript
|
|
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' },
|
|
104
|
-
},
|
|
105
|
-
required: ['priority', 'category', 'sentiment', 'summary'],
|
|
106
|
-
},
|
|
107
|
-
temperature: 0.1,
|
|
108
|
-
})
|
|
109
|
-
|
|
110
|
-
// response.output is typed as TicketClassification
|
|
111
|
-
const { priority, category, summary } = response.output
|
|
112
|
-
```
|
|
113
|
-
|
|
114
|
-
Supported providers: `google`, `openai`, `anthropic`, `openrouter`. See [Platform Tools](index.mdx) for the full model list.
|
|
115
|
-
|
|
116
|
-
## Triggering Another Resource
|
|
117
|
-
|
|
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.
|
|
119
|
-
|
|
120
|
-
```typescript
|
|
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
|
-
},
|
|
130
|
-
})
|
|
131
|
-
|
|
132
|
-
if (!outcome.success) {
|
|
133
|
-
throw new Error(`Child workflow failed: ${outcome.error}`)
|
|
134
|
-
}
|
|
135
|
-
|
|
136
|
-
// outcome = { success: true, executionId: '...', output: { emailsSent: 3 }, error: undefined }
|
|
137
|
-
```
|
|
138
|
-
|
|
139
|
-
Nested executions are tracked with depth up to a maximum of 5 levels. Both the calling workflow and the child must belong to the same organization.
|
|
140
|
-
|
|
141
|
-
## Uploading to Storage
|
|
142
|
-
|
|
143
|
-
Upload a file to Elevasis-managed storage and generate a signed URL for temporary access. No credential required.
|
|
144
|
-
|
|
145
|
-
```typescript
|
|
146
|
-
import { storage } from '@elevasis/sdk/worker'
|
|
147
|
-
|
|
148
|
-
// Upload a processed file
|
|
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',
|
|
155
|
-
})
|
|
156
|
-
|
|
157
|
-
// Generate a signed URL valid for 1 hour (3600 seconds)
|
|
158
|
-
const { signedUrl } = await storage.createSignedUrl({
|
|
159
|
-
bucket: 'exports',
|
|
160
|
-
path: reportPath,
|
|
161
|
-
})
|
|
162
|
-
|
|
163
|
-
// Share signedUrl with the user or include in an email
|
|
164
|
-
```
|
|
165
|
-
|
|
166
|
-
Storage also supports `download`, `delete`, and `list` operations. Use `list` to enumerate files under a path prefix.
|
|
167
|
-
|
|
168
|
-
---
|
|
169
|
-
|
|
170
|
-
**Last Updated:** 2026-03-02
|
|
@@ -1,75 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
title: Resource Limits & Quotas
|
|
3
|
-
description: Memory limits, execution timeouts, scale quotas, networking constraints, and v1 platform limitations for SDK resources
|
|
4
|
-
loadWhen: "Hitting resource limits or planning for scale"
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
This page documents the hard limits enforced on all SDK resources running on the Elevasis platform. These limits exist to ensure platform stability and fair resource usage across all organizations.
|
|
8
|
-
|
|
9
|
-
---
|
|
10
|
-
|
|
11
|
-
## Resource Limits
|
|
12
|
-
|
|
13
|
-
Limits enforced per worker thread at runtime:
|
|
14
|
-
|
|
15
|
-
| Resource | Value |
|
|
16
|
-
| -------- | ----- |
|
|
17
|
-
| Memory (V8 heap) | 256MB per worker |
|
|
18
|
-
| Disk | Bundle file only (ephemeral, not persistent across deploys) |
|
|
19
|
-
|
|
20
|
-
- **Memory:** Enforced by the platform. Exceeding 256MB crashes the worker. The platform catches the error; other tenants are unaffected. If your workflow processes large datasets, consider streaming or batching to stay within the limit.
|
|
21
|
-
- **Disk:** Your bundle is written to disk during deploy and available to the worker at execution time. It is not a persistent write surface -- do not write files to disk from within your handler expecting them to persist.
|
|
22
|
-
|
|
23
|
-
---
|
|
24
|
-
|
|
25
|
-
## Scale Limits & Quotas
|
|
26
|
-
|
|
27
|
-
Hard limits to prevent abuse and ensure platform stability:
|
|
28
|
-
|
|
29
|
-
| Limit | Value |
|
|
30
|
-
| ----- | ----- |
|
|
31
|
-
| Max execution duration (workflows) | 300s (5 min) |
|
|
32
|
-
| Max execution duration (agents) | 600s (10 min) |
|
|
33
|
-
| Max log volume | 100MB/day |
|
|
34
|
-
| Max deploy frequency | 60/day |
|
|
35
|
-
|
|
36
|
-
- **Execution duration:** Executions exceeding the timeout are terminated by the platform. The execution is marked failed with a timeout reason.
|
|
37
|
-
- **Log volume:** Total log output across all executions is capped at 100MB per day. Logs beyond this threshold may be truncated.
|
|
38
|
-
- **Deploy frequency:** 60 deploys per day is generous for normal development. This limit prevents accidental deploy loops (for example, a CI pipeline misconfigured to deploy on every commit).
|
|
39
|
-
|
|
40
|
-
---
|
|
41
|
-
|
|
42
|
-
## Networking
|
|
43
|
-
|
|
44
|
-
- **Outbound:** Unrestricted. Your handlers can call any external API (OpenAI, Twilio, Stripe, etc.) from within the worker.
|
|
45
|
-
- **Inbound:** Workers receive input from the platform coordinator via internal message passing -- they are not exposed to the network directly.
|
|
46
|
-
- **No ports:** Workers communicate with the platform via zero-network-overhead message passing. No port allocation occurs.
|
|
47
|
-
- **Isolation:** Workers have no access to other organizations' data or platform credentials by default. Supabase credentials are not present in the worker environment.
|
|
48
|
-
|
|
49
|
-
---
|
|
50
|
-
|
|
51
|
-
## Platform Maintenance
|
|
52
|
-
|
|
53
|
-
- **Rolling updates:** Platform upgrades re-register all active deployments on startup. No executions are lost.
|
|
54
|
-
- **Node.js updates:** When the server's Node.js version is updated, worker threads pick up the new version on the next execution with no action required from you.
|
|
55
|
-
- **Advance notice:** 24-hour advance notice is provided for breaking maintenance windows. These are rare and reserved for major infrastructure changes.
|
|
56
|
-
|
|
57
|
-
---
|
|
58
|
-
|
|
59
|
-
## v1 Limitations
|
|
60
|
-
|
|
61
|
-
| Limitation | Reason | Future path |
|
|
62
|
-
| ---------- | ------ | ----------- |
|
|
63
|
-
| **No nested execution from external resources** | External resources cannot call back to the platform's execution coordinator to trigger other resources as sub-executions. | A callback API endpoint that external processes can call to trigger nested executions (requires auth token forwarding). |
|
|
64
|
-
| **No streaming logs** | Execution logs are returned in the response body after completion. There is no real-time SSE streaming from within the worker. | SSE/WebSocket push from external processes to the platform log system. |
|
|
65
|
-
| **Static resource priority conflicts** | If your organization has a static (monorepo) resource with the same ID as a resource in your SDK bundle, the deploy will fail. Static definitions always take priority and cannot be overridden. | Conflict detection is surfaced in the CLI with a clear error message. |
|
|
66
|
-
|
|
67
|
-
---
|
|
68
|
-
|
|
69
|
-
## Organization Provisioning
|
|
70
|
-
|
|
71
|
-
Organization creation is currently admin-only. If you need a new organization provisioned for SDK access, contact the Elevasis team. Self-serve organization creation and API key generation is on the roadmap.
|
|
72
|
-
|
|
73
|
-
---
|
|
74
|
-
|
|
75
|
-
**Last Updated:** 2026-03-03
|