@elevasis/sdk 1.56.0 → 1.57.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 (40) hide show
  1. package/dist/{chunk-72ZGICTR.js → chunk-3XEHBMWM.js} +1 -1
  2. package/dist/{chunk-R3J6BEPO.js → chunk-HDMMMDIR.js} +225 -67
  3. package/dist/cli.cjs +209 -109
  4. package/dist/index.d.ts +82 -20
  5. package/dist/index.js +1 -1
  6. package/dist/test-utils/index.js +2 -2
  7. package/dist/worker/index.js +2 -2
  8. package/package.json +2 -2
  9. package/reference/_navigation.md +1 -1
  10. package/reference/index.mdx +1 -1
  11. package/reference/rules/agent-start-here.md +1 -1
  12. package/reference/rules/organization-model.md +3 -2
  13. package/reference/scaffold/recipes/customize-crm-actions.md +231 -223
  14. package/reference/scaffold/recipes/extend-crm.md +4 -2
  15. package/reference/scaffold/recipes/extend-lead-gen.md +2 -2
  16. package/reference/scaffold/recipes/index.md +2 -2
  17. package/reference/scaffold/reference/contracts.md +40 -12
  18. package/reference/scaffold/reference/system-interface-capabilities.md +4 -4
  19. package/reference/sdk/cli-management.mdx +0 -4
  20. package/reference/sdk/cli.mdx +0 -4
  21. package/reference/sdk/concepts.mdx +0 -4
  22. package/reference/sdk/deployment/command-center.mdx +0 -4
  23. package/reference/sdk/framework/agent.mdx +0 -4
  24. package/reference/sdk/framework/index.mdx +0 -4
  25. package/reference/sdk/framework/project-structure.mdx +0 -4
  26. package/reference/sdk/getting-started.mdx +0 -4
  27. package/reference/sdk/index.mdx +4 -8
  28. package/reference/sdk/platform-tools/index.mdx +0 -4
  29. package/reference/sdk/resources/index.mdx +0 -4
  30. package/reference/sdk/resources/patterns.mdx +0 -4
  31. package/reference/sdk/runtime.mdx +0 -4
  32. package/reference/sdk/templates/data-enrichment.mdx +0 -4
  33. package/reference/sdk/templates/email-sender.mdx +0 -4
  34. package/reference/sdk/templates/index.mdx +0 -4
  35. package/reference/sdk/templates/lead-scorer.mdx +0 -4
  36. package/reference/sdk/templates/pdf-generator.mdx +0 -4
  37. package/reference/sdk/templates/recurring-job.mdx +0 -4
  38. package/reference/sdk/templates/text-classifier.mdx +0 -4
  39. package/reference/sdk/templates/web-scraper.mdx +0 -4
  40. package/reference/sdk/troubleshooting.mdx +0 -4
@@ -23,7 +23,7 @@ CRM is a layered platform surface, not one component:
23
23
  - **Organization OS:** System access, sales pipeline semantics, quick access, and labels live in the organization model.
24
24
  - **Shared UI:** CRM pages, sidebars, workbench panels, overview widgets, and Kanban/detail components live in `@elevasis/ui`.
25
25
  - **Headless hooks:** deal, company, contact, note, task, list, transition, and action hooks live under `@elevasis/ui/hooks`.
26
- - **Action system:** `ActionDef`, `deriveActions`, and the caller-supplied provider-level `crmActions` catalog configure deal actions. The published `@elevasis/sdk` surface ships no default Elevasis action catalog -- projects supply their own `ActionDef[]`.
26
+ - **Action system:** deal action buttons are authored as `actionTypes` records under the `sales.crm` System's ontology scope, compiled with `compileCrmActionCatalog` and handed to the provider as `crmActions`. The published `@elevasis/sdk` surface ships no default Elevasis action catalog -- every project's buttons come from its own organization model.
27
27
  - **Workflow adapters:** `crm` and `acqDb` from `@elevasis/sdk/worker` let workflows read and mutate CRM/acquisition data through platform tools.
28
28
  - **System API Interface:** `sales.crm` uses the flat `system.apiInterface` marker for its API-backed CRM boundary. Readiness is derived from scoped resources, ontology bindings, required catalogs, and scoped topology grants. Cross-system lead-gen handoff belongs in scoped topology, not a top-level Bridge Contract or a hand-authored handoff interface field. Generated contract docs expose the current CRM shapes in `operations/node_modules/@elevasis/sdk/reference/scaffold/reference/contracts.md`.
29
29
 
@@ -51,7 +51,7 @@ CRM is a layered platform surface, not one component:
51
51
  | `useDeals`, `useDealDetail`, `useTransitionItem`, `useExecuteAction`, `useDealNotes`, `useDealTasks` | `@elevasis/ui/hooks` | Headless deal and task data access |
52
52
  | `useCompanies`, `useContacts`, `useLists`, `useBatchTelemetry` | `@elevasis/ui/hooks` | Acquisition substrate data access |
53
53
  | `ElevasisUIProvider`, `ElevasisCoreProvider`, `useElevasisServices` | `@elevasis/ui/provider` | Provider setup, API access, and organization context |
54
- | `ActionDef`, `deriveActions` | `@elevasis/sdk` | Deal action configuration and render-time derivation |
54
+ | `compileCrmActionCatalog`, `deriveCompiledCrmActions`, `CompiledCrmAction` | `@elevasis/sdk` | Deal action compilation and render-time derivation |
55
55
  | `crm`, `acqDb` | `@elevasis/sdk/worker` | Workflow-side CRM/acquisition platform adapters |
56
56
 
57
57
  Read the generated contracts before changing typed boundaries:
@@ -241,6 +241,8 @@ For stage labels or stage sets, update the project model:
241
241
  Keep these boundaries straight:
242
242
 
243
243
  - Org-model sales pipelines describe business semantics.
244
+ - Give every `sales.crm:catalog/crm.pipeline` entry a `semanticClass`. The platform treats entries marked `closed_won` / `closed_lost` as closed: they drive deal ownership, next-action suppression, the closed priority bucket, and won/lost counts in the deals summary. A catalog with no closed `semanticClass` has no closed stages; there is no fallback to stage keys named `closed_won` / `closed_lost`.
245
+ - Deal priority and next-action defaults are authored on the `sales.crm` System as `config.rules`: `priority` (`enabled`, `staleAfterDays`, `bucketOrder`, `buckets`, `followUpAfterDaysByStateKey`) and `nextActions` (`mappings`, `ownershipUsFallback`), plus `staleAfterDaysByStageKey`, the days without an update before an open deal in that stage is reported stale by the deals summary (keys must be pipeline stage keys; an unlisted stage is never reported stale). Omitted fields use the platform's generic defaults, and organization overrides saved in CRM settings layer on top. Do not author `closedStageKeys` there; the pipeline catalog owns closed stages, and an invalid `config.rules` makes the CRM API report not-ready.
244
246
  - `DealStage` and platform action defaults describe the current shared platform deal state vocabulary.
245
247
  - UI wrappers can relabel and route around shared surfaces, but changing persisted platform stages requires coordinated core/API/UI updates.
246
248
  - Do not add `sales.actions` to the org model in v1. Deal action customization is covered by [customize-crm-actions.md](customize-crm-actions.md).
@@ -525,9 +525,9 @@ The helper throws at declaration time on the failure modes the literal lets thro
525
525
 
526
526
  `readinessContract.requiredObjects` and `requiredCatalogs` are arrays of ontology IDs owned by this system. The platform validates that each declared object type exists in the OM and that each declared catalog type has at least one entry. `requiredCatalogs` must declare at least one entry — an empty contract asserts nothing and is rejected.
527
527
 
528
- Built-in profile ids (`sales.lead-gen.api`, etc.) derive their requirements from platform code. **A `readinessContract` declared alongside a built-in profile is ignored outright — not merely unnecessary.** The readiness engine branches on the profile: a registered built-in runs its own validator, and the authored contract is read only on the `else` branch, so anything you declare next to a built-in profile validates nothing and silently drifts from what the platform actually enforces. Real projects have shipped full contracts this way believing they were enforced.
528
+ Built-in profile ids (`sales.lead-gen.api`, etc.) derive their requirements from platform code, evaluated by the API at request time and never copied into your deployed model. **A `readinessContract` declared alongside a built-in profile is an error.** The readiness check never reads it, so it would validate nothing and drift from what the platform enforces. `defineSystemApiInterface` throws on it, and deploy preflight and `om:doctor` report a hand-written one as `readiness-contract-on-built-in-profile`. Delete it. To see what the platform checks for, read `requiredObjects` / `requiredCatalogs` from `defineLeadGenSystem` or `defineCrmSystem`.
529
529
 
530
- Note that the determinant is the **profile**, not the system. A custom system using a built-in profile still gets the built-in's requirements and still ignores an authored contract; a custom profile id is what makes `readinessContract` required (and it is required — a custom profile without one fails readiness with `missing-readiness-contract`).
530
+ Note that the determinant is the **profile**, not the system. A custom system using a built-in profile still gets the built-in's requirements and still may not declare a contract; a custom profile id is what makes `readinessContract` required (and it is required — a custom profile without one fails readiness with `missing-readiness-contract`).
531
531
 
532
532
  The `lookupReadinessProfile`, `registerReadinessProfile`, and `isBuiltInReadinessProfile` functions are exported from `@elevasis/sdk` alongside the `SystemApiInterfaceReadinessContract`, `ReadinessProfileKind`, and `ReadinessProfileEntry` types. `registerReadinessProfile(profileId)` only acknowledges a custom id for introspection (`lookupReadinessProfile` then resolves it as `kind: 'custom'` instead of `undefined`) — it cannot make `isBuiltInReadinessProfile` return `true` and it is never a substitute for a `readinessContract`. The actual extension point for platform-code-driven readiness (no `readinessContract` needed) is `registerBuiltInReadinessProfile`, exported from `@elevasis/core/organization-model/readiness` — it takes real structural validation logic, not just an id.
533
533
 
@@ -35,7 +35,7 @@ You want to build on the shared lead-gen system without forking it: add lead-gen
35
35
  You want to build on the shared content system without forking it: add a pipeline, produce a step from a workflow, customize the review screen, store rules documents, or track distributions. Covers the catalog-driven pipeline model (a pipeline is data, not code), the `content:catalog/{pipeline}-steps` binding, attempt authoring with `stepKey`, artifacts as versioned governing documents with their two silent write constraints, review-page slots and primitives, and the `apiInterface` readiness rules.
36
36
 
37
37
  **[Customize CRM Actions](customize-crm-actions.md)**
38
- You want to add, hide, or replace CRM deal action buttons, configure the shared `crmActions` provider path, or call a project-owned workflow from custom UI when server-side action dispatch constraints require it. Covers `ActionDef`, the caller-supplied `crmActions` catalog, provider wiring, and the current v1 boundary for custom action dispatch.
38
+ You want to add, hide, reorder, or re-implement CRM deal action buttons, configure the shared `crmActions` provider path, or call a project-owned workflow from custom UI. Covers authoring actions as `sales.crm` ontology `actionTypes` records, the `availableFrom` conditions that decide when a button appears, `compileCrmActionCatalog` and provider wiring, server-side dispatch, and why payload schemas are platform-registered rather than authored in the model.
39
39
 
40
40
  **[Customize Knowledge Browser](customize-knowledge-browser.md)**
41
41
  You want to mount, extend, or replace the default Knowledge Browser. Covers the three customization tiers (default manifest mount, sidebar composition via `KnowledgeSidebarMiddle` + `KNOWLEDGE_ITEMS`, and direct query access via `@elevasis/core/knowledge`), the one-line `vite.config.ts` plugin add (`knowledgePlugin()` from `@elevasis/ui/vite-plugin-knowledge`), and the CSS import requirement.
@@ -48,6 +48,6 @@ You want to browse, inspect, or traverse the OrganizationModel knowledge graph f
48
48
  ## Reference docs these recipes link into
49
49
 
50
50
  - [glossary.md](../reference/glossary.md) -- term disambiguation for System, Resource, systemId, Topology, Settings asymmetry
51
- - [contracts.md](../reference/contracts.md) -- TypeScript shapes: `SystemModule`, `OrganizationModel`, CRM deal types, lead-gen list/member/artifact types, content item/attempt/distribution types, `CrmToolMap`, `LeadToolMap`, `ListToolMap`, `ContentToolMap`, `ActionDef`
51
+ - [contracts.md](../reference/contracts.md) -- TypeScript shapes: `SystemModule`, `OrganizationModel`, CRM deal types, lead-gen list/member/artifact types, content item/attempt/distribution types, `CrmToolMap`, `LeadToolMap`, `ListToolMap`, `ContentToolMap`, `CompiledCrmAction`
52
52
  - [feature-flags-and-gating.md](../ui/feature-flags-and-gating.md) -- full three-concept gating model
53
53
  - [workflow-recipes.md](../operations/workflow-recipes.md) -- workflow anatomy, adapters, trigger patterns
@@ -2089,22 +2089,50 @@ export const DealSchemas = {
2089
2089
  ### `Action`
2090
2090
 
2091
2091
  ```typescript
2092
- export interface Action {
2093
- key: string
2094
- label: string
2095
- payloadSchema?: z.ZodTypeAny
2092
+ export interface Action {
2093
+ key: string
2094
+ label: string
2095
+ payloadSchema?: z.ZodTypeAny
2096
2096
  }
2097
2097
  ```
2098
2098
 
2099
- ### `ActionDef`
2099
+ ### `DealActionInput`
2100
2100
 
2101
2101
  ```typescript
2102
- export interface ActionDef {
2103
- key: string
2104
- label: string
2105
- isAvailableFor: (deal: AcqDealRow) => boolean
2106
- workflowId: string
2107
- payloadSchema?: z.ZodTypeAny
2102
+ export type DealActionInput = AcqDealRow & {
2103
+ ownership?: 'us' | 'them' | null
2104
+ nextAction?: string | null
2105
+ }
2106
+ ```
2107
+
2108
+ ### `CompiledCrmActionAvailability`
2109
+
2110
+ ```typescript
2111
+ /**
2112
+ * When a deal action is selectable, authored by the tenant rather than hardcoded
2113
+ * as a TypeScript predicate. `stageKeys` / `stateKeys` / `nextActionKeys` AND
2114
+ * together; membership within one dimension is OR; an omitted dimension is
2115
+ * unconstrained. Mirrors
2116
+ * `OntologyActionAvailabilityCondition` (`organization-model/ontology.ts`)
2117
+ * verbatim -- this is that schema's compiled/validated shape.
2118
+ */
2119
+ export interface CompiledCrmActionAvailability {
2120
+ stageKeys: string[]
2121
+ stateKeys?: string[]
2122
+ nextActionKeys?: string[]
2123
+ }
2124
+ ```
2125
+
2126
+ ### `CompiledCrmAction`
2127
+
2128
+ ```typescript
2129
+ /** One CRM deal action, compiled from the OM's `sales.crm` ontology `actionTypes`. */
2130
+ export interface CompiledCrmAction {
2131
+ key: string
2132
+ label: string
2133
+ availableFrom: CompiledCrmActionAvailability
2134
+ resourceId: string
2135
+ payloadSchema?: z.ZodTypeAny
2108
2136
  }
2109
2137
  ```
2110
2138
 
@@ -3177,7 +3205,7 @@ export type TransitionItem<T extends Stateful, TEvent extends ActivityEvent> = (
3177
3205
  ### `DeriveActions`
3178
3206
 
3179
3207
  ```typescript
3180
- /** Generic action-derivation shape — concrete per-entity deriveActions implementations satisfy this. */
3208
+ /** Generic action-derivation shape — concrete per-entity action derivations satisfy this. */
3181
3209
  export type DeriveActions<T extends Stateful, TAction> = (item: T) => TAction[]
3182
3210
  ```
3183
3211
 
@@ -12,7 +12,7 @@ System Interface profiles are a closed platform adoption handshake. This table i
12
12
 
13
13
  The catalog is closed because a `readinessProfile` names a capability the platform API gates a route on -- only the platform can mint one. `SystemInterfaceReadinessProfileSchema` accepts any non-empty string, but that is a property of the schema layer, not permission: an uncataloged id names no route, so the declaring System computes as **ready** and every call still fails, which is worse than the `missing-interface` a plain omission reports. Needing an uncataloged capability is a platform request (a route plus a catalog entry), not something to route around by inventing an id.
14
14
 
15
- Two validation modes appear below. A **built-in** profile has a validator registered in platform code, so the adopting System needs no `readinessContract`. A **contract-validated** profile is platform-served but its structural requirements differ per adopter, so the adopting System MUST declare a `readinessContract`. `registerBuiltInReadinessProfile` is platform-code-only and is not reachable from a project: it mutates an in-process registry, while the readiness assertion that gates the API runs in the API process.
15
+ Two validation modes appear below. A **built-in** profile has a validator registered in platform code, so the platform owns its requirements and the adopting System must not declare a `readinessContract`. A **contract-validated** profile is platform-served but its structural requirements differ per adopter, so the adopting System MUST declare a `readinessContract`. `registerBuiltInReadinessProfile` is platform-code-only and is not reachable from a project: it mutates an in-process registry, while the readiness assertion that gates the API runs in the API process.
16
16
 
17
17
  | Profile | Required System path | Interface key | Validation | `readinessContract` |
18
18
  | --- | --- | --- | --- | --- |
@@ -25,7 +25,7 @@ Two validation modes appear below. A **built-in** profile has a validator regist
25
25
 
26
26
  - Required System path: `sales.lead-gen`
27
27
  - Interface key: `api`
28
- - Validation: **built-in** -- a platform-registered validator covers this profile; no `readinessContract` is required.
28
+ - Validation: **built-in** -- a platform-registered validator covers this profile; do not declare a `readinessContract` (deploy preflight rejects one as `readiness-contract-on-built-in-profile`).
29
29
  - Derived-readiness requirements:
30
30
  - System Interface marker must be active and scope at least one active `sales.lead-gen` Resource.
31
31
  - Object types: `sales.lead-gen:object/list`, `sales.lead-gen:object/company`, `sales.lead-gen:object/contact`.
@@ -39,7 +39,7 @@ Two validation modes appear below. A **built-in** profile has a validator regist
39
39
 
40
40
  - Required System path: `sales.crm`
41
41
  - Interface key: `api`
42
- - Validation: **built-in** -- a platform-registered validator covers this profile; no `readinessContract` is required.
42
+ - Validation: **built-in** -- a platform-registered validator covers this profile; do not declare a `readinessContract` (deploy preflight rejects one as `readiness-contract-on-built-in-profile`).
43
43
  - Derived-readiness requirements:
44
44
  - System Interface marker must be active and scope at least one active `sales.crm` Resource.
45
45
  - Catalog types with entries: `sales.crm:catalog/crm.pipeline`.
@@ -49,7 +49,7 @@ Two validation modes appear below. A **built-in** profile has a validator regist
49
49
 
50
50
  - Required System path: `sales.lead-gen`
51
51
  - Interface key: `crm-handoff`
52
- - Validation: **built-in** -- a platform-registered validator covers this profile; no `readinessContract` is required.
52
+ - Validation: **built-in** -- a platform-registered validator covers this profile; do not declare a `readinessContract` (deploy preflight rejects one as `readiness-contract-on-built-in-profile`).
53
53
  - Derived-readiness requirements:
54
54
  - Derived handoff readiness is evaluated for `sales.lead-gen/crm-handoff`; it is not authored as a separate custom tenant API surface.
55
55
  - Lead-gen API readiness requirements must pass for `sales.lead-gen/api`.
@@ -1215,7 +1215,3 @@ A domain should meet all four criteria before gaining a `*:list` / `*:get` surfa
1215
1215
  2. External SDK tenants have a plausible read or operation need.
1216
1216
  3. Operators repeat the same query pattern often enough that ad-hoc DB reads are becoming workflow surface.
1217
1217
  4. There are at least three concrete use cases.
1218
-
1219
- ---
1220
-
1221
- **Last Updated:** 2026-08-17
@@ -768,7 +768,3 @@ These flags are accepted by all commands:
768
768
  - Development (`NODE_ENV=development`): `http://localhost:<port>`
769
769
  - Override: set `ELEVASIS_API_URL` or pass `--api-url`
770
770
  - Force production: pass `--prod` after the command name on any authenticated command (overrides `NODE_ENV=development`). Live as of `@elevasis/sdk` 1.45.0; `--api-url https://api.elevasis.io` is the equivalent form on older installs.
771
-
772
- ---
773
-
774
- **Last Updated:** 2026-08-17
@@ -130,7 +130,3 @@ Use `StepType.CONDITIONAL` when different inputs should follow different process
130
130
  Example: score >= 80 goes to the approve path, score >= 50 goes to the review path, everything else goes to the reject path. Each path can have its own steps and logic.
131
131
 
132
132
  Always include a `default` fallback step for inputs that do not match any condition. Without a fallback, an unmatched execution will fail.
133
-
134
- ---
135
-
136
- **Last Updated:** 2026-02-26
@@ -206,7 +206,3 @@ The Deployments page shows the history of all deployments for your organization.
206
206
  **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.
207
207
 
208
208
  > **SDK takeaway:** Check this page after `elevasis-sdk deploy` to confirm your resources are active.
209
-
210
- ---
211
-
212
- **Last Updated:** 2026-03-06
@@ -87,7 +87,3 @@ External projects run an always-on natural-language intent classifier -- there i
87
87
  ## Template Version Tracking
88
88
 
89
89
  The scaffold's version marker is `templateVersion` in the project-root `.elevasis` file (a flat YAML-like marker file, not `elevasis.config.ts`). `elevasis.config.ts` (`operations/elevasis.config.ts`) only accepts `defaultStatus` and `dev.port` -- it has no version field. To pull a template update, run `/git-sync`, not `/meta fix` (which does not exist in this template).
90
-
91
- ---
92
-
93
- **Last Updated:** 2026-08-17
@@ -86,7 +86,3 @@ See [Tutorial System](tutorial-system.mdx) for the full lesson breakdown, track
86
86
  - [Project Structure](project-structure.mdx) - Directory-by-directory walkthrough of the scaffolded project's structure and layout
87
87
  - [Agent System](agent.mdx) - Skill inventory, rules layer, ambient vibe classifier, and session bootstrap
88
88
  - [Tutorial System](tutorial-system.mdx) - Two-track onboarding (8 vibe-coder + 19 technical lessons), track persistence, and progress tracking
89
-
90
- ---
91
-
92
- **Last Updated:** 2026-08-06
@@ -230,7 +230,3 @@ Excludes `node_modules/`, `dist/`, `*.tsbuildinfo`, `.tanstack/`, `.env` and `.e
230
230
  | `.env` | Adding environment variables |
231
231
  | `CLAUDE.md` | Rarely -- project identity and preferences, mostly written by `/setup` |
232
232
  | `.claude/skills/*/SKILL.md` | Never in a derived project -- these arrive via `/git-sync` |
233
-
234
- ---
235
-
236
- **Last Updated:** 2026-08-17
@@ -108,7 +108,3 @@ Replace `<execution-id>` with the ID returned from the executions list.
108
108
  - [Deployment](deployment/index.mdx) -- Deployment lifecycle and environment variables
109
109
 
110
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.
111
-
112
- ---
113
-
114
- **Last Updated:** 2026-08-17
@@ -7,7 +7,7 @@ description: Build and deploy workflows, agents, and resources with the Elevasis
7
7
 
8
8
  Workflows are step-based automations with typed inputs and outputs. Agents are autonomous AI resources with access to platform tools. Both are defined in TypeScript, exported from a single entry point, and deployed with `elevasis-sdk deploy`. Resources appear in AI Studio immediately after a successful deploy.
9
9
 
10
- The SDK ships with a full CLI (`elevasis-sdk`) for validation, deployment, execution, inspection, and project-management operations. Platform tools expose 25 adapters (13 integration + 12 platform) across integration adapters and platform services -- Gmail, Stripe, Google Sheets, Attio, and more -- with credentials managed server-side so API keys never cross the execution boundary.
10
+ The SDK ships with a full CLI (`elevasis-sdk`) for validation, deployment, execution, inspection, and project-management operations. Platform tools expose 28 adapters (14 integration + 14 platform) across integration adapters and platform services -- Gmail, Stripe, Google Sheets, Attio, and more -- with credentials managed server-side so API keys never cross the execution boundary.
11
11
 
12
12
  ## Quick Start
13
13
 
@@ -28,7 +28,7 @@ After `pnpm dlx @elevasis/sdk init`, your project is scaffolded with a working e
28
28
 
29
29
  ## Platform Tools
30
30
 
31
- The platform exposes 25 adapters (13 integration + 12 platform) across integration adapters and platform services -- Gmail, Stripe, Google Sheets, Attio, and more. Import typed adapters from `@elevasis/sdk/worker` inside any workflow step or agent. Credentials are managed server-side; API keys never cross the execution boundary.
31
+ The platform exposes 28 adapters (14 integration + 14 platform) across integration adapters and platform services -- Gmail, Stripe, Google Sheets, Attio, and more. Import typed adapters from `@elevasis/sdk/worker` inside any workflow step or agent. Credentials are managed server-side; API keys never cross the execution boundary.
32
32
 
33
33
  See [Platform Tools](platform-tools/index.mdx) for the full catalog, adapter reference, and credential setup.
34
34
 
@@ -46,7 +46,7 @@ See [Platform Tools](platform-tools/index.mdx) for the full catalog, adapter ref
46
46
  ### Core Concepts
47
47
 
48
48
  - [Resources](resources/index.mdx) - Workflow and agent definition patterns, Zod schemas, step types, and routing
49
- - [Platform Tools](platform-tools/index.mdx) - Full catalog of 25 adapters (13 integration + 12 platform), integration adapters, and credential management
49
+ - [Platform Tools](platform-tools/index.mdx) - Full catalog of 28 adapters (14 integration + 14 platform), integration adapters, and credential management
50
50
  - [Credential Security](platform-tools/index.mdx#credential-security) - Three-layer credential model, HTTP tool patterns, and credential management
51
51
  - [Human-in-the-Loop Workflows](human-in-the-loop.mdx) - The full HITL story: approval adapter, checkpoint metadata, and queue resolution
52
52
  - [The Deployment Spec Pattern](project-deployment-spec.mdx) - projectDeploymentSpec and defineWorkflowConfig, the shape the template actually ships
@@ -64,7 +64,7 @@ See [Platform Tools](platform-tools/index.mdx) for the full catalog, adapter ref
64
64
  ### Typed Adapters
65
65
 
66
66
  - [Integration Adapters](platform-tools/adapters-integration.mdx) - Integration adapter catalog for Attio, Stripe, Google Sheets, Resend, and more
67
- - [Platform Adapters](platform-tools/adapters-platform.mdx) - All 12 platform service adapters: scheduler, storage, llm, pdf, approval, and more
67
+ - [Platform Adapters](platform-tools/adapters-platform.mdx) - All 14 platform service adapters: scheduler, storage, llm, pdf, approval, and more
68
68
 
69
69
  ### Framework
70
70
 
@@ -87,7 +87,3 @@ See [Platform Tools](platform-tools/index.mdx) for the full catalog, adapter ref
87
87
 
88
88
  - [Export Catalog](exports.mdx) - Auto-generated catalog of all published @elevasis/sdk subpath exports
89
89
  - [Troubleshooting](troubleshooting.mdx) - Static error catalog for CLI, deployment, schema, and runtime failures
90
-
91
- ---
92
-
93
- **Last Updated:** 2026-05-19
@@ -198,7 +198,3 @@ const qualified = await platform.call({
198
198
  - [Integration Adapters](adapters-integration.mdx) - All 14 integration adapters with method tables and code examples
199
199
  - [Platform Adapters](adapters-platform.mdx) - All 14 platform service adapters with method tables and code examples
200
200
  - [Adapter Type Safety](type-safety.mdx) - Required fields, discriminated unions, and intentionally loose adapter types
201
-
202
- ---
203
-
204
- **Last Updated:** 2026-03-06
@@ -393,7 +393,3 @@ export default config;
393
393
 
394
394
  - [SDK Types](types.mdx) - Complete type reference for `@elevasis/sdk` exports, config, and step handler context
395
395
  - [Common Patterns](patterns.mdx) - Sequential steps, conditional branching, error handling, and resource status patterns
396
-
397
- ---
398
-
399
- **Last Updated:** 2026-02-25
@@ -495,7 +495,3 @@ The Command Queue page in the Command Center surfaces all pending approval tasks
495
495
  Use these hooks to build a custom approval queue surface in your template UI. `useSubmitAction` accepts `taskId`, `actionId`, and optional `notes`, and optimistically marks the task as `processing` while the request is in flight.
496
496
 
497
497
  For triggering executions from custom pages (the other side of the workflow interaction), see [UI Execution](../deployment/execution-reference.mdx#ui-execution).
498
-
499
- ---
500
-
501
- **Last Updated:** 2026-02-25
@@ -165,7 +165,3 @@ Hard limits to prevent abuse and ensure platform stability:
165
165
  ## Organization Provisioning
166
166
 
167
167
  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.
168
-
169
- ---
170
-
171
- **Last Updated:** 2026-03-06
@@ -160,7 +160,3 @@ export const dataEnrichment: WorkflowDefinition = {
160
160
  - **Prompt template:** The `{value}` placeholder is replaced with the source field's value at runtime. Adapt the prompt for the user's specific enrichment task.
161
161
  - **Batch size:** Default limit is 20 rows. Increase for bulk processing, decrease for expensive LLM calls.
162
162
  - **Skill adaptation:** For beginners, explain what "enrichment" means and give concrete examples (adding a summary field, scoring, categorizing) before generating code.
163
-
164
- ---
165
-
166
- **Last Updated:** 2026-02-26
@@ -133,7 +133,3 @@ export const emailSender: WorkflowDefinition = {
133
133
  - **HTML vs text:** For beginners, suggest writing plain text first and adding HTML later. For developers, show both.
134
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
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
@@ -41,7 +41,3 @@ All templates are available for any organization. Credentials specific to each t
41
41
  | PDF Generator | `pdf`, `storage` | None (platform services) |
42
42
  | Text Classifier | `llm` | None (LLM server-side) |
43
43
  | Recurring Job | `scheduler` | None (platform service) |
44
-
45
- ---
46
-
47
- **Last Updated:** 2026-03-19
@@ -173,7 +173,3 @@ export const leadScorer: WorkflowDefinition = {
173
173
  - **Scoring criteria:** Customize `DEFAULT_CRITERIA` based on the user's ICP (ideal customer profile). Ask the user what matters most for their scoring.
174
174
  - **Table columns:** The template writes `score`, `tier`, `scoring_reasoning`, `scored_at`. Ensure these columns exist or adapt the field names.
175
175
  - **LLM model:** Default uses `gpt-5.4-mini`. For more nuanced scoring, suggest `gpt-5`.
176
-
177
- ---
178
-
179
- **Last Updated:** 2026-02-26
@@ -167,7 +167,3 @@ export const pdfGenerator: WorkflowDefinition = {
167
167
  - **Expiry:** Default is 1 hour. For document delivery workflows, increase to 24-72 hours.
168
168
  - **Data structure:** Ask the user what fields their document needs before defining the input schema and mapping it into `sections`. For typed use cases (invoices, reports), add more input fields and a matching table row or card per field group.
169
169
  - **Skill adaptation:** For beginners, walk through the difference between a JSON document tree and an HTML template before generating code.
170
-
171
- ---
172
-
173
- **Last Updated:** 2026-02-26
@@ -194,7 +194,3 @@ export const recurringJob: WorkflowDefinition = {
194
194
  - **Timezone:** Always ask the user their preferred timezone. Defaults to UTC which may cause unexpected run times.
195
195
  - **`organizationId` in `createSchedule` params:** The platform always re-scopes this from the execution context server-side, so the value passed here is ignored -- it exists only because the field is required by the scheduler's type.
196
196
  - **Execution input on each run:** The job workflow receives `scheduleConfig.payload` as its input, with a `_scheduleMetadata` object (`scheduleId`, `scheduleName`, `scheduleStep`) merged in automatically. Extra fields are not part of the validated `inputSchema` and are silently dropped by Zod's default parsing.
197
-
198
- ---
199
-
200
- **Last Updated:** 2026-02-26
@@ -145,7 +145,3 @@ Return JSON with:
145
145
  - **Confidence routing:** Common pattern: use the output with `StepType.CONDITIONAL` routing. High confidence routes to automated processing; low confidence routes to human review.
146
146
  - **Model selection:** `gpt-5.4-mini` is fast and cost-effective for classification. For complex or nuanced categorization, suggest `gpt-5`.
147
147
  - **Skill adaptation:** For beginners, explain what "structured output" means and why the LLM returns JSON instead of free text.
148
-
149
- ---
150
-
151
- **Last Updated:** 2026-02-26
@@ -137,7 +137,3 @@ export const webScraper: WorkflowDefinition = {
137
137
  - **Actor selection:** Apify has hundreds of public actors. Common choices: `apify/web-scraper` (generic), `apify/cheerio-scraper` (fast HTML parsing), specialized actors for LinkedIn, Amazon, etc.
138
138
  - **Error handling:** Add try/catch for `PlatformToolError` if partial failure tolerance is needed.
139
139
  - **Skill adaptation:** For beginners, explain what Apify is and walk through actor selection before generating code.
140
-
141
- ---
142
-
143
- **Last Updated:** 2026-02-26
@@ -287,7 +287,3 @@ When recording a new error in `.claude/memory/errors/`, use this table format:
287
287
  ```
288
288
 
289
289
  Status values: `Resolved` (fixed this session), `Recurring` (seen 2+ times), `Promoted` (3+ times, now in Rules).
290
-
291
- ---
292
-
293
- **Last Updated:** 2026-08-20