@elevasis/sdk 1.28.1 → 1.30.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 +1611 -595
- package/dist/index.d.ts +105 -1
- package/dist/index.js +30 -25
- package/dist/node/index.d.ts +84 -1
- package/dist/test-utils/index.d.ts +102 -1
- package/dist/test-utils/index.js +242 -23
- package/dist/worker/index.js +1 -0
- package/package.json +4 -4
- package/reference/_navigation.md +4 -4
- package/reference/_reference-manifest.json +8 -8
- package/reference/claude-config/hooks/scaffold-registry-reminder.mjs +3 -3
- package/reference/claude-config/rules/topbar-actions.md +70 -0
- package/reference/claude-config/skills/om/SKILL.md +18 -1
- package/reference/claude-config/skills/tutorial/technical.md +5 -5
- package/reference/claude-config/sync-notes/2026-05-04-knowledge-bundle.md +83 -83
- package/reference/claude-config/sync-notes/2026-05-14-organization-model-ontology-refactor.md +45 -45
- package/reference/claude-config/sync-notes/2026-05-15-om-skill-rename-and-write-family.md +52 -52
- package/reference/claude-config/sync-notes/2026-05-17-sdk-boundary-consolidation.md +33 -33
- package/reference/claude-config/sync-notes/2026-05-20-om-define-helpers.md +32 -32
- package/reference/claude-config/sync-notes/2026-05-22-access-model-and-right-panel.md +43 -43
- package/reference/claude-config/sync-notes/2026-05-22-lead-gen-tenant-config.md +40 -40
- package/reference/claude-config/sync-notes/2026-05-22-org-model-multi-file-split.md +61 -61
- package/reference/claude-config/sync-notes/2026-05-23-branding-names-to-identity.md +49 -49
- package/reference/claude-config/sync-notes/2026-05-23-lead-gen-manage-access.md +31 -31
- package/reference/claude-config/sync-notes/2026-05-23-om-deployment-drift-detection.md +42 -42
- package/reference/claude-config/sync-notes/2026-05-23-om-full-model-deploy-contract.md +33 -33
- package/reference/claude-config/sync-notes/2026-05-23-ui-sdk-package-fixes.md +37 -37
- package/reference/claude-config/sync-notes/2026-05-24-platform-invite-router-core-baseline.md +28 -0
- package/reference/claude-config/sync-notes/2026-05-24-system-interface-readiness.md +43 -43
- package/reference/claude-config/sync-notes/2026-05-25-invitation-login-loader.md +26 -0
- package/reference/claude-config/sync-notes/2026-05-25-om-topbar-requests.md +33 -0
- package/reference/claude-config/sync-notes/2026-05-25-system-interface-profile-registry-and-substrate.md +35 -0
- package/reference/claude-config/sync-notes/2026-05-25-tenant-om-scaffold-cli.md +49 -0
- package/reference/claude-config/sync-notes/2026-05-25-vibe-operate-intent.md +47 -0
- package/reference/core/exports.mdx +16 -0
- package/reference/core/index.mdx +58 -0
- package/reference/examples/organization-model.ts +18 -0
- package/reference/index.mdx +36 -67
- package/reference/rules/organization-model.md +4 -1
- package/reference/rules/organization-os.md +7 -1
- package/reference/rules/ui.md +207 -207
- package/reference/rules/vibe.md +52 -18
- package/reference/scaffold/index.mdx +9 -7
- package/reference/scaffold/operations/propagation-pipeline.md +152 -152
- package/reference/scaffold/operations/scaffold-maintenance.md +14 -4
- package/reference/scaffold/reference/contracts.md +423 -338
- package/reference/scaffold/reference/glossary.md +14 -2
- package/reference/scaffold/reference/system-interface-capabilities.md +50 -0
- package/reference/{cli-management.mdx → sdk/cli-management.mdx} +159 -13
- package/reference/{cli.mdx → sdk/cli.mdx} +68 -12
- package/reference/sdk/exports.mdx +14 -0
- package/reference/sdk/index.mdx +93 -0
- package/reference/sdk/platform-tools/adapters-integration.mdx +25 -0
- package/reference/sdk/platform-tools/adapters-platform.mdx +24 -0
- package/reference/{platform-tools → sdk/platform-tools}/index.mdx +9 -30
- package/reference/{resources → sdk/resources}/patterns.mdx +29 -11
- package/reference/ui/exports.mdx +60 -0
- package/reference/ui/index.mdx +75 -0
- package/reference/platform-tools/adapters-integration.mdx +0 -300
- package/reference/platform-tools/adapters-platform.mdx +0 -552
- /package/reference/claude-config/skills/deploy/{skill.md → SKILL.md} +0 -0
- /package/reference/{concepts.mdx → sdk/concepts.mdx} +0 -0
- /package/reference/{deployment → sdk/deployment}/command-center.mdx +0 -0
- /package/reference/{deployment → sdk/deployment}/execution-reference.mdx +0 -0
- /package/reference/{deployment → sdk/deployment}/index.mdx +0 -0
- /package/reference/{framework → sdk/framework}/agent.mdx +0 -0
- /package/reference/{framework → sdk/framework}/index.mdx +0 -0
- /package/reference/{framework → sdk/framework}/interaction-guidance.mdx +0 -0
- /package/reference/{framework → sdk/framework}/memory.mdx +0 -0
- /package/reference/{framework → sdk/framework}/project-structure.mdx +0 -0
- /package/reference/{framework → sdk/framework}/resource-documentation.mdx +0 -0
- /package/reference/{framework → sdk/framework}/tutorial-system.mdx +0 -0
- /package/reference/{getting-started.mdx → sdk/getting-started.mdx} +0 -0
- /package/reference/{platform-tools → sdk/platform-tools}/type-safety.mdx +0 -0
- /package/reference/{resources → sdk/resources}/index.mdx +0 -0
- /package/reference/{resources → sdk/resources}/types.mdx +0 -0
- /package/reference/{roadmap.mdx → sdk/roadmap.mdx} +0 -0
- /package/reference/{runtime.mdx → sdk/runtime.mdx} +0 -0
- /package/reference/{templates → sdk/templates}/data-enrichment.mdx +0 -0
- /package/reference/{templates → sdk/templates}/email-sender.mdx +0 -0
- /package/reference/{templates → sdk/templates}/index.mdx +0 -0
- /package/reference/{templates → sdk/templates}/lead-scorer.mdx +0 -0
- /package/reference/{templates → sdk/templates}/pdf-generator.mdx +0 -0
- /package/reference/{templates → sdk/templates}/recurring-job.mdx +0 -0
- /package/reference/{templates → sdk/templates}/text-classifier.mdx +0 -0
- /package/reference/{templates → sdk/templates}/web-scraper.mdx +0 -0
- /package/reference/{troubleshooting.mdx → sdk/troubleshooting.mdx} +0 -0
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
---
|
|
2
2
|
title: Platform Tools
|
|
3
|
-
description: Access
|
|
3
|
+
description: Access 25 adapters (13 integration + 12 platform) from your SDK workflows -- typed adapters, credential security model, and working code examples
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
-
Your SDK workflows have access to
|
|
6
|
+
Your SDK workflows have access to 25 adapters (13 integration + 12 platform) -- Gmail, Stripe, Google Sheets, PDF generation, human-in-the-loop approvals, storage, scheduling, and more. Credentials are managed server-side and never appear in your code.
|
|
7
7
|
|
|
8
8
|
**Typed adapters** are the recommended way to call tools. They provide full TypeScript autocomplete, compile-time method checking, and eliminate boilerplate. Use `platform.call()` only for tools that don't have an adapter yet.
|
|
9
9
|
|
|
@@ -39,20 +39,9 @@ Both patterns return a Promise that resolves with the tool result or rejects wit
|
|
|
39
39
|
|
|
40
40
|
## Integration Adapters
|
|
41
41
|
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
| ------------- | ----------------------------- | ------------------------ |
|
|
46
|
-
| Attio | 12 (CRUD + schema + notes) | `{ apiKey }` |
|
|
47
|
-
| Google Sheets | 13 (read/write/filter/upsert) | OAuth2 / service account |
|
|
48
|
-
| Stripe | 6 (payment links + checkout) | `{ secretKey }` |
|
|
49
|
-
| Instantly | 5 (email campaigns) | `{ apiKey }` |
|
|
50
|
-
| SignatureAPI | 4 (envelopes) | `{ apiKey }` |
|
|
51
|
-
| Tomba | 3 (email discovery) | `api-key-secret` |
|
|
52
|
-
| Gmail | 2 (send email) | OAuth2 / service account |
|
|
53
|
-
| Resend | 2 (send/get email) | `{ apiKey }` |
|
|
54
|
-
| Dropbox | 2 (upload/folder) | `{ accessToken }` |
|
|
55
|
-
| Apify | 1 (run actor) | `{ token }` |
|
|
42
|
+
The SDK ships 13 integration adapters (credential-bound factory functions) covering third-party APIs -- Attio, Apify, ClickUp, Dropbox, Gmail, Google Sheets, Instantly, MillionVerifier, Anymailfinder, Tomba, Resend, SignatureAPI, and Stripe. Pass the credential name once at adapter creation. Supabase is covered separately under [Database Access](#database-access) below.
|
|
43
|
+
|
|
44
|
+
For the full per-adapter method tables, credential shapes, and code examples, see [Integration Adapters](adapters-integration.mdx) -- generated from the adapter source so it never drifts.
|
|
56
45
|
|
|
57
46
|
## Credential Security
|
|
58
47
|
|
|
@@ -131,19 +120,9 @@ Credentials are created in the command center UI: navigate to Credentials -> Add
|
|
|
131
120
|
|
|
132
121
|
## Platform Services
|
|
133
122
|
|
|
134
|
-
|
|
123
|
+
The SDK ships 12 platform service singletons available without a `credential` field -- imported directly from `@elevasis/sdk/worker`: `scheduler`, `llm`, `storage`, `notifications`, `acqDb`, `projects`, `crm`, `list`, `pdf`, `approval`, `execution`, and `email`. The platform injects context server-side, so no credential is passed.
|
|
135
124
|
|
|
136
|
-
|
|
137
|
-
| -------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------- |
|
|
138
|
-
| `acqDb` | 35 methods (CRUD + sync) | Acquisition database -- `acqDb` adapter |
|
|
139
|
-
| `email` | `send` | Send email to org members -- `email` adapter |
|
|
140
|
-
| `storage` | `upload`, `download`, `createSignedUrl`, `delete`, `list` | File storage -- `storage` adapter |
|
|
141
|
-
| `pdf` | `render`, `renderToBuffer` | PDF rendering -- `pdf` adapter |
|
|
142
|
-
| `notification` | `create` | In-app notifications -- `notifications` adapter |
|
|
143
|
-
| `approval` | `create`, `deleteByMetadata` | HITL approval gates -- `approval` adapter |
|
|
144
|
-
| `scheduler` | `createSchedule`, `updateAnchor`, `deleteSchedule`, `findByIdempotencyKey`, `deleteScheduleByIdempotencyKey`, `listSchedules`, `getSchedule`, `cancelSchedule`, `cancelSchedulesByMetadata` | Task scheduling -- `scheduler` adapter |
|
|
145
|
-
| `llm` | `generate` | LLM inference -- `llm` adapter |
|
|
146
|
-
| `execution` | `trigger` | Nested child execution -- `execution` adapter |
|
|
125
|
+
For the full per-service method tables (including the `acqDb` 41-method surface), see [Platform Adapters](adapters-platform.mdx) -- generated from the adapter source.
|
|
147
126
|
|
|
148
127
|
## LLM Tool
|
|
149
128
|
|
|
@@ -207,8 +186,8 @@ const qualified = await platform.call({
|
|
|
207
186
|
|
|
208
187
|
## Documentation
|
|
209
188
|
|
|
210
|
-
- [Integration Adapters](adapters-integration.mdx) - All
|
|
211
|
-
- [Platform Adapters](adapters-platform.mdx) - All
|
|
189
|
+
- [Integration Adapters](adapters-integration.mdx) - All 13 integration adapters with method tables and code examples
|
|
190
|
+
- [Platform Adapters](adapters-platform.mdx) - All 12 platform service adapters with method tables and code examples
|
|
212
191
|
- [Adapter Type Safety](type-safety.mdx) - Required fields, discriminated unions, and intentionally loose adapter types
|
|
213
192
|
|
|
214
193
|
---
|
|
@@ -11,19 +11,23 @@ This page collects the patterns you will reach for most often when writing resou
|
|
|
11
11
|
|
|
12
12
|
The simplest pattern: a chain of steps where each step feeds its output into the next.
|
|
13
13
|
|
|
14
|
+
Each `WorkflowStep` requires `id`, `name`, `description`, `handler`, `inputSchema`, `outputSchema`, and `next`. There is no `type` field on a step -- `StepType` (`LINEAR` / `CONDITIONAL`) is a label for `next.type` only, not a step property.
|
|
15
|
+
|
|
14
16
|
```typescript
|
|
15
17
|
import { z } from 'zod';
|
|
16
|
-
import { StepType } from '@elevasis/sdk';
|
|
17
18
|
import type { WorkflowDefinition, WorkflowStep } from '@elevasis/sdk';
|
|
18
19
|
|
|
19
20
|
const inputSchema = z.object({ orderId: z.string() });
|
|
20
21
|
const outputSchema = z.object({ shipped: z.boolean(), trackingNumber: z.string() });
|
|
21
22
|
|
|
22
23
|
type Input = z.infer<typeof inputSchema>;
|
|
23
|
-
type Output = z.infer<typeof outputSchema>;
|
|
24
24
|
|
|
25
25
|
const validateStep: WorkflowStep = {
|
|
26
|
-
|
|
26
|
+
id: 'validate',
|
|
27
|
+
name: 'Validate Order',
|
|
28
|
+
description: 'Checks the order exists before shipping',
|
|
29
|
+
inputSchema: z.object({ orderId: z.string() }),
|
|
30
|
+
outputSchema: z.object({ order: z.unknown() }),
|
|
27
31
|
handler: async (input: Input) => {
|
|
28
32
|
const order = await getOrder(input.orderId);
|
|
29
33
|
if (!order) throw new Error(`Order ${input.orderId} not found`);
|
|
@@ -33,7 +37,11 @@ const validateStep: WorkflowStep = {
|
|
|
33
37
|
};
|
|
34
38
|
|
|
35
39
|
const shipStep: WorkflowStep = {
|
|
36
|
-
|
|
40
|
+
id: 'ship',
|
|
41
|
+
name: 'Ship Order',
|
|
42
|
+
description: 'Creates a shipment and returns the tracking number',
|
|
43
|
+
inputSchema: z.object({ order: z.unknown() }),
|
|
44
|
+
outputSchema: z.object({ shipped: z.boolean(), trackingNumber: z.string() }),
|
|
37
45
|
handler: async (input) => {
|
|
38
46
|
const tracking = await createShipment(input.order);
|
|
39
47
|
return { shipped: true, trackingNumber: tracking.number };
|
|
@@ -51,23 +59,29 @@ const fulfillOrder: WorkflowDefinition = {
|
|
|
51
59
|
|
|
52
60
|
**Key points:**
|
|
53
61
|
|
|
54
|
-
- `
|
|
62
|
+
- Steps require `id`, `name`, `description`, `inputSchema`, `outputSchema`, `handler`, and `next`
|
|
63
|
+
- `next.type` is `'linear'` or `'conditional'` -- this is where `StepType` values apply; the step itself has no `type` field
|
|
64
|
+
- `next: { type: 'linear', target: 'stepName' }` routes to the next step
|
|
55
65
|
- `next: null` marks the terminal step
|
|
56
66
|
- Each step receives the full return value of the previous step as its `input`
|
|
57
|
-
- The terminal step's return value must satisfy `contract.
|
|
67
|
+
- The terminal step's return value must satisfy `contract.outputSchema`
|
|
58
68
|
|
|
59
69
|
---
|
|
60
70
|
|
|
61
71
|
## Conditional Branching
|
|
62
72
|
|
|
63
|
-
Use `
|
|
73
|
+
Use a `next.type` of `'conditional'` when the next step depends on the output of the current step. The step itself still has no `type` field -- the routing decision lives entirely in `next`.
|
|
64
74
|
|
|
65
75
|
```typescript
|
|
66
|
-
import {
|
|
76
|
+
import { z } from 'zod';
|
|
67
77
|
import type { WorkflowStep } from '@elevasis/sdk';
|
|
68
78
|
|
|
69
79
|
const scoreStep: WorkflowStep = {
|
|
70
|
-
|
|
80
|
+
id: 'score',
|
|
81
|
+
name: 'Score Application',
|
|
82
|
+
description: 'Calculates a risk score and routes on the result',
|
|
83
|
+
inputSchema: z.object({ applicationId: z.string() }),
|
|
84
|
+
outputSchema: z.object({ score: z.number(), applicationId: z.string() }),
|
|
71
85
|
handler: async (input) => {
|
|
72
86
|
const score = await calculateRiskScore(input.applicationId);
|
|
73
87
|
return { score, applicationId: input.applicationId };
|
|
@@ -103,12 +117,16 @@ const scoreStep: WorkflowStep = {
|
|
|
103
117
|
Platform tools let your steps call integrations managed by Elevasis (email, CRM, databases, etc.). Import `platform` from `@elevasis/sdk/worker` and call it with the tool name, method, parameters, and an optional credential reference when the tool requires one.
|
|
104
118
|
|
|
105
119
|
```typescript
|
|
120
|
+
import { z } from 'zod';
|
|
106
121
|
import { platform, PlatformToolError } from '@elevasis/sdk/worker';
|
|
107
122
|
import type { WorkflowStep } from '@elevasis/sdk';
|
|
108
|
-
import { StepType } from '@elevasis/sdk';
|
|
109
123
|
|
|
110
124
|
const sendEmailStep: WorkflowStep = {
|
|
111
|
-
|
|
125
|
+
id: 'sendEmail',
|
|
126
|
+
name: 'Send Email',
|
|
127
|
+
description: 'Sends a transactional email via the platform email tool',
|
|
128
|
+
inputSchema: z.object({ recipientEmail: z.string(), subject: z.string(), body: z.string() }),
|
|
129
|
+
outputSchema: z.object({ sent: z.boolean(), messageId: z.string() }),
|
|
112
130
|
handler: async (input, context) => {
|
|
113
131
|
const result = await platform.call({
|
|
114
132
|
tool: 'email',
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "@elevasis/ui Export Catalog"
|
|
3
|
+
description: "Auto-generated catalog of all published @elevasis/ui subpath exports, derived from packages/ui/reference-manifest.ts."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
{/* @generated by .claude/_gen/sync-sdk-catalog.ts — DO NOT EDIT */}
|
|
7
|
+
{/* Regenerate: pnpm gen:sdk-catalog */}
|
|
8
|
+
|
|
9
|
+
| Import | Title | Group | Description |
|
|
10
|
+
| --- | --- | --- | --- |
|
|
11
|
+
| `@elevasis/ui/provider` | Provider | Provider | Published provider and feature-shell contract for downstream apps. |
|
|
12
|
+
| `@elevasis/ui/provider/ui` | Provider UI | Provider | Published provider UI entry for downstream applications. |
|
|
13
|
+
| `@elevasis/ui/auth` | Auth | Foundation | Published authentication surface for UI integrations. |
|
|
14
|
+
| `@elevasis/ui/auth/context` | Auth Context | Foundation | Published auth context entry for UI integrations. |
|
|
15
|
+
| `@elevasis/ui/hooks` | Hooks | Hooks | Headless hooks surface for executions, sessions, observability, and operations. |
|
|
16
|
+
| `@elevasis/ui/hooks/access` | Hooks Access | Hooks | Published Access Model hook surface for checking route, section, and action access. |
|
|
17
|
+
| `@elevasis/ui/sse` | SSE | Foundation | Published server-sent events helpers and connection utilities. |
|
|
18
|
+
| `@elevasis/ui/initialization` | Initialization | Foundation | Published app initialization provider and bootstrap helpers. |
|
|
19
|
+
| `@elevasis/ui/profile` | Profile | Foundation | Published user profile surface for UI applications. |
|
|
20
|
+
| `@elevasis/ui/organization` | Organization | Foundation | Published organization shell, store, and helper surface. |
|
|
21
|
+
| `@elevasis/ui/features/auth` | Features Auth | Features | Published auth feature surface for downstream shells. |
|
|
22
|
+
| `@elevasis/ui/features/clients` | Features Clients | Features | Published clients feature surface for downstream shells. |
|
|
23
|
+
| `@elevasis/ui/features/crm` | Features CRM | Features | Published CRM feature surface for downstream shells. |
|
|
24
|
+
| `@elevasis/ui/features/dashboard` | Features Dashboard | Features | Published dashboard feature surface for downstream shells. |
|
|
25
|
+
| `@elevasis/ui/features/delivery` | Features Delivery | Features | Published delivery feature surface for downstream shells. |
|
|
26
|
+
| `@elevasis/ui/features/lead-gen` | Features Lead Gen | Features | Published lead generation feature surface for downstream shells. |
|
|
27
|
+
| `@elevasis/ui/features/operations` | Features Operations | Features | Published operations feature surface for downstream shells. |
|
|
28
|
+
| `@elevasis/ui/features/monitoring` | Features Monitoring | Features | Published monitoring feature surface for downstream shells. |
|
|
29
|
+
| `@elevasis/ui/features/monitoring/requests` | Features Monitoring Requests | Features | Published submitted-requests list, detail, and triage surface for downstream shells. |
|
|
30
|
+
| `@elevasis/ui/features/seo` | Features SEO | Features | Published SEO feature surface for downstream shells. |
|
|
31
|
+
| `@elevasis/ui/features/knowledge` | Features Knowledge | Features | Published knowledge feature manifest for downstream shells. |
|
|
32
|
+
| `@elevasis/ui/features/notes` | Features Notes | Features | Published Notes panel view and supporting note components for shared right-panel integrations. |
|
|
33
|
+
| `@elevasis/ui/features/right-panel-host` | Features Right Panel Host | Features | Published right-panel host provider, layer, trigger, keyboard shortcut, store, and view contract. |
|
|
34
|
+
| `@elevasis/ui/knowledge` | Knowledge | Visual | Published knowledge browser primitives: Browser, Tree, NodeList, NodeView, SearchBar, MDX provider, and the generated KNOWLEDGE_BODIES map. |
|
|
35
|
+
| `@elevasis/ui/vite` | Vite | Build | Composite Vite plugin factory (elevasisVite) that bundles all @elevasis/ui Vite plugins into a single array for consumer vite.config.ts files. |
|
|
36
|
+
| `@elevasis/ui/vite-plugin-knowledge` | Vite Plugin Knowledge | Build | Vite plugin that regenerates the build-time knowledge MDX bodies and search index, with HMR support. |
|
|
37
|
+
| `@elevasis/ui/features/settings` | Features Settings | Features | Published settings feature surface for downstream shells. |
|
|
38
|
+
| `@elevasis/ui/types` | Types | Foundation | Published UI types entry for downstream applications. |
|
|
39
|
+
| `@elevasis/ui/components` | Components | Components | Published UI component barrel for downstream applications. |
|
|
40
|
+
| `@elevasis/ui/components/navigation` | Navigation Components | Components | Published navigation component entry for downstream applications. |
|
|
41
|
+
| `@elevasis/ui/components/chat` | Chat Components | Components | Published chat component entry for downstream applications. |
|
|
42
|
+
| `@elevasis/ui/layout` | Layout | Components | Published layout component entry for downstream applications. |
|
|
43
|
+
| `@elevasis/ui/charts` | Charts | Components | Published chart component entry for downstream applications. |
|
|
44
|
+
| `@elevasis/ui/theme` | Theme | Visual | Published theme entry for downstream applications. |
|
|
45
|
+
| `@elevasis/ui/theme/presets` | Theme Presets | Visual | Re-exports the canonical THEME_PRESETS tuple, ThemePresetName union, and ThemePresetEnum Zod enum from @repo/core. Single source of truth for preset names across UI, schemas, and Zustand state. |
|
|
46
|
+
| `@elevasis/ui/api` | API | Foundation | Published API client entry for downstream applications. |
|
|
47
|
+
| `@elevasis/ui/utils` | Utils | Foundation | Published utility entry for downstream applications. |
|
|
48
|
+
| `@elevasis/ui/graph` | Graph | Visual | Published graph helper and visualization entry. |
|
|
49
|
+
| `@elevasis/ui/execution` | Execution | Foundation | Published execution visualization and helper entry. |
|
|
50
|
+
| `@elevasis/ui/router` | Router | Foundation | Published router entry for downstream applications. |
|
|
51
|
+
| `@elevasis/ui/router/context` | Router Context | Foundation | Published router context entry for downstream applications. |
|
|
52
|
+
| `@elevasis/ui/zustand` | Zustand | Foundation | Published Zustand slice entry for downstream applications. |
|
|
53
|
+
| `@elevasis/ui/app` | App | Foundation | Published app factory that composes providers, router, auth, and theme into a mountable React app. |
|
|
54
|
+
| `@elevasis/ui/provider/ElevasisServiceContext` | Elevasis Service Context | Provider | Standalone service context and provider that supplies apiRequest, organizationId, and isReady to child components. |
|
|
55
|
+
| `@elevasis/ui/hooks/delivery` | Hooks Delivery | Hooks | Published delivery hooks for projects, milestones, tasks, and notes. |
|
|
56
|
+
| `@elevasis/ui/hooks/user-notes` | Hooks User Notes | Hooks | Published user-notes query and mutation hooks used by shared Notes surfaces. |
|
|
57
|
+
| `@elevasis/ui/hooks/operations/command-view/utils/transformCommandViewData` | Transform Command View Data | Hooks | Utility that transforms backend CommandViewData arrays into a unified frontend CommandViewGraph with nodes and edges. |
|
|
58
|
+
| `@elevasis/ui/test-utils` | Test Utils | Testing | Published rendering helpers, auth mocks, MSW handlers, and test provider utilities. |
|
|
59
|
+
| `@elevasis/ui/test-utils/setup` | Test Utils Setup | Testing | Vitest setup file for UI consumers using browser mocks and MSW. |
|
|
60
|
+
| `@elevasis/ui/test-utils/setup-integration` | Test Utils Integration Setup | Testing | Vitest setup file for integration tests that avoid MSW and use real network boundaries. |
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "@elevasis/ui"
|
|
3
|
+
description: The shared React 19 feature-shell and manifest-backed feature modules for Elevasis — Lead Gen, CRM, Projects, Operations, Monitoring, Settings, SEO, and more. Embeds into any host UI via ElevasisProvider.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
`@elevasis/ui` is the shared React feature-shell for the Elevasis platform. It provides an `ElevasisProvider` and a set of manifest-backed feature modules that a host UI embeds and composes. The model is: your shell owns the layout and routing; Elevasis features plug in as self-contained modules.
|
|
7
|
+
|
|
8
|
+
## Install
|
|
9
|
+
|
|
10
|
+
```bash
|
|
11
|
+
pnpm add @elevasis/ui
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
Many peer dependencies are optional. Pull only the peers that the features you use require. If you are not using the graph visualization features, you do not need `cytoscape`. If you are not using TanStack Router, you do not need it either.
|
|
15
|
+
|
|
16
|
+
## Peer Dependencies
|
|
17
|
+
|
|
18
|
+
`@elevasis/ui` has a broad peer dependency set. The required peers are React 19 and Mantine 8.2.7. Most others are optional and only needed when specific feature modules are activated.
|
|
19
|
+
|
|
20
|
+
- **React 19** -- required. The feature modules use React 19 APIs.
|
|
21
|
+
- **Mantine 8.2.7** -- required. The component layer and theming foundation.
|
|
22
|
+
- **TanStack Query** -- required for data-fetching features (most modules).
|
|
23
|
+
- **TanStack Router** -- optional; required if you want the routing-aware feature shells.
|
|
24
|
+
- **Zod 4.1** -- required for schema validation in form-backed features.
|
|
25
|
+
- **Zustand 5** -- required for state management in multi-panel features.
|
|
26
|
+
- **cytoscape** -- optional; required for the graph/knowledge visualization modules only.
|
|
27
|
+
|
|
28
|
+
## Provider and Feature-Shell Model
|
|
29
|
+
|
|
30
|
+
The entry point is `ElevasisProvider`, imported from `@elevasis/ui/provider`. Wrap your application root with it to give all child feature modules access to the platform context, auth session, and manifest registry.
|
|
31
|
+
|
|
32
|
+
```tsx
|
|
33
|
+
import { ElevasisProvider } from "@elevasis/ui/provider";
|
|
34
|
+
|
|
35
|
+
export function AppRoot() {
|
|
36
|
+
return (
|
|
37
|
+
<ElevasisProvider config={elevasisConfig}>
|
|
38
|
+
{/* your shell and routes */}
|
|
39
|
+
</ElevasisProvider>
|
|
40
|
+
);
|
|
41
|
+
}
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
Feature modules are imported from their own subpaths (e.g. `@elevasis/ui/features/lead-gen`, `@elevasis/ui/features/crm`) and rendered inside the provider tree. Each module is manifest-backed: it reads the platform manifest at runtime to know which resources and workflows are available, so no hard-coded resource IDs are needed in the host UI.
|
|
45
|
+
|
|
46
|
+
## Available Feature Modules
|
|
47
|
+
|
|
48
|
+
The published feature surface includes modules for:
|
|
49
|
+
|
|
50
|
+
- **Lead Gen** -- prospecting pipeline, campaign review, acquisition workflows
|
|
51
|
+
- **CRM** -- client management, deal tracking, contact records
|
|
52
|
+
- **Projects** -- task tracking, project lifecycle, milestones
|
|
53
|
+
- **Operations** -- workflow execution history, operations dashboard
|
|
54
|
+
- **Monitoring** -- execution health, error log, platform diagnostics
|
|
55
|
+
- **Settings** -- organization settings, credential management, member management
|
|
56
|
+
- **SEO** -- content and SEO tooling modules
|
|
57
|
+
- **Notes** -- note capture and structured annotations
|
|
58
|
+
- **Knowledge** -- knowledge base viewer and search UI
|
|
59
|
+
- **Dashboard** -- compatibility components for host-owned dashboard shells
|
|
60
|
+
|
|
61
|
+
Each module has its own `@elevasis/ui/features/<name>` subpath. See the [Export Catalog](exports.mdx) for the full generated list.
|
|
62
|
+
|
|
63
|
+
## When To Use @elevasis/ui
|
|
64
|
+
|
|
65
|
+
Use `@elevasis/ui` when you are building a host application that needs to embed Elevasis features -- lead-gen pipelines, CRM views, operations dashboards -- without re-implementing them. The provider/feature-shell model means you own the shell, navigation, and layout; Elevasis owns the feature logic and UI internals.
|
|
66
|
+
|
|
67
|
+
You do not need `@elevasis/ui` if you are only writing backend workflows and agents. Tenant automation projects use `@elevasis/sdk` alone.
|
|
68
|
+
|
|
69
|
+
## Composition With @elevasis/core
|
|
70
|
+
|
|
71
|
+
`@elevasis/ui` uses `@elevasis/core` internally for entity schemas, org-model types, and auth contracts. Installing `@elevasis/ui` will pull in `@elevasis/core` as a dependency. You do not need to install `@elevasis/core` separately unless you need direct access to its subpaths.
|
|
72
|
+
|
|
73
|
+
## Export Catalog
|
|
74
|
+
|
|
75
|
+
See [Export Catalog](exports.mdx) for a generated table of all published subpath exports derived from the reference manifest.
|
|
@@ -1,300 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
title: Integration Adapters
|
|
3
|
-
description: Type-safe wrappers for third-party integrations -- Attio, Stripe, Google Sheets, Instantly, SignatureAPI, Resend, Dropbox, Apify, Gmail, and Tomba -- with full autocomplete and compile-time checking
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
Integration adapters are factory functions that bind a credential once and return a typed object with all methods available for that service. They wrap `platform.call()` with full TypeScript autocomplete and compile-time method checking.
|
|
7
|
-
|
|
8
|
-
All integration adapters are imported from `@elevasis/sdk/worker`. For platform service adapters (scheduler, storage, llm, etc.), see [Platform Adapters](adapters-platform.mdx).
|
|
9
|
-
|
|
10
|
-
```typescript
|
|
11
|
-
import {
|
|
12
|
-
createAttioAdapter, createStripeAdapter,
|
|
13
|
-
createGoogleSheetsAdapter, createInstantlyAdapter,
|
|
14
|
-
createSignatureApiAdapter, createResendAdapter, createDropboxAdapter,
|
|
15
|
-
createApifyAdapter, createGmailAdapter,
|
|
16
|
-
createTombaAdapter,
|
|
17
|
-
} from '@elevasis/sdk/worker'
|
|
18
|
-
```
|
|
19
|
-
|
|
20
|
-
---
|
|
21
|
-
|
|
22
|
-
## Quick Reference
|
|
23
|
-
|
|
24
|
-
| Import | Methods | Category |
|
|
25
|
-
| --------------------------------- | ------- | ------------------- |
|
|
26
|
-
| `createAttioAdapter(cred)` | 12 | CRM |
|
|
27
|
-
| `createGoogleSheetsAdapter(cred)` | 13 | Spreadsheets |
|
|
28
|
-
| `createStripeAdapter(cred)` | 6 | Payments |
|
|
29
|
-
| `createInstantlyAdapter(cred)` | 5 | Email Campaigns |
|
|
30
|
-
| `createSignatureApiAdapter(cred)` | 4 | eSignature |
|
|
31
|
-
| `createTombaAdapter(cred)` | 3 | Email Discovery |
|
|
32
|
-
| `createResendAdapter(cred)` | 2 | Transactional Email |
|
|
33
|
-
| `createDropboxAdapter(cred)` | 2 | File Storage |
|
|
34
|
-
| `createApifyAdapter(cred)` | 1 | Web Scraping |
|
|
35
|
-
| `createGmailAdapter(cred)` | 1 | Email (Gmail) |
|
|
36
|
-
|
|
37
|
-
Multiple adapters with different credentials work simultaneously:
|
|
38
|
-
|
|
39
|
-
```typescript
|
|
40
|
-
const prodAttio = createAttioAdapter('prod-attio')
|
|
41
|
-
const testAttio = createAttioAdapter('test-attio')
|
|
42
|
-
```
|
|
43
|
-
|
|
44
|
-
---
|
|
45
|
-
|
|
46
|
-
## Attio CRM Adapter
|
|
47
|
-
|
|
48
|
-
Factory pattern -- bind a credential once, use 12 typed methods.
|
|
49
|
-
|
|
50
|
-
```typescript
|
|
51
|
-
const attio = createAttioAdapter('my-attio-credential')
|
|
52
|
-
```
|
|
53
|
-
|
|
54
|
-
### Methods
|
|
55
|
-
|
|
56
|
-
| Method | Params | Returns |
|
|
57
|
-
| ----------------- | ----------------------- | ----------------------- |
|
|
58
|
-
| `createRecord` | `CreateRecordParams` | `CreateRecordResult` |
|
|
59
|
-
| `updateRecord` | `UpdateRecordParams` | `UpdateRecordResult` |
|
|
60
|
-
| `listRecords` | `QueryRecordsParams` | `QueryRecordsResult` |
|
|
61
|
-
| `getRecord` | `GetRecordParams` | `GetRecordResult` |
|
|
62
|
-
| `deleteRecord` | `DeleteRecordParams` | `DeleteRecordResult` |
|
|
63
|
-
| `listObjects` | none | `ListObjectsResult` |
|
|
64
|
-
| `listAttributes` | `ListAttributesParams` | `ListAttributesResult` |
|
|
65
|
-
| `createAttribute` | `CreateAttributeParams` | `CreateAttributeResult` |
|
|
66
|
-
| `updateAttribute` | `UpdateAttributeParams` | `UpdateAttributeResult` |
|
|
67
|
-
| `createNote` | `CreateNoteParams` | `CreateNoteResult` |
|
|
68
|
-
| `listNotes` | `ListNotesParams` | `ListNotesResult` |
|
|
69
|
-
| `deleteNote` | `DeleteNoteParams` | `DeleteNoteResult` |
|
|
70
|
-
|
|
71
|
-
### Examples
|
|
72
|
-
|
|
73
|
-
```typescript
|
|
74
|
-
// Create a company record
|
|
75
|
-
const company = await attio.createRecord({
|
|
76
|
-
object: 'companies',
|
|
77
|
-
values: {
|
|
78
|
-
name: [{ value: 'Acme Corp' }],
|
|
79
|
-
domains: [{ domain: 'acme.com' }],
|
|
80
|
-
},
|
|
81
|
-
})
|
|
82
|
-
|
|
83
|
-
// Query deals with filters
|
|
84
|
-
const deals = await attio.listRecords({
|
|
85
|
-
object: 'deals',
|
|
86
|
-
filter: {
|
|
87
|
-
operator: 'and',
|
|
88
|
-
filters: [
|
|
89
|
-
{ field: 'stage', operator: 'equals', value: 'proposal' },
|
|
90
|
-
],
|
|
91
|
-
},
|
|
92
|
-
sorts: [{ field: 'created_at', direction: 'desc' }],
|
|
93
|
-
limit: 20,
|
|
94
|
-
})
|
|
95
|
-
|
|
96
|
-
// Create a note on a record
|
|
97
|
-
await attio.createNote({
|
|
98
|
-
parentObject: 'deals',
|
|
99
|
-
parentRecordId: 'rec_abc123',
|
|
100
|
-
title: 'Discovery call notes',
|
|
101
|
-
content: 'Key takeaways from the call...',
|
|
102
|
-
})
|
|
103
|
-
```
|
|
104
|
-
|
|
105
|
-
---
|
|
106
|
-
|
|
107
|
-
## Google Sheets Adapter
|
|
108
|
-
|
|
109
|
-
Factory pattern -- 13 methods including workflow-friendly helpers (`getRowByValue`, `upsertRow`, `filterRows`).
|
|
110
|
-
|
|
111
|
-
```typescript
|
|
112
|
-
const sheets = createGoogleSheetsAdapter('my-google-credential')
|
|
113
|
-
```
|
|
114
|
-
|
|
115
|
-
### Methods
|
|
116
|
-
|
|
117
|
-
| Method | Params | Returns |
|
|
118
|
-
| ------------------------ | ------------------------------ | ------------------------------ |
|
|
119
|
-
| `readSheet` | `ReadSheetParams` | `ReadSheetResult` |
|
|
120
|
-
| `writeSheet` | `WriteSheetParams` | `WriteSheetResult` |
|
|
121
|
-
| `appendRows` | `AppendRowsParams` | `AppendRowsResult` |
|
|
122
|
-
| `clearRange` | `ClearRangeParams` | `ClearRangeResult` |
|
|
123
|
-
| `getSpreadsheetMetadata` | `GetSpreadsheetMetadataParams` | `GetSpreadsheetMetadataResult` |
|
|
124
|
-
| `batchUpdate` | `BatchUpdateParams` | `BatchUpdateResult` |
|
|
125
|
-
| `getHeaders` | `GetHeadersParams` | `GetHeadersResult` |
|
|
126
|
-
| `getLastRow` | `GetLastRowParams` | `GetLastRowResult` |
|
|
127
|
-
| `getRowByValue` | `GetRowByValueParams` | `GetRowByValueResult` |
|
|
128
|
-
| `updateRowByValue` | `UpdateRowByValueParams` | `UpdateRowByValueResult` |
|
|
129
|
-
| `upsertRow` | `UpsertRowParams` | `UpsertRowResult` |
|
|
130
|
-
| `filterRows` | `FilterRowsParams` | `FilterRowsResult` |
|
|
131
|
-
| `deleteRowByValue` | `DeleteRowByValueParams` | `DeleteRowByValueResult` |
|
|
132
|
-
|
|
133
|
-
---
|
|
134
|
-
|
|
135
|
-
## Stripe Adapter
|
|
136
|
-
|
|
137
|
-
Factory pattern -- 6 methods for payment links and checkout sessions.
|
|
138
|
-
|
|
139
|
-
```typescript
|
|
140
|
-
const stripe = createStripeAdapter('my-stripe-credential')
|
|
141
|
-
```
|
|
142
|
-
|
|
143
|
-
### Methods
|
|
144
|
-
|
|
145
|
-
| Method | Params | Returns |
|
|
146
|
-
| ----------------------- | ----------------------------- | ----------------------------- |
|
|
147
|
-
| `createPaymentLink` | `CreatePaymentLinkParams` | `CreatePaymentLinkResult` |
|
|
148
|
-
| `getPaymentLink` | `GetPaymentLinkParams` | `GetPaymentLinkResult` |
|
|
149
|
-
| `updatePaymentLink` | `UpdatePaymentLinkParams` | `UpdatePaymentLinkResult` |
|
|
150
|
-
| `listPaymentLinks` | `ListPaymentLinksParams` | `ListPaymentLinksResult` |
|
|
151
|
-
| `createAutoPaymentLink` | `CreateAutoPaymentLinkParams` | `CreateAutoPaymentLinkResult` |
|
|
152
|
-
| `createCheckoutSession` | `CreateCheckoutSessionParams` | `CreateCheckoutSessionResult` |
|
|
153
|
-
|
|
154
|
-
---
|
|
155
|
-
|
|
156
|
-
## Instantly Adapter
|
|
157
|
-
|
|
158
|
-
Factory pattern -- 5 methods for email campaign management.
|
|
159
|
-
|
|
160
|
-
```typescript
|
|
161
|
-
const instantly = createInstantlyAdapter('my-instantly-credential')
|
|
162
|
-
```
|
|
163
|
-
|
|
164
|
-
### Methods
|
|
165
|
-
|
|
166
|
-
| Method | Params | Returns |
|
|
167
|
-
| ----------------------- | ----------------------------- | ----------------------------- |
|
|
168
|
-
| `sendReply` | `SendReplyParams` | `SendReplyResult` |
|
|
169
|
-
| `removeFromSubsequence` | `RemoveFromSubsequenceParams` | `RemoveFromSubsequenceResult` |
|
|
170
|
-
| `getEmails` | `GetEmailsParams` | `GetEmailsResult` |
|
|
171
|
-
| `updateInterestStatus` | `UpdateInterestStatusParams` | `UpdateInterestStatusResult` |
|
|
172
|
-
| `addToCampaign` | `AddToCampaignParams` | `AddToCampaignResult` |
|
|
173
|
-
|
|
174
|
-
---
|
|
175
|
-
|
|
176
|
-
## SignatureAPI Adapter
|
|
177
|
-
|
|
178
|
-
Factory pattern -- 4 methods for eSignature envelope operations.
|
|
179
|
-
|
|
180
|
-
```typescript
|
|
181
|
-
const signatureApi = createSignatureApiAdapter('my-signatureapi-credential')
|
|
182
|
-
```
|
|
183
|
-
|
|
184
|
-
### Methods
|
|
185
|
-
|
|
186
|
-
| Method | Params | Returns |
|
|
187
|
-
| ------------------ | ------------------------ | ------------------------ |
|
|
188
|
-
| `createEnvelope` | `CreateEnvelopeParams` | `CreateEnvelopeResult` |
|
|
189
|
-
| `voidEnvelope` | `VoidEnvelopeParams` | `VoidEnvelopeResult` |
|
|
190
|
-
| `downloadDocument` | `DownloadDocumentParams` | `DownloadDocumentResult` |
|
|
191
|
-
| `getEnvelope` | `GetEnvelopeParams` | `GetEnvelopeResult` |
|
|
192
|
-
|
|
193
|
-
---
|
|
194
|
-
|
|
195
|
-
## Tomba Adapter
|
|
196
|
-
|
|
197
|
-
Factory pattern -- 3 methods for email discovery and verification.
|
|
198
|
-
|
|
199
|
-
```typescript
|
|
200
|
-
const tomba = createTombaAdapter('elevasis-tomba')
|
|
201
|
-
```
|
|
202
|
-
|
|
203
|
-
**Credential type:** `api-key-secret` (requires both API Key and API Secret)
|
|
204
|
-
|
|
205
|
-
### Methods
|
|
206
|
-
|
|
207
|
-
| Method | Params | Returns |
|
|
208
|
-
| --------------- | -------------------------- | -------------------------- |
|
|
209
|
-
| `emailFinder` | `TombaEmailFinderParams` | `TombaEmailFinderResult` |
|
|
210
|
-
| `domainSearch` | `TombaDomainSearchParams` | `TombaDomainSearchResult` |
|
|
211
|
-
| `emailVerifier` | `TombaEmailVerifierParams` | `TombaEmailVerifierResult` |
|
|
212
|
-
|
|
213
|
-
### Examples
|
|
214
|
-
|
|
215
|
-
```typescript
|
|
216
|
-
// Find email by name + domain
|
|
217
|
-
const found = await tomba.emailFinder({
|
|
218
|
-
domain: 'stripe.com',
|
|
219
|
-
firstName: 'John',
|
|
220
|
-
lastName: 'Doe',
|
|
221
|
-
})
|
|
222
|
-
|
|
223
|
-
// List all emails at a domain (up to 10)
|
|
224
|
-
const results = await tomba.domainSearch({ domain: 'stripe.com' })
|
|
225
|
-
|
|
226
|
-
// Verify a known email address
|
|
227
|
-
const verified = await tomba.emailVerifier({ email: 'john@stripe.com' })
|
|
228
|
-
```
|
|
229
|
-
|
|
230
|
-
---
|
|
231
|
-
|
|
232
|
-
## Resend Adapter
|
|
233
|
-
|
|
234
|
-
Factory pattern -- 2 methods for transactional email.
|
|
235
|
-
|
|
236
|
-
```typescript
|
|
237
|
-
const resend = createResendAdapter('my-resend-credential')
|
|
238
|
-
```
|
|
239
|
-
|
|
240
|
-
### Methods
|
|
241
|
-
|
|
242
|
-
| Method | Params | Returns |
|
|
243
|
-
| ----------- | ----------------------- | ----------------------- |
|
|
244
|
-
| `sendEmail` | `ResendSendEmailParams` | `ResendSendEmailResult` |
|
|
245
|
-
| `getEmail` | `ResendGetEmailParams` | `ResendGetEmailResult` |
|
|
246
|
-
|
|
247
|
-
---
|
|
248
|
-
|
|
249
|
-
## Dropbox Adapter
|
|
250
|
-
|
|
251
|
-
Factory pattern -- 2 methods for file operations.
|
|
252
|
-
|
|
253
|
-
```typescript
|
|
254
|
-
const dropbox = createDropboxAdapter('my-dropbox-credential')
|
|
255
|
-
```
|
|
256
|
-
|
|
257
|
-
### Methods
|
|
258
|
-
|
|
259
|
-
| Method | Params | Returns |
|
|
260
|
-
| -------------- | -------------------- | -------------------- |
|
|
261
|
-
| `uploadFile` | `UploadFileParams` | `UploadFileResult` |
|
|
262
|
-
| `createFolder` | `CreateFolderParams` | `CreateFolderResult` |
|
|
263
|
-
|
|
264
|
-
---
|
|
265
|
-
|
|
266
|
-
## Apify Adapter
|
|
267
|
-
|
|
268
|
-
Factory pattern -- 1 method for running web scraping actors.
|
|
269
|
-
|
|
270
|
-
```typescript
|
|
271
|
-
const apify = createApifyAdapter('my-apify-credential')
|
|
272
|
-
```
|
|
273
|
-
|
|
274
|
-
### Methods
|
|
275
|
-
|
|
276
|
-
| Method | Params | Returns |
|
|
277
|
-
| ---------- | ---------------- | ---------------- |
|
|
278
|
-
| `runActor` | `RunActorParams` | `RunActorResult` |
|
|
279
|
-
|
|
280
|
-
---
|
|
281
|
-
|
|
282
|
-
## Gmail Adapter
|
|
283
|
-
|
|
284
|
-
Factory pattern -- 1 method for sending email via Gmail API.
|
|
285
|
-
|
|
286
|
-
```typescript
|
|
287
|
-
const gmail = createGmailAdapter('my-gmail-credential')
|
|
288
|
-
```
|
|
289
|
-
|
|
290
|
-
### Methods
|
|
291
|
-
|
|
292
|
-
| Method | Params | Returns |
|
|
293
|
-
| ----------- | ---------------------- | ---------------------- |
|
|
294
|
-
| `sendEmail` | `GmailSendEmailParams` | `GmailSendEmailResult` |
|
|
295
|
-
|
|
296
|
-
---
|
|
297
|
-
|
|
298
|
-
For platform service adapters (scheduler, storage, llm, pdf, approval, acqDb, notifications, execution, email), see [Platform Adapters](adapters-platform.mdx).
|
|
299
|
-
|
|
300
|
-
**Last Updated:** 2026-03-05
|