@elevasis/sdk 0.5.11 → 0.5.13

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 (33) hide show
  1. package/dist/cli.cjs +276 -298
  2. package/dist/index.d.ts +13 -256
  3. package/dist/index.js +10 -38
  4. package/dist/templates.js +193 -187
  5. package/dist/types/worker/adapters/index.d.ts +0 -1
  6. package/dist/worker/index.js +126 -75
  7. package/package.json +1 -1
  8. package/reference/_navigation.md +13 -57
  9. package/reference/concepts.mdx +203 -0
  10. package/reference/deployment/{command-center-ui.mdx → command-center.mdx} +229 -151
  11. package/reference/deployment/index.mdx +158 -153
  12. package/reference/framework/agent.mdx +168 -151
  13. package/reference/framework/index.mdx +182 -103
  14. package/reference/framework/memory.mdx +347 -347
  15. package/reference/framework/project-structure.mdx +3 -13
  16. package/reference/framework/tutorial-system.mdx +253 -0
  17. package/reference/{getting-started/index.mdx → getting-started.mdx} +6 -7
  18. package/reference/index.mdx +117 -114
  19. package/reference/platform-tools/adapters.mdx +175 -32
  20. package/reference/platform-tools/index.mdx +354 -195
  21. package/reference/resources/index.mdx +5 -0
  22. package/reference/{roadmap/index.mdx → roadmap.mdx} +1 -1
  23. package/reference/{runtime/index.mdx → runtime.mdx} +196 -141
  24. package/dist/types/worker/adapters/trello.d.ts +0 -14
  25. package/reference/concepts/index.mdx +0 -203
  26. package/reference/deployment/command-view.mdx +0 -154
  27. package/reference/framework/documentation.mdx +0 -92
  28. package/reference/platform-tools/examples.mdx +0 -170
  29. package/reference/runtime/limits.mdx +0 -75
  30. package/reference/security/credentials.mdx +0 -141
  31. /package/reference/{cli/index.mdx → cli.mdx} +0 -0
  32. /package/reference/{developer → framework}/interaction-guidance.mdx +0 -0
  33. /package/reference/{troubleshooting/common-errors.mdx → troubleshooting.mdx} +0 -0
package/dist/cli.cjs CHANGED
@@ -40164,18 +40164,6 @@ var DOMAIN_MAP = {
40164
40164
  [DOMAINS.DIAGNOSTIC]: DIAGNOSTIC_DOMAIN
40165
40165
  };
40166
40166
 
40167
- // ../core/src/execution/core/server/environment.ts
40168
- function detectEnvironment() {
40169
- const env2 = process.env.NODE_ENV || "development";
40170
- if (env2 === "production") return "production";
40171
- if (env2 === "staging") return "staging";
40172
- return "development";
40173
- }
40174
- function canExecuteResource(resource, environment) {
40175
- const env2 = environment || detectEnvironment();
40176
- return env2 === "production" ? resource.status === "prod" : true;
40177
- }
40178
-
40179
40167
  // ../core/src/execution/engine/base/errors.ts
40180
40168
  var ExecutionError = class extends Error {
40181
40169
  /**
@@ -43293,9 +43281,8 @@ var ResourceRegistry = class {
43293
43281
  * List all resources for an organization
43294
43282
  * Returns ResourceDefinition metadata (not full definitions)
43295
43283
  *
43296
- * Environment filtering (automatic):
43297
- * - Development: Returns all resources (dev + prod)
43298
- * - Production: Returns only prod resources (filters out dev)
43284
+ * All resources are returned regardless of server environment.
43285
+ * Pass an explicit `environment` filter to get only 'dev' or 'prod' resources.
43299
43286
  */
43300
43287
  listResourcesForOrganization(organizationName, environment) {
43301
43288
  const orgResources = this.registry[organizationName];
@@ -43308,7 +43295,6 @@ var ResourceRegistry = class {
43308
43295
  environment
43309
43296
  };
43310
43297
  }
43311
- const currentEnv = detectEnvironment();
43312
43298
  const workflows = (orgResources.workflows || []).map((def) => ({
43313
43299
  resourceId: def.config.resourceId,
43314
43300
  name: def.config.name,
@@ -43316,13 +43302,9 @@ var ResourceRegistry = class {
43316
43302
  version: def.config.version,
43317
43303
  type: def.config.type,
43318
43304
  status: def.config.status,
43305
+ domains: def.config.domains,
43319
43306
  origin: this.remoteResources.has(`${organizationName}/${def.config.resourceId}`) ? "remote" : "local"
43320
- })).filter((resource) => {
43321
- if (environment) {
43322
- return resource.status === environment;
43323
- }
43324
- return canExecuteResource(resource, currentEnv);
43325
- });
43307
+ })).filter((resource) => !environment || resource.status === environment);
43326
43308
  const agents = (orgResources.agents || []).map((def) => ({
43327
43309
  resourceId: def.config.resourceId,
43328
43310
  name: def.config.name,
@@ -43330,20 +43312,16 @@ var ResourceRegistry = class {
43330
43312
  version: def.config.version,
43331
43313
  type: def.config.type,
43332
43314
  status: def.config.status,
43315
+ domains: def.config.domains,
43333
43316
  sessionCapable: def.config.sessionCapable ?? false,
43334
43317
  origin: this.remoteResources.has(`${organizationName}/${def.config.resourceId}`) ? "remote" : "local"
43335
- })).filter((resource) => {
43336
- if (environment) {
43337
- return resource.status === environment;
43338
- }
43339
- return canExecuteResource(resource, currentEnv);
43340
- });
43318
+ })).filter((resource) => !environment || resource.status === environment);
43341
43319
  return {
43342
43320
  workflows,
43343
43321
  agents,
43344
43322
  total: workflows.length + agents.length,
43345
43323
  organizationName,
43346
- environment: environment || (currentEnv === "production" ? "prod" : void 0)
43324
+ environment
43347
43325
  };
43348
43326
  }
43349
43327
  /**
@@ -43381,9 +43359,7 @@ var ResourceRegistry = class {
43381
43359
  const seen = /* @__PURE__ */ new Set();
43382
43360
  for (const id of incomingIds) {
43383
43361
  if (seen.has(id)) {
43384
- throw new Error(
43385
- `Duplicate resource ID '${id}' in deployment. Each resource must have a unique ID.`
43386
- );
43362
+ throw new Error(`Duplicate resource ID '${id}' in deployment. Each resource must have a unique ID.`);
43387
43363
  }
43388
43364
  seen.add(id);
43389
43365
  }
@@ -43442,12 +43418,8 @@ var ResourceRegistry = class {
43442
43418
  if (remoteIds.size === 0) return;
43443
43419
  const orgResources = this.registry[orgName];
43444
43420
  if (!orgResources) return;
43445
- orgResources.workflows = (orgResources.workflows ?? []).filter(
43446
- (w) => !remoteIds.has(w.config.resourceId)
43447
- );
43448
- orgResources.agents = (orgResources.agents ?? []).filter(
43449
- (a) => !remoteIds.has(a.config.resourceId)
43450
- );
43421
+ orgResources.workflows = (orgResources.workflows ?? []).filter((w) => !remoteIds.has(w.config.resourceId));
43422
+ orgResources.agents = (orgResources.agents ?? []).filter((a) => !remoteIds.has(a.config.resourceId));
43451
43423
  if (orgResources.relationships) {
43452
43424
  for (const id of remoteIds) {
43453
43425
  delete orgResources.relationships[id];
@@ -43811,7 +43783,7 @@ async function apiDelete(endpoint, apiUrl = resolveApiUrl()) {
43811
43783
  // package.json
43812
43784
  var package_default = {
43813
43785
  name: "@elevasis/sdk",
43814
- version: "0.5.11",
43786
+ version: "0.5.13",
43815
43787
  description: "SDK for building Elevasis organization resources",
43816
43788
  type: "module",
43817
43789
  bin: {
@@ -45103,13 +45075,13 @@ var import_path3 = require("path");
45103
45075
  var import_promises2 = require("fs/promises");
45104
45076
 
45105
45077
  // src/cli/commands/templates/core/workspace.ts
45106
- var TEMPLATE_VERSION = 24;
45078
+ var TEMPLATE_VERSION = 27;
45107
45079
  function configTemplate() {
45108
45080
  return `import type { ElevasConfig } from '@elevasis/sdk'
45109
45081
 
45110
45082
  export default {
45111
45083
  templateVersion: ${TEMPLATE_VERSION},
45112
- // defaultStatus: 'dev', // Default status for new resources ('dev' | 'production')
45084
+ // defaultStatus: 'dev', // Default status for new resources ('dev' | 'prod')
45113
45085
  // dev: { port: 5170 }, // Local API port (internal development only)
45114
45086
  } satisfies ElevasConfig
45115
45087
  `;
@@ -45158,10 +45130,6 @@ function envTemplate() {
45158
45130
  return `ELEVASIS_PLATFORM_KEY=
45159
45131
  `;
45160
45132
  }
45161
- function envExampleTemplate() {
45162
- return `ELEVASIS_PLATFORM_KEY=sk_your_key_here
45163
- `;
45164
- }
45165
45133
  function npmrcTemplate() {
45166
45134
  return `auto-install-peers = true
45167
45135
  `;
@@ -45199,7 +45167,7 @@ An [Elevasis](https://elevasis.io) workspace built with the \`@elevasis/sdk\`.
45199
45167
  pnpm install
45200
45168
  \`\`\`
45201
45169
 
45202
- Copy \`.env.example\` to \`.env\` and add your API key:
45170
+ Add your API key to \`.env\`:
45203
45171
 
45204
45172
  \`\`\`
45205
45173
  ELEVASIS_PLATFORM_KEY=sk_...
@@ -45208,12 +45176,12 @@ ELEVASIS_PLATFORM_KEY=sk_...
45208
45176
  ## Development
45209
45177
 
45210
45178
  \`\`\`bash
45211
- elevasis-sdk check # Validate resource definitions
45212
- elevasis-sdk deploy # Bundle and deploy to platform
45213
- elevasis-sdk exec <resourceId> --input '...' # Execute a resource
45214
- elevasis-sdk resources # List deployed resources
45215
- elevasis-sdk describe <resourceId> # Show resource definition + schemas
45216
- elevasis-sdk executions <resourceId> # View execution history
45179
+ pnpm run check # Validate resource definitions
45180
+ pnpm run deploy # Bundle and deploy to platform
45181
+ pnpm exec elevasis-sdk exec <resourceId> --input '...' # Execute a resource
45182
+ pnpm exec elevasis-sdk resources # List deployed resources
45183
+ pnpm exec elevasis-sdk describe <resourceId> # Show resource definition + schemas
45184
+ pnpm exec elevasis-sdk executions <resourceId> # View execution history
45217
45185
  \`\`\`
45218
45186
 
45219
45187
  ## Project Structure
@@ -45234,7 +45202,7 @@ A multi-step workflow that queries platform status and compiles a natural langua
45234
45202
  summary using an LLM. Demonstrates platform API usage with the \`llm\` typed adapter and \`platform.call()\`.
45235
45203
 
45236
45204
  \`\`\`bash
45237
- elevasis-sdk exec platform-status --input '{"timeRange": "24h"}'
45205
+ pnpm exec elevasis-sdk exec platform-status --input '{"timeRange": "24h"}'
45238
45206
  \`\`\`
45239
45207
 
45240
45208
  **Input:** \`{ "timeRange": "1h" | "24h" | "7d" }\`
@@ -45246,7 +45214,7 @@ A simple workflow that echoes the input message back. Use it as a starter patter
45246
45214
  for new workflows:
45247
45215
 
45248
45216
  \`\`\`bash
45249
- elevasis-sdk exec echo --input '{"message": "hello"}'
45217
+ pnpm exec elevasis-sdk exec echo --input '{"message": "hello"}'
45250
45218
  \`\`\`
45251
45219
 
45252
45220
  **Input:** \`{ "message": string }\`
@@ -45256,26 +45224,30 @@ elevasis-sdk exec echo --input '{"message": "hello"}'
45256
45224
 
45257
45225
  // src/cli/commands/templates/core/claude.ts
45258
45226
  function claudeSettingsTemplate() {
45259
- return JSON.stringify({
45260
- autoCompact: false,
45261
- statusLine: {
45262
- type: "command",
45263
- command: "node .claude/scripts/statusline-command.js"
45227
+ return JSON.stringify(
45228
+ {
45229
+ autoCompact: false,
45230
+ statusLine: {
45231
+ type: "command",
45232
+ command: "node .claude/scripts/statusline-command.js"
45233
+ },
45234
+ hooks: {
45235
+ PreToolUse: [
45236
+ {
45237
+ matcher: "Write|Edit|MultiEdit|Bash",
45238
+ hooks: [
45239
+ {
45240
+ type: "command",
45241
+ command: "node .claude/hooks/enforce-sdk-boundary.mjs"
45242
+ }
45243
+ ]
45244
+ }
45245
+ ]
45246
+ }
45264
45247
  },
45265
- hooks: {
45266
- PreToolUse: [
45267
- {
45268
- matcher: "Write|Edit|MultiEdit|Bash",
45269
- hooks: [
45270
- {
45271
- type: "command",
45272
- command: "node .claude/hooks/enforce-sdk-boundary.mjs"
45273
- }
45274
- ]
45275
- }
45276
- ]
45277
- }
45278
- }, null, 2) + "\n";
45248
+ null,
45249
+ 2
45250
+ ) + "\n";
45279
45251
  }
45280
45252
  function claudeStatuslineScriptTemplate() {
45281
45253
  return `#!/usr/bin/env node
@@ -45499,13 +45471,18 @@ All \`reference/\` paths resolve to \`node_modules/@elevasis/sdk/reference/\`.
45499
45471
 
45500
45472
  ## Elevasis CLI
45501
45473
 
45502
- **MANDATORY:** Use the \`elevasis-sdk\` CLI for all execution/platform operations -- never \`npx\`, \`curl\`, or any other tool.
45474
+ **MANDATORY:** Use the \`elevasis-sdk\` CLI for all execution/platform operations -- never \`curl\` or any other tool.
45475
+
45476
+ Use pnpm scripts for check and deploy (they resolve the local binary automatically):
45477
+
45478
+ - \`pnpm run check\` -- validate resource definitions without deploying
45479
+ - \`pnpm run deploy\` -- deploy to the platform
45503
45480
 
45504
- - \`elevasis-sdk exec <resource-id> --input '{...}'\` -- run a resource synchronously
45505
- - \`elevasis-sdk exec <resource-id> --input '{...}' --async\` -- run async, returns execution ID
45506
- - \`elevasis-sdk execution <resource-id> <execution-id>\` -- inspect execution detail
45507
- - \`elevasis-sdk check\` -- validate resource definitions without deploying
45508
- - \`elevasis-sdk deploy\` -- deploy to the platform
45481
+ Use \`pnpm exec elevasis-sdk\` for runtime commands (resolves the locally installed binary):
45482
+
45483
+ - \`pnpm exec elevasis-sdk exec <resource-id> --input '{...}'\` -- run a resource synchronously
45484
+ - \`pnpm exec elevasis-sdk exec <resource-id> --input '{...}' --async\` -- run async, returns execution ID
45485
+ - \`pnpm exec elevasis-sdk execution <resource-id> <execution-id>\` -- inspect execution detail
45509
45486
 
45510
45487
  Organization is derived from your API key -- no org prefix needed in the resource ID.
45511
45488
  For full CLI reference: \`reference/cli/index.mdx\`
@@ -45533,7 +45510,8 @@ When an error occurs:
45533
45510
  - Import from \`@elevasis/sdk-ui\`, never from \`@elevasis/sdk\` or \`@repo/ui\`
45534
45511
  - Dev server runs on port 5100: \`cd ui && pnpm dev\`
45535
45512
  - Set \`VITE_WORKOS_CLIENT_ID\` in \`ui/.env\` before running
45536
- - \`ElevasisProvider\` is pre-configured in \`ui/src/App.tsx\` (oauth mode, redirectUri \`http://localhost:5100/auth-redirect\`, apiUrl \`http://localhost:5170\`)
45513
+ - \`ElevasisCoreProvider\` (headless, no Mantine dependency) is pre-configured in \`ui/src/App.tsx\` with \`auth={{ mode: 'oauth', clientId, redirectUri }}\`, \`apiUrl="http://localhost:5170"\`, and \`theme={{ colorScheme: 'dark', preset: 'default' }}\`
45514
+ - To use pre-built Mantine components from \`@elevasis/sdk-ui\`, switch to \`ElevasisUIProvider\` and install \`@mantine/core\` and \`@mantine/hooks\`
45537
45515
  - OAuth redirect is handled by the \`AuthRedirect\` component at \`/auth-redirect\` -- it uses \`useAuthContext()\` from \`@elevasis/sdk-ui/auth\` and navigates home once \`user\` is set
45538
45516
  - API must be running on port 5170 for the UI to work (\`pnpm --filter api dev\` from the platform monorepo)` : ""}
45539
45517
 
@@ -45657,32 +45635,34 @@ Example (first time, no progress):
45657
45635
  Elevasis Tutorial
45658
45636
  ==================
45659
45637
 
45660
- ORCHESTRATION CONCEPTS 0/7
45661
- 1 Welcome & Orientation [ ]
45662
- 2 Your First Custom Workflow [ ]
45663
- 3 Understanding Data (Schemas) [ ]
45664
- 4 Using Platform Tools [ ]
45665
- 5 Multi-Step Workflows [ ]
45666
- 6 Decision Points [ ]
45667
- 7 Going to Production [ ]
45668
-
45669
- EXAMPLES & ADVANCED MODULES 0/9
45670
- 8 Human-in-the-Loop [ ]
45671
- 9 Task Scheduling [ ]
45672
- 10 Notification System [ ]
45673
- 11 Real-World Integrations [ ]
45674
- 12 Error Handling Mastery [ ]
45675
- 13 Advanced Workflows [ ]
45676
- 14 Resource Composition [ ]
45677
- 15 LLM Integration [ ]
45678
- 16 AI Agents [ ]
45679
-
45680
- META-FRAMEWORK 0/5
45681
- 17 The Agent Framework [ ]
45682
- 18 The /meta Command [ ]
45683
- 19 /work and /docs [ ]
45684
- 20 Rules, Memory, and Customization [ ]
45685
- 21 Template Lifecycle [ ]
45638
+ INTRODUCTION 0/4
45639
+ 1 Welcome & Orientation [ ]
45640
+ 2 How This Workspace Works [ ]
45641
+ 3 The /meta Command [ ]
45642
+ 4 /work and /docs [ ]
45643
+
45644
+ CORE CONCEPTS 0/6
45645
+ 5 Your First Custom Workflow [ ]
45646
+ 6 Understanding Data (Schemas) [ ]
45647
+ 7 Using Platform Tools [ ]
45648
+ 8 Multi-Step Workflows [ ]
45649
+ 9 Decision Points [ ]
45650
+ 10 Going to Production [ ]
45651
+
45652
+ ADVANCED MODULES 0/9
45653
+ 11 Human-in-the-Loop [ ]
45654
+ 12 Task Scheduling [ ]
45655
+ 13 Notification System [ ]
45656
+ 14 Real-World Integrations [ ]
45657
+ 15 Error Handling Mastery [ ]
45658
+ 16 Advanced Workflows [ ]
45659
+ 17 Resource Composition [ ]
45660
+ 18 LLM Integration [ ]
45661
+ 19 AI Agents [ ]
45662
+
45663
+ ADVANCED WORKSPACE 0/2
45664
+ 20 Rules, Memory, and Customization [ ]
45665
+ 21 Template Lifecycle [ ]
45686
45666
 
45687
45667
  Pick a number to start.
45688
45668
  \`\`\`
@@ -45695,7 +45675,7 @@ indicators from completed/current state. \`"status"\` -> show the same table.
45695
45675
  1. Read \`.claude/memory/tutorial-progress.md\`
45696
45676
  2. Show the full menu table (## Menu) with progress filled in
45697
45677
  3. User picks a number -> start or resume that lesson or module directly
45698
- 4. After completion: mark done in progress file, show updated menu table
45678
+ 4. After user confirms readiness: mark done in progress file, show updated menu table
45699
45679
  5. All 21 items complete -> congratulate, suggest exploring docs/ or /work
45700
45680
 
45701
45681
  ## Lesson Flow
@@ -45705,12 +45685,12 @@ Each lesson follows this flow:
45705
45685
  2. Explain the concept (read docs per skill level, adapt to user)
45706
45686
  3. Guide user to build or modify something (agent writes all code for automation: none)
45707
45687
  4. Verify it works (CLI primary for all levels; Command Center for visual review -- Command View, Execution Logs)
45708
- 5. Celebrate success, record observations in \`.claude/memory/tutorial-progress.md\`
45709
- 6. Ask: "Ready for the next lesson, or want to practice more?"
45688
+ 5. Celebrate success and ask: "Any questions, or ready to continue?"
45689
+ 6. Once the user confirms, record observations in \`.claude/memory/tutorial-progress.md\`
45710
45690
 
45711
45691
  ## Lessons
45712
45692
 
45713
- **Lesson 1: Welcome & Orientation**
45693
+ **Item 1: Welcome & Orientation**
45714
45694
 
45715
45695
  When automation is none:
45716
45696
  Skip the file tour. Start with what Elevasis does for their business -- use analogies
@@ -45730,7 +45710,108 @@ main pages: Command View (resource graph), Execution Logs.
45730
45710
  Point out the echo workflow node in Command View.
45731
45711
  Observation focus: cloud deployment model, UI navigation comfort.
45732
45712
 
45733
- **Lesson 2: Your First Custom Workflow**
45713
+ **Item 2: How This Workspace Works**
45714
+
45715
+ When automation is none:
45716
+ "This workspace comes with a built-in assistant that knows your project, your tools,
45717
+ and your goals. Let me show you how it's set up." Open CLAUDE.md and explain in
45718
+ plain terms: it's the agent's instruction sheet. Point out the commands in the
45719
+ Commands table. Show /meta, /tutorial, /work. Explain the creds skill as
45720
+ "the assistant automatically helps when you mention API keys." Tour the memory folder
45721
+ at a high level -- "this is where the agent stores what it learns about your project."
45722
+ Verify: Ask the user a question about their business goal and show how the agent
45723
+ references their profile in the answer.
45724
+ Observation focus: agent-as-assistant concept, CLAUDE.md as instruction sheet.
45725
+
45726
+ When automation is low-code:
45727
+ Read CLAUDE.md and walk through each section. Explain: what the agent reads on
45728
+ session start, how the navigation table works, what the Skills section means.
45729
+ Explain the four commands briefly. Show that the agent has memory: open
45730
+ \`.claude/memory/profile/skills.md\` and show their own profile -- "every session,
45731
+ the agent reads this and adapts." Explain the initialized flag.
45732
+ Verify: Run /meta to see project status.
45733
+ Observation focus: memory system concept, session initialization flow.
45734
+
45735
+ When automation is custom:
45736
+ Read CLAUDE.md in full. Explain the session initialization sequence: CLAUDE.md ->
45737
+ navigation table -> memory files -> context loading. Walk through: Commands section
45738
+ (4 commands + creds skill), Rules section (auto-loaded based on file paths), Skills
45739
+ section (auto-triggered by content patterns). Point out the initialized flag and
45740
+ explain how /meta init set it.
45741
+ Verify: Run /meta to see project status; observe which fields it reports.
45742
+ Observation focus: initialization model, command-vs-rule-vs-skill distinction.
45743
+
45744
+ **Item 3: The /meta Command**
45745
+
45746
+ When automation is none:
45747
+ "Think of /meta as your project dashboard -- it shows what's healthy and what needs
45748
+ attention." Run /meta (no arguments) and narrate the output in plain language: what
45749
+ each field means. Explain /meta fix as "the agent tidies up and applies updates."
45750
+ Explain /meta deploy as "the agent publishes your changes in one step." Briefly note
45751
+ /meta health shows what happened when something goes wrong.
45752
+ Verify: Run /meta (no arguments). Narrate the output together.
45753
+ Observation focus: project lifecycle concept, dashboard reading.
45754
+
45755
+ When automation is low-code:
45756
+ Show all /meta operations with their purpose. Map to familiar concepts: /meta fix is
45757
+ like "repair this Zap" in Zapier; /meta deploy is a one-command publish pipeline.
45758
+ Walk through the /meta (no-args) output: template version (SDK template your workspace
45759
+ uses), SDK version (installed package), profile summary, drift check.
45760
+ Verify: Run /meta and interpret each field together.
45761
+ Observation focus: deploy pipeline understanding, version tracking.
45762
+
45763
+ When automation is custom:
45764
+ Read \`.claude/commands/meta.md\`. Walk through each operation: init (first-run setup
45765
+ with assessment), (no-args) (status dashboard), fix (drift repair + SDK upgrade +
45766
+ rules health), deploy (7-step pipeline: check, typecheck, docs, git, deploy,
45767
+ project-map, verify), health (runtime diagnostics). Explain the merge strategy for
45768
+ CLAUDE.md and commands. Note the template access model: templates read from
45769
+ @elevasis/sdk/templates subpath.
45770
+ Verify: Run /meta to see project status. Identify what a version mismatch looks like.
45771
+ Observation focus: full lifecycle coverage, pipeline internals.
45772
+
45773
+ **Item 4: /work and /docs**
45774
+
45775
+ When automation is none:
45776
+ "You can ask the assistant to track work across conversations. When you start something
45777
+ complex, use /work create to save your place. Next session, /work resume picks up where
45778
+ you left off." Walk through the concept without deep command details. Then introduce /docs:
45779
+ "When a task is finished, /work complete moves it to docs/ permanently. After that, /docs
45780
+ helps you find and read what's there -- like a notebook for your project." Run /docs (no
45781
+ args) to show the docs/ overview together.
45782
+ Verify: Create a task with \`/work create "practice task"\`, then run /work to see it listed.
45783
+ Then run /docs to see the docs/ structure.
45784
+ Observation focus: persistence concept, cross-session continuity, docs as permanent notes.
45785
+
45786
+ When automation is low-code:
45787
+ Show /work operations: create (task doc with frontmatter + sections), save (updates
45788
+ Progress + Resume Context), resume (loads context for next session), complete (moves
45789
+ to permanent docs/).
45790
+ Then introduce /docs: "/docs is for permanent knowledge -- things that don't expire. Use
45791
+ /docs create to document a workflow or integration. Use /docs verify to check if your
45792
+ docs match the current code." Explain the boundary: /work manages in-progress/, /docs
45793
+ manages permanent docs/.
45794
+ Verify: Create a task with \`/work create "practice task"\`, run /work save, inspect the
45795
+ file. Then run /docs to browse docs/.
45796
+ Observation focus: task tracking workflow, /work vs /docs separation.
45797
+
45798
+ When automation is custom:
45799
+ Read \`.claude/commands/work.md\`. Full /work coverage:
45800
+ /work create (kebab-case filename, frontmatter with status, Objective/Plan/Progress/
45801
+ Resume Context sections), /work save (Progress + Resume Context update), /work resume
45802
+ (multiple-task disambiguation), /work complete (moves to final location).
45803
+ Then read \`.claude/commands/docs.md\`. Cover /docs operations:
45804
+ /docs (default): browse permanent docs/, categorized with read-only auto-generated files
45805
+ separate; /docs create: interview-driven, resource-aware doc creation from src/ code
45806
+ analysis; /docs verify: cross-references resource IDs, schema fields, platform tools in
45807
+ docs against src/ -- standalone analog of /meta fix step 5.
45808
+ Explain the relationship: /work owns docs/in-progress/ (task lifecycle), /work complete
45809
+ moves docs to permanent location, /docs browses and verifies what's there.
45810
+ Verify: Create a task doc, save progress, run /work complete to move it. Then run /docs
45811
+ to see it in the permanent docs/ listing.
45812
+ Observation focus: task doc anatomy, /work-to-/docs handoff, docs verification as standalone tool.
45813
+
45814
+ **Item 5: Your First Custom Workflow**
45734
45815
 
45735
45816
  When automation is none:
45736
45817
  Frame the workflow as "a recipe." Use plain language: "settings" not "config",
@@ -45747,7 +45828,7 @@ Runner in the Command Center, find the echo workflow, fill out the form, and
45747
45828
  run it from the UI. Compare the result to the CLI output.
45748
45829
  Observation focus: deployment-to-execution loop, TypeScript syntax comfort.
45749
45830
 
45750
- **Lesson 3: Understanding Data (Schemas)**
45831
+ **Item 6: Understanding Data (Schemas)**
45751
45832
 
45752
45833
  When automation is none:
45753
45834
  Frame as "What information does your automation need?" Describe types in plain English:
@@ -45770,7 +45851,7 @@ run with \`elevasis-sdk exec --input '{...}'\` to verify the schema and inspect
45770
45851
  the execution output.
45771
45852
  Observation focus: schema-to-input mapping, optional fields, types.
45772
45853
 
45773
- **Lesson 4: Using Platform Tools**
45854
+ **Item 7: Using Platform Tools**
45774
45855
 
45775
45856
  When automation is none:
45776
45857
  Frame as "Connecting your automation to a service you already use." Pick ONE
@@ -45792,7 +45873,7 @@ If using the approval tool, note that pending requests surface in Command Queue.
45792
45873
  See reference/platform-tools/adapters.mdx for full API.
45793
45874
  Observation focus: credential setup (CLI + UI), async/await.
45794
45875
 
45795
- **Lesson 5: Multi-Step Workflows**
45876
+ **Item 8: Multi-Step Workflows**
45796
45877
 
45797
45878
  When automation is none:
45798
45879
  Frame as "Step 1 passes its result to Step 2, like a relay race." Command View is
@@ -45808,7 +45889,7 @@ relationship edges between resources. Explain how declared relationships map
45808
45889
  to the visual graph.
45809
45890
  Observation focus: data flow reasoning, relationship visualization.
45810
45891
 
45811
- **Lesson 6: Decision Points**
45892
+ **Item 9: Decision Points**
45812
45893
 
45813
45894
  When automation is none:
45814
45895
  Frame as "If the customer is VIP, do this -- otherwise, do that." No StepType.CONDITIONAL
@@ -45824,7 +45905,7 @@ Execution Logs in the Command Center, filter by the resource, and show how
45824
45905
  each path appears in the log detail (step trace, input/output).
45825
45906
  Observation focus: branching logic reasoning, execution log interpretation.
45826
45907
 
45827
- **Lesson 7: Going to Production**
45908
+ **Item 10: Going to Production**
45828
45909
 
45829
45910
  When automation is none:
45830
45911
  Frame as "draft vs live" not "dev vs production." Error handling: "when something
@@ -45843,7 +45924,7 @@ Observation focus: readiness for independent operation (CLI + UI).
45843
45924
 
45844
45925
  ## Module Menu
45845
45926
 
45846
- Module order (items 8-16 in the main menu): hitl, schedules, notifications,
45927
+ Module order (items 11-19 in the main menu): hitl, schedules, notifications,
45847
45928
  integrations, error-handling, workflows, composition, llm, agents.
45848
45929
 
45849
45930
  After completing a module, show the updated full menu table (## Menu).
@@ -45928,114 +46009,14 @@ Compare agent vs workflow for a task.
45928
46009
  Key concepts: agent definition, tool registration, LLM tool calling, execution trace.
45929
46010
  Verify: Run agent with \`elevasis-sdk exec\`, review tool call trace in Execution Logs.
45930
46011
 
45931
- ## Meta-Framework Track
45932
-
45933
- The Meta-Framework track teaches you how the Claude Code workspace works -- the commands,
45934
- rules, memory system, and customization model. It is independent of the core path and
45935
- can be taken in any order.
46012
+ ## Advanced Workspace Track
45936
46013
 
45937
- **MF1: The Agent Framework -- How This Workspace Works**
46014
+ The Advanced Workspace track teaches power-user workspace customization and maintenance --
46015
+ rules, memory, and the template lifecycle. Independent of the core path; can be taken at any time.
45938
46016
 
45939
- When automation is none:
45940
- "This workspace comes with a built-in assistant that knows your project, your tools,
45941
- and your goals. Let me show you how it's set up." Open CLAUDE.md and explain in
45942
- plain terms: it's the agent's instruction sheet. Point out the commands in the
45943
- Commands table. Show /meta, /tutorial, /work. Explain the creds skill as
45944
- "the assistant automatically helps when you mention API keys." Tour the memory folder
45945
- at a high level -- "this is where the agent stores what it learns about your project."
45946
- Verify: Ask the user a question about their business goal and show how the agent
45947
- references their profile in the answer.
45948
- Observation focus: agent-as-assistant concept, CLAUDE.md as instruction sheet.
45949
-
45950
- When automation is low-code:
45951
- Read CLAUDE.md and walk through each section. Explain: what the agent reads on
45952
- session start, how the navigation table works, what the Skills section means.
45953
- Explain the four commands briefly. Show that the agent has memory: open
45954
- \`.claude/memory/profile/skills.md\` and show their own profile -- "every session,
45955
- the agent reads this and adapts." Explain the initialized flag.
45956
- Verify: Run /meta to see project status.
45957
- Observation focus: memory system concept, session initialization flow.
45958
-
45959
- When automation is custom:
45960
- Read CLAUDE.md in full. Explain the session initialization sequence: CLAUDE.md ->
45961
- navigation table -> memory files -> context loading. Walk through: Commands section
45962
- (4 commands + creds skill), Rules section (auto-loaded based on file paths), Skills
45963
- section (auto-triggered by content patterns). Point out the initialized flag and
45964
- explain how /meta init set it.
45965
- Verify: Run /meta to see project status; observe which fields it reports.
45966
- Observation focus: initialization model, command-vs-rule-vs-skill distinction.
45967
-
45968
- **MF2: The /meta Command -- Project Lifecycle**
45969
-
45970
- When automation is none:
45971
- "Think of /meta as your project dashboard -- it shows what's healthy and what needs
45972
- attention." Run /meta (no arguments) and narrate the output in plain language: what
45973
- each field means. Explain /meta fix as "the agent tidies up and applies updates."
45974
- Explain /meta deploy as "the agent publishes your changes in one step." Briefly note
45975
- /meta health shows what happened when something goes wrong.
45976
- Verify: Run /meta (no arguments). Narrate the output together.
45977
- Observation focus: project lifecycle concept, dashboard reading.
45978
-
45979
- When automation is low-code:
45980
- Show all /meta operations with their purpose. Map to familiar concepts: /meta fix is
45981
- like "repair this Zap" in Zapier; /meta deploy is a one-command publish pipeline.
45982
- Walk through the /meta (no-args) output: template version (SDK template your workspace
45983
- uses), SDK version (installed package), profile summary, drift check.
45984
- Verify: Run /meta and interpret each field together.
45985
- Observation focus: deploy pipeline understanding, version tracking.
45986
-
45987
- When automation is custom:
45988
- Read \`.claude/commands/meta.md\`. Walk through each operation: init (first-run setup
45989
- with assessment), (no-args) (status dashboard), fix (drift repair + SDK upgrade +
45990
- rules health), deploy (7-step pipeline: check, typecheck, docs, git, deploy,
45991
- project-map, verify), health (runtime diagnostics). Explain the merge strategy for
45992
- CLAUDE.md and commands. Note the template access model: templates read from
45993
- @elevasis/sdk/templates subpath.
45994
- Verify: Run /meta to see project status. Identify what a version mismatch looks like.
45995
- Observation focus: full lifecycle coverage, pipeline internals.
45996
-
45997
- **MF3: /work and /docs -- Task and Documentation Lifecycle**
45998
-
45999
- When automation is none:
46000
- "You can ask the assistant to track work across conversations. When you start something
46001
- complex, use /work create to save your place. Next session, /work resume picks up where
46002
- you left off." Walk through the concept without deep command details. Then introduce /docs:
46003
- "When a task is finished, /work complete moves it to docs/ permanently. After that, /docs
46004
- helps you find and read what's there -- like a notebook for your project." Run /docs (no
46005
- args) to show the docs/ overview together.
46006
- Verify: Create a task with \`/work create "practice task"\`, then run /work to see it listed.
46007
- Then run /docs to see the docs/ structure.
46008
- Observation focus: persistence concept, cross-session continuity, docs as permanent notes.
46009
-
46010
- When automation is low-code:
46011
- Show /work operations: create (task doc with frontmatter + sections), save (updates
46012
- Progress + Resume Context), resume (loads context for next session), complete (moves
46013
- to permanent docs/).
46014
- Then introduce /docs: "/docs is for permanent knowledge -- things that don't expire. Use
46015
- /docs create to document a workflow or integration. Use /docs verify to check if your
46016
- docs match the current code." Explain the boundary: /work manages in-progress/, /docs
46017
- manages permanent docs/.
46018
- Verify: Create a task with \`/work create "practice task"\`, run /work save, inspect the
46019
- file. Then run /docs to browse docs/.
46020
- Observation focus: task tracking workflow, /work vs /docs separation.
46021
-
46022
- When automation is custom:
46023
- Read \`.claude/commands/work.md\`. Full /work coverage:
46024
- /work create (kebab-case filename, frontmatter with status, Objective/Plan/Progress/
46025
- Resume Context sections), /work save (Progress + Resume Context update), /work resume
46026
- (multiple-task disambiguation), /work complete (moves to final location).
46027
- Then read \`.claude/commands/docs.md\`. Cover /docs operations:
46028
- /docs (default): browse permanent docs/, categorized with read-only auto-generated files
46029
- separate; /docs create: interview-driven, resource-aware doc creation from src/ code
46030
- analysis; /docs verify: cross-references resource IDs, schema fields, platform tools in
46031
- docs against src/ -- standalone analog of /meta fix step 5.
46032
- Explain the relationship: /work owns docs/in-progress/ (task lifecycle), /work complete
46033
- moves docs to permanent location, /docs browses and verifies what's there.
46034
- Verify: Create a task doc, save progress, run /work complete to move it. Then run /docs
46035
- to see it in the permanent docs/ listing.
46036
- Observation focus: task doc anatomy, /work-to-/docs handoff, docs verification as standalone tool.
46017
+ Each item follows the same flow as core lessons: announce, explain per skill level, verify, record observations.
46037
46018
 
46038
- **MF4: Rules, Memory, and Customization**
46019
+ **Item 20: Rules, Memory, and Customization**
46039
46020
 
46040
46021
  When automation is none:
46041
46022
  "The assistant has a set of reminders specific to your project. Over time, when it
@@ -46066,7 +46047,7 @@ workspace-patterns.md. Walk through how to add a new rule.
46066
46047
  Verify: Read \`.claude/rules/workspace-patterns.md\`. Add a sample rule entry together.
46067
46048
  Observation focus: MANAGED vs INIT_ONLY lifecycle, rule authoring, memory layout.
46068
46049
 
46069
- **MF5: Advanced -- Template Lifecycle and Extending**
46050
+ **Item 21: Template Lifecycle**
46070
46051
 
46071
46052
  When automation is none:
46072
46053
  "When Elevasis SDK releases updates, the assistant can apply them to your workspace
@@ -46117,7 +46098,7 @@ for intermediate/advanced users.
46117
46098
 
46118
46099
  **General rules (all levels)**
46119
46100
  - If user is fast, acknowledge and offer to skip ahead within a lesson
46120
- - After each lesson, update \`.claude/memory/tutorial-progress.md\`
46101
+ - After the user confirms readiness at the end of a lesson, update \`.claude/memory/tutorial-progress.md\`
46121
46102
  - If user demonstrates a level change, promote to skills.md Growth Log
46122
46103
  - After completing a module, show the updated full menu table
46123
46104
  - Adapt module depth to skill level as with lessons
@@ -46136,7 +46117,7 @@ Last Session: {today's date}
46136
46117
 
46137
46118
  ## Completed Lessons
46138
46119
 
46139
- | Lesson | Title | Completed | Duration |
46120
+ | Item | Title | Completed | Duration |
46140
46121
  | --- | --- | --- | --- |
46141
46122
 
46142
46123
  ## Completed Modules
@@ -46144,11 +46125,6 @@ Last Session: {today's date}
46144
46125
  | Module | Title | Completed | Duration |
46145
46126
  | --- | --- | --- | --- |
46146
46127
 
46147
- ## Completed MF Lessons
46148
-
46149
- | Lesson | Title | Completed | Notes |
46150
- | --- | --- | --- | --- |
46151
-
46152
46128
  ## Capability Observations
46153
46129
 
46154
46130
  | Source | Observation |
@@ -46160,13 +46136,14 @@ Last Session: {today's date}
46160
46136
  \`\`\`
46161
46137
 
46162
46138
  Update rules:
46163
- - \`Current\`: free-form, e.g. "L4: Using Platform Tools" or "M:integrations" or "MF2"
46139
+ - \`Current\`: free-form, e.g. "4: Using Platform Tools" or "M:integrations" or "20: Rules, Memory, and Customization"
46164
46140
  - \`Last Session\`: update to today's date on each \`/tutorial\` invocation
46165
- - Completed tables: add a row when a lesson/module/MF lesson finishes
46166
- - Capability Observations: prefix source with L# for lessons, M:<id> for modules, MF# for MF lessons
46141
+ - Completed Lessons: add a row when any numbered item (1-10, 20-21) finishes
46142
+ - Completed Modules: add a row when any module (items 11-19) finishes
46143
+ - Capability Observations: prefix source with item number for lessons (#), M:<id> for modules
46167
46144
  - Assessment Notes: bullet points of general skill observations
46168
46145
 
46169
- Backward-compatible: missing Completed Modules or Completed MF Lessons sections treated as empty.
46146
+ Backward-compatible: missing Completed Modules treated as empty. Old files with Completed MF Lessons: map entries to items 2-4 and 20-21 by lesson title match.
46170
46147
  `;
46171
46148
  }
46172
46149
  function claudeMetaCommandTemplate() {
@@ -46277,8 +46254,7 @@ by the \`<!-- initialized: false -->\` flag in CLAUDE.md, or run manually.
46277
46254
  ### \`/meta\` (no arguments) -- Project Status
46278
46255
 
46279
46256
  Display a project health summary:
46280
- 1. Current template version vs latest available
46281
- 2. SDK package version from package.json
46257
+ 1. Template version (from elevasis.config.ts) and installed SDK version (from package.json). Suggest \`elevasis-sdk update\` to check for updates
46282
46258
  3. Profile summary (from memory/profile/skills.md)
46283
46259
  4. Quick drift check: count of missing managed files, missing gitignore entries
46284
46260
  5. Last deployment status (from memory/deployment-state.md if it exists)
@@ -46717,7 +46693,6 @@ Your \`ELEVASIS_PLATFORM_KEY\` in \`.env\` determines the organization.
46717
46693
  | --- | --- | --- |
46718
46694
  | \`api-key\` | \`{"apiKey": "sk-..."}\` | Stripe, Resend, Apify, Attio, Instantly |
46719
46695
  | \`webhook-secret\` | \`{"signingSecret": "whsec_..."}\` | Cal.com, Stripe webhooks |
46720
- | \`trello\` | \`{"apiKey": "...", "token": "..."}\` | Trello |
46721
46696
  | \`oauth\` | N/A (browser flow only) | Notion, Google Sheets, Dropbox |
46722
46697
 
46723
46698
  OAuth credentials **cannot** be created via CLI. Redirect the user to the Command Center UI.
@@ -46740,12 +46715,11 @@ elevasis-sdk creds list
46740
46715
  Display the output. Note which are \`oauth\` (not modifiable via CLI).
46741
46716
 
46742
46717
  **\`create\`:** Guided credential creation flow:
46743
- 1. Ask credential type (\`api-key\`, \`webhook-secret\`, or \`trello\`). Not \`oauth\`.
46718
+ 1. Ask credential type (\`api-key\` or \`webhook-secret\`). Not \`oauth\`.
46744
46719
  2. Ask credential name. Validate naming rules before proceeding.
46745
46720
  3. Ask the user to paste the credential value directly in chat.
46746
46721
  - For \`api-key\`: ask for the API key, construct \`{"apiKey": "..."}\`
46747
46722
  - For \`webhook-secret\`: ask for the signing secret, construct \`{"signingSecret": "..."}\`
46748
- - For \`trello\`: ask for API key AND user token, construct \`{"apiKey": "...", "token": "..."}\`
46749
46723
  4. Pipe to CLI: \`echo '{"apiKey":"..."}' | elevasis-sdk creds create --name {name} --type {type}\`
46750
46724
  5. Confirm success. **NEVER echo the credential value back.**
46751
46725
 
@@ -47179,36 +47153,37 @@ function getUIFiles(orgSlug) {
47179
47153
  "ui/src/App.tsx": uiAppTsxTemplate(),
47180
47154
  "ui/src/AuthRedirect.tsx": uiAuthRedirectTemplate(),
47181
47155
  "ui/src/vite-env.d.ts": uiViteEnvDtsTemplate(),
47182
- "ui/.env": uiEnvTemplate(),
47183
- "ui/.env.example": uiEnvExampleTemplate()
47156
+ "ui/.env": uiEnvTemplate()
47184
47157
  };
47185
47158
  }
47186
47159
  function uiPackageJsonTemplate(orgSlug) {
47187
- return JSON.stringify({
47188
- name: `${orgSlug}-ui`,
47189
- private: true,
47190
- type: "module",
47191
- scripts: {
47192
- dev: "vite",
47193
- build: "tsc && vite build",
47194
- preview: "vite preview"
47195
- },
47196
- dependencies: {
47197
- "@elevasis/sdk-ui": "latest",
47198
- "@mantine/core": "^8.0.0",
47199
- "@mantine/hooks": "^8.0.0",
47200
- "react": "^19.0.0",
47201
- "react-dom": "^19.0.0",
47202
- "react-router-dom": "^7.0.0"
47160
+ return JSON.stringify(
47161
+ {
47162
+ name: `${orgSlug}-ui`,
47163
+ private: true,
47164
+ type: "module",
47165
+ scripts: {
47166
+ dev: "vite",
47167
+ build: "tsc && vite build",
47168
+ preview: "vite preview"
47169
+ },
47170
+ dependencies: {
47171
+ "@elevasis/sdk-ui": "latest",
47172
+ react: "^19.0.0",
47173
+ "react-dom": "^19.0.0",
47174
+ "react-router-dom": "^7.0.0"
47175
+ },
47176
+ devDependencies: {
47177
+ "@types/react": "^19.0.0",
47178
+ "@types/react-dom": "^19.0.0",
47179
+ "@vitejs/plugin-react": "^4.0.0",
47180
+ typescript: "^5.7.0",
47181
+ vite: "^6.0.0"
47182
+ }
47203
47183
  },
47204
- devDependencies: {
47205
- "@types/react": "^19.0.0",
47206
- "@types/react-dom": "^19.0.0",
47207
- "@vitejs/plugin-react": "^4.0.0",
47208
- "typescript": "^5.7.0",
47209
- "vite": "^6.0.0"
47210
- }
47211
- }, null, 2) + "\n";
47184
+ null,
47185
+ 2
47186
+ ) + "\n";
47212
47187
  }
47213
47188
  function uiIndexHtmlTemplate() {
47214
47189
  return `<!doctype html>
@@ -47238,22 +47213,26 @@ export default defineConfig({
47238
47213
  `;
47239
47214
  }
47240
47215
  function uiTsconfigTemplate() {
47241
- return JSON.stringify({
47242
- compilerOptions: {
47243
- target: "ES2022",
47244
- lib: ["ES2022", "DOM", "DOM.Iterable"],
47245
- module: "ESNext",
47246
- moduleResolution: "bundler",
47247
- jsx: "react-jsx",
47248
- strict: true,
47249
- esModuleInterop: true,
47250
- skipLibCheck: true,
47251
- forceConsistentCasingInFileNames: true,
47252
- isolatedModules: true,
47253
- noEmit: true
47216
+ return JSON.stringify(
47217
+ {
47218
+ compilerOptions: {
47219
+ target: "ES2022",
47220
+ lib: ["ES2022", "DOM", "DOM.Iterable"],
47221
+ module: "ESNext",
47222
+ moduleResolution: "bundler",
47223
+ jsx: "react-jsx",
47224
+ strict: true,
47225
+ esModuleInterop: true,
47226
+ skipLibCheck: true,
47227
+ forceConsistentCasingInFileNames: true,
47228
+ isolatedModules: true,
47229
+ noEmit: true
47230
+ },
47231
+ include: ["src"]
47254
47232
  },
47255
- include: ["src"]
47256
- }, null, 2) + "\n";
47233
+ null,
47234
+ 2
47235
+ ) + "\n";
47257
47236
  }
47258
47237
  function uiMainTsxTemplate() {
47259
47238
  return `import { StrictMode } from 'react'
@@ -47271,23 +47250,29 @@ createRoot(document.getElementById('root')!).render(
47271
47250
  `;
47272
47251
  }
47273
47252
  function uiAppTsxTemplate() {
47274
- return `import { Routes, Route } from 'react-router-dom'
47275
- import { ElevasisProvider } from '@elevasis/sdk-ui'
47253
+ return `import { ElevasisCoreProvider } from '@elevasis/sdk-ui'
47254
+ import { Routes, Route } from 'react-router-dom'
47276
47255
  import { AuthRedirect } from './AuthRedirect'
47277
47256
 
47278
47257
  export function App() {
47279
47258
  return (
47280
- <ElevasisProvider
47281
- mode="oauth"
47282
- clientId={import.meta.env.VITE_WORKOS_CLIENT_ID}
47283
- redirectUri="http://localhost:5100/auth-redirect"
47259
+ <ElevasisCoreProvider
47260
+ auth={{
47261
+ mode: 'oauth',
47262
+ clientId: import.meta.env.VITE_WORKOS_CLIENT_ID,
47263
+ redirectUri: 'http://localhost:5100/auth-redirect',
47264
+ }}
47284
47265
  apiUrl="http://localhost:5170"
47266
+ theme={{
47267
+ colorScheme: 'dark',
47268
+ preset: 'default',
47269
+ }}
47285
47270
  >
47286
47271
  <Routes>
47287
47272
  <Route path="/" element={<h1>Home</h1>} />
47288
47273
  <Route path="/auth-redirect" element={<AuthRedirect />} />
47289
47274
  </Routes>
47290
- </ElevasisProvider>
47275
+ </ElevasisCoreProvider>
47291
47276
  )
47292
47277
  }
47293
47278
  `;
@@ -47319,10 +47304,6 @@ function uiEnvTemplate() {
47319
47304
  return `VITE_WORKOS_CLIENT_ID=
47320
47305
  `;
47321
47306
  }
47322
- function uiEnvExampleTemplate() {
47323
- return `VITE_WORKOS_CLIENT_ID=your_workos_client_id
47324
- `;
47325
- }
47326
47307
 
47327
47308
  // src/cli/commands/templates/ui/index.ts
47328
47309
  var UI_INIT_FILES = [
@@ -47334,8 +47315,7 @@ var UI_INIT_FILES = [
47334
47315
  "ui/src/App.tsx",
47335
47316
  "ui/src/AuthRedirect.tsx",
47336
47317
  "ui/src/vite-env.d.ts",
47337
- "ui/.env",
47338
- "ui/.env.example"
47318
+ "ui/.env"
47339
47319
  ];
47340
47320
 
47341
47321
  // src/cli/commands/init.ts
@@ -47344,7 +47324,6 @@ var INIT_ONLY_FILES = [
47344
47324
  "pnpm-workspace.yaml",
47345
47325
  "tsconfig.json",
47346
47326
  ".env",
47347
- ".env.example",
47348
47327
  ".npmrc",
47349
47328
  "src/index.ts",
47350
47329
  "src/operations/platform-status.ts",
@@ -47416,7 +47395,6 @@ function registerInitCommand(program3) {
47416
47395
  "pnpm-workspace.yaml": pnpmWorkspaceTemplate(),
47417
47396
  "tsconfig.json": tsconfigTemplate(),
47418
47397
  ".env": envTemplate(),
47419
- ".env.example": envExampleTemplate(),
47420
47398
  ".npmrc": npmrcTemplate(),
47421
47399
  ".gitignore": gitignoreTemplate({ hasUI: options2.ui }),
47422
47400
  "src/index.ts": starterTemplate(),
@@ -47456,7 +47434,7 @@ function registerInitCommand(program3) {
47456
47434
  console.log(source_default.gray(` cd ${directory}`));
47457
47435
  }
47458
47436
  console.log(source_default.gray(" pnpm install"));
47459
- console.log(source_default.gray(" # Copy .env.example to .env and add your API key"));
47437
+ console.log(source_default.gray(" # Add your API key to .env"));
47460
47438
  console.log(source_default.gray(" elevasis-sdk check"));
47461
47439
  console.log(source_default.gray(" elevasis-sdk deploy"));
47462
47440
  if (options2.ui) {
@@ -47787,7 +47765,7 @@ Credentials (${data.credentials.length}):
47787
47765
 
47788
47766
  // src/cli/commands/creds/creds-create.ts
47789
47767
  var CREDENTIAL_NAME_REGEX = /^[a-z0-9]+(-[a-z0-9]+)*$/;
47790
- var VALID_TYPES = ["api-key", "webhook-secret", "trello"];
47768
+ var VALID_TYPES = ["api-key", "webhook-secret"];
47791
47769
  async function createCreds(apiUrl, name, type, valueJson) {
47792
47770
  if (!name || name.length < 1 || name.length > 100) {
47793
47771
  throw new Error("Credential name must be 1-100 characters");
@@ -47956,7 +47934,7 @@ function registerCredsCommand(program3) {
47956
47934
  creds.command("list").description("List all credentials (metadata only, no secrets)").option("--api-url <url>", "API URL").option("--json", "Output as JSON").action(wrapAction("creds list", async (options2) => {
47957
47935
  await listCreds(resolveApiUrl(options2.apiUrl), options2.json);
47958
47936
  }));
47959
- creds.command("create").description("Create a new credential").requiredOption("--name <name>", "Credential name (lowercase, digits, hyphens)").requiredOption("--type <type>", "Credential type (api-key, webhook-secret, trello)").option("--value <json>", "Credential value as JSON string").option("--api-url <url>", "API URL").action(wrapAction("creds create", async (options2) => {
47937
+ creds.command("create").description("Create a new credential").requiredOption("--name <name>", "Credential name (lowercase, digits, hyphens)").requiredOption("--type <type>", "Credential type (api-key, webhook-secret)").option("--value <json>", "Credential value as JSON string").option("--api-url <url>", "API URL").action(wrapAction("creds create", async (options2) => {
47960
47938
  await createCreds(resolveApiUrl(options2.apiUrl), options2.name, options2.type, options2.value);
47961
47939
  }));
47962
47940
  creds.command("update <name>").description("Update a credential value").requiredOption("--value <json>", "New credential value as JSON string").option("--api-url <url>", "API URL").action(wrapAction("creds update", async (name, options2) => {