@elevasis/sdk 1.44.2 → 1.45.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli.cjs +1001 -652
- package/dist/index.d.ts +1045 -509
- package/dist/index.js +748 -690
- package/dist/node/index.d.ts +105 -97
- package/dist/test-utils/index.d.ts +42 -28
- package/dist/test-utils/index.js +549 -732
- package/dist/worker/index.d.ts +12112 -0
- package/dist/worker/index.js +211 -186
- package/package.json +6 -9
- package/reference/_navigation.md +151 -21
- package/reference/_reference-manifest.json +186 -4
- package/reference/claude-config.md +8 -0
- package/reference/core/index.mdx +3 -3
- package/reference/examples/organization-model.ts +117 -111
- package/reference/index.mdx +4 -4
- package/reference/rules/active-change-index.md +40 -54
- package/reference/rules/agent-runtime.md +81 -0
- package/reference/rules/agent-start-here.md +71 -163
- package/reference/rules/deployment.md +33 -10
- package/reference/rules/error-handling.md +26 -0
- package/reference/rules/execution.md +13 -0
- package/reference/rules/frontend.md +10 -3
- package/reference/rules/observability.md +9 -1
- package/reference/rules/operations.md +26 -17
- package/reference/rules/organization-model.md +74 -88
- package/reference/rules/organization-os.md +71 -88
- package/reference/rules/package-taxonomy.md +11 -2
- package/reference/rules/platform.md +13 -7
- package/reference/rules/shared-types.md +15 -0
- package/reference/rules/task-tracking.md +30 -5
- package/reference/rules/ui.md +145 -3
- package/reference/rules/vibe-intents.md +271 -0
- package/reference/rules/vibe.md +17 -243
- package/reference/scaffold/core/organization-graph.mdx +111 -97
- package/reference/scaffold/core/organization-model.mdx +234 -214
- package/reference/scaffold/operations/propagation-pipeline.md +1 -1
- package/reference/scaffold/operations/scaffold-maintenance.md +19 -18
- package/reference/scaffold/operations/workflow-recipes.md +71 -19
- package/reference/scaffold/recipes/add-a-feature.md +156 -146
- package/reference/scaffold/recipes/add-a-resource.md +123 -117
- package/reference/scaffold/recipes/customize-crm-actions.md +25 -10
- package/reference/scaffold/recipes/customize-knowledge-browser.md +52 -117
- package/reference/scaffold/recipes/customize-organization-model.md +161 -149
- package/reference/scaffold/recipes/extend-a-base-entity.md +156 -140
- package/reference/scaffold/recipes/extend-crm.md +16 -11
- package/reference/scaffold/recipes/extend-lead-gen.md +25 -7
- package/reference/scaffold/recipes/gate-by-feature-or-admin.md +160 -118
- package/reference/scaffold/recipes/index.md +2 -2
- package/reference/scaffold/recipes/query-the-knowledge-graph.md +23 -23
- package/reference/scaffold/reference/contracts.md +12 -1
- package/reference/scaffold/reference/glossary.md +3 -3
- package/reference/scaffold/reference/system-interface-capabilities.md +5 -4
- package/reference/scaffold/ui/composition-extensibility.mdx +271 -232
- package/reference/scaffold/ui/feature-flags-and-gating.md +14 -6
- package/reference/scaffold/ui/feature-shell.mdx +279 -62
- package/reference/scaffold/ui/recipes.md +229 -197
- package/reference/sdk/cli-management.mdx +77 -29
- package/reference/sdk/concepts.mdx +2 -0
- package/reference/sdk/define-builders.mdx +76 -0
- package/reference/sdk/deployment/command-center.mdx +6 -2
- package/reference/sdk/deployment/execution-reference.mdx +64 -186
- package/reference/sdk/deployment/index.mdx +2 -0
- package/reference/sdk/exports.mdx +4 -4
- package/reference/sdk/framework/agent.mdx +49 -119
- package/reference/sdk/framework/index.mdx +46 -65
- package/reference/sdk/framework/project-structure.mdx +150 -205
- package/reference/sdk/framework/tutorial-system.mdx +2 -2
- package/reference/sdk/human-in-the-loop.mdx +152 -0
- package/reference/sdk/index.mdx +6 -7
- package/reference/sdk/platform-tools/index.mdx +12 -0
- package/reference/sdk/platform-tools/type-safety.mdx +4 -0
- package/reference/sdk/project-deployment-spec.mdx +131 -0
- package/reference/sdk/resources/index.mdx +23 -7
- package/reference/sdk/resources/patterns.mdx +54 -24
- package/reference/sdk/resources/types.mdx +7 -4
- package/reference/sdk/templates/data-enrichment.mdx +7 -3
- package/reference/sdk/templates/email-sender.mdx +139 -135
- package/reference/sdk/templates/lead-scorer.mdx +5 -1
- package/reference/sdk/templates/pdf-generator.mdx +155 -151
- package/reference/sdk/templates/recurring-job.mdx +195 -189
- package/reference/sdk/templates/text-classifier.mdx +4 -0
- package/reference/sdk/templates/web-scraper.mdx +139 -135
- package/reference/spine/spine-primer.md +135 -96
- package/reference/ui/index.mdx +14 -7
- package/dist/types/worker/adapters/anymailfinder.d.ts +0 -14
- package/dist/types/worker/adapters/apify.d.ts +0 -14
- package/dist/types/worker/adapters/approval.d.ts +0 -23
- package/dist/types/worker/adapters/attio.d.ts +0 -22
- package/dist/types/worker/adapters/clickup.d.ts +0 -22
- package/dist/types/worker/adapters/create-adapter.d.ts +0 -41
- package/dist/types/worker/adapters/crm.d.ts +0 -20
- package/dist/types/worker/adapters/dropbox.d.ts +0 -14
- package/dist/types/worker/adapters/email.d.ts +0 -25
- package/dist/types/worker/adapters/execution.d.ts +0 -22
- package/dist/types/worker/adapters/gmail.d.ts +0 -14
- package/dist/types/worker/adapters/google-sheets.d.ts +0 -14
- package/dist/types/worker/adapters/index.d.ts +0 -33
- package/dist/types/worker/adapters/instantly.d.ts +0 -14
- package/dist/types/worker/adapters/lead.d.ts +0 -28
- package/dist/types/worker/adapters/list.d.ts +0 -9
- package/dist/types/worker/adapters/llm.d.ts +0 -45
- package/dist/types/worker/adapters/millionverifier.d.ts +0 -14
- package/dist/types/worker/adapters/notification.d.ts +0 -28
- package/dist/types/worker/adapters/pdf.d.ts +0 -22
- package/dist/types/worker/adapters/projects.d.ts +0 -20
- package/dist/types/worker/adapters/resend.d.ts +0 -14
- package/dist/types/worker/adapters/scheduler.d.ts +0 -25
- package/dist/types/worker/adapters/signature-api.d.ts +0 -14
- package/dist/types/worker/adapters/storage.d.ts +0 -33
- package/dist/types/worker/adapters/stripe.d.ts +0 -14
- package/dist/types/worker/adapters/tomba.d.ts +0 -14
- package/dist/types/worker/index.d.ts +0 -60
- package/dist/types/worker/platform.d.ts +0 -90
- package/dist/types/worker/utils.d.ts +0 -9
- package/reference/claude-config/Overview.md +0 -230
- package/reference/claude-config/hooks/post-edit-validate.mjs +0 -98
- package/reference/claude-config/hooks/scaffold-registry-reminder.mjs +0 -187
- package/reference/claude-config/hooks/tool-failure-recovery.mjs +0 -73
- package/reference/claude-config/registries/graph-skills.json +0 -4
- package/reference/claude-config/registries/knowledge-flags.json +0 -154
- package/reference/claude-config/registries/skill-coverage.json +0 -20
- package/reference/claude-config/rules/active-change-index.md +0 -22
- package/reference/claude-config/rules/agent-start-here.md +0 -22
- package/reference/claude-config/rules/deployment.md +0 -22
- package/reference/claude-config/rules/error-handling.md +0 -22
- package/reference/claude-config/rules/execution.md +0 -22
- package/reference/claude-config/rules/frontend.md +0 -22
- package/reference/claude-config/rules/observability.md +0 -22
- package/reference/claude-config/rules/operations.md +0 -22
- package/reference/claude-config/rules/organization-model.md +0 -22
- package/reference/claude-config/rules/organization-os.md +0 -22
- package/reference/claude-config/rules/package-taxonomy.md +0 -22
- package/reference/claude-config/rules/platform.md +0 -22
- package/reference/claude-config/rules/shared-types.md +0 -22
- package/reference/claude-config/rules/task-tracking.md +0 -22
- package/reference/claude-config/rules/topbar-actions.md +0 -70
- package/reference/claude-config/rules/ui.md +0 -22
- package/reference/claude-config/rules/vibe.md +0 -22
- package/reference/claude-config/scripts/statusline-command.js +0 -18
- package/reference/claude-config/settings.json +0 -30
- package/reference/claude-config/skills/client/SKILL.md +0 -201
- package/reference/claude-config/skills/deploy/SKILL.md +0 -159
- package/reference/claude-config/skills/dsp/SKILL.md +0 -66
- package/reference/claude-config/skills/elevasis/SKILL.md +0 -251
- package/reference/claude-config/skills/explore/SKILL.md +0 -78
- package/reference/claude-config/skills/git-sync/SKILL.md +0 -166
- package/reference/claude-config/skills/om/SKILL.md +0 -475
- package/reference/claude-config/skills/om/operations/build.md +0 -237
- package/reference/claude-config/skills/om/operations/codify-level-a.md +0 -109
- package/reference/claude-config/skills/om/operations/codify-level-b.md +0 -159
- package/reference/claude-config/skills/om/operations/customers.md +0 -114
- package/reference/claude-config/skills/om/operations/features.md +0 -88
- package/reference/claude-config/skills/om/operations/goals.md +0 -123
- package/reference/claude-config/skills/om/operations/identity.md +0 -97
- package/reference/claude-config/skills/om/operations/labels.md +0 -110
- package/reference/claude-config/skills/om/operations/offerings.md +0 -114
- package/reference/claude-config/skills/om/operations/roles.md +0 -104
- package/reference/claude-config/skills/om/operations/scaffold.md +0 -163
- package/reference/claude-config/skills/om/operations/techStack.md +0 -38
- package/reference/claude-config/skills/project/SKILL.md +0 -1114
- package/reference/claude-config/skills/run-ui/SKILL.md +0 -73
- package/reference/claude-config/skills/save/SKILL.md +0 -183
- package/reference/claude-config/skills/setup/SKILL.md +0 -290
- package/reference/claude-config/skills/status/SKILL.md +0 -59
- package/reference/claude-config/skills/submit-request/SKILL.md +0 -180
- package/reference/claude-config/skills/sync/SKILL.md +0 -47
- package/reference/claude-config/skills/tutorial/SKILL.md +0 -259
- package/reference/claude-config/skills/tutorial/progress-template.md +0 -74
- package/reference/claude-config/skills/tutorial/technical.md +0 -1303
- package/reference/claude-config/skills/tutorial/vibe-coder.md +0 -890
- package/reference/claude-config/sync-notes/2026-04-22-git-sync-and-sync-notes.md +0 -27
- package/reference/claude-config/sync-notes/2026-04-22-lead-gen-deliverability-removal.md +0 -30
- package/reference/claude-config/sync-notes/2026-04-24-test-utils-and-template-tests.md +0 -73
- package/reference/claude-config/sync-notes/2026-04-24-ui-consolidation-and-sdk-cli-train.md +0 -86
- package/reference/claude-config/sync-notes/2026-04-25-auth-role-system-and-settings-roles.md +0 -55
- package/reference/claude-config/sync-notes/2026-04-27-crm-hitl-action-layer-cutover.md +0 -97
- package/reference/claude-config/sync-notes/2026-04-27-lead-gen-substrate-train.md +0 -112
- package/reference/claude-config/sync-notes/2026-04-29-crm-state-and-lead-gen-processing-status.md +0 -93
- package/reference/claude-config/sync-notes/2026-05-02-crm-ownership-next-action.md +0 -58
- package/reference/claude-config/sync-notes/2026-05-02-template-hardcode-workos-config.md +0 -56
- package/reference/claude-config/sync-notes/2026-05-04-elevasis-workspace.md +0 -71
- package/reference/claude-config/sync-notes/2026-05-04-knowledge-bundle.md +0 -83
- package/reference/claude-config/sync-notes/2026-05-04-template-skills-run-ui-and-tutorial.md +0 -59
- package/reference/claude-config/sync-notes/2026-05-05-list-builder.md +0 -42
- package/reference/claude-config/sync-notes/2026-05-06-crm-spine.md +0 -60
- package/reference/claude-config/sync-notes/2026-05-06-sdk-changes-release-train.md +0 -37
- package/reference/claude-config/sync-notes/2026-05-07-sdk-changes-release-train.md +0 -34
- package/reference/claude-config/sync-notes/2026-05-08-resource-governance-scaffold-guidance.md +0 -38
- package/reference/claude-config/sync-notes/2026-05-09-clients-domain.md +0 -32
- package/reference/claude-config/sync-notes/2026-05-09-command-system.md +0 -33
- package/reference/claude-config/sync-notes/2026-05-09-resource-governance-and-misc.md +0 -69
- package/reference/claude-config/sync-notes/2026-05-12-sdk-ready-release-train.md +0 -30
- package/reference/claude-config/sync-notes/2026-05-14-organization-model-ontology-refactor.md +0 -45
- package/reference/claude-config/sync-notes/2026-05-15-om-skill-rename-and-write-family.md +0 -52
- package/reference/claude-config/sync-notes/2026-05-17-sdk-boundary-consolidation.md +0 -33
- package/reference/claude-config/sync-notes/2026-05-20-om-define-helpers.md +0 -32
- package/reference/claude-config/sync-notes/2026-05-22-access-model-and-right-panel.md +0 -43
- package/reference/claude-config/sync-notes/2026-05-22-lead-gen-tenant-config.md +0 -40
- package/reference/claude-config/sync-notes/2026-05-22-org-model-multi-file-split.md +0 -61
- package/reference/claude-config/sync-notes/2026-05-23-branding-names-to-identity.md +0 -49
- package/reference/claude-config/sync-notes/2026-05-23-lead-gen-manage-access.md +0 -31
- package/reference/claude-config/sync-notes/2026-05-23-om-deployment-drift-detection.md +0 -42
- package/reference/claude-config/sync-notes/2026-05-23-om-full-model-deploy-contract.md +0 -33
- package/reference/claude-config/sync-notes/2026-05-23-ui-sdk-package-fixes.md +0 -37
- package/reference/claude-config/sync-notes/2026-05-24-platform-invite-router-core-baseline.md +0 -28
- package/reference/claude-config/sync-notes/2026-05-24-system-interface-readiness.md +0 -43
- package/reference/claude-config/sync-notes/2026-05-25-invitation-login-loader.md +0 -26
- package/reference/claude-config/sync-notes/2026-05-25-om-topbar-requests.md +0 -33
- package/reference/claude-config/sync-notes/2026-05-25-system-interface-profile-registry-and-substrate.md +0 -35
- package/reference/claude-config/sync-notes/2026-05-25-tenant-om-scaffold-cli.md +0 -49
- package/reference/claude-config/sync-notes/2026-05-25-vibe-operate-intent.md +0 -47
- package/reference/claude-config/sync-notes/2026-05-28-om-snapshot-sdk-workflow-config.md +0 -33
- package/reference/claude-config/sync-notes/2026-05-30-client-source-and-om-profiles.md +0 -39
- package/reference/claude-config/sync-notes/2026-06-02-knowledge-nested-group-routing.md +0 -27
- package/reference/claude-config/sync-notes/2026-06-02-nest-projects-under-platform.md +0 -45
- package/reference/claude-config/sync-notes/2026-06-03-skill-autogen-and-client-skill.md +0 -34
- package/reference/claude-config/sync-notes/2026-06-04-scaffold-registry-lane-severity.md +0 -34
- package/reference/claude-config/sync-notes/2026-06-05-appearance-app-mode-decouple.md +0 -29
- package/reference/claude-config/sync-notes/2026-06-05-ontology-endpoint-rename-and-knowledge-browser-ui.md +0 -86
- package/reference/claude-config/sync-notes/2026-06-06-om-build-systems-scaffold.md +0 -47
- package/reference/claude-config/sync-notes/2026-06-06-om-item-copy-references.md +0 -50
- package/reference/claude-config/sync-notes/2026-06-08-knowledge-base-page-not-found-fix.md +0 -76
- package/reference/claude-config/sync-notes/2026-06-09-agent-sessions-public-agent-chat-route.md +0 -75
- package/reference/claude-config/sync-notes/2026-06-09-sdk-cli-load-org-model-resolution.md +0 -42
- package/reference/claude-config/sync-notes/2026-06-12-agent-grants-visualizer-operations.md +0 -30
- package/reference/claude-config/sync-notes/2026-06-14-session-ux-and-project-cli-json.md +0 -33
- package/reference/claude-config/sync-notes/2026-06-14-shared-session-conversation-view.md +0 -26
- package/reference/claude-config/sync-notes/2026-06-15-session-chat-zero-wiring.md +0 -46
- package/reference/claude-config/sync-notes/2026-06-17-agent-session-ux-features.md +0 -34
- package/reference/claude-config/sync-notes/2026-06-25-shared-page-scroll-contract-guard.md +0 -52
- package/reference/claude-config/sync-notes/2026-06-26-leadgen-overview-om-telemetry.md +0 -47
- package/reference/claude-config/sync-notes/2026-07-21-agent-scaffold-hardening.md +0 -75
- package/reference/claude-config/sync-notes/2026-07-23-agent-session-memory.md +0 -49
- package/reference/claude-config/sync-notes/2026-07-23-workos-org-marker.md +0 -50
- package/reference/claude-config/sync-notes/2026-07-24-claude-5-models-and-session-surface-fixes.md +0 -116
- package/reference/claude-config/sync-notes/2026-07-27-agent-strict-output-and-turn-drift.md +0 -73
- package/reference/claude-config/sync-notes/2026-07-28-agent-reply-is-its-own-field.md +0 -84
- package/reference/claude-config/sync-notes/2026-07-30-login-screen-and-member-provisioning-state.md +0 -114
- package/reference/claude-config/sync-notes/2026-08-02-auth-guard-defaults-and-truncation-fix.md +0 -122
- package/reference/claude-config/sync-notes/2026-08-03-cli-gateway-errors-and-request-timeout.md +0 -120
- package/reference/claude-config/sync-notes/README.md +0 -43
- package/reference/sdk/framework/interaction-guidance.mdx +0 -182
- package/reference/sdk/framework/memory.mdx +0 -326
- package/reference/sdk/framework/resource-documentation.mdx +0 -90
- package/reference/sdk/roadmap.mdx +0 -164
|
@@ -1,135 +1,139 @@
|
|
|
1
|
-
---
|
|
2
|
-
title: "Template: Email Sender"
|
|
3
|
-
description: "Transactional email via Resend with template support -- send styled emails to one or multiple recipients"
|
|
4
|
-
loadWhen: "Applying the email-sender workflow template"
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
**Category:** Communication
|
|
8
|
-
|
|
9
|
-
**Platform Tools:** `resend` (send email)
|
|
10
|
-
|
|
11
|
-
**Credentials Required:**
|
|
12
|
-
|
|
13
|
-
- `my-resend` -- Resend API key (bearer type)
|
|
14
|
-
|
|
15
|
-
---
|
|
16
|
-
|
|
17
|
-
## What This Workflow Does
|
|
18
|
-
|
|
19
|
-
Sends a transactional email to one or more recipients using the Resend email service. Supports plain text and HTML content, reply-to addresses, and CC/BCC. Suitable for welcome emails, notification emails, confirmation emails, and any triggered transactional communication.
|
|
20
|
-
|
|
21
|
-
---
|
|
22
|
-
|
|
23
|
-
## Input Schema
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
- **
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
**
|
|
1
|
+
---
|
|
2
|
+
title: "Template: Email Sender"
|
|
3
|
+
description: "Transactional email via Resend with template support -- send styled emails to one or multiple recipients"
|
|
4
|
+
loadWhen: "Applying the email-sender workflow template"
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
**Category:** Communication
|
|
8
|
+
|
|
9
|
+
**Platform Tools:** `resend` (send email)
|
|
10
|
+
|
|
11
|
+
**Credentials Required:**
|
|
12
|
+
|
|
13
|
+
- `my-resend` -- Resend API key (bearer type)
|
|
14
|
+
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
## What This Workflow Does
|
|
18
|
+
|
|
19
|
+
Sends a transactional email to one or more recipients using the Resend email service. Supports plain text and HTML content, reply-to addresses, and CC/BCC. Suitable for welcome emails, notification emails, confirmation emails, and any triggered transactional communication.
|
|
20
|
+
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
## Input Schema
|
|
24
|
+
|
|
25
|
+
{/* doc-snippet:skip: illustrative excerpt -- shows the schema shape in isolation, omits the `import { z } from 'zod'` shown in Workflow Code Pattern below */}
|
|
26
|
+
|
|
27
|
+
```typescript
|
|
28
|
+
z.object({
|
|
29
|
+
to: z.union([z.string(), z.array(z.string())]), // Recipient(s)
|
|
30
|
+
subject: z.string(), // Email subject
|
|
31
|
+
html: z.string().optional(), // HTML body
|
|
32
|
+
text: z.string().optional(), // Plain text body (fallback)
|
|
33
|
+
from: z.string().optional(), // Sender (defaults to workspace default)
|
|
34
|
+
replyTo: z.string().optional(), // Reply-to address
|
|
35
|
+
})
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
## Output Schema
|
|
39
|
+
|
|
40
|
+
{/* doc-snippet:skip: illustrative excerpt -- shows the schema shape in isolation, omits the `import { z } from 'zod'` shown in Workflow Code Pattern below */}
|
|
41
|
+
|
|
42
|
+
```typescript
|
|
43
|
+
z.object({
|
|
44
|
+
sent: z.boolean(),
|
|
45
|
+
messageId: z.string().optional(),
|
|
46
|
+
error: z.string().optional(),
|
|
47
|
+
})
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
---
|
|
51
|
+
|
|
52
|
+
## Workflow Code Pattern
|
|
53
|
+
|
|
54
|
+
```typescript
|
|
55
|
+
import type { WorkflowDefinition } from '@elevasis/sdk'
|
|
56
|
+
import { platform, PlatformToolError } from '@elevasis/sdk/worker'
|
|
57
|
+
import { z } from 'zod'
|
|
58
|
+
|
|
59
|
+
const inputSchema = z.object({
|
|
60
|
+
to: z.union([z.string(), z.array(z.string())]),
|
|
61
|
+
subject: z.string(),
|
|
62
|
+
html: z.string().optional(),
|
|
63
|
+
text: z.string().optional(),
|
|
64
|
+
from: z.string().optional(),
|
|
65
|
+
replyTo: z.string().optional(),
|
|
66
|
+
})
|
|
67
|
+
const outputSchema = z.object({
|
|
68
|
+
sent: z.boolean(),
|
|
69
|
+
messageId: z.string().optional(),
|
|
70
|
+
error: z.string().optional(),
|
|
71
|
+
})
|
|
72
|
+
|
|
73
|
+
type Input = z.infer<typeof inputSchema>
|
|
74
|
+
|
|
75
|
+
export const emailSender: WorkflowDefinition = {
|
|
76
|
+
config: {
|
|
77
|
+
resourceId: 'email-sender',
|
|
78
|
+
name: 'Email Sender',
|
|
79
|
+
type: 'workflow',
|
|
80
|
+
description: 'Sends transactional email via Resend',
|
|
81
|
+
version: '1.0.0',
|
|
82
|
+
status: 'dev',
|
|
83
|
+
},
|
|
84
|
+
contract: { inputSchema, outputSchema },
|
|
85
|
+
steps: {
|
|
86
|
+
send: {
|
|
87
|
+
id: 'send',
|
|
88
|
+
name: 'Send Email',
|
|
89
|
+
description: 'Send the email via Resend',
|
|
90
|
+
inputSchema,
|
|
91
|
+
outputSchema,
|
|
92
|
+
handler: async (input, context) => {
|
|
93
|
+
const { to, subject, html, text, from, replyTo } = input as Input
|
|
94
|
+
|
|
95
|
+
try {
|
|
96
|
+
const result = await platform.call({
|
|
97
|
+
tool: 'resend',
|
|
98
|
+
method: 'sendEmail',
|
|
99
|
+
credential: 'my-resend',
|
|
100
|
+
params: {
|
|
101
|
+
to: Array.isArray(to) ? to : [to],
|
|
102
|
+
subject,
|
|
103
|
+
html: html ?? `<p>${text ?? ''}</p>`,
|
|
104
|
+
text,
|
|
105
|
+
from: from ?? 'noreply@yourdomain.com',
|
|
106
|
+
replyTo,
|
|
107
|
+
},
|
|
108
|
+
}) as { id: string }
|
|
109
|
+
|
|
110
|
+
context.logger.info(`Email sent: ${result.id} to ${JSON.stringify(to)}`)
|
|
111
|
+
return { sent: true, messageId: result.id }
|
|
112
|
+
} catch (err) {
|
|
113
|
+
if (err instanceof PlatformToolError) {
|
|
114
|
+
context.logger.error(`Email send failed for ${JSON.stringify(to)}: ${err.message}`)
|
|
115
|
+
return { sent: false, error: err.message }
|
|
116
|
+
}
|
|
117
|
+
throw err
|
|
118
|
+
}
|
|
119
|
+
},
|
|
120
|
+
next: null,
|
|
121
|
+
},
|
|
122
|
+
},
|
|
123
|
+
entryPoint: 'send',
|
|
124
|
+
}
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
---
|
|
128
|
+
|
|
129
|
+
## Adaptation Notes
|
|
130
|
+
|
|
131
|
+
- **Credential name:** Replace `'my-resend'` with the user's Resend credential name.
|
|
132
|
+
- **From address:** Replace `'noreply@yourdomain.com'` with the user's verified sender address (must be verified in Resend).
|
|
133
|
+
- **HTML vs text:** For beginners, suggest writing plain text first and adding HTML later. For developers, show both.
|
|
134
|
+
- **Error handling:** The template returns `{ sent: false, error }` on failure rather than throwing, suitable for non-critical emails. For critical notifications, change to `throw err` so the execution fails visibly.
|
|
135
|
+
- **Multi-step context:** This template is a single step, but it can be used as the last step of a multi-step workflow (e.g., "process data then send summary email").
|
|
136
|
+
|
|
137
|
+
---
|
|
138
|
+
|
|
139
|
+
**Last Updated:** 2026-02-26
|
|
@@ -23,6 +23,8 @@ Receives a lead with company and contact details, uses an LLM to score the lead
|
|
|
23
23
|
|
|
24
24
|
## Input Schema
|
|
25
25
|
|
|
26
|
+
{/* doc-snippet:skip: illustrative excerpt -- shows the schema shape in isolation, omits the `import { z } from 'zod'` shown in Workflow Code Pattern below */}
|
|
27
|
+
|
|
26
28
|
```typescript
|
|
27
29
|
z.object({
|
|
28
30
|
leadId: z.string(),
|
|
@@ -36,6 +38,8 @@ z.object({
|
|
|
36
38
|
|
|
37
39
|
## Output Schema
|
|
38
40
|
|
|
41
|
+
{/* doc-snippet:skip: illustrative excerpt -- shows the schema shape in isolation, omits the `import { z } from 'zod'` shown in Workflow Code Pattern below */}
|
|
42
|
+
|
|
39
43
|
```typescript
|
|
40
44
|
z.object({
|
|
41
45
|
leadId: z.string(),
|
|
@@ -150,7 +154,7 @@ export const leadScorer: WorkflowDefinition = {
|
|
|
150
154
|
},
|
|
151
155
|
})
|
|
152
156
|
|
|
153
|
-
context.logger.info(
|
|
157
|
+
context.logger.info(`Lead ${leadId} scored ${score} (${tier}) and stored`)
|
|
154
158
|
return { leadId, score, tier, reasoning, stored: true }
|
|
155
159
|
},
|
|
156
160
|
next: null,
|
|
@@ -1,151 +1,155 @@
|
|
|
1
|
-
---
|
|
2
|
-
title: "Template: PDF Generator"
|
|
3
|
-
description: "PDF generation from structured data with platform storage upload -- render a PDF from a template and upload to platform storage"
|
|
4
|
-
loadWhen: "Applying the pdf-generator workflow template"
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
**Category:** Documents
|
|
8
|
-
|
|
9
|
-
**Platform Tools:** `pdf` (render), `storage` (upload)
|
|
10
|
-
|
|
11
|
-
**Credentials Required:**
|
|
12
|
-
|
|
13
|
-
- None required (pdf and storage are platform services, not integrations)
|
|
14
|
-
|
|
15
|
-
---
|
|
16
|
-
|
|
17
|
-
## What This Workflow Does
|
|
18
|
-
|
|
19
|
-
Receives structured data, renders a PDF using an HTML template, uploads the result to platform storage, and returns a signed URL for download. Suitable for invoices, reports, certificates, contracts, and any document that needs to be generated on demand and delivered as a downloadable file.
|
|
20
|
-
|
|
21
|
-
---
|
|
22
|
-
|
|
23
|
-
## Input Schema
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
- **
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
**
|
|
1
|
+
---
|
|
2
|
+
title: "Template: PDF Generator"
|
|
3
|
+
description: "PDF generation from structured data with platform storage upload -- render a PDF from a template and upload to platform storage"
|
|
4
|
+
loadWhen: "Applying the pdf-generator workflow template"
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
**Category:** Documents
|
|
8
|
+
|
|
9
|
+
**Platform Tools:** `pdf` (render), `storage` (upload)
|
|
10
|
+
|
|
11
|
+
**Credentials Required:**
|
|
12
|
+
|
|
13
|
+
- None required (pdf and storage are platform services, not integrations)
|
|
14
|
+
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
## What This Workflow Does
|
|
18
|
+
|
|
19
|
+
Receives structured data, renders a PDF using an HTML template, uploads the result to platform storage, and returns a signed URL for download. Suitable for invoices, reports, certificates, contracts, and any document that needs to be generated on demand and delivered as a downloadable file.
|
|
20
|
+
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
## Input Schema
|
|
24
|
+
|
|
25
|
+
{/* doc-snippet:skip: illustrative excerpt -- shows the schema shape in isolation, omits the `import { z } from 'zod'` shown in Workflow Code Pattern below */}
|
|
26
|
+
|
|
27
|
+
```typescript
|
|
28
|
+
z.object({
|
|
29
|
+
templateHtml: z.string(), // HTML template with {variable} placeholders
|
|
30
|
+
data: z.record(z.string(), z.unknown()), // Data to inject into the template
|
|
31
|
+
filename: z.string(), // Output filename (without .pdf extension)
|
|
32
|
+
expiresInSeconds: z.number().optional(), // Signed URL expiry (default: 3600)
|
|
33
|
+
})
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
## Output Schema
|
|
37
|
+
|
|
38
|
+
{/* doc-snippet:skip: illustrative excerpt -- shows the schema shape in isolation, omits the `import { z } from 'zod'` shown in Workflow Code Pattern below */}
|
|
39
|
+
|
|
40
|
+
```typescript
|
|
41
|
+
z.object({
|
|
42
|
+
downloadUrl: z.string(), // Signed URL for the generated PDF
|
|
43
|
+
storageKey: z.string(), // Storage key for future reference
|
|
44
|
+
expiresAt: z.string(), // ISO timestamp when URL expires
|
|
45
|
+
})
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
---
|
|
49
|
+
|
|
50
|
+
## Workflow Code Pattern
|
|
51
|
+
|
|
52
|
+
```typescript
|
|
53
|
+
import type { WorkflowDefinition } from '@elevasis/sdk'
|
|
54
|
+
import { StepType } from '@elevasis/sdk'
|
|
55
|
+
import { platform } from '@elevasis/sdk/worker'
|
|
56
|
+
import { z } from 'zod'
|
|
57
|
+
|
|
58
|
+
const inputSchema = z.object({
|
|
59
|
+
templateHtml: z.string(),
|
|
60
|
+
data: z.record(z.string(), z.unknown()),
|
|
61
|
+
filename: z.string(),
|
|
62
|
+
expiresInSeconds: z.number().optional(),
|
|
63
|
+
})
|
|
64
|
+
const outputSchema = z.object({
|
|
65
|
+
downloadUrl: z.string(),
|
|
66
|
+
storageKey: z.string(),
|
|
67
|
+
expiresAt: z.string(),
|
|
68
|
+
})
|
|
69
|
+
|
|
70
|
+
type Input = z.infer<typeof inputSchema>
|
|
71
|
+
|
|
72
|
+
function renderTemplate(html: string, data: Record<string, unknown>): string {
|
|
73
|
+
return html.replace(/\{(\w+)\}/g, (_, key) => String(data[key] ?? ''))
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
export const pdfGenerator: WorkflowDefinition = {
|
|
77
|
+
config: {
|
|
78
|
+
resourceId: 'pdf-generator',
|
|
79
|
+
name: 'PDF Generator',
|
|
80
|
+
type: 'workflow',
|
|
81
|
+
description: 'Generates a PDF from HTML template and uploads to storage',
|
|
82
|
+
version: '1.0.0',
|
|
83
|
+
status: 'dev',
|
|
84
|
+
},
|
|
85
|
+
contract: { inputSchema, outputSchema },
|
|
86
|
+
steps: {
|
|
87
|
+
render: {
|
|
88
|
+
id: 'render',
|
|
89
|
+
name: 'Render PDF',
|
|
90
|
+
description: 'Render HTML template to PDF buffer',
|
|
91
|
+
inputSchema,
|
|
92
|
+
outputSchema: z.object({ buffer: z.string(), filename: z.string(), expiresInSeconds: z.number() }),
|
|
93
|
+
handler: async (input) => {
|
|
94
|
+
const { templateHtml, data, filename, expiresInSeconds } = input as Input
|
|
95
|
+
const html = renderTemplate(templateHtml, data)
|
|
96
|
+
|
|
97
|
+
const result = await platform.call({
|
|
98
|
+
tool: 'pdf',
|
|
99
|
+
method: 'renderToBuffer',
|
|
100
|
+
params: { html },
|
|
101
|
+
}) as { buffer: string } // base64-encoded buffer
|
|
102
|
+
|
|
103
|
+
return { buffer: result.buffer, filename, expiresInSeconds: expiresInSeconds ?? 3600 }
|
|
104
|
+
},
|
|
105
|
+
next: { type: StepType.LINEAR, target: 'upload' },
|
|
106
|
+
},
|
|
107
|
+
upload: {
|
|
108
|
+
id: 'upload',
|
|
109
|
+
name: 'Upload PDF',
|
|
110
|
+
description: 'Upload rendered PDF to platform storage and get signed URL',
|
|
111
|
+
inputSchema: z.object({ buffer: z.string(), filename: z.string(), expiresInSeconds: z.number() }),
|
|
112
|
+
outputSchema,
|
|
113
|
+
handler: async (input, context) => {
|
|
114
|
+
const { buffer, filename, expiresInSeconds } = input as { buffer: string; filename: string; expiresInSeconds: number }
|
|
115
|
+
const key = `documents/${filename}-${Date.now()}.pdf`
|
|
116
|
+
|
|
117
|
+
await platform.call({
|
|
118
|
+
tool: 'storage',
|
|
119
|
+
method: 'upload',
|
|
120
|
+
params: {
|
|
121
|
+
key,
|
|
122
|
+
content: buffer,
|
|
123
|
+
contentType: 'application/pdf',
|
|
124
|
+
},
|
|
125
|
+
})
|
|
126
|
+
|
|
127
|
+
const urlResult = await platform.call({
|
|
128
|
+
tool: 'storage',
|
|
129
|
+
method: 'createSignedUrl',
|
|
130
|
+
params: { key, expiresIn: expiresInSeconds },
|
|
131
|
+
}) as { signedUrl: string; expiresAt: string }
|
|
132
|
+
|
|
133
|
+
context.logger.info(`PDF generated and uploaded: ${filename} at ${key}`)
|
|
134
|
+
return { downloadUrl: urlResult.signedUrl, storageKey: key, expiresAt: urlResult.expiresAt }
|
|
135
|
+
},
|
|
136
|
+
next: null,
|
|
137
|
+
},
|
|
138
|
+
},
|
|
139
|
+
entryPoint: 'render',
|
|
140
|
+
}
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
---
|
|
144
|
+
|
|
145
|
+
## Adaptation Notes
|
|
146
|
+
|
|
147
|
+
- **Template format:** The simple `{variable}` placeholder system handles most cases. For complex documents, suggest the user write a more complete HTML template with inline CSS.
|
|
148
|
+
- **Filename:** The template appends a timestamp to avoid collisions. Adapt naming to the user's convention (e.g., `invoice-{invoiceId}`).
|
|
149
|
+
- **Expiry:** Default is 1 hour. For document delivery workflows, increase to 24-72 hours.
|
|
150
|
+
- **Data structure:** Ask the user what fields their document needs before defining the `data` schema. For typed use cases (invoices, reports), define a stricter input schema.
|
|
151
|
+
- **Skill adaptation:** For beginners, show a complete example HTML template and explain what "template variables" are.
|
|
152
|
+
|
|
153
|
+
---
|
|
154
|
+
|
|
155
|
+
**Last Updated:** 2026-02-26
|