@elevasis/sdk 1.9.0 → 1.11.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 (31) hide show
  1. package/dist/cli.cjs +228 -190
  2. package/dist/index.d.ts +127 -154
  3. package/dist/index.js +15 -139
  4. package/dist/test-utils/index.d.ts +8270 -0
  5. package/dist/test-utils/index.js +20070 -0
  6. package/dist/types/worker/index.d.ts +20 -1
  7. package/dist/worker/index.js +7 -4
  8. package/package.json +8 -2
  9. package/reference/_navigation.md +15 -1
  10. package/reference/_reference-manifest.json +56 -0
  11. package/reference/claude-config/sync-notes/2026-04-24-test-utils-and-template-tests.md +73 -0
  12. package/reference/claude-config/sync-notes/2026-04-24-ui-consolidation-and-sdk-cli-train.md +1 -1
  13. package/reference/deployment/provided-features.mdx +40 -267
  14. package/reference/examples/organization-model.ts +96 -564
  15. package/reference/packages/core/src/organization-model/README.md +101 -97
  16. package/reference/packages/core/src/test-utils/README.md +5 -10
  17. package/reference/packages/ui/src/test-utils/README.md +5 -0
  18. package/reference/resources/types.mdx +72 -163
  19. package/reference/scaffold/core/organization-graph.mdx +89 -272
  20. package/reference/scaffold/core/organization-model.mdx +149 -320
  21. package/reference/scaffold/operations/workflow-recipes.md +94 -1
  22. package/reference/scaffold/recipes/add-a-feature.md +102 -158
  23. package/reference/scaffold/recipes/add-a-resource.md +85 -158
  24. package/reference/scaffold/recipes/customize-organization-model.md +141 -400
  25. package/reference/scaffold/recipes/gate-by-feature-or-admin.md +114 -158
  26. package/reference/scaffold/reference/contracts.md +62 -148
  27. package/reference/scaffold/reference/feature-registry.md +8 -8
  28. package/reference/scaffold/reference/glossary.md +71 -105
  29. package/reference/scaffold/ui/feature-flags-and-gating.md +27 -232
  30. package/reference/scaffold/ui/feature-shell.mdx +50 -219
  31. package/reference/scaffold/ui/recipes.md +62 -397
@@ -26,8 +26,27 @@
26
26
  * Worker -> Parent: { type: 'credential-request', id, name }
27
27
  * Parent -> Worker: { type: 'credential-result', id, provider?, credentials?, error?, code? }
28
28
  */
29
- import type { DeploymentSpec } from '../index.js';
29
+ import type { DeploymentSpec, WorkflowDefinition } from '../index.js';
30
30
  export { platform, PlatformToolError } from './platform.js';
31
31
  export type { PlatformCredential } from './platform.js';
32
32
  export * from './adapters/index.js';
33
+ export interface LogEntry {
34
+ level: 'debug' | 'info' | 'warn' | 'error';
35
+ message: string;
36
+ timestamp: string;
37
+ context?: Record<string, unknown>;
38
+ }
39
+ export declare function executeWorkflow(workflow: WorkflowDefinition, input: unknown, context: {
40
+ executionId: string;
41
+ organizationId: string;
42
+ organizationName: string;
43
+ sessionId?: string;
44
+ sessionTurnNumber?: number;
45
+ parentExecutionId?: string;
46
+ executionDepth: number;
47
+ adapters?: Record<string, unknown>;
48
+ }): Promise<{
49
+ output: unknown;
50
+ logs: LogEntry[];
51
+ }>;
33
52
  export declare function startWorker(org: DeploymentSpec): void;
@@ -5083,7 +5083,7 @@ function captureConsole(executionId, logs) {
5083
5083
  const timestamp = (/* @__PURE__ */ new Date()).toISOString();
5084
5084
  const entry = { level, message, timestamp, context: logContext };
5085
5085
  logs.push(entry);
5086
- parentPort.postMessage({
5086
+ parentPort?.postMessage({
5087
5087
  type: "log",
5088
5088
  entry: { level, message, timestamp, executionId, context: logContext }
5089
5089
  });
@@ -5177,6 +5177,7 @@ async function executeWorkflow(workflow, input, context) {
5177
5177
  sessionTurnNumber: context.sessionTurnNumber,
5178
5178
  parentExecutionId: context.parentExecutionId,
5179
5179
  executionDepth: context.executionDepth,
5180
+ adapters: context.adapters,
5180
5181
  store: /* @__PURE__ */ new Map(),
5181
5182
  logger: {
5182
5183
  debug: (msg) => console.log(`[debug] ${msg}`),
@@ -5289,7 +5290,8 @@ function startWorker(org) {
5289
5290
  status: w.config.status,
5290
5291
  description: w.config.description,
5291
5292
  version: w.config.version,
5292
- domains: w.config.domains,
5293
+ links: w.config.links,
5294
+ category: w.config.category,
5293
5295
  contract: {
5294
5296
  inputSchema: safeZodToJsonSchema(w.contract?.inputSchema),
5295
5297
  outputSchema: safeZodToJsonSchema(w.contract?.outputSchema)
@@ -5311,7 +5313,8 @@ function startWorker(org) {
5311
5313
  status: a.config.status,
5312
5314
  description: a.config.description,
5313
5315
  version: a.config.version,
5314
- domains: a.config.domains,
5316
+ links: a.config.links,
5317
+ category: a.config.category,
5315
5318
  contract: {
5316
5319
  inputSchema: safeZodToJsonSchema(a.contract?.inputSchema),
5317
5320
  outputSchema: safeZodToJsonSchema(a.contract?.outputSchema)
@@ -5434,4 +5437,4 @@ function startWorker(org) {
5434
5437
  });
5435
5438
  }
5436
5439
 
5437
- export { PlatformToolError, acqDb, approval, createAdapter, createAnymailfinderAdapter, createApifyAdapter, createAttioAdapter, createDropboxAdapter, createGmailAdapter, createGoogleSheetsAdapter, createInstantlyAdapter, createMillionVerifierAdapter, createResendAdapter, createSignatureApiAdapter, createStripeAdapter, createTombaAdapter, crm, email, execution, list, llm, notifications, pdf, platform, projects, scheduler, startWorker, storage };
5440
+ export { PlatformToolError, acqDb, approval, createAdapter, createAnymailfinderAdapter, createApifyAdapter, createAttioAdapter, createDropboxAdapter, createGmailAdapter, createGoogleSheetsAdapter, createInstantlyAdapter, createMillionVerifierAdapter, createResendAdapter, createSignatureApiAdapter, createStripeAdapter, createTombaAdapter, crm, email, executeWorkflow, execution, list, llm, notifications, pdf, platform, projects, scheduler, startWorker, storage };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@elevasis/sdk",
3
- "version": "1.9.0",
3
+ "version": "1.11.0",
4
4
  "description": "SDK for building Elevasis organization resources",
5
5
  "type": "module",
6
6
  "bin": {
@@ -14,6 +14,10 @@
14
14
  "./worker": {
15
15
  "types": "./dist/types/worker/index.d.ts",
16
16
  "import": "./dist/worker/index.js"
17
+ },
18
+ "./test-utils": {
19
+ "types": "./dist/test-utils/index.d.ts",
20
+ "import": "./dist/test-utils/index.js"
17
21
  }
18
22
  },
19
23
  "files": [
@@ -23,6 +27,8 @@
23
27
  "dist/types/worker/index.d.ts",
24
28
  "dist/types/worker/platform.d.ts",
25
29
  "dist/types/worker/adapters/",
30
+ "dist/test-utils/index.js",
31
+ "dist/test-utils/index.d.ts",
26
32
  "dist/cli.cjs",
27
33
  "reference/"
28
34
  ],
@@ -44,7 +50,7 @@
44
50
  "tsup": "^8.0.0",
45
51
  "typescript": "5.9.2",
46
52
  "zod": "^4.1.0",
47
- "@repo/core": "0.9.0",
53
+ "@repo/core": "0.11.0",
48
54
  "@repo/typescript-config": "0.0.0"
49
55
  },
50
56
  "scripts": {
@@ -2,7 +2,7 @@
2
2
 
3
3
  Auto-generated from the package reference manifests.
4
4
 
5
- Package entries indexed: 43.
5
+ Package entries indexed: 47.
6
6
 
7
7
  ## @elevasis/core / Core
8
8
 
@@ -40,6 +40,12 @@ Package entries indexed: 43.
40
40
  | --- | --- | --- | --- |
41
41
  | Worker Runtime | `runtime.mdx` | Worker runtime entrypoint, adapters, and platform execution surface. | (not specified) |
42
42
 
43
+ ## @elevasis/sdk / Testing
44
+
45
+ | Resource | Location | Description | When to Load |
46
+ | --- | --- | --- | --- |
47
+ | Test Utils | `runtime.mdx` | Workflow runner, registry assertion, and typed adapter mocks for SDK consumers. | (not specified) |
48
+
43
49
  ## @elevasis/ui / Components
44
50
 
45
51
  | Resource | Location | Description | When to Load |
@@ -100,6 +106,14 @@ Package entries indexed: 43.
100
106
  | Provider UI | `packages/ui/src/provider/README.md` | Published provider UI entry for downstream applications. | (not specified) |
101
107
  | Elevasis Service Context | `packages/ui/src/provider/README.md` | Standalone service context and provider that supplies apiRequest, organizationId, and isReady to child components. | (not specified) |
102
108
 
109
+ ## @elevasis/ui / Testing
110
+
111
+ | Resource | Location | Description | When to Load |
112
+ | --- | --- | --- | --- |
113
+ | Test Utils | `packages/ui/src/test-utils/README.md` | Published rendering helpers, auth mocks, MSW handlers, and test provider utilities. | (not specified) |
114
+ | Test Utils Setup | `packages/ui/src/test-utils/README.md` | Vitest setup file for UI consumers using browser mocks and MSW. | (not specified) |
115
+ | Test Utils Integration Setup | `packages/ui/src/test-utils/README.md` | Vitest setup file for integration tests that avoid MSW and use real network boundaries. | (not specified) |
116
+
103
117
  ## @elevasis/ui / Visual
104
118
 
105
119
  | Resource | Location | Description | When to Load |
@@ -85,6 +85,20 @@
85
85
  "referencePath": "runtime.mdx",
86
86
  "publishedExportPath": "./dist/worker/index.js"
87
87
  },
88
+ {
89
+ "packageName": "@elevasis/sdk",
90
+ "packageDir": "packages/sdk",
91
+ "subpath": "./test-utils",
92
+ "kind": "subpath",
93
+ "title": "Test Utils",
94
+ "description": "Workflow runner, registry assertion, and typed adapter mocks for SDK consumers.",
95
+ "group": "Testing",
96
+ "order": 1,
97
+ "sourcePath": "packages/sdk/src/test-utils/index.ts",
98
+ "docPath": "apps/docs/content/docs/sdk/runtime.mdx",
99
+ "referencePath": "runtime.mdx",
100
+ "publishedExportPath": "./dist/test-utils/index.js"
101
+ },
88
102
  {
89
103
  "packageName": "@elevasis/ui",
90
104
  "packageDir": "packages/ui",
@@ -575,6 +589,48 @@
575
589
  "referencePath": "packages/ui/src/provider/README.md",
576
590
  "publishedExportPath": "./dist/provider/ElevasisServiceContext.js"
577
591
  },
592
+ {
593
+ "packageName": "@elevasis/ui",
594
+ "packageDir": "packages/ui",
595
+ "subpath": "./test-utils",
596
+ "kind": "subpath",
597
+ "title": "Test Utils",
598
+ "description": "Published rendering helpers, auth mocks, MSW handlers, and test provider utilities.",
599
+ "group": "Testing",
600
+ "order": 1,
601
+ "sourcePath": "packages/ui/src/test-utils/index.ts",
602
+ "docPath": "packages/ui/src/test-utils/README.md",
603
+ "referencePath": "packages/ui/src/test-utils/README.md",
604
+ "publishedExportPath": "./dist/test-utils/index.js"
605
+ },
606
+ {
607
+ "packageName": "@elevasis/ui",
608
+ "packageDir": "packages/ui",
609
+ "subpath": "./test-utils/setup",
610
+ "kind": "subpath",
611
+ "title": "Test Utils Setup",
612
+ "description": "Vitest setup file for UI consumers using browser mocks and MSW.",
613
+ "group": "Testing",
614
+ "order": 2,
615
+ "sourcePath": "packages/ui/src/test-utils/setup.ts",
616
+ "docPath": "packages/ui/src/test-utils/README.md",
617
+ "referencePath": "packages/ui/src/test-utils/README.md",
618
+ "publishedExportPath": "./dist/test-utils/setup.js"
619
+ },
620
+ {
621
+ "packageName": "@elevasis/ui",
622
+ "packageDir": "packages/ui",
623
+ "subpath": "./test-utils/setup-integration",
624
+ "kind": "subpath",
625
+ "title": "Test Utils Integration Setup",
626
+ "description": "Vitest setup file for integration tests that avoid MSW and use real network boundaries.",
627
+ "group": "Testing",
628
+ "order": 3,
629
+ "sourcePath": "packages/ui/src/test-utils/setup-integration.ts",
630
+ "docPath": "packages/ui/src/test-utils/README.md",
631
+ "referencePath": "packages/ui/src/test-utils/README.md",
632
+ "publishedExportPath": "./dist/test-utils/setup-integration.js"
633
+ },
578
634
  {
579
635
  "packageName": "@elevasis/ui",
580
636
  "packageDir": "packages/ui",
@@ -0,0 +1,73 @@
1
+ # Test Utils And Template Tests
2
+
3
+ ## Why this note exists
4
+
5
+ This update adds meaningful package, template, and downstream test coverage while keeping ownership boundaries clear. Package-owned contracts live in package tests/test-utils; `_template` keeps scaffold smoke tests and examples; downstream projects keep custom tests for project-specific workflows and routes.
6
+
7
+ The new package-level test-utils subpaths are being prepared in the monorepo packages:
8
+
9
+ - `@elevasis/core/test-utils`
10
+ - `@elevasis/ui/test-utils`
11
+ - `@elevasis/sdk/test-utils`
12
+
13
+ Until the bundled release train publishes those expanded package surfaces, `_template` keeps small local compatibility wrappers for tests that need the new helpers. Do not replace those wrappers with local `file:` dependencies.
14
+
15
+ ## Applies to
16
+
17
+ All template-derived projects that sync from `external/_template`.
18
+
19
+ Known affected projects: `nirvana-marketing`, `ZentaraHQ`.
20
+
21
+ ## Required actions
22
+
23
+ ### Step 1 -- Pull template changes via `/git-sync`
24
+
25
+ Accept the new tests under sync-managed scaffold surfaces:
26
+
27
+ - `ui/src/routes/__tests__/`
28
+ - `core/types/**`
29
+ - `core/config/**`
30
+ - local core compatibility helpers under `core/test-utils/`
31
+
32
+ Operations tests are intentionally narrower. Treat `operations/src/**` as project-owned runtime code. Only keep or add Operations tests in a downstream project when the project owns the workflow/module being tested. The template's email-notification tests are examples, not a requirement for every derived project.
33
+
34
+ ### Step 2 -- Run the expanded test chain
35
+
36
+ From project root:
37
+
38
+ ```bash
39
+ pnpm test
40
+ ```
41
+
42
+ The root test script now runs `operations check` between UI and operations tests so resource-registry drift fails during ordinary test runs.
43
+
44
+ ### Step 3 -- Keep compatibility wrappers until the bundled release lands
45
+
46
+ Do not delete any local compatibility wrapper that is still used by a project-owned custom test until the project has upgraded to package versions that publish the expanded test-utils subpaths.
47
+
48
+ After the release train lands, projects can migrate local compatibility imports to:
49
+
50
+ ```ts
51
+ import { renderWithProviders } from '@elevasis/ui/test-utils'
52
+ import { makeProject } from '@elevasis/core/test-utils'
53
+ import { runWorkflow } from '@elevasis/sdk/test-utils'
54
+ ```
55
+
56
+ ### Step 4 -- Adjust only for intentionally removed features
57
+
58
+ If a derived project intentionally removed a feature route or workflow, skip or adjust the specific synced test case. For Operations, prefer project-owned tests that import package helpers over copied template workflow tests.
59
+
60
+ ## Verification
61
+
62
+ - `pnpm -C ui test` passes.
63
+ - `pnpm -C operations check` passes.
64
+ - `pnpm -C operations test` passes.
65
+ - `pnpm -C core test` passes.
66
+ - `pnpm test` passes from project root.
67
+
68
+ ## Not handled by /git-sync
69
+
70
+ - `/git-sync` does not publish or upgrade `@elevasis/*` package versions.
71
+ - `/git-sync` does not remove compatibility wrappers after the release train.
72
+ - `/git-sync` does not decide how a project-specific removed feature should be represented in tests.
73
+ - `/git-sync` does not force template-only Operations example tests into downstream projects that do not own the matching workflow files.
@@ -32,7 +32,7 @@ Run from project root:
32
32
  pnpm up @elevasis/ui @elevasis/core @elevasis/sdk --latest
33
33
  ```
34
34
 
35
- Dep bumps are already written into `_template/ui/package.json` and `_template/operations/package.json` by the release train.
35
+ Dep bumps are already written into `_template/ui/package.json`, `_template/operations/package.json`, and `_template/core/package.json` by the release train (`@elevasis/core` ^0.9.0, `@elevasis/ui` ^2.19.0, `@elevasis/sdk` ^1.9.0).
36
36
 
37
37
  ### Step 3 -- Replace inlined type defs with package imports
38
38