@elevasis/sdk 1.48.0 → 1.50.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (56) hide show
  1. package/dist/chunk-MGZZ4HL4.js +4399 -0
  2. package/dist/chunk-VYWGWJRW.js +130 -0
  3. package/dist/chunk-YJDXRHNP.js +7901 -0
  4. package/dist/cli.cjs +949 -281
  5. package/dist/index.d.ts +1031 -48
  6. package/dist/index.js +2 -7597
  7. package/dist/node/index.d.ts +3 -3675
  8. package/dist/node/index.js +2 -124
  9. package/dist/test-utils/index.d.ts +2 -12051
  10. package/dist/test-utils/index.js +113 -27891
  11. package/dist/worker/index.d.ts +548 -12264
  12. package/dist/worker/index.js +3 -7400
  13. package/package.json +12 -4
  14. package/reference/_navigation.md +4 -4
  15. package/reference/_reference-manifest.json +1 -1
  16. package/reference/core/index.mdx +6 -4
  17. package/reference/index.mdx +11 -5
  18. package/reference/packages/core/src/README.md +46 -44
  19. package/reference/packages/core/src/content/README.md +16 -12
  20. package/reference/rules/agent-start-here.md +1 -1
  21. package/reference/rules/frontend.md +3 -1
  22. package/reference/rules/package-taxonomy.md +7 -5
  23. package/reference/rules/ui.md +31 -5
  24. package/reference/rules/vibe-intents.md +2 -2
  25. package/reference/rules/vibe.md +30 -10
  26. package/reference/scaffold/recipes/extend-content.md +82 -3
  27. package/reference/scaffold/recipes/gate-by-feature-or-admin.md +8 -6
  28. package/reference/scaffold/ui/feature-flags-and-gating.md +11 -1
  29. package/reference/sdk/cli-management.mdx +284 -139
  30. package/reference/sdk/cli.mdx +136 -88
  31. package/reference/sdk/define-builders.mdx +1 -1
  32. package/reference/sdk/deployment/command-center.mdx +2 -2
  33. package/reference/sdk/deployment/index.mdx +24 -7
  34. package/reference/sdk/exports.mdx +4 -4
  35. package/reference/sdk/framework/agent.mdx +4 -3
  36. package/reference/sdk/framework/index.mdx +1 -1
  37. package/reference/sdk/framework/project-structure.mdx +34 -23
  38. package/reference/sdk/framework/tutorial-system.mdx +1 -1
  39. package/reference/sdk/getting-started.mdx +25 -52
  40. package/reference/sdk/index.mdx +3 -3
  41. package/reference/sdk/platform-tools/adapters-integration.mdx +1 -1
  42. package/reference/sdk/platform-tools/adapters-platform.mdx +1 -1
  43. package/reference/sdk/platform-tools/type-safety.mdx +1 -1
  44. package/reference/sdk/resources/patterns.mdx +10 -11
  45. package/reference/sdk/resources/types.mdx +15 -9
  46. package/reference/sdk/templates/data-enrichment.mdx +1 -1
  47. package/reference/sdk/templates/email-sender.mdx +1 -1
  48. package/reference/sdk/templates/index.mdx +47 -47
  49. package/reference/sdk/templates/lead-scorer.mdx +1 -1
  50. package/reference/sdk/templates/pdf-generator.mdx +42 -24
  51. package/reference/sdk/templates/recurring-job.mdx +20 -15
  52. package/reference/sdk/templates/text-classifier.mdx +1 -1
  53. package/reference/sdk/templates/web-scraper.mdx +9 -5
  54. package/reference/sdk/troubleshooting.mdx +72 -1
  55. package/reference/ui/exports.mdx +1 -1
  56. package/reference/ui/index.mdx +2 -2
@@ -13,7 +13,7 @@ pnpm add @elevasis/sdk
13
13
 
14
14
  After installation, the `elevasis-sdk` binary is available in your project's `node_modules/.bin/`. Most commands require `ELEVASIS_PLATFORM_KEY` to be set in your environment or a `.env` file.
15
15
 
16
- For management commands (project:\*, note:\*, acquisition:\*, client:\*, agent:\*, session:\*, queue:\*, schedule:\*, om:\*, ui:\*, skill:\*), see [CLI Management](cli-management.mdx).
16
+ For management commands (project:\*, note:\*, error:\*, acquisition:\*, client:\*, agent:\*, session:\*, queue:\*, schedule:\*, om:\*, ui:\*, skill:\*, content:\*, request:\*, grant:\*), see [CLI Management](cli-management.mdx).
17
17
 
18
18
  ---
19
19
 
@@ -41,6 +41,13 @@ elevasis-sdk check
41
41
 
42
42
  `check` declares no `--api-url` flag -- it validates project source locally and never calls the API, so there is no base URL to override.
43
43
 
44
+ **Flags:**
45
+
46
+ | Flag | Description |
47
+ | ----------------- | -------------------------------------------------- |
48
+ | `--entry <path>` | Path to the entry file (default: `./src/index.ts`) |
49
+ | `--skip-coverage` | Skip the skill coverage gate |
50
+
44
51
  **Example output (success):**
45
52
 
46
53
  ```
@@ -84,10 +91,14 @@ elevasis-sdk deploy
84
91
 
85
92
  **Flags:**
86
93
 
87
- | Flag | Description |
88
- | ------------------- | ---------------------------------------------------------- |
89
- | `--api-url <url>` | Override the API base URL (default: production) |
90
- | `--prod` | Force production target, overriding `NODE_ENV=development` |
94
+ | Flag | Description |
95
+ | ----------------- | ------------------------------------------------------------ |
96
+ | `--api-url <url>` | Override the API base URL (default: production) |
97
+ | `--entry <path>` | Path to the entry file (default: `./src/index.ts`) |
98
+ | `--prod` | Force production target, overriding `NODE_ENV=development` |
99
+ | `--major` | Bump the major version before deploying (`1.0.0` -> `2.0.0`) |
100
+ | `--minor` | Bump the minor version before deploying (`1.0.0` -> `1.1.0`) |
101
+ | `--patch` | Bump the patch version before deploying (`1.0.0` -> `1.0.1`) |
91
102
 
92
103
  **Environment variables:**
93
104
 
@@ -141,15 +152,20 @@ elevasis-sdk exec <resource> --input '{...}'
141
152
  - Use `--async` to return an `executionId` immediately and poll for completion
142
153
  - `--input` accepts a JSON string matching the resource's `inputSchema`
143
154
  - Organization is derived from your API key -- no org prefix needed
155
+ - On a lost connection during a synchronous run, the CLI looks up the most recent running execution for the resource and resumes polling rather than failing outright
144
156
 
145
157
  **Flags:**
146
158
 
147
- | Flag | Description |
148
- | ------------------- | ------------------------------------------------------- |
149
- | `--input <json>` | JSON input matching the resource's input schema |
150
- | `--async` | Execute asynchronously, return execution ID immediately |
151
- | `--json` | Output raw JSON instead of formatted display |
152
- | `--api-url <url>` | Override the API base URL |
159
+ | Flag | Description |
160
+ | ------------------------- | ------------------------------------------------------------------------------------------------------------------------- |
161
+ | `-i, --input <json>` | JSON input matching the resource's input schema |
162
+ | `-f, --input-file <path>` | Read input from a JSON file instead of `--input` (avoids shell escaping). Relative paths resolve against the project root |
163
+ | `--async` | Execute asynchronously, return execution ID immediately |
164
+ | `--cleanup-input` | Delete the input file after a successful execution (only files under `<projectRoot>/tmp/` are eligible) |
165
+ | `--prod` | Target production (overrides `NODE_ENV=development`) |
166
+ | `--api-url <url>` | Override the API base URL |
167
+
168
+ `exec` does not declare a `--json` flag -- output is always the formatted display shown below.
153
169
 
154
170
  **Example:**
155
171
 
@@ -202,9 +218,9 @@ elevasis-sdk resources
202
218
 
203
219
  **Flags:**
204
220
 
205
- | Flag | Description |
206
- | ------------------- | ------------------------- |
207
- | `--json` | Output raw JSON |
221
+ | Flag | Description |
222
+ | ----------------- | ------------------------- |
223
+ | `--json` | Output raw JSON |
208
224
  | `--api-url <url>` | Override the API base URL |
209
225
 
210
226
  **Example output:**
@@ -238,11 +254,11 @@ elevasis-sdk executions [resource]
238
254
 
239
255
  **Flags:**
240
256
 
241
- | Flag | Description |
242
- | --------------------- | --------------------------------------------------------------- |
243
- | `--limit <n>` | Maximum number of executions to return (default: 20) |
257
+ | Flag | Description |
258
+ | ------------------- | --------------------------------------------------------------- |
259
+ | `--limit <n>` | Maximum number of executions to return (default: 50) |
244
260
  | `--status <status>` | Filter by status: `running`, `completed`, `failed`, `cancelled` |
245
- | `--json` | Output raw JSON |
261
+ | `--json` | Output raw JSON |
246
262
  | `--api-url <url>` | Override the API base URL |
247
263
 
248
264
  **Example:**
@@ -273,15 +289,21 @@ elevasis-sdk execution <resource> <id>
273
289
 
274
290
  **Behavior:**
275
291
 
276
- - Shows the complete execution record: input, output, logs, duration, and error (if any)
292
+ - Shows the complete execution record: input, result, logs, duration, and error (if any)
293
+ - `--input` and `--result` force those sections to print even when the CLI would otherwise omit them; both print automatically when the execution carries input data, or is `completed` with a result
294
+ - `--logs-only` prints only the execution logs and skips the rest of the record
277
295
  - Use `--json` to get the raw JSON response for programmatic use
278
296
 
279
297
  **Flags:**
280
298
 
281
- | Flag | Description |
282
- | ------------------- | ------------------------- |
283
- | `--json` | Output raw JSON |
284
- | `--api-url <url>` | Override the API base URL |
299
+ | Flag | Description |
300
+ | ----------------- | ---------------------------------------------------- |
301
+ | `--logs-only` | Show only execution logs |
302
+ | `--input` | Force the Input section to print |
303
+ | `--result` | Force the Result section to print |
304
+ | `--prod` | Target production (overrides `NODE_ENV=development`) |
305
+ | `--json` | Output raw JSON response |
306
+ | `--api-url <url>` | Override the API base URL |
285
307
 
286
308
  **Example:**
287
309
 
@@ -290,10 +312,12 @@ elevasis-sdk execution onboard-client exec_abc001
290
312
  ```
291
313
 
292
314
  ```
293
- Resource: onboard-client
294
- Status: completed
295
- Started: 2026-02-25 14:32:01
296
- Duration: 1.2s
315
+ Resource: onboard-client
316
+ Execution ID: exec_abc001
317
+ Status: COMPLETED
318
+ Started: 2026-02-25 14:32:01
319
+ Ended: 2026-02-25 14:32:02
320
+ Duration: 1.2s
297
321
 
298
322
  Input:
299
323
  {
@@ -301,17 +325,20 @@ elevasis-sdk execution onboard-client exec_abc001
301
325
  "email": "jane@example.com"
302
326
  }
303
327
 
304
- Output:
328
+ Result:
305
329
  {
306
330
  "success": true,
307
331
  "clientId": "client_1708521600000",
308
332
  "welcomeEmailSent": true
309
333
  }
310
334
 
311
- Logs:
335
+ Execution Logs:
336
+
312
337
  [14:32:01.123] Starting onboard-client workflow
313
338
  [14:32:01.456] Created client record
314
339
  [14:32:01.891] Welcome email sent to jane@example.com
340
+
341
+ Total logs: 3
315
342
  ```
316
343
 
317
344
  ---
@@ -334,11 +361,11 @@ elevasis-sdk execution:cancel <resourceId> <executionId>
334
361
 
335
362
  **Flags:**
336
363
 
337
- | Flag | Description |
338
- | ------------------- | ---------------------------------------------------- |
339
- | `--prod` | Target production (overrides `NODE_ENV=development`) |
364
+ | Flag | Description |
365
+ | ----------------- | ---------------------------------------------------- |
366
+ | `--prod` | Target production (overrides `NODE_ENV=development`) |
340
367
  | `--api-url <url>` | Override the API base URL |
341
- | `--json` | Output raw JSON response |
368
+ | `--json` | Output raw JSON response |
342
369
 
343
370
  **Example:**
344
371
 
@@ -376,13 +403,13 @@ elevasis-sdk executions:delete <resourceId> [--force]
376
403
 
377
404
  **Flags:**
378
405
 
379
- | Flag | Description |
380
- | ------------------------------ | ------------------------------------------------------------ |
381
- | `--prod` | Target production (overrides `NODE_ENV=development`) |
406
+ | Flag | Description |
407
+ | ---------------------------- | ------------------------------------------------------------ |
408
+ | `--prod` | Target production (overrides `NODE_ENV=development`) |
382
409
  | `--api-url <url>` | Override the API base URL |
383
410
  | `--resource-status <status>` | Only delete runs from this deployment lane (`dev` | `prod`) |
384
- | `--force` | Skip the typed confirmation prompt |
385
- | `--json` | Output raw JSON response |
411
+ | `--force` | Skip the typed confirmation prompt |
412
+ | `--json` | Output raw JSON response |
386
413
 
387
414
  **Example:**
388
415
 
@@ -406,24 +433,31 @@ elevasis-sdk deployments
406
433
 
407
434
  **Behavior:**
408
435
 
409
- - Shows deployment history with status, timestamp, and resource count
410
- - Active deployment is marked; previous deployments show as `stopped`
436
+ - Shows deployment history with status, SDK version, and creation timestamp
437
+ - Status is one of `deploying`, `active`, `failed`, `rolled_back`, or `stopped`
411
438
 
412
439
  **Flags:**
413
440
 
414
- | Flag | Description |
415
- | ------------------- | ------------------------- |
416
- | `--json` | Output raw JSON |
417
- | `--api-url <url>` | Override the API base URL |
441
+ | Flag | Description |
442
+ | ----------------- | ---------------------------------------------------- |
443
+ | `--prod` | Target production (overrides `NODE_ENV=development`) |
444
+ | `--json` | Output raw JSON |
445
+ | `--api-url <url>` | Override the API base URL |
418
446
 
419
447
  **Example output:**
420
448
 
421
449
  ```
422
450
  $ elevasis-sdk deployments
423
451
 
424
- deploy_abc123 active 2026-02-25 14:00:00 4 resources
425
- deploy_abc122 stopped 2026-02-24 09:30:00 3 resources
426
- deploy_abc121 stopped 2026-02-23 11:15:00 3 resources
452
+ 1. [ACTIVE] deploy_abc123
453
+ SDK Version: 1.45.0
454
+ Created: 2/25/2026, 2:00:00 PM
455
+
456
+ 2. [STOPPED] deploy_abc122
457
+ SDK Version: 1.44.2
458
+ Created: 2/24/2026, 9:30:00 AM
459
+
460
+ 2 deployment(s)
427
461
  ```
428
462
 
429
463
  ---
@@ -446,9 +480,9 @@ elevasis-sdk describe <resource>
446
480
 
447
481
  **Flags:**
448
482
 
449
- | Flag | Description |
450
- | ------------------- | ------------------------- |
451
- | `--json` | Output raw JSON response |
483
+ | Flag | Description |
484
+ | ----------------- | ------------------------- |
485
+ | `--json` | Output raw JSON response |
452
486
  | `--api-url <url>` | Override the API base URL |
453
487
 
454
488
  **Example:**
@@ -495,21 +529,24 @@ elevasis-sdk creds delete <name> [--force]
495
529
  **Subcommands:**
496
530
 
497
531
  - `list` -- display all credentials (metadata only, no secret values)
498
- - `create` -- create a new credential; `--name` and `--type` are required; `--value` is an optional JSON string for the initial value
532
+ - `create` -- create a new credential; `--name`, `--type`, and `--value` are all required
499
533
  - `update <name>` -- replace the value of an existing credential; `--value` (JSON) is required
500
534
  - `rename <name>` -- rename a credential; `--to <newName>` is required
501
535
  - `delete <name>` -- delete a credential; pass `--force` to skip the confirmation prompt
502
536
 
503
537
  **Flags:**
504
538
 
505
- | Flag | Description |
506
- | ------------------- | -------------------------------------------------- |
507
- | `--name <name>` | Credential name (create: required) |
508
- | `--type <type>` | Credential type, e.g. `api-key` (create: required) |
509
- | `--value <json>` | Credential value as a JSON string |
510
- | `--to <newName>` | New name (rename: required) |
511
- | `--force` | Skip confirmation prompt (delete) |
512
- | `--api-url <url>` | Override the API base URL |
539
+ | Flag | Description |
540
+ | ----------------- | ------------------------------------------------------------------------------- |
541
+ | `--name <name>` | Credential name: lowercase letters, digits, and hyphens only (create: required) |
542
+ | `--type <type>` | Credential type: `api-key` or `webhook-secret` (create: required) |
543
+ | `--value <json>` | Credential value as a JSON string (create and update: required) |
544
+ | `--to <newName>` | New name (rename: required) |
545
+ | `--force` | Skip confirmation prompt (delete) |
546
+ | `--prod` | Target production (overrides `NODE_ENV=development`) |
547
+ | `--api-url <url>` | Override the API base URL |
548
+
549
+ OAuth credentials cannot be created through the CLI -- they require the Command Center's browser OAuth flow. See [Command Center](deployment/command-center.mdx#credentials).
513
550
 
514
551
  **Examples:**
515
552
 
@@ -540,24 +577,24 @@ elevasis-sdk rename <old-id> --to <new-id> [--execute] [--prod]
540
577
  - Dry-run by default -- shows all affected rows per table without modifying any data
541
578
  - Pass `--execute` to perform the rename
542
579
  - Org-scoped: only updates rows belonging to your organization
543
- - Updates resource references across 6 tables:
580
+ - Refuses to run if the new resource ID already has execution history in your organization, to prevent a data collision
581
+ - Updates resource references across 5 tables:
544
582
 
545
- | Table | Column(s) updated |
546
- | -------------------- | ----------------- |
547
- | `executions` | `resource_id` |
548
- | `sessions` | `resource_id` |
549
- | `workflow_configs` | `resource_id` |
550
- | `workflow_schedules` | `resource_id` |
551
- | `execution_events` | `resource_id` |
552
- | `session_events` | `resource_id` |
583
+ | Table | Column(s) updated |
584
+ | ------------------- | ------------------------------------------ |
585
+ | `execution_logs` | `resource_id` |
586
+ | `execution_metrics` | `resource_id` |
587
+ | `sessions` | `resource_id` |
588
+ | `command_queue` | `origin_resource_id` |
589
+ | `task_schedules` | `origin_resource_id`, `target_resource_id` |
553
590
 
554
591
  **Flags:**
555
592
 
556
- | Flag | Description |
557
- | ------------------- | --------------------------------------- |
593
+ | Flag | Description |
594
+ | ----------------- | --------------------------------------- |
558
595
  | `--to <new-id>` | Required. The new resource ID |
559
- | `--execute` | Perform the rename (default is dry-run) |
560
- | `--prod` | Target the production environment |
596
+ | `--execute` | Perform the rename (default is dry-run) |
597
+ | `--prod` | Target the production environment |
561
598
  | `--api-url <url>` | Override the API base URL |
562
599
 
563
600
  **Example (dry-run):**
@@ -570,14 +607,13 @@ elevasis-sdk rename ist-upload-workflow --to ist-upload-contacts-workflow
570
607
  Dry run — no changes made.
571
608
 
572
609
  Rows that would be updated:
573
- executions 6
574
- sessions 0
575
- workflow_configs 0
576
- workflow_schedules 0
577
- execution_events 0
578
- session_events 0
610
+ execution_logs 6
611
+ execution_metrics 6
612
+ sessions 0
613
+ command_queue 0
614
+ task_schedules 0
579
615
 
580
- Total: 6 rows
616
+ Total: 12 rows
581
617
 
582
618
  Re-run with --execute to apply changes.
583
619
  ```
@@ -608,11 +644,12 @@ elevasis-sdk cli [domain] [--format markdown|json]
608
644
  - When `domain` is omitted, all domains are listed
609
645
  - `--format json` returns a structured array suitable for programmatic use; `--format markdown` (default) renders a human-readable table
610
646
  - The runtime catalog is always up to date with what is actually registered -- it does not parse TypeScript source
647
+ - This is the only catalog. `elevasis-sdk --help` no longer carries a hand-maintained `Commands:` list in `program.description()`; it prints a short pointer to `elevasis-sdk cli` plus Commander's own list of registered commands, so there is nothing left to drift
611
648
 
612
649
  **Flags:**
613
650
 
614
- | Flag | Description |
615
- | --------------------- | ----------------------------------------------------------- |
651
+ | Flag | Description |
652
+ | ------------------- | ----------------------------------------------------------- |
616
653
  | `--domain <domain>` | Filter output to one domain (alternative to positional arg) |
617
654
  | `--format <format>` | Output format: `markdown` (default) or `json` |
618
655
 
@@ -659,12 +696,15 @@ elevasis-sdk doctor [--verbose] [--prod]
659
696
 
660
697
  **Behavior:**
661
698
 
662
- Runs four sequential checks and reports `[OK]` / `[FAIL]` / `[WARN]` for each. Exits with code 1 if any check fails. Later checks are skipped when a prerequisite fails.
699
+ Runs five sequential checks and reports `[OK]` / `[FAIL]` / `[WARN]` for each. Exits with code 1 if any check fails. Later checks are skipped when a prerequisite fails.
663
700
 
664
701
  1. Project root resolved -- locates the `.elevasis` marker file from the current working directory
665
702
  2. `.env` found at project root
666
703
  3. `ELEVASIS_PLATFORM_KEY` present and non-empty
667
704
  4. API reachable and key valid -- calls `GET /api/external/health`
705
+ 5. Systems roster -- every platform-cataloged System Interface, checked against the deployed readiness snapshot. Reuses the key and connectivity Check 4 already proved. A System the project has not adopted renders `[WARN]`, never `[FAIL]` -- partial adoption is the designed opt-out. `[FAIL]` is reserved for adopted-but-broken Systems: a stale deployed snapshot, an unsatisfied `readinessContract`, or a malformed declaration.
706
+
707
+ The roster is built from the platform catalog, not from your own declarations, so a System you have **not** adopted still gets a row. A System you declared locally that is missing from the deployed snapshot is treated as drift and renders `[FAIL]`, not `[WARN]`. If the API cannot be reached, the roster renders a single `[WARN]` line and leaves Checks 1-4 with their own results. `--verbose` prints each row's issue codes and messages.
668
708
 
669
709
  **Flags:**
670
710
 
@@ -683,23 +723,31 @@ Running Elevasis SDK doctor checks...
683
723
  [OK] API key: Set (length: 56)
684
724
  [OK] API: Reachable. Workspace: Acme Corp (ws_abc123)
685
725
  [WARN] SDK compat: server minSdkVersion is 1.25.0; check is advisory in v1.
726
+ [OK] Systems: sales.lead-gen/api: ready
727
+ [OK] Systems: sales.crm/api: ready
728
+ [OK] Systems: sales.lead-gen/crm-handoff: ready
729
+ [WARN] Systems: content/api: not adopted
686
730
 
687
731
  All checks passed. Your Elevasis project is correctly configured.
688
732
  ```
689
733
 
734
+ A `[WARN]` roster row never changes the exit code. `doctor` still exits `0` with an unadopted System in the list.
735
+
690
736
  **Implementation:** `packages/sdk/src/cli/commands/doctor.ts`
691
737
 
738
+ **Related:** [Common Errors -- System Readiness Errors](troubleshooting.mdx#system-readiness-errors-503) for what a `503` refusal from one of these Systems looks like at the terminal and how to clear it.
739
+
692
740
  ---
693
741
 
694
742
  ## Global Flags
695
743
 
696
744
  These flags are accepted by all commands:
697
745
 
698
- | Flag | Description |
699
- | ------------------- | --------------------------------------------------------------------------------------------------- |
700
- | `--api-url <url>` | Override the API base URL. Priority: flag > `ELEVASIS_API_URL` env var > `NODE_ENV`-based default |
701
- | `--json` | Output raw JSON (available on most commands) |
702
- | `--prod` | Target production, overriding `NODE_ENV=development` |
746
+ | Flag | Description |
747
+ | ----------------- | -------------------------------------------------------------------------------------------------------------------------------- |
748
+ | `--api-url <url>` | Override the API base URL. Priority: `--api-url` flag > `--prod` flag > `ELEVASIS_API_URL` env var > `NODE_ENV`-based default |
749
+ | `--json` | Output raw JSON (available on most commands) |
750
+ | `--prod` | Target production, overriding `NODE_ENV=development` |
703
751
 
704
752
  **API base URL resolution:**
705
753
 
@@ -710,4 +758,4 @@ These flags are accepted by all commands:
710
758
 
711
759
  ---
712
760
 
713
- **Last Updated:** 2026-08-12
761
+ **Last Updated:** 2026-08-17
@@ -23,7 +23,7 @@ export function defineWorkflow<TWorkflow extends WorkflowDefinition>(workflow: T
23
23
 
24
24
  What it buys you is narrower inference. Annotate a literal `const echo: WorkflowDefinition = { ... }` and TypeScript widens every field to the interface's declared type -- `config.resourceId` becomes `string`, not `'echo'`. Pass the same object to `defineWorkflow({ ... })` with no annotation and `TWorkflow` is inferred from the literal you wrote, so `defineWorkflow(...).config.resourceId` keeps the literal type `'echo'`. That distinction only matters if something downstream reads the value back and wants the narrower type -- a test asserting on `resourceId`, a lookup table keyed by it, a second resource that imports the first and needs its literal id. A workflow file that is only ever consumed by the deploy pipeline, which just needs it to satisfy `WorkflowDefinition`, gets nothing extra from the wrapper.
25
25
 
26
- That is a real, but narrow, upside -- and it is honestly reflected in what ships. The scaffolded template's own workflow files (`echo.ts`, `email-notification.ts`) use the plain annotated-literal form, not `defineWorkflow`. The builder is real, exported, and demonstrated in the SDK's own test fixtures with exactly the calling convention above -- it is simply not the house style the template ships with. Use the annotated literal by default, matching what a scaffolded project already contains; reach for `defineWorkflow` / `defineStep` / `defineContract` specifically when you want the object's literal types preserved past its own definition.
26
+ That is a real, but narrow, upside -- and it is honestly reflected in what ships. The scaffolded template's own workflow files (`example/echo.ts`, `email-notification/index.ts`) use the plain annotated-literal form, not `defineWorkflow`. The builder is real, exported, and demonstrated in the SDK's own test fixtures with exactly the calling convention above -- it is simply not the house style the template ships with. Use the annotated literal by default, matching what a scaffolded project already contains; reach for `defineWorkflow` / `defineStep` / `defineContract` specifically when you want the object's literal types preserved past its own definition.
27
27
 
28
28
  `defineWorkflowConfig` is a different kind of helper in this same group -- it derives `config` fields from an Organization Model resource descriptor instead of preserving literal types. It has its own page: see [The Deployment Spec Pattern](project-deployment-spec.mdx#defineworkflowconfig-deriving-config-from-one-om-descriptor).
29
29
 
@@ -105,8 +105,8 @@ Keep relationships in sync with your handler code. When you add an `execution.tr
105
105
  **Validation error examples:**
106
106
 
107
107
  ```
108
- ERROR Relationship target 'send-proposal' not found in organization resources
109
- ERROR Duplicate resource ID 'score-lead' in deployment
108
+ ERROR [acme-corp] Resource 'score-lead' triggers non-existent workflow: send-proposal
109
+ ERROR Duplicate resource ID 'score-lead' in deployment. Each resource must have a unique ID.
110
110
  ```
111
111
 
112
112
  ### Graph Serialization
@@ -82,13 +82,14 @@ Each deploy creates a new deployment record. The previous active deployment is a
82
82
 
83
83
  The CLI validates your resources before bundling. Validation uses the same `ResourceRegistry` as the platform, so errors caught locally are the same errors that would be caught at deploy time.
84
84
 
85
- **Validation checks:**
85
+ **Validation checks that abort the deploy:**
86
86
 
87
87
  - Duplicate `resourceId` within your organization
88
88
  - Invalid model configuration (temperature and token bounds out of range)
89
89
  - `ExecutionInterface` form fields not matching `inputSchema`
90
- - Broken workflow step chains (`next` referencing a step that does not exist)
91
90
  - Relationship declarations referencing resources that do not exist
91
+ - Structural failures in your `organizationModel`
92
+ - A System with API-backed resources but no `apiInterface` declaration
92
93
 
93
94
  **Validation failure output:**
94
95
 
@@ -100,6 +101,18 @@ The CLI validates your resources before bundling. Validation uses the same `Reso
100
101
  Deploy aborted.
101
102
  ```
102
103
 
104
+ Every issue is reported in one run. Governance and System Interface readiness failures no longer stop at the first problem, so thirty issues cost one deploy round trip rather than thirty.
105
+
106
+ **Checks that warn without aborting:**
107
+
108
+ Workflow-graph problems -- a `next` target that does not exist, an `entryPoint` that names no step, a cycle, or a step unreachable from the entry point -- are reported as warnings so an existing project carrying a latent invalid graph is not blocked on its next deploy. **They still throw at execution**, when the workflow is constructed. Treat a graph warning as a defect with a deadline, not as advisory.
109
+
110
+ The platform runs its own checks on the server after upload and reports these as warnings too: the `apiInterface` conformance check, agent grammar and token-floor validation, and a cross-check of every declared `IntegrationDefinition.credentialName` against the credentials your organization actually holds. A missing credential is a warning at deploy and a `credentials_missing` failure at execution, so create it before the resource runs. Only credential names are checked; values never leave the command center.
111
+
112
+ **Downgrading checks temporarily:**
113
+
114
+ `ELEVASIS_RESOURCE_VALIDATOR=warn-only` downgrades resource governance, contract-ref resolution, System Interface readiness, and the agent grammar and cheap-assertion checks to warnings. Every downgraded check still runs and still prints its issue; it never bypasses the structural schema parse or the conformance gate.
115
+
103
116
  Run `elevasis-sdk check` at any time to validate without deploying.
104
117
 
105
118
  ---
@@ -121,13 +134,16 @@ The `ElevasConfig` type is exported from `@elevasis/sdk`. You can leave the conf
121
134
 
122
135
  ## Environment Variables
123
136
 
124
- | Variable | Required | Description |
125
- | ----------------------- | -------- | --------------------------------------------------------------------------- |
126
- | `ELEVASIS_PLATFORM_KEY` | Yes | Your `sk_...` API key. Used for authentication and organization resolution. |
127
- | `ELEVASIS_API_URL` | No | Override the API base URL. Useful for pointing at a staging environment. |
137
+ | Variable | Required | Description |
138
+ | --------------------------- | -------- | ----------------------------------------------------------------------------------- |
139
+ | `ELEVASIS_PLATFORM_KEY` | Yes | Your `sk_...` API key. Used for authentication and organization resolution. |
140
+ | `ELEVASIS_API_URL` | No | Override the API base URL. Useful for pointing at a staging environment. |
141
+ | `ELEVASIS_PLATFORM_KEY_DEV` | No | Key used instead when the request targets a local API. Falls back to the key above. |
128
142
 
129
143
  The CLI also accepts a `--api-url` flag on every command, which takes priority over `ELEVASIS_API_URL`.
130
144
 
145
+ **Which key a request uses is derived from the URL it is sent to**, not from `--prod` or `NODE_ENV` read separately. Both the authentication step and the bundle upload go through the same resolver, so pointing `--api-url` at production while `NODE_ENV=development` is set can no longer authenticate with one key and upload with the other.
146
+
131
147
  **API URL resolution order:**
132
148
 
133
149
  1. `--api-url` flag (highest priority)
@@ -288,4 +304,5 @@ Dashboard appears before Business in the primary sidebar. Business is a navigati
288
304
 
289
305
  - [Command Center](command-center.mdx) - Resource graph, relationships, node types, and post-deployment UI reference
290
306
  - [Execution Reference](execution-reference.mdx) - REST endpoints for executing resources, managing deployments, and React UI components for custom Run dialogs
291
- - [Platform Adapters](../platform-tools/adapters-platform.mdx) - `approval.create()` and all platform service adapters
307
+ - [Platform Adapters](../platform-tools/adapters-platform.mdx) - `approval.create()` and the full platform service adapter catalog
308
+ - [Common Errors](../troubleshooting.mdx#deploy-errors-elevasis-sdk-deploy) - Deploy failure catalog, warning meanings, and System readiness refusals
@@ -8,7 +8,7 @@ description: "Auto-generated catalog of all published @elevasis/sdk subpath expo
8
8
 
9
9
  | Import | Title | Group | Description |
10
10
  | --- | --- | --- | --- |
11
- | `@elevasis/sdk` | SDK | Getting Started | |
12
- | `@elevasis/sdk/worker` | Worker Runtime | Runtime | |
13
- | `@elevasis/sdk/test-utils` | Test Utils | Testing | |
14
- | `@elevasis/sdk/node` | Node Build Tooling | Tooling | |
11
+ | `@elevasis/sdk` | SDK | Getting Started | Default entry: defineWorkflow, defineStep, defineContract, contract-ref resolution, shared types, and workflow utilities. |
12
+ | `@elevasis/sdk/worker` | Worker Runtime | Runtime | worker_threads runtime plus the typed platform and integration adapters a step handler calls at execution time. |
13
+ | `@elevasis/sdk/test-utils` | Test Utils | Testing | Workflow test harness, resource registry helpers, and mock adapters for unit-testing definitions without the platform. |
14
+ | `@elevasis/sdk/node` | Node Build Tooling | Tooling | Node-only build-time codegen for knowledge nodes and bodies. Requires fs/path/process -- not browser-safe. |
@@ -36,6 +36,7 @@ The template ships these skills, all committed to version control:
36
36
  | Skill | Purpose |
37
37
  | ----------------- | ------------------------------------------------------------------------------------------------ |
38
38
  | `/client` | Client portfolio management -- list, resolve, inspect, and maintain client records |
39
+ | `/content` | Content pipeline operations -- list items, inspect, board view, review queue, distributions |
39
40
  | `/deploy` | Test, build, fix issues, then commit and push |
40
41
  | `/dsp` | Dispatch subagents in parallel for implementation tasks |
41
42
  | `/elevasis` | SDK operations -- check, deploy, execute, inspect, and debug resources |
@@ -77,11 +78,11 @@ The gate is **outgoing commits**, checked with `git rev-list --count @{u}..HEAD`
77
78
 
78
79
  ## The Ambient Vibe Layer
79
80
 
80
- External projects run an always-on natural-language intent classifier -- there is no `/vibe` command and no activation phrase. Every message is silently classified into one of seven intents (Capture, Query, Describe, Transition, Navigate, Codify, Toggle) before the agent responds. Codify and Toggle detect intent and delegate immediately to `/om`; the classifier never runs the organization-model ceremony itself. The full classifier definition and fixture tables ship with the SDK at `operations/node_modules/@elevasis/sdk/reference/rules/vibe.md`. Vibe is explicitly off inside the monorepo, which uses the task-class routing in `agent-start-here.md` instead.
81
+ External projects run an always-on natural-language intent classifier -- there is no `/vibe` command and no activation phrase. Every message is silently classified into one of eight intents (Capture, Query, Describe, Transition, Navigate, Codify, Toggle, Operate) before the agent responds. Codify and Toggle detect intent and delegate immediately to `/om`; Operate delegates to `/elevasis` (`elevasis-sdk describe` then a confirmed `exec`); the classifier never runs the organization-model ceremony or executes a deployed resource itself. The full classifier definition and fixture tables ship with the SDK at `operations/node_modules/@elevasis/sdk/reference/rules/vibe.md` and the per-intent detail at `operations/node_modules/@elevasis/sdk/reference/rules/vibe-intents.md`. Vibe is explicitly off inside the monorepo, which uses the task-class routing in `agent-start-here.md` instead.
81
82
 
82
83
  ## The Rules Layer
83
84
 
84
- `.claude/rules/` in the git-tracked template holds short pointer files with `paths:` frontmatter that Claude Code auto-loads for matching files. The authoritative rule bodies ship with the installed `@elevasis/sdk` package at `operations/node_modules/@elevasis/sdk/reference/rules/` and update whenever the SDK dependency is bumped. Rules include `agent-start-here.md` (always-loaded), `vibe.md` (always-loaded), `organization-os.md`, `deployment.md`, `error-handling.md`, `execution.md`, `frontend.md`, `observability.md`, `operations.md`, `organization-model.md`, `platform.md`, `shared-types.md`, `task-tracking.md`, `ui.md`, and `active-change-index.md` (which flags areas under active platform change).
85
+ `.claude/rules/` in the git-tracked template holds short pointer files with `paths:` frontmatter that Claude Code auto-loads for matching files. The authoritative rule bodies ship with the installed `@elevasis/sdk` package at `operations/node_modules/@elevasis/sdk/reference/rules/` and update whenever the SDK dependency is bumped. The bundle carries 19 rules: `agent-start-here.md` (always-loaded), `vibe.md` (always-loaded), `vibe-intents.md`, `agent-runtime.md`, `content.md`, `organization-os.md`, `deployment.md`, `error-handling.md`, `execution.md`, `frontend.md`, `observability.md`, `operations.md`, `organization-model.md`, `package-taxonomy.md`, `platform.md`, `shared-types.md`, `task-tracking.md`, `ui.md`, and `active-change-index.md` (which flags areas under active platform change). The template also ships a small number of project-authored, System-specific rules directly under `.claude/rules/` -- for example `crm.md` and `lead-gen.md` -- that are not part of the bundled set.
85
86
 
86
87
  ## Template Version Tracking
87
88
 
@@ -89,4 +90,4 @@ The scaffold's version marker is `templateVersion` in the project-root `.elevasi
89
90
 
90
91
  ---
91
92
 
92
- **Last Updated:** 2026-08-06
93
+ **Last Updated:** 2026-08-17
@@ -83,7 +83,7 @@ See [Tutorial System](tutorial-system.mdx) for the full lesson breakdown, track
83
83
 
84
84
  ## Documentation
85
85
 
86
- - [Project Structure](project-structure.mdx) - Directory-by-directory walkthrough of the scaffolded project
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
89