@elevasis/sdk 1.48.0 → 1.50.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.
Files changed (56) hide show
  1. package/dist/chunk-MGZZ4HL4.js +4399 -0
  2. package/dist/chunk-VYWGWJRW.js +130 -0
  3. package/dist/chunk-YJDXRHNP.js +7901 -0
  4. package/dist/cli.cjs +949 -281
  5. package/dist/index.d.ts +1031 -48
  6. package/dist/index.js +2 -7597
  7. package/dist/node/index.d.ts +3 -3675
  8. package/dist/node/index.js +2 -124
  9. package/dist/test-utils/index.d.ts +2 -12051
  10. package/dist/test-utils/index.js +113 -27891
  11. package/dist/worker/index.d.ts +548 -12264
  12. package/dist/worker/index.js +3 -7400
  13. package/package.json +12 -4
  14. package/reference/_navigation.md +4 -4
  15. package/reference/_reference-manifest.json +1 -1
  16. package/reference/core/index.mdx +6 -4
  17. package/reference/index.mdx +11 -5
  18. package/reference/packages/core/src/README.md +46 -44
  19. package/reference/packages/core/src/content/README.md +16 -12
  20. package/reference/rules/agent-start-here.md +1 -1
  21. package/reference/rules/frontend.md +3 -1
  22. package/reference/rules/package-taxonomy.md +7 -5
  23. package/reference/rules/ui.md +31 -5
  24. package/reference/rules/vibe-intents.md +2 -2
  25. package/reference/rules/vibe.md +30 -10
  26. package/reference/scaffold/recipes/extend-content.md +82 -3
  27. package/reference/scaffold/recipes/gate-by-feature-or-admin.md +8 -6
  28. package/reference/scaffold/ui/feature-flags-and-gating.md +11 -1
  29. package/reference/sdk/cli-management.mdx +284 -139
  30. package/reference/sdk/cli.mdx +136 -88
  31. package/reference/sdk/define-builders.mdx +1 -1
  32. package/reference/sdk/deployment/command-center.mdx +2 -2
  33. package/reference/sdk/deployment/index.mdx +24 -7
  34. package/reference/sdk/exports.mdx +4 -4
  35. package/reference/sdk/framework/agent.mdx +4 -3
  36. package/reference/sdk/framework/index.mdx +1 -1
  37. package/reference/sdk/framework/project-structure.mdx +34 -23
  38. package/reference/sdk/framework/tutorial-system.mdx +1 -1
  39. package/reference/sdk/getting-started.mdx +25 -52
  40. package/reference/sdk/index.mdx +3 -3
  41. package/reference/sdk/platform-tools/adapters-integration.mdx +1 -1
  42. package/reference/sdk/platform-tools/adapters-platform.mdx +1 -1
  43. package/reference/sdk/platform-tools/type-safety.mdx +1 -1
  44. package/reference/sdk/resources/patterns.mdx +10 -11
  45. package/reference/sdk/resources/types.mdx +15 -9
  46. package/reference/sdk/templates/data-enrichment.mdx +1 -1
  47. package/reference/sdk/templates/email-sender.mdx +1 -1
  48. package/reference/sdk/templates/index.mdx +47 -47
  49. package/reference/sdk/templates/lead-scorer.mdx +1 -1
  50. package/reference/sdk/templates/pdf-generator.mdx +42 -24
  51. package/reference/sdk/templates/recurring-job.mdx +20 -15
  52. package/reference/sdk/templates/text-classifier.mdx +1 -1
  53. package/reference/sdk/templates/web-scraper.mdx +9 -5
  54. package/reference/sdk/troubleshooting.mdx +72 -1
  55. package/reference/ui/exports.mdx +1 -1
  56. package/reference/ui/index.mdx +2 -2
@@ -22,7 +22,7 @@ The scaffold is a workspace with `ui/`, `operations/`, and `core/` packages plus
22
22
  ├── .env / .env.example # ELEVASIS_PLATFORM_KEY and other root-level environment values
23
23
  ├── .gitattributes # Line-ending normalization
24
24
  ├── .gitignore # Excludes node_modules, dist, .env, .tanstack, and more
25
- ├── .npmrc # auto-install-peers = true (Zod is a peer dependency)
25
+ ├── .npmrc # ignore-workspace-root-check + auto-install-peers (Zod is a peer dependency)
26
26
  ├── CLAUDE.md # Project-owned identity and preferences (never overwritten by sync)
27
27
  ├── CONNECTIONS.md # Tenant-owned production wiring values (never overwritten)
28
28
  ├── OPERATIONS.md # Tenant-owned operational quirks (never overwritten, outranks generic guidance)
@@ -43,11 +43,17 @@ Cross-runtime types, schemas, constants, and organization-model configuration sh
43
43
  ```
44
44
  core/
45
45
  ├── config/
46
- │ ├── organization-model.ts # Canonical model + resource descriptor resolvers
46
+ │ ├── organization-model.ts # Entry barrel -- assembly, public exports, knowledge wiring
47
+ │ ├── organization-model/
48
+ │ │ ├── profile.ts # defineOrganizationModel() body (/om codify target)
49
+ │ │ ├── systems.ts # Operational graph, resource descriptors, governance model
50
+ │ │ └── navigation.ts # Sidebar tree, projectTemplateNavigationSurfaces
47
51
  │ ├── organization-model.test.ts
48
52
  │ ├── organization-model.contract.test.ts
49
- │ ├── extensions/ # Project-specific model extensions
50
- │ ├── knowledge/ # Knowledge graph nodes
53
+ │ ├── extensions/ # Project-specific model extensions (deal-ecom.ts.example, index.ts)
54
+ │ ├── knowledge/
55
+ │ │ ├── nodes/ # Hand-authored knowledge node MDX (welcome.mdx)
56
+ │ │ └── _generated/ # Compiled knowledge bodies and search index -- do not edit
51
57
  │ └── README.md
52
58
  ├── test-utils/
53
59
  │ └── core-contract-factories.ts
@@ -63,7 +69,7 @@ core/
63
69
 
64
70
  ### `core/config/organization-model.ts`
65
71
 
66
- Defines and resolves the canonical organization model (`canonicalOrganizationModel`) plus the resource-descriptor getters (`getTemplateWorkflowResourceDescriptor`, `getTemplateAgentResourceDescriptor`) that `operations/src/index.ts` imports. Direct edits are discouraged -- the file's own resolver (`resolveOrganizationModel()`) runs Zod cross-reference validation that a syntactically valid edit can still fail. All edits go through `/om`.
72
+ The entry file for the organization model, split into a thin assembly barrel plus three sibling files under `core/config/organization-model/`: `profile.ts` (the `/om` codify target -- identity, customers, offerings, roles, goals), `systems.ts` (the operational graph: Systems, resources, the resource-descriptor getters `getTemplateWorkflowResourceDescriptor` and `getTemplateAgentResourceDescriptor`, and governance model), and `navigation.ts` (the sidebar tree). `organization-model.ts` resolves the canonical model (`canonicalOrganizationModel`, via `resolveOrganizationModel()`) and re-exports every public symbol from the split files so `operations/src/index.ts` and other consumers keep importing from the single entry path. Direct edits to any of these files are discouraged -- the resolver runs Zod cross-reference validation that a syntactically valid edit can still fail. All edits go through `/om`.
67
73
 
68
74
  ### `core/types/index.ts`
69
75
 
@@ -86,13 +92,18 @@ operations/
86
92
  │ ├── metadata.ts # Trigger/integration/human-checkpoint metadata (starts empty)
87
93
  │ ├── resource-registry.test.ts
88
94
  │ ├── README.md
95
+ │ ├── __tests__/
96
+ │ │ └── sdk-test-utils.compat.ts # Shared test helpers -- assertResourceRegistry, runWorkflow
89
97
  │ ├── example/
90
98
  │ │ ├── echo.ts # Starter workflow
99
+ │ │ ├── echo.test.ts
91
100
  │ │ ├── example-agent.ts # Starter agent
101
+ │ │ ├── example-agent.test.ts
92
102
  │ │ └── index.ts # Domain barrel (exports workflows + agents)
93
103
  │ ├── email-notification/
94
104
  │ │ ├── exports.ts # Domain barrel
95
105
  │ │ ├── index.ts # Multi-step workflow using the notifications adapter
106
+ │ │ ├── email-notification.test.ts
96
107
  │ │ └── adapter-contract.test.ts
97
108
  │ └── shared/ # Empty by default (.gitkeep) -- code shared across domains
98
109
  ├── elevasis.config.ts # Project-level SDK config
@@ -111,7 +122,7 @@ Convention seed for deployment mechanics that are not resource identity: trigger
111
122
 
112
123
  ### `operations/src/example/echo.ts`
113
124
 
114
- The starter workflow: one workflow per file with its own `config`, Zod `contract`, `steps` map, and `entryPoint`. Replace this domain with your own when ready. `operations/src/example/example-agent.ts` is the equivalent starter for an agent resource.
125
+ The starter workflow: one workflow per file with its own `config`, Zod `contract`, `steps` map, and `entryPoint`. Replace this domain with your own when ready. `operations/src/example/example-agent.ts` is the equivalent starter for an agent resource -- a minimal single-shot (non-session) `AgentDefinition` with no tools and no memory. Each has a matching `*.test.ts` file exercising it through the shared test helpers in `operations/src/__tests__/sdk-test-utils.compat.ts`.
115
126
 
116
127
  ### `operations/src/email-notification/index.ts`
117
128
 
@@ -173,7 +184,7 @@ The `.claude/` directory and `CLAUDE.md` give Claude Code full awareness of the
173
184
  ├── hooks/ # post-edit-validate.mjs, scaffold-registry-reminder.mjs, tool-failure-recovery.mjs
174
185
  ├── skills/ # One directory per slash command, each with a SKILL.md
175
186
  ├── rules/ # Path-scoped pointers to rule bodies bundled with @elevasis/sdk
176
- ├── registries/ # Scaffold, skill-coverage, and knowledge registry data
187
+ ├── registries/ # Skill-coverage and knowledge registry data (skill-coverage.json, graph-skills.json, knowledge-flags.json)
177
188
  └── logs/ # Hook-written runtime state
178
189
  ```
179
190
 
@@ -183,7 +194,7 @@ The `.claude/` directory and `CLAUDE.md` give Claude Code full awareness of the
183
194
 
184
195
  ## `elevasis-sdk deploy` Scope
185
196
 
186
- `elevasis-sdk deploy` (run as `pnpm -C operations deploy` or `pnpm -C operations deploy:prod`) bundles `operations/src/` into a single file via esbuild and uploads it. There is no documentation-upload step in the current deploy path -- `ui/`, `core/`, and `.claude/` are not touched by deploy.
197
+ `elevasis-sdk deploy` (run as `pnpm -C operations run deploy` or `pnpm -C operations run deploy:prod` -- the explicit `run` matters, because `pnpm -C operations deploy` without it invokes pnpm's own builtin `deploy` command instead of the project script) bundles `operations/src/` into a single file via esbuild and uploads it. There is no documentation-upload step in the current deploy path -- `ui/`, `core/`, and `.claude/` are not touched by deploy.
187
198
 
188
199
  ---
189
200
 
@@ -199,29 +210,29 @@ Contains `ELEVASIS_PLATFORM_KEY` (and optionally `ELEVASIS_PLATFORM_KEY_DEV`). G
199
210
 
200
211
  ### `.npmrc`
201
212
 
202
- Sets `auto-install-peers = true`. The SDK uses Zod as a peer dependency, so this ensures Zod installs automatically.
213
+ Sets `ignore-workspace-root-check=true` (isolates this project so pnpm does not walk up and find the monorepo's `pnpm-workspace.yaml`) and `auto-install-peers=true` (the SDK uses Zod as a peer dependency, so this ensures Zod installs automatically).
203
214
 
204
215
  ### `.gitignore`
205
216
 
206
- Excludes `node_modules/`, `dist/`, `*.tsbuildinfo`, `.tanstack/`, `.env` and `.env.*` (except `.env.example`), `*.log`, `.claude/settings.local.json`, hook-written state in `.claude/logs/*.state.json`, `operations/dist/`, `operations/__elevasis_worker.ts` (a temporary file generated during deployment), and `tmp/*` (except `.gitkeep`).
217
+ Excludes `node_modules/`, `dist/`, `*.tsbuildinfo`, `.tanstack/`, `.env` and `.env.*` (except `.env.example`), `*.log`, `.DS_Store`, `.claude/settings.local.json`, hook-written state in `.claude/logs/*.state.json`, `operations/dist/`, `operations/__elevasis_worker.ts` (a temporary file generated during deployment), `tmp/*` (except `.gitkeep`), and `.vercel`.
207
218
 
208
219
  ---
209
220
 
210
221
  ## File Reference
211
222
 
212
- | File / Directory | When You Edit It |
213
- | ----------------------------------- | ---------------------------------------------------------------------- |
214
- | `operations/src/index.ts` | Adding or removing resources, wiring a new domain |
215
- | `operations/src/<domain>/*.ts` | Writing and modifying workflow or agent logic |
216
- | `operations/src/metadata.ts` | Adding triggers, integrations, or human-checkpoint queue metadata |
217
- | `core/types/index.ts` | Defining or changing a workflow's Zod contract |
218
- | `core/config/organization-model.ts` | Never directly -- run `/om` instead |
219
- | `operations/elevasis.config.ts` | Changing project-level SDK settings (`defaultStatus`, `dev.port`) |
220
- | `.elevasis` | Never manually -- updated by `/git-sync` and platform tooling |
221
- | `.env` | Adding environment variables |
222
- | `CLAUDE.md` | Rarely -- project identity and preferences, mostly written by `/setup` |
223
- | `.claude/skills/*/SKILL.md` | Never in a derived project -- these arrive via `/git-sync` |
223
+ | File / Directory | When You Edit It |
224
+ | --------------------------------------------------------------------------- | ---------------------------------------------------------------------- |
225
+ | `operations/src/index.ts` | Adding or removing resources, wiring a new domain |
226
+ | `operations/src/<domain>/*.ts` | Writing and modifying workflow or agent logic |
227
+ | `operations/src/metadata.ts` | Adding triggers, integrations, or human-checkpoint queue metadata |
228
+ | `core/types/index.ts` | Defining or changing a workflow's Zod contract |
229
+ | `core/config/organization-model.ts` and `core/config/organization-model/**` | Never directly -- run `/om` instead |
230
+ | `operations/elevasis.config.ts` | Changing project-level SDK settings (`defaultStatus`, `dev.port`) |
231
+ | `.elevasis` | Never manually -- updated by `/git-sync` and platform tooling |
232
+ | `.env` | Adding environment variables |
233
+ | `CLAUDE.md` | Rarely -- project identity and preferences, mostly written by `/setup` |
234
+ | `.claude/skills/*/SKILL.md` | Never in a derived project -- these arrive via `/git-sync` |
224
235
 
225
236
  ---
226
237
 
227
- **Last Updated:** 2026-08-06
238
+ **Last Updated:** 2026-08-17
@@ -82,7 +82,7 @@ SECTION C -- The Organization Model (3 items)
82
82
  10 Systems, actions, and labels [ ]
83
83
  11 Entity extensions -- BaseProject, BaseDeal [ ]
84
84
 
85
- SECTION D -- Modules (load on demand) (~6 items)
85
+ SECTION D -- Modules (load on demand) (6 items)
86
86
  12 HITL [ ]
87
87
  13 Schedules [ ]
88
88
  14 Notifications + integrations [ ]
@@ -15,56 +15,27 @@ cd my-project
15
15
  pnpm install
16
16
  ```
17
17
 
18
- After `pnpm install`, all `elevasis-sdk` commands work via the scripts in `package.json` or `pnpm exec elevasis-sdk <command>`.
18
+ After `pnpm install`, the CLI is available from the project root as `pnpm elevasis-sdk <command>`, which the root `package.json` delegates into `operations/`. Inside `operations/` itself, run `pnpm exec elevasis-sdk <command>` directly.
19
19
 
20
- The project ships with 30 files covering configuration, source, documentation, and Claude Code integration:
20
+ The project is a pnpm workspace containing three packages -- shared config and types, your platform resources, and your frontend:
21
21
 
22
22
  ```
23
23
  my-project/
24
- ├── CLAUDE.md # Project instructions for Claude Code
25
- ├── .claude/
26
- ├── settings.json # autoCompact: false
27
- ├── commands/
28
- │ │ ├── docs.md # Documentation lifecycle
29
- │ │ ├── meta.md # Project lifecycle (init, fix, deploy, health)
30
- │ │ ├── tutorial.md # Progressive learning
31
- │ │ └── work.md # Task tracking
32
- ├── hooks/
33
- │ │ └── enforce-sdk-boundary.mjs # Blocks file modifications outside project (auto-loaded)
34
- │ ├── scripts/
35
- │ │ └── statusline-command.js # Dynamic status line script
36
- │ ├── skills/
37
- │ │ └── creds/SKILL.md # Credential management (auto-triggers)
38
- │ └── rules/
39
- │ ├── sdk-patterns.md # SDK imports, structure, runtime (auto-loaded)
40
- │ ├── docs-authoring.md # MDX conventions (auto-loaded)
41
- │ ├── memory-conventions.md # Memory system conventions (auto-loaded)
42
- │ ├── project-map.md # Project map conventions (auto-loaded)
43
- │ ├── task-tracking.md # Task tracking conventions (auto-loaded)
44
- │ └── workspace-patterns.md # Project-specific patterns (you add these)
45
- ├── src/
46
- │ ├── index.ts # Registry entry point (aggregates domain barrels)
47
- │ ├── operations/
48
- │ │ ├── index.ts # Domain barrel (exports workflows + agents)
49
- │ │ └── platform-status.ts # Platform status workflow (real API example)
50
- │ ├── example/
51
- │ │ ├── index.ts # Domain barrel (exports workflows + agents)
52
- │ │ └── echo.ts # Starter workflow (replace with your own)
53
- │ └── shared/
54
- │ └── .gitkeep # Cross-domain shared utilities
55
- ├── docs/
56
- │ ├── index.mdx # Starter documentation page
57
- │ └── in-progress/
58
- │ └── .gitkeep # Work-in-progress docs directory
59
- ├── elevasis.config.ts # Config with workspace options
60
- ├── package.json # check-types + deploy scripts
61
- ├── tsconfig.json # TypeScript config (app-focused)
62
- ├── pnpm-workspace.yaml # Standalone project workspace
63
- ├── .env # API key only
64
- ├── .npmrc # auto-install-peers
65
- └── .gitignore # Excludes worker temp file, claude files
24
+ ├── CLAUDE.md # Project instructions for Claude Code
25
+ ├── .claude/ # Agent integration: rules, skills, hooks, registries
26
+ ├── core/ # Organization model, knowledge nodes, shared browser-safe types
27
+ ├── operations/ # Workflows, agents, and resource definitions -- what you deploy
28
+ ├── ui/ # Frontend app shell and routes
29
+ ├── package.json # Root scripts that delegate into the three packages
30
+ ├── pnpm-workspace.yaml # Standalone project workspace
31
+ ├── tsconfig.json # Shared TypeScript config
32
+ ├── .env # Platform API key
33
+ ├── .npmrc # auto-install-peers, ignore-workspace-root-check
34
+ └── .gitignore
66
35
  ```
67
36
 
37
+ See [Project Structure](framework/project-structure.mdx) for the full tree, including what lives inside each package.
38
+
68
39
  ### Set Up Your API Key
69
40
 
70
41
  Open `.env` and set your API key:
@@ -81,7 +52,7 @@ The `.env` file is gitignored -- never commit it.
81
52
 
82
53
  After scaffolding, open the project in Claude Code. The agent detects that the project is new and automatically walks you through setup: installing dependencies, configuring `.env`, creating your developer profile in `.claude/memory/`, and optionally running your first deploy. No commands needed -- just answer the questions.
83
54
 
84
- If the automatic setup doesn't trigger, you can start it manually with `/meta init`.
55
+ If the automatic setup doesn't trigger, you can start it manually with `/setup`.
85
56
 
86
57
  ---
87
58
 
@@ -90,13 +61,15 @@ If the automatic setup doesn't trigger, you can start it manually with `/meta in
90
61
  Validate your resources and deploy:
91
62
 
92
63
  ```bash
93
- elevasis-sdk check # Validate resource definitions
94
- elevasis-sdk deploy # Bundle and deploy to the platform
64
+ pnpm check # Validate resource definitions
65
+ pnpm deploy # Bundle and deploy to the platform
95
66
  ```
96
67
 
97
- `elevasis-sdk check` runs validation without deploying. Fix any errors it reports before running `elevasis-sdk deploy`.
68
+ Both root scripts delegate into `operations/`, where the resource registry lives. You can also run `pnpm exec elevasis-sdk check` and `pnpm exec elevasis-sdk deploy` from inside `operations/` directly.
69
+
70
+ `check` runs validation without deploying. Fix any errors it reports before deploying.
98
71
 
99
- `elevasis-sdk deploy` bundles your `src/` code and `docs/` documentation into a single deployment transaction. Both ship atomically -- there is no separate upload step for documentation.
72
+ `deploy` bundles `operations/src/index.ts` and everything it imports into a single JavaScript bundle, then uploads and activates it as one transaction. Use `--entry` if your registry entry point is somewhere other than `./src/index.ts`.
100
73
 
101
74
  After a successful deploy, confirm the resources are live:
102
75
 
@@ -119,7 +92,7 @@ View the execution result:
119
92
 
120
93
  ```bash
121
94
  elevasis-sdk executions echo # Execution history
122
- elevasis-sdk execution echo \<execution-id\> # Full detail for one execution
95
+ elevasis-sdk execution echo <execution-id> # Full detail for one execution
123
96
  ```
124
97
 
125
98
  Replace `<execution-id>` with the ID returned from the executions list.
@@ -134,8 +107,8 @@ Replace `<execution-id>` with the ID returned from the executions list.
134
107
  - [CLI Reference](cli.mdx) -- Full command reference with flags
135
108
  - [Deployment](deployment/index.mdx) -- Deployment lifecycle and environment variables
136
109
 
137
- When a new SDK version is released, run `/meta fix` in Claude Code for an interactive upgrade that includes SDK update, drift repair, and documentation verification. To update the SDK package itself directly, run `pnpm update @elevasis/sdk`.
110
+ When a new SDK version is released, the dependency baseline arrives with the upstream changes rather than through a manual package bump. Run `/git-sync` in Claude Code to pull the latest, install when the baseline moved, and run baseline verification. If packages feel stale or a cache is serving old code afterwards, `/sync` does a fresh reinstall and cache reset.
138
111
 
139
112
  ---
140
113
 
141
- **Last Updated:** 2026-02-27
114
+ **Last Updated:** 2026-08-17
@@ -1,5 +1,5 @@
1
1
  ---
2
- title: Elevasis SDK
2
+ title: "@elevasis/sdk"
3
3
  description: Build and deploy workflows, agents, and resources with the Elevasis SDK
4
4
  ---
5
5
 
@@ -70,8 +70,8 @@ See [Platform Tools](platform-tools/index.mdx) for the full catalog, adapter ref
70
70
 
71
71
  - [Development Framework](framework/index.mdx) - How Claude Code helps you build: project structure, agent integration, and the skill surface
72
72
  - [Project Structure](framework/project-structure.mdx) - Scaffolded file layout, domain barrels, src/index.ts entry point, and config files
73
- - [Agent Configuration](framework/agent.mdx) - The shipped skill inventory, project context via `project:*`, upgrades via `/git-sync`, and the ambient vibe layer
74
- - [Tutorial System](framework/tutorial-system.mdx) - Two-track onboarding: 8 vibe-coder lessons and 19 technical lessons across 5 sections, with track choice persisted to `profile.md`
73
+ - [Agent Configuration](framework/agent.mdx) - The shipped skill inventory, project context via `project:*`, upgrades via `/git-sync`, and ambient vibe layer
74
+ - [Tutorial System](framework/tutorial-system.mdx) - Two-track onboarding: 8 vibe-coder lessons and 19 technical lessons across 5 sections
75
75
 
76
76
  ### Resources Subpages
77
77
 
@@ -13,7 +13,7 @@ Integration adapters use a factory pattern. Call `create*Adapter(credential)` wi
13
13
  | Attio | `createAttioAdapter(credential)` | `createRecord`, `updateRecord`, `listRecords`, `getRecord`, `deleteRecord`, `listObjects`, `listAttributes`, `createAttribute`, `updateAttribute`, `createNote`, `listNotes`, `deleteNote` | Attio CRM — create, read, update, delete records, objects, attributes, and notes. |
14
14
  | Apify | `createApifyAdapter(credential)` | `runActor`, `getDatasetItems`, `startActor` | Apify — run actors and retrieve dataset items from web scraping runs. |
15
15
  | ClickUp | `createClickUpAdapter(credential)` | `verify`, `createTask` | ClickUp — verify connection and create tasks in ClickUp lists. |
16
- | Dropbox | `createDropboxAdapter(credential)` | `uploadFile`, `createFolder` | Dropbox — upload files and create folders. |
16
+ | Dropbox | `createDropboxAdapter(credential)` | `uploadFile`, `createFolder`, `listFolder`, `getMetadata`, `getTemporaryLink`, `createSharedLink`, `download`, `getThumbnail`, `getThumbnailBatch` | Dropbox — upload files and create folders. |
17
17
  | Gmail | `createGmailAdapter(credential)` | `sendEmail` | Gmail — send emails via a bound Gmail credential. |
18
18
  | GoogleSheets | `createGoogleSheetsAdapter(credential)` | `readSheet`, `writeSheet`, `appendRows`, `clearRange`, `getSpreadsheetMetadata`, `batchUpdate`, `getHeaders`, `getLastRow`, `getRowByValue`, `updateRowByValue`, `upsertRow`, `filterRows`, `deleteRowByValue` | Google Sheets — read, write, append, filter, and manage spreadsheet data. |
19
19
  | Instantly | `createInstantlyAdapter(credential)` | `sendReply`, `removeFromSubsequence`, `getEmails`, `updateInterestStatus`, `addToCampaign`, `listCampaigns`, `getCampaign`, `updateCampaign`, `pauseCampaign`, `activateCampaign`, `getCampaignAnalytics`, `getStepAnalytics`, `bulkAddLeads`, `getAccountHealth`, `createInboxTest`, `createCampaign`, `getDailyCampaignAnalytics`, `listLeads`, `bulkDeleteLeads`, `deleteCampaign`, `patchLead` | Instantly — manage email outreach campaigns, leads, analytics, and inbox health. |
@@ -23,4 +23,4 @@ Platform adapters are singletons — import them directly, no credential require
23
23
  | Execution | `execution` | `trigger`, `triggerAsync` | Execution — trigger other workflows or agents within the same organization. |
24
24
  | Email | `email` | `send` | Email — send platform emails (from notifications@elevasis.io) to organization members. |
25
25
  | Artifacts | `artifacts` | `listArtifacts`, `createArtifact`, `getActive` | Artifacts — org-scoped governing-document store, keyed by owner and kind, for acquisition's audits, proposals, and ICP docs. |
26
- | Content | `content` | `createItem`, `getItem`, `listItems`, `updateItem`, `createAttempt`, `listAttempts`, `updateAttempt`, `createSourceAsset`, `getSourceAsset`, `listSourceAssets`, `updateSourceAsset`, `createDistribution`, `updateDistribution` | Content — create, read, and update content_items/content_item_attempts/content_distributions/content_source_assets rows for the content pipeline. |
26
+ | Content | `content` | `createItem`, `getItem`, `listItems`, `updateItem`, `addItemSourceAsset`, `removeItemSourceAsset`, `reorderItemSourceAssets`, `updateItemSourceAsset`, `createAttempt`, `listAttempts`, `updateAttempt`, `createSourceAsset`, `getSourceAsset`, `listSourceAssets`, `updateSourceAsset`, `getDistribution`, `listDistributions`, `createDistribution`, `updateDistribution`, `appendDistributionMetrics`, `listDistributionMetrics` | Content — create, read, and update content_items/content_item_attempts/content_distributions/content_source_assets rows for the content pipeline. |
@@ -29,7 +29,7 @@ await llm.generate({
29
29
 
30
30
  ### Tomba Adapter -- `domain` and `email`
31
31
 
32
- `domain` is required on `TombaDomainSearchParams` and `TombaEmailFinderParams`. `email` is required on `TombaEmailVerifierParams`. Previously all params were optional, allowing calls to compile but fail at runtime. The type change enforces the fields that are always necessary for email discovery and verification.
32
+ `domain` is required on `DomainSearchParams` and `EmailFinderParams` (the `domainSearch` and `emailFinder` entries of `TombaToolMap`, defined in `packages/core/src/execution/engine/tools/integration/types/tomba.ts`). `email` is required on `EmailVerifierParams` (the `emailVerifier` entry). Previously all params were optional, allowing calls to compile but fail at runtime. The type change enforces the fields that are always necessary for email discovery and verification.
33
33
 
34
34
  ---
35
35
 
@@ -98,11 +98,11 @@ const scoreStep: WorkflowStep = {
98
98
  type: 'conditional',
99
99
  routes: [
100
100
  {
101
- condition: (output) => output.score \>= 80,
101
+ condition: (output) => output.score >= 80,
102
102
  target: 'autoApprove',
103
103
  },
104
104
  {
105
- condition: (output) => output.score \>= 40,
105
+ condition: (output) => output.score >= 40,
106
106
  target: 'manualReview',
107
107
  },
108
108
  ],
@@ -253,7 +253,7 @@ const validateStep = async (input) => {
253
253
  if (!input.userId) {
254
254
  throw new ExecutionError('userId is required', { code: 'MISSING_INPUT' });
255
255
  }
256
- if (input.amount \<= 0) {
256
+ if (input.amount <= 0) {
257
257
  throw new ExecutionError('amount must be positive', { code: 'INVALID_AMOUNT' });
258
258
  }
259
259
  return { valid: true };
@@ -312,7 +312,7 @@ Avoid logging sensitive values (API keys, passwords, PII) since logs are stored
312
312
 
313
313
  ## Using the Execution Store
314
314
 
315
- `context.store` is a simple key-value store scoped to the current execution. Use it to pass data between steps without coupling step interfaces, or to checkpoint long-running work.
315
+ `context.store` is a plain `Map<string, unknown>` scoped to the current execution. Use it to pass data between steps without coupling step interfaces, or to checkpoint long-running work.
316
316
 
317
317
  {/* doc-snippet:skip: illustrative excerpt -- fetchExpensiveData/transform are placeholder names for your own logic, not a standalone compilable file */}
318
318
 
@@ -324,20 +324,19 @@ const firstStep: StepHandler = async (input, context) => {
324
324
  const data = await fetchExpensiveData(id);
325
325
 
326
326
  // Save for use by later steps
327
- await context.store.set('fetchedData', JSON.stringify(data));
327
+ context.store.set('fetchedData', data);
328
328
 
329
329
  return { fetched: true };
330
330
  };
331
331
 
332
332
  const secondStep: StepHandler = async (input, context) => {
333
- const raw = await context.store.get('fetchedData');
334
- const data = JSON.parse(raw ?? '{}');
333
+ const data = context.store.get('fetchedData');
335
334
 
336
335
  return { processed: transform(data) };
337
336
  };
338
337
  ```
339
338
 
340
- Store values are strings. Serialize objects with `JSON.stringify` and parse with `JSON.parse`.
339
+ `.set()` / `.get()` are synchronous `Map` methods and accept any value directly -- no `JSON.stringify` / `JSON.parse` round-trip required.
341
340
 
342
341
  ---
343
342
 
@@ -381,19 +380,19 @@ config: {
381
380
 
382
381
  ### Global Default Status
383
382
 
384
- Set a project-wide default in `elevasis.config.ts` to keep all resources in `'dev'` mode during development without touching each resource file:
383
+ `config.status` is a required field on every resource definition -- there is currently no CLI-enforced project-wide default. `elevasis.config.ts` declares a `defaultStatus` field on `ElevasConfig` for this purpose, but the CLI does not yet read `elevasis.config.ts` to apply it:
385
384
 
386
385
  ```typescript
387
386
  import type { ElevasConfig } from '@elevasis/sdk';
388
387
 
389
388
  const config: ElevasConfig = {
390
- defaultStatus: 'dev',
389
+ defaultStatus: 'dev', // reserved for future use -- not currently applied
391
390
  };
392
391
 
393
392
  export default config;
394
393
  ```
395
394
 
396
- Individual resources that set their own `config.status` override this default.
395
+ Until the CLI reads this file, set `config.status` explicitly on each resource.
397
396
 
398
397
  ---
399
398
 
@@ -17,20 +17,24 @@ Zod is a peer dependency.
17
17
  {
18
18
  "exports": {
19
19
  ".": { "types": "./dist/index.d.ts", "import": "./dist/index.js" },
20
- "./worker": { "import": "./dist/worker/index.js" }
20
+ "./worker": { "types": "./dist/worker/index.d.ts", "import": "./dist/worker/index.js" },
21
+ "./test-utils": { "types": "./dist/test-utils/index.d.ts", "import": "./dist/test-utils/index.js" },
22
+ "./node": { "types": "./dist/node/index.d.ts", "import": "./dist/node/index.js" }
21
23
  }
22
24
  }
23
25
  ```
24
26
 
25
27
  - `@elevasis/sdk` -- resource, workflow, agent, trigger, deployment, and execution types plus runtime errors.
26
28
  - `@elevasis/sdk/worker` -- worker runtime module, platform adapters, and worker helpers.
29
+ - `@elevasis/sdk/test-utils` -- in-memory registry and mock adapters for testing resources without a live deployment.
30
+ - `@elevasis/sdk/node` -- knowledge codegen and other build-time helpers requiring Node built-ins (`fs`, `path`, `process`); not browser-safe.
27
31
 
28
32
  ## Platform Types
29
33
 
30
34
  | Type | Description |
31
35
  | ----------------------- | --------------------------------------------------------------------------------------------------------------------------- |
32
36
  | `ResourceDefinition` | Base interface for resource definitions |
33
- | `ResourceType` | Resource kind such as `workflow`, `agent`, `trigger`, `integration`, `external`, or `human_checkpoint` |
37
+ | `ResourceType` | Resource kind such as `workflow`, `agent`, `trigger`, `integration`, `external`, or `human` |
34
38
  | `ResourceStatus` | Resource lifecycle status such as `dev` or `prod` |
35
39
  | `ResourceLink` | Graph link `{ nodeId, kind }` binding a resource to an Organization Model node |
36
40
  | `ResourceCategory` | Operational category: `production`, `diagnostic`, `internal`, or `testing` |
@@ -64,9 +68,9 @@ config: {
64
68
  | Type | Description |
65
69
  | -------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- |
66
70
  | `WorkflowDefinition` | Complete workflow definition including config, contract, steps, and entryPoint |
67
- | `WorkflowStep` | Individual step definition with type, handler, and next routing |
71
+ | `WorkflowStep` | Individual step definition with `handler`, `inputSchema`, `outputSchema`, and `next` routing -- no `type` field on the step itself |
68
72
  | `WorkflowConfig` | Metadata block: name, description, status, links, category |
69
- | `StepHandler` | Function type: `(input: unknown, context: StepContext) => Promise<unknown>` |
73
+ | `StepHandler` | Function type: `(input: unknown, context: ExecutionContext) => Promise<unknown>` |
70
74
  | `NextConfig` | Union of `LinearNext` and `ConditionalNext` |
71
75
  | `LinearNext` | Fixed next step routing |
72
76
  | `ConditionalNext` | Branching step routing |
@@ -87,10 +91,10 @@ export interface ElevasConfig {
87
91
  }
88
92
  ```
89
93
 
90
- | Field | Type | Default | Description |
91
- | --------------- | -------- | ------- | ----------------------------- | ---------------------------------------------------------------- |
92
- | `defaultStatus` | `'dev' | 'prod'` | `'prod'` | Default status applied when resources do not set `config.status` |
93
- | `dev.port` | `number` | `3001` | Local worker development port |
94
+ | Field | Type | Description |
95
+ | --------------- | ----------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
96
+ | `defaultStatus` | `'dev' | 'prod'` | Reserved for a project-wide default `config.status`. The CLI does not currently read `elevasis.config.ts` to apply it -- `config.status` is required on every resource definition. |
97
+ | `dev.port` | `number` | Reserved for a local worker development port. Not currently read by the CLI. |
94
98
 
95
99
  ## StepHandler Context
96
100
 
@@ -102,11 +106,13 @@ import type { StepHandler, ExecutionContext } from '@elevasis/sdk'
102
106
  const handler: StepHandler = async (input, context: ExecutionContext) => {
103
107
  context.logger.info(`Processing execution ${context.executionId} for resource ${context.resourceId}`)
104
108
 
105
- await context.store.set('checkpoint', JSON.stringify({ step: 'started' }))
109
+ context.store.set('checkpoint', { step: 'started' })
106
110
  return { done: true }
107
111
  }
108
112
  ```
109
113
 
114
+ `context.store` is a plain `Map<string, unknown>` scoped to the current execution -- `.set()` / `.get()` are synchronous and accept any value directly, no `JSON.stringify` / `JSON.parse` round-trip required.
115
+
110
116
  ## Runtime Values
111
117
 
112
118
  Runtime exports include:
@@ -75,7 +75,7 @@ type Input = z.infer<typeof inputSchema>
75
75
 
76
76
  export const dataEnrichment: WorkflowDefinition = {
77
77
  config: {
78
- resourceId: 'data-enrichment',
78
+ resourceId: 'data-enrichment-workflow',
79
79
  name: 'Data Enrichment',
80
80
  type: 'workflow',
81
81
  description: 'Enriches database records using an LLM',
@@ -74,7 +74,7 @@ type Input = z.infer<typeof inputSchema>
74
74
 
75
75
  export const emailSender: WorkflowDefinition = {
76
76
  config: {
77
- resourceId: 'email-sender',
77
+ resourceId: 'email-sender-workflow',
78
78
  name: 'Email Sender',
79
79
  type: 'workflow',
80
80
  description: 'Sends transactional email via Resend',
@@ -1,47 +1,47 @@
1
- ---
2
- title: Templates
3
- description: Ready-to-use workflow templates for common automation patterns -- web scraping, data enrichment, email sending, lead scoring, PDF generation, text classification, and recurring jobs
4
- ---
5
-
6
- Templates are pre-built workflow definitions covering the most common SDK automation patterns. Each template includes a complete `WorkflowDefinition` with Zod schemas, step handlers, and real platform tool usage. Scaffold any template through Claude Code (`/work` then describe the template) or adapt the code manually.
7
-
8
- Templates follow the same `WorkflowDefinition` structure as any custom resource -- they are reference implementations, not a special feature. The patterns demonstrated (multi-step chains, LLM structured output, Supabase CRUD, scheduler setup) apply directly to custom workflows you build.
9
-
10
- All templates are available for any organization. Credentials specific to each template (Supabase, Resend, Apify, etc.) must be created in the command center before running the workflow.
11
-
12
- ## Documentation
13
-
14
- ### Data Collection & Processing
15
-
16
- - [Web Scraper](web-scraper.mdx) - Apify actor runs web scrape, stores structured results in Supabase table
17
- - [Data Enrichment](data-enrichment.mdx) - Reads Supabase records, enriches each with LLM, writes results back; supports batching
18
-
19
- ### Communication & CRM
20
-
21
- - [Email Sender](email-sender.mdx) - Transactional email via Resend with plain text and HTML support, single or multiple recipients
22
- - [Lead Scorer](lead-scorer.mdx) - Multi-criteria LLM lead scoring with configurable rubric and Supabase result storage
23
-
24
- ### Documents & AI
25
-
26
- - [PDF Generator](pdf-generator.mdx) - Renders structured data to PDF, uploads to platform storage, returns signed download URL
27
- - [Text Classifier](text-classifier.mdx) - Multi-label text classification via LLM structured output, configurable categories and confidence scoring
28
-
29
- ### Scheduling
30
-
31
- - [Recurring Job](recurring-job.mdx) - Two-workflow setup pattern: a setup workflow creates the schedule, the job workflow runs on each trigger; uses idempotency keys for safe re-registration
32
-
33
- ## Platform Tools Used
34
-
35
- | Template | Platform Tools | Credentials Needed |
36
- | --------------- | ------------------- | ------------------------------- |
37
- | Web Scraper | `apify`, `supabase` | `apify`, `my-database` |
38
- | Data Enrichment | `llm`, `supabase` | `my-database` (LLM server-side) |
39
- | Email Sender | `resend` | `my-resend` |
40
- | Lead Scorer | `llm`, `supabase` | `my-database` (LLM server-side) |
41
- | PDF Generator | `pdf`, `storage` | None (platform services) |
42
- | Text Classifier | `llm` | None (LLM server-side) |
43
- | Recurring Job | `scheduler` | None (platform service) |
44
-
45
- ---
46
-
47
- **Last Updated:** 2026-03-19
1
+ ---
2
+ title: Templates
3
+ description: Ready-to-use workflow templates for common automation patterns -- web scraping, data enrichment, email sending, lead scoring, PDF generation, text classification, and recurring jobs
4
+ ---
5
+
6
+ Templates are pre-built workflow definitions covering the most common SDK automation patterns. Each template includes a complete `WorkflowDefinition` with Zod schemas, step handlers, and real platform tool usage. Scaffold any template through Claude Code (`/work` then describe the template) or adapt the code manually.
7
+
8
+ Templates follow the same `WorkflowDefinition` structure as any custom resource -- they are reference implementations, not a special feature. The patterns demonstrated (multi-step chains, LLM structured output, Supabase CRUD, scheduler setup) apply directly to custom workflows you build.
9
+
10
+ All templates are available for any organization. Credentials specific to each template (Supabase, Resend, Apify, etc.) must be created in the command center before running the workflow.
11
+
12
+ ## Documentation
13
+
14
+ ### Data Collection & Processing
15
+
16
+ - [Web Scraper](web-scraper.mdx) - Apify actor runs web scrape, stores structured results in Supabase table
17
+ - [Data Enrichment](data-enrichment.mdx) - Reads Supabase records, enriches each with LLM, writes results back; supports batching
18
+
19
+ ### Communication & CRM
20
+
21
+ - [Email Sender](email-sender.mdx) - Transactional email via Resend with plain text and HTML support, single or multiple recipients
22
+ - [Lead Scorer](lead-scorer.mdx) - Multi-criteria LLM lead scoring with configurable rubric and Supabase result storage
23
+
24
+ ### Documents & AI
25
+
26
+ - [PDF Generator](pdf-generator.mdx) - Renders structured data to PDF, uploads to platform storage, returns signed download URL
27
+ - [Text Classifier](text-classifier.mdx) - Multi-label text classification via LLM structured output, configurable categories and confidence scoring
28
+
29
+ ### Scheduling
30
+
31
+ - [Recurring Job](recurring-job.mdx) - Two-workflow setup pattern: a setup workflow creates the schedule, the job workflow runs on trigger
32
+
33
+ ## Platform Tools Used
34
+
35
+ | Template | Platform Tools | Credentials Needed |
36
+ | --------------- | ------------------- | ------------------------------- |
37
+ | Web Scraper | `apify`, `supabase` | `apify`, `my-database` |
38
+ | Data Enrichment | `llm`, `supabase` | `my-database` (LLM server-side) |
39
+ | Email Sender | `resend` | `my-resend` |
40
+ | Lead Scorer | `llm`, `supabase` | `my-database` (LLM server-side) |
41
+ | PDF Generator | `pdf`, `storage` | None (platform services) |
42
+ | Text Classifier | `llm` | None (LLM server-side) |
43
+ | Recurring Job | `scheduler` | None (platform service) |
44
+
45
+ ---
46
+
47
+ **Last Updated:** 2026-03-19
@@ -90,7 +90,7 @@ type Input = z.infer<typeof inputSchema>
90
90
 
91
91
  export const leadScorer: WorkflowDefinition = {
92
92
  config: {
93
- resourceId: 'lead-scorer',
93
+ resourceId: 'lead-scorer-workflow',
94
94
  name: 'Lead Scorer',
95
95
  type: 'workflow',
96
96
  description: 'Scores leads using an LLM and stores results in Supabase',