@elevasis/sdk 0.5.6 → 0.5.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/cli.cjs CHANGED
@@ -43491,6 +43491,21 @@ var ResourceRegistry = class {
43491
43491
  }
43492
43492
  return false;
43493
43493
  }
43494
+ /**
43495
+ * Get the remote config for any resource in an organization.
43496
+ * Used when the specific resource ID is unknown (e.g., to clean up a
43497
+ * temp file before unregistering an org -- all resources share one config).
43498
+ *
43499
+ * @param orgName - Organization name
43500
+ * @returns Remote config or null if org has no remote resources
43501
+ */
43502
+ getAnyRemoteConfig(orgName) {
43503
+ const prefix = `${orgName}/`;
43504
+ for (const [key, config3] of this.remoteResources) {
43505
+ if (key.startsWith(prefix)) return config3;
43506
+ }
43507
+ return null;
43508
+ }
43494
43509
  // ============================================================================
43495
43510
  // Resource Manifest Accessors
43496
43511
  // ============================================================================
@@ -43708,17 +43723,17 @@ function resolveEnvironment(prod) {
43708
43723
  }
43709
43724
  function resolveApiKey(prod) {
43710
43725
  if (!prod && process.env.NODE_ENV === "development") {
43711
- return process.env.ELEVASIS_API_KEY_DEV ?? process.env.ELEVASIS_API_KEY ?? "";
43726
+ return process.env.ELEVASIS_PLATFORM_KEY_DEV ?? process.env.ELEVASIS_PLATFORM_KEY ?? "";
43712
43727
  }
43713
- return process.env.ELEVASIS_API_KEY ?? "";
43728
+ return process.env.ELEVASIS_PLATFORM_KEY ?? "";
43714
43729
  }
43715
43730
 
43716
43731
  // src/cli/api-client.ts
43717
43732
  function getApiKey() {
43718
- const key = process.env.ELEVASIS_API_KEY;
43733
+ const key = process.env.ELEVASIS_PLATFORM_KEY;
43719
43734
  if (!key) {
43720
43735
  throw new Error(
43721
- "ELEVASIS_API_KEY environment variable is required.\nSet it in your .env file: ELEVASIS_API_KEY=sk_..."
43736
+ "ELEVASIS_PLATFORM_KEY environment variable is required.\nSet it in your .env file: ELEVASIS_PLATFORM_KEY=sk_..."
43722
43737
  );
43723
43738
  }
43724
43739
  return key;
@@ -43730,7 +43745,7 @@ async function apiGet(endpoint, apiUrl = resolveApiUrl()) {
43730
43745
  if (!response.ok) {
43731
43746
  const errorText = await response.text();
43732
43747
  if (response.status === 401) {
43733
- throw new Error(`401 Unauthorized: Invalid or missing ELEVASIS_API_KEY. Check your .env file.`);
43748
+ throw new Error(`401 Unauthorized: Invalid or missing ELEVASIS_PLATFORM_KEY. Check your .env file.`);
43734
43749
  }
43735
43750
  throw new Error(`API request failed (${response.status}): ${errorText}`);
43736
43751
  }
@@ -43793,7 +43808,7 @@ async function apiDelete(endpoint, apiUrl = resolveApiUrl()) {
43793
43808
  // package.json
43794
43809
  var package_default = {
43795
43810
  name: "@elevasis/sdk",
43796
- version: "0.5.6",
43811
+ version: "0.5.8",
43797
43812
  description: "SDK for building Elevasis organization resources",
43798
43813
  "comment:bin": "IMPORTANT: This package shares the 'elevasis' binary name with @repo/cli. They never conflict because @elevasis/sdk must NEVER be added as a dependency of any workspace package (apps/*, packages/*, organizations/*). Workspace projects use @repo/cli for the 'elevasis' binary. External developers (outside the workspace) get this SDK's binary via npm install.",
43799
43814
  type: "module",
@@ -44293,7 +44308,7 @@ async function generateProjectMap(org) {
44293
44308
  let nodeEnv = "not set";
44294
44309
  try {
44295
44310
  const envContent = await (0, import_promises.readFile)((0, import_path.resolve)(".env"), "utf-8");
44296
- const apiKeyMatch = envContent.match(/^ELEVASIS_API_KEY=(.+)$/m);
44311
+ const apiKeyMatch = envContent.match(/^ELEVASIS_PLATFORM_KEY=(.+)$/m);
44297
44312
  if (apiKeyMatch && apiKeyMatch[1].trim()) apiKeySet = "yes";
44298
44313
  const nodeEnvMatch = envContent.match(/^NODE_ENV=(.+)$/m);
44299
44314
  if (nodeEnvMatch && nodeEnvMatch[1].trim()) nodeEnv = nodeEnvMatch[1].trim();
@@ -44329,7 +44344,7 @@ function registerDeployCommand(program3) {
44329
44344
  authSpinner.fail(source_default.red("Authentication failed"));
44330
44345
  const errMsg = error46 instanceof Error ? error46.message : String(error46);
44331
44346
  if (errMsg.includes("401") || errMsg.toLowerCase().includes("unauthorized")) {
44332
- const keyVar = !options2.prod && process.env.NODE_ENV === "development" && process.env.ELEVASIS_API_KEY_DEV ? "ELEVASIS_API_KEY_DEV" : "ELEVASIS_API_KEY";
44347
+ const keyVar = !options2.prod && process.env.NODE_ENV === "development" && process.env.ELEVASIS_PLATFORM_KEY_DEV ? "ELEVASIS_PLATFORM_KEY_DEV" : "ELEVASIS_PLATFORM_KEY";
44333
44348
  console.error(source_default.red(" Invalid API key."));
44334
44349
  console.error(source_default.gray(` Your ${keyVar} was rejected by the server.`));
44335
44350
  console.error(source_default.gray(" Check your .env file and verify the key in the Elevasis dashboard."));
@@ -44469,7 +44484,7 @@ startWorker(org)
44469
44484
  entryPoints: [wrapperPath],
44470
44485
  bundle: true,
44471
44486
  platform: "node",
44472
- format: "esm",
44487
+ format: "cjs",
44473
44488
  outfile: bundleOutfile
44474
44489
  });
44475
44490
  await (0, import_promises.unlink)(wrapperPath);
@@ -44494,9 +44509,9 @@ startWorker(org)
44494
44509
  uploadSpinner.fail(source_default.red("Missing API key environment variable"));
44495
44510
  console.error(source_default.gray(" Set it in your .env file or shell environment:"));
44496
44511
  if (!options2.prod && process.env.NODE_ENV === "development") {
44497
- console.error(source_default.gray(" ELEVASIS_API_KEY_DEV=sk_... (or ELEVASIS_API_KEY as fallback)"));
44512
+ console.error(source_default.gray(" ELEVASIS_PLATFORM_KEY_DEV=sk_... (or ELEVASIS_PLATFORM_KEY as fallback)"));
44498
44513
  } else {
44499
- console.error(source_default.gray(" ELEVASIS_API_KEY=sk_..."));
44514
+ console.error(source_default.gray(" ELEVASIS_PLATFORM_KEY=sk_..."));
44500
44515
  }
44501
44516
  throw new Error("Missing API key environment variable");
44502
44517
  }
@@ -45139,11 +45154,11 @@ function tsconfigTemplate() {
45139
45154
  }, null, 2) + "\n";
45140
45155
  }
45141
45156
  function envTemplate() {
45142
- return `ELEVASIS_API_KEY=
45157
+ return `ELEVASIS_PLATFORM_KEY=
45143
45158
  `;
45144
45159
  }
45145
45160
  function envExampleTemplate() {
45146
- return `ELEVASIS_API_KEY=sk_your_key_here
45161
+ return `ELEVASIS_PLATFORM_KEY=sk_your_key_here
45147
45162
  `;
45148
45163
  }
45149
45164
  function npmrcTemplate() {
@@ -45185,7 +45200,7 @@ pnpm install
45185
45200
  Copy \`.env.example\` to \`.env\` and add your API key:
45186
45201
 
45187
45202
  \`\`\`
45188
- ELEVASIS_API_KEY=sk_...
45203
+ ELEVASIS_PLATFORM_KEY=sk_...
45189
45204
  \`\`\`
45190
45205
 
45191
45206
  ## Development
@@ -45409,7 +45424,7 @@ At the start of every session:
45409
45424
  2. Read \`.claude/memory/index.md\` -- drill into relevant topic files as needed.
45410
45425
  Balance context relevance against token usage.
45411
45426
  3. Check installed \`@elevasis/sdk\` template version against \`templateVersion\`
45412
- in \`elevasis.config.ts\`. If newer, notify and suggest \`/meta update\`.
45427
+ in \`elevasis.config.ts\`. If newer, notify and suggest \`/meta fix\`.
45413
45428
  4. If \`.claude/memory/\` does not exist, suggest \`/meta init\`.
45414
45429
  5. If user Platform Navigation level is none (from skills.md) and
45415
45430
  \`.claude/memory/tutorial-progress.md\` does not exist, suggest \`/tutorial\`.
@@ -45437,7 +45452,7 @@ proactivity -- to their assessed levels.
45437
45452
  | Workspace concepts | \`reference/concepts/index.mdx\` | User asks "what is...?" or needs conceptual grounding |
45438
45453
  | SDK patterns and examples | \`reference/resources/patterns.mdx\` | Building or modifying a workflow |
45439
45454
  | Platform tool catalog | \`reference/platform-tools/index.mdx\` | Connecting to external services |
45440
- | CLI reference | \`reference/cli/index.mdx\` | Running CLI operations |
45455
+ | CLI reference | \`reference/cli/index.mdx\` | Running execution/platform operations |
45441
45456
  | Credential model | \`reference/security/credentials.mdx\` | Setting up integrations or tool access |
45442
45457
  | Interaction guidance | \`reference/developer/interaction-guidance.mdx\` | Unsure how to adapt for a skill combination |
45443
45458
  | Error history | \`.claude/memory/errors/index.md\` | Debugging errors, checking past fixes |
@@ -45455,7 +45470,7 @@ All \`reference/\` paths resolve to \`node_modules/@elevasis/sdk/reference/\`.
45455
45470
 
45456
45471
  ## Elevasis CLI
45457
45472
 
45458
- **MANDATORY:** Use the \`elevasis\` CLI for all operations -- never \`npx\`, \`curl\`, or any other tool.
45473
+ **MANDATORY:** Use the \`elevasis\` CLI for all execution/platform operations -- never \`npx\`, \`curl\`, or any other tool.
45459
45474
 
45460
45475
  - \`elevasis exec <resource-id> --input '{...}'\` -- run a resource synchronously
45461
45476
  - \`elevasis exec <resource-id> --input '{...}' --async\` -- run async, returns execution ID
@@ -46080,17 +46095,49 @@ for intermediate/advanced users.
46080
46095
 
46081
46096
  ## Progress Format
46082
46097
 
46083
- Store in \`.claude/memory/tutorial-progress.md\`:
46084
- - Current (free-form, e.g. "L4: Using Platform Tools" or "M:integrations" or "MF2")
46085
- - Started and Last Session dates
46086
- - Completed Lessons table (lesson, title, completed, duration)
46087
- - Completed Modules table (module, title, completed, duration)
46088
- - Completed MF Lessons table (lesson, title, completed, notes)
46089
- - Capability Observations table (source, observation) -- prefix L# for lessons, M:<id> for modules, MF# for MF lessons
46090
- - Assessment Notes (bullet points)
46091
-
46092
- Backward-compatible: missing Completed Modules treated as empty;
46093
- missing Completed MF Lessons treated as empty.
46098
+ On first \`/tutorial\` invocation, if \`.claude/memory/tutorial-progress.md\` does not exist,
46099
+ create it with this exact format:
46100
+
46101
+ \`\`\`markdown
46102
+ # Tutorial Progress
46103
+
46104
+ Current: Not started
46105
+ Started: {today's date}
46106
+ Last Session: {today's date}
46107
+
46108
+ ## Completed Lessons
46109
+
46110
+ | Lesson | Title | Completed | Duration |
46111
+ | --- | --- | --- | --- |
46112
+
46113
+ ## Completed Modules
46114
+
46115
+ | Module | Title | Completed | Duration |
46116
+ | --- | --- | --- | --- |
46117
+
46118
+ ## Completed MF Lessons
46119
+
46120
+ | Lesson | Title | Completed | Notes |
46121
+ | --- | --- | --- | --- |
46122
+
46123
+ ## Capability Observations
46124
+
46125
+ | Source | Observation |
46126
+ | --- | --- |
46127
+
46128
+ ## Assessment Notes
46129
+
46130
+ (none yet)
46131
+ \`\`\`
46132
+
46133
+ Update rules:
46134
+ - \`Current\`: free-form, e.g. "L4: Using Platform Tools" or "M:integrations" or "MF2"
46135
+ - \`Last Session\`: update to today's date on each \`/tutorial\` invocation
46136
+ - Completed tables: add a row when a lesson/module/MF lesson finishes
46137
+ - Capability Observations: prefix source with L# for lessons, M:<id> for modules, MF# for MF lessons
46138
+ - Assessment Notes: bullet points of general skill observations
46139
+
46140
+ Backward-compatible: missing Completed Modules or Completed MF Lessons sections treated as empty.
46094
46141
  `;
46095
46142
  }
46096
46143
  function claudeMetaCommandTemplate() {
@@ -46115,14 +46162,14 @@ by the \`<!-- initialized: false -->\` flag in CLAUDE.md, or run manually.
46115
46162
  Run \`pnpm install\`. Wait for completion. Report any errors.
46116
46163
 
46117
46164
  2. **Setup environment**
46118
- Read \`.env\`. It should contain only a single line: \`ELEVASIS_API_KEY=\`.
46119
- If \`ELEVASIS_API_KEY\` is empty or missing, ask the user: "What is your
46165
+ Read \`.env\`. It should contain only a single line: \`ELEVASIS_PLATFORM_KEY=\`.
46166
+ If \`ELEVASIS_PLATFORM_KEY\` is empty or missing, ask the user: "What is your
46120
46167
  Elevasis API key?" When the user provides it, write \`.env\` with exactly:
46121
46168
  \`\`\`
46122
- ELEVASIS_API_KEY=<value they provided>
46169
+ ELEVASIS_PLATFORM_KEY=<value they provided>
46123
46170
  \`\`\`
46124
46171
  No other keys (no \`NODE_ENV\`, no extras). The \`.env\` file must contain
46125
- only \`ELEVASIS_API_KEY\`.
46172
+ only \`ELEVASIS_PLATFORM_KEY\`.
46126
46173
  Validate the key works: run \`elevasis resources\` (should return an empty
46127
46174
  list, not an auth error). If auth fails, tell the user their key appears
46128
46175
  invalid and ask them to check it in the Elevasis dashboard.
@@ -46145,6 +46192,12 @@ by the \`<!-- initialized: false -->\` flag in CLAUDE.md, or run manually.
46145
46192
  Zapier/Make flows -> automation: low-code
46146
46193
  Custom scripts -> automation: custom
46147
46194
 
46195
+ Inferred dimensions (do NOT ask, derive from answers above):
46196
+ - apiIntegration: automation: none -> none, low-code -> basic, custom -> proficient.
46197
+ Override: if tools answer includes API services (Stripe API, webhook, REST), upgrade one level.
46198
+ - domainExpertise: if goals are specific (names processes, metrics, edge cases) -> high.
46199
+ If goals are vague -> low.
46200
+
46148
46201
  Communication (1 question):
46149
46202
  - "Step-by-step explanations or concise answers?"
46150
46203
 
@@ -46152,7 +46205,24 @@ by the \`<!-- initialized: false -->\` flag in CLAUDE.md, or run manually.
46152
46205
  - Create \`.claude/memory/index.md\` (root index)
46153
46206
  - Create \`.claude/memory/profile/index.md\` (profile index)
46154
46207
  - Create \`.claude/memory/profile/identity.md\` (org, goals, tools)
46155
- - Create \`.claude/memory/profile/skills.md\` (multi-dimensional assessment)
46208
+ - Create \`.claude/memory/profile/skills.md\` using this exact format:
46209
+
46210
+ \`\`\`markdown
46211
+ # Skills
46212
+
46213
+ | Dimension | Level | Since |
46214
+ | --- | --- | --- |
46215
+ | platformNavigation | {level} | {date} |
46216
+ | apiIntegration | {level} | {date} |
46217
+ | automation | {level} | {date} |
46218
+ | domainExpertise | {level} | {date} |
46219
+
46220
+ ## Growth Log
46221
+
46222
+ | Date | Observation | Dimension | Change |
46223
+ | --- | --- | --- | --- |
46224
+ \`\`\`
46225
+
46156
46226
  - Create \`.claude/memory/profile/preferences.md\` (verbosity, guidance)
46157
46227
 
46158
46228
  4. **Git check**
@@ -46610,7 +46680,7 @@ organization. They are used by workflows and agents at runtime via \`platform.ge
46610
46680
  or the \`credential:\` field on tool steps.
46611
46681
 
46612
46682
  The SDK CLI (\`elevasis-sdk creds\`) manages credentials via API key authentication.
46613
- Your \`ELEVASIS_API_KEY\` in \`.env\` determines the organization.
46683
+ Your \`ELEVASIS_PLATFORM_KEY\` in \`.env\` determines the organization.
46614
46684
 
46615
46685
  ## Credential Types
46616
46686
 
@@ -46710,7 +46780,7 @@ description: Elevasis SDK patterns -- imports, source structure, runtime, and pl
46710
46780
 
46711
46781
  ## Runtime
46712
46782
 
46713
- - \`.env\` contains only \`ELEVASIS_API_KEY\` for CLI auth -- never deployed, never in worker memory
46783
+ - \`.env\` contains only \`ELEVASIS_PLATFORM_KEY\` for CLI auth -- never deployed, never in worker memory
46714
46784
  - Integration credentials are managed via the \`creds\` skill or Command Center UI
46715
46785
 
46716
46786
  ## Platform Tools
package/dist/index.d.ts CHANGED
@@ -2973,10 +2973,12 @@ interface CreateNotificationParams {
2973
2973
  * worker thread execution branching and credential management.
2974
2974
  */
2975
2975
  interface RemoteOrgConfig {
2976
- /** Path to the esbuild bundle on disk */
2977
- bundlePath: string;
2976
+ /** Supabase Storage path: "{orgId}/{deploymentId}/bundle.js" */
2977
+ storagePath: string;
2978
2978
  /** Deployment record ID */
2979
2979
  deploymentId: string;
2980
+ /** OS temp path to bundle -- set after first download, used by worker threads */
2981
+ cachedTempPath?: string;
2980
2982
  /** Platform tool name -> credential name mapping */
2981
2983
  toolCredentials?: Record<string, string>;
2982
2984
  /** SDK version used to deploy this bundle */
@@ -3107,6 +3109,15 @@ declare class ResourceRegistry {
3107
3109
  * @returns true if the org has at least one runtime-registered resource
3108
3110
  */
3109
3111
  isRemote(orgName: string): boolean;
3112
+ /**
3113
+ * Get the remote config for any resource in an organization.
3114
+ * Used when the specific resource ID is unknown (e.g., to clean up a
3115
+ * temp file before unregistering an org -- all resources share one config).
3116
+ *
3117
+ * @param orgName - Organization name
3118
+ * @returns Remote config or null if org has no remote resources
3119
+ */
3120
+ getAnyRemoteConfig(orgName: string): RemoteOrgConfig | null;
3110
3121
  /**
3111
3122
  * Get triggers for an organization
3112
3123
  * @param organizationName - Organization name
@@ -6320,7 +6331,7 @@ type ResourceStatus = 'dev' | 'prod';
6320
6331
  /**
6321
6332
  * Project configuration for an external developer project.
6322
6333
  * Defined in elevasis.config.ts at the project root.
6323
- * Organization is derived from the ELEVASIS_API_KEY -- not configured here.
6334
+ * Organization is derived from the ELEVASIS_PLATFORM_KEY -- not configured here.
6324
6335
  */
6325
6336
  interface ElevasConfig {
6326
6337
  /** Managed by `elevasis init` and `elevasis update`. Do not set manually. */
package/dist/index.js CHANGED
@@ -3423,6 +3423,21 @@ var ResourceRegistry = class {
3423
3423
  }
3424
3424
  return false;
3425
3425
  }
3426
+ /**
3427
+ * Get the remote config for any resource in an organization.
3428
+ * Used when the specific resource ID is unknown (e.g., to clean up a
3429
+ * temp file before unregistering an org -- all resources share one config).
3430
+ *
3431
+ * @param orgName - Organization name
3432
+ * @returns Remote config or null if org has no remote resources
3433
+ */
3434
+ getAnyRemoteConfig(orgName) {
3435
+ const prefix = `${orgName}/`;
3436
+ for (const [key, config] of this.remoteResources) {
3437
+ if (key.startsWith(prefix)) return config;
3438
+ }
3439
+ return null;
3440
+ }
3426
3441
  // ============================================================================
3427
3442
  // Resource Manifest Accessors
3428
3443
  // ============================================================================
package/dist/templates.js CHANGED
@@ -200,7 +200,7 @@ At the start of every session:
200
200
  2. Read \`.claude/memory/index.md\` -- drill into relevant topic files as needed.
201
201
  Balance context relevance against token usage.
202
202
  3. Check installed \`@elevasis/sdk\` template version against \`templateVersion\`
203
- in \`elevasis.config.ts\`. If newer, notify and suggest \`/meta update\`.
203
+ in \`elevasis.config.ts\`. If newer, notify and suggest \`/meta fix\`.
204
204
  4. If \`.claude/memory/\` does not exist, suggest \`/meta init\`.
205
205
  5. If user Platform Navigation level is none (from skills.md) and
206
206
  \`.claude/memory/tutorial-progress.md\` does not exist, suggest \`/tutorial\`.
@@ -228,7 +228,7 @@ proactivity -- to their assessed levels.
228
228
  | Workspace concepts | \`reference/concepts/index.mdx\` | User asks "what is...?" or needs conceptual grounding |
229
229
  | SDK patterns and examples | \`reference/resources/patterns.mdx\` | Building or modifying a workflow |
230
230
  | Platform tool catalog | \`reference/platform-tools/index.mdx\` | Connecting to external services |
231
- | CLI reference | \`reference/cli/index.mdx\` | Running CLI operations |
231
+ | CLI reference | \`reference/cli/index.mdx\` | Running execution/platform operations |
232
232
  | Credential model | \`reference/security/credentials.mdx\` | Setting up integrations or tool access |
233
233
  | Interaction guidance | \`reference/developer/interaction-guidance.mdx\` | Unsure how to adapt for a skill combination |
234
234
  | Error history | \`.claude/memory/errors/index.md\` | Debugging errors, checking past fixes |
@@ -246,7 +246,7 @@ All \`reference/\` paths resolve to \`node_modules/@elevasis/sdk/reference/\`.
246
246
 
247
247
  ## Elevasis CLI
248
248
 
249
- **MANDATORY:** Use the \`elevasis\` CLI for all operations -- never \`npx\`, \`curl\`, or any other tool.
249
+ **MANDATORY:** Use the \`elevasis\` CLI for all execution/platform operations -- never \`npx\`, \`curl\`, or any other tool.
250
250
 
251
251
  - \`elevasis exec <resource-id> --input '{...}'\` -- run a resource synchronously
252
252
  - \`elevasis exec <resource-id> --input '{...}' --async\` -- run async, returns execution ID
@@ -871,17 +871,49 @@ for intermediate/advanced users.
871
871
 
872
872
  ## Progress Format
873
873
 
874
- Store in \`.claude/memory/tutorial-progress.md\`:
875
- - Current (free-form, e.g. "L4: Using Platform Tools" or "M:integrations" or "MF2")
876
- - Started and Last Session dates
877
- - Completed Lessons table (lesson, title, completed, duration)
878
- - Completed Modules table (module, title, completed, duration)
879
- - Completed MF Lessons table (lesson, title, completed, notes)
880
- - Capability Observations table (source, observation) -- prefix L# for lessons, M:<id> for modules, MF# for MF lessons
881
- - Assessment Notes (bullet points)
882
-
883
- Backward-compatible: missing Completed Modules treated as empty;
884
- missing Completed MF Lessons treated as empty.
874
+ On first \`/tutorial\` invocation, if \`.claude/memory/tutorial-progress.md\` does not exist,
875
+ create it with this exact format:
876
+
877
+ \`\`\`markdown
878
+ # Tutorial Progress
879
+
880
+ Current: Not started
881
+ Started: {today's date}
882
+ Last Session: {today's date}
883
+
884
+ ## Completed Lessons
885
+
886
+ | Lesson | Title | Completed | Duration |
887
+ | --- | --- | --- | --- |
888
+
889
+ ## Completed Modules
890
+
891
+ | Module | Title | Completed | Duration |
892
+ | --- | --- | --- | --- |
893
+
894
+ ## Completed MF Lessons
895
+
896
+ | Lesson | Title | Completed | Notes |
897
+ | --- | --- | --- | --- |
898
+
899
+ ## Capability Observations
900
+
901
+ | Source | Observation |
902
+ | --- | --- |
903
+
904
+ ## Assessment Notes
905
+
906
+ (none yet)
907
+ \`\`\`
908
+
909
+ Update rules:
910
+ - \`Current\`: free-form, e.g. "L4: Using Platform Tools" or "M:integrations" or "MF2"
911
+ - \`Last Session\`: update to today's date on each \`/tutorial\` invocation
912
+ - Completed tables: add a row when a lesson/module/MF lesson finishes
913
+ - Capability Observations: prefix source with L# for lessons, M:<id> for modules, MF# for MF lessons
914
+ - Assessment Notes: bullet points of general skill observations
915
+
916
+ Backward-compatible: missing Completed Modules or Completed MF Lessons sections treated as empty.
885
917
  `;
886
918
  }
887
919
  function claudeMetaCommandTemplate() {
@@ -906,14 +938,14 @@ by the \`<!-- initialized: false -->\` flag in CLAUDE.md, or run manually.
906
938
  Run \`pnpm install\`. Wait for completion. Report any errors.
907
939
 
908
940
  2. **Setup environment**
909
- Read \`.env\`. It should contain only a single line: \`ELEVASIS_API_KEY=\`.
910
- If \`ELEVASIS_API_KEY\` is empty or missing, ask the user: "What is your
941
+ Read \`.env\`. It should contain only a single line: \`ELEVASIS_PLATFORM_KEY=\`.
942
+ If \`ELEVASIS_PLATFORM_KEY\` is empty or missing, ask the user: "What is your
911
943
  Elevasis API key?" When the user provides it, write \`.env\` with exactly:
912
944
  \`\`\`
913
- ELEVASIS_API_KEY=<value they provided>
945
+ ELEVASIS_PLATFORM_KEY=<value they provided>
914
946
  \`\`\`
915
947
  No other keys (no \`NODE_ENV\`, no extras). The \`.env\` file must contain
916
- only \`ELEVASIS_API_KEY\`.
948
+ only \`ELEVASIS_PLATFORM_KEY\`.
917
949
  Validate the key works: run \`elevasis resources\` (should return an empty
918
950
  list, not an auth error). If auth fails, tell the user their key appears
919
951
  invalid and ask them to check it in the Elevasis dashboard.
@@ -936,6 +968,12 @@ by the \`<!-- initialized: false -->\` flag in CLAUDE.md, or run manually.
936
968
  Zapier/Make flows -> automation: low-code
937
969
  Custom scripts -> automation: custom
938
970
 
971
+ Inferred dimensions (do NOT ask, derive from answers above):
972
+ - apiIntegration: automation: none -> none, low-code -> basic, custom -> proficient.
973
+ Override: if tools answer includes API services (Stripe API, webhook, REST), upgrade one level.
974
+ - domainExpertise: if goals are specific (names processes, metrics, edge cases) -> high.
975
+ If goals are vague -> low.
976
+
939
977
  Communication (1 question):
940
978
  - "Step-by-step explanations or concise answers?"
941
979
 
@@ -943,7 +981,24 @@ by the \`<!-- initialized: false -->\` flag in CLAUDE.md, or run manually.
943
981
  - Create \`.claude/memory/index.md\` (root index)
944
982
  - Create \`.claude/memory/profile/index.md\` (profile index)
945
983
  - Create \`.claude/memory/profile/identity.md\` (org, goals, tools)
946
- - Create \`.claude/memory/profile/skills.md\` (multi-dimensional assessment)
984
+ - Create \`.claude/memory/profile/skills.md\` using this exact format:
985
+
986
+ \`\`\`markdown
987
+ # Skills
988
+
989
+ | Dimension | Level | Since |
990
+ | --- | --- | --- |
991
+ | platformNavigation | {level} | {date} |
992
+ | apiIntegration | {level} | {date} |
993
+ | automation | {level} | {date} |
994
+ | domainExpertise | {level} | {date} |
995
+
996
+ ## Growth Log
997
+
998
+ | Date | Observation | Dimension | Change |
999
+ | --- | --- | --- | --- |
1000
+ \`\`\`
1001
+
947
1002
  - Create \`.claude/memory/profile/preferences.md\` (verbosity, guidance)
948
1003
 
949
1004
  4. **Git check**
@@ -1401,7 +1456,7 @@ organization. They are used by workflows and agents at runtime via \`platform.ge
1401
1456
  or the \`credential:\` field on tool steps.
1402
1457
 
1403
1458
  The SDK CLI (\`elevasis-sdk creds\`) manages credentials via API key authentication.
1404
- Your \`ELEVASIS_API_KEY\` in \`.env\` determines the organization.
1459
+ Your \`ELEVASIS_PLATFORM_KEY\` in \`.env\` determines the organization.
1405
1460
 
1406
1461
  ## Credential Types
1407
1462
 
@@ -1501,7 +1556,7 @@ description: Elevasis SDK patterns -- imports, source structure, runtime, and pl
1501
1556
 
1502
1557
  ## Runtime
1503
1558
 
1504
- - \`.env\` contains only \`ELEVASIS_API_KEY\` for CLI auth -- never deployed, never in worker memory
1559
+ - \`.env\` contains only \`ELEVASIS_PLATFORM_KEY\` for CLI auth -- never deployed, never in worker memory
1505
1560
  - Integration credentials are managed via the \`creds\` skill or Command Center UI
1506
1561
 
1507
1562
  ## Platform Tools
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@elevasis/sdk",
3
- "version": "0.5.6",
3
+ "version": "0.5.8",
4
4
  "description": "SDK for building Elevasis organization resources",
5
5
  "comment:bin": "IMPORTANT: This package shares the 'elevasis' binary name with @repo/cli. They never conflict because @elevasis/sdk must NEVER be added as a dependency of any workspace package (apps/*, packages/*, organizations/*). Workspace projects use @repo/cli for the 'elevasis' binary. External developers (outside the workspace) get this SDK's binary via npm install.",
6
6
  "type": "module",
@@ -149,11 +149,11 @@ Do not automatically update the skill profile for every observation. Update when
149
149
  When updating `.claude/memory/profile/skills.md` Growth Log:
150
150
 
151
151
  ```
152
- | Date | Observation | Skill Updated |
153
- | 2026-03-01 | Navigated to Execution Logs and filtered by resource without direction | Platform Navigation: none -> oriented |
152
+ | Date | Observation | Dimension | Change |
153
+ | 2026-03-01 | Navigated to Execution Logs and filtered by resource without direction | platformNavigation | none -> oriented |
154
154
  ```
155
155
 
156
- Also update the dimension's Level field and Evidence field to reflect the new assessment.
156
+ Also update the dimension's Level and Since fields in the Dimensions table.
157
157
 
158
158
  ### Celebration
159
159
 
@@ -18,7 +18,7 @@ The file is instruction-driven by design. Non-technical developers should never
18
18
 
19
19
  The generated `CLAUDE.md` contains these sections:
20
20
 
21
- - **Session Initialization** -- Checks the `<!-- initialized: false -->` auto-init flag; if false, runs `/meta init` automatically. Otherwise reads `memory/profile/skills.md` for adaptive behavior, reads `memory/index.md` for project context, checks if the template version is current, and suggests `/tutorial` for TypeScript beginners.
21
+ - **Session Initialization** -- Checks the `<!-- initialized: false -->` auto-init flag; if false, runs `/meta init` automatically. Otherwise reads `memory/profile/skills.md` for adaptive behavior, reads `memory/index.md` for project context, checks if the template version is current, and suggests `/tutorial` for users with no Platform Navigation experience.
22
22
  - **Identity** -- Project orientation: what an Elevasis SDK project is, the developer's role, and how to adapt to non-technical users.
23
23
  - **Navigation** -- A table mapping concepts to file paths with load conditions (when to load each file). Includes SDK reference docs, credential model, error history, `docs/project-map.mdx`, and `docs/priorities.mdx`.
24
24
  - **Rules** -- Points to auto-loaded rule files in `.claude/rules/`. SDK patterns load automatically; project-specific patterns live in `workspace-patterns.md`. Includes error handling protocol.
@@ -36,7 +36,7 @@ At the start of every session the agent runs these steps silently before respond
36
36
  2. Read `.claude/memory/index.md` if it exists -- drill into relevant topic files as needed, balancing context relevance against token usage.
37
37
  3. Check the installed `@elevasis/sdk` template version against `templateVersion` in `elevasis.config.ts`. If the SDK has a newer version, notify the user and suggest running `/meta fix`.
38
38
  4. If `.claude/memory/` does not exist, suggest running `/meta init` to set up the project.
39
- 5. If the user's TypeScript level is beginner (from skills.md) and `.claude/memory/tutorial-progress.md` does not exist, suggest `/tutorial`.
39
+ 5. If the user's Platform Navigation level is none (from skills.md) and `.claude/memory/tutorial-progress.md` does not exist, suggest `/tutorial`.
40
40
 
41
41
  ## Slash Commands
42
42
 
@@ -91,10 +91,10 @@ The developer profile is stored in `.claude/memory/profile/` as a set of markdow
91
91
 
92
92
  ### Onboarding Flow
93
93
 
94
- Profile data is created during `/meta init`. The command runs a competency assessment (5-7 questions with conditional skipping) and writes the responses to `memory/profile/`:
94
+ Profile data is created during `/meta init`. The command runs a 6-question assessment and writes the responses to `memory/profile/`:
95
95
 
96
96
  - **Identity & Goals (3 questions):** What the business does, what to automate, which tools are already in use.
97
- - **Competency (2-3 conditional questions):** Programming background, TypeScript experience (only asked if the user has written scripts or more), automation tool familiarity.
97
+ - **Competency (2 questions):** Command Center familiarity (maps to `platformNavigation`), automation tool familiarity (maps to `automation`). Two additional dimensions (`apiIntegration`, `domainExpertise`) are inferred from these answers.
98
98
  - **Communication (1 question):** Step-by-step explanations vs. concise answers.
99
99
 
100
100
  ### Profile Structure
@@ -103,11 +103,11 @@ Profile data is created during `/meta init`. The command runs a competency asses
103
103
  .claude/memory/profile/
104
104
  ├── index.md # Profile summary with links to sub-files
105
105
  ├── identity.md # Organization, industry, goals, integrations
106
- ├── skills.md # TypeScript level, automation experience, growth history
106
+ ├── skills.md # Skill dimensions (platformNavigation, apiIntegration, automation, domainExpertise)
107
107
  └── preferences.md # Verbosity, guidance style, interaction patterns
108
108
  ```
109
109
 
110
- `identity.md` records the organization name, industry, size, project goals, and known tool integrations. `skills.md` stores the TypeScript and automation skill levels as structured values (`beginner / intermediate / advanced`, `new / some-experience / experienced`) along with a growth history table. `preferences.md` stores verbosity (`detailed / concise`) and proactive guidance preference.
110
+ `identity.md` records the organization name, industry, size, project goals, and known tool integrations. `skills.md` stores four skill dimensions as structured values (`platformNavigation`, `apiIntegration`, `automation`, `domainExpertise`) along with a Growth Log table. See [Interaction Guidance](../developer/interaction-guidance.mdx) for the full set of per-dimension adaptation rules. `preferences.md` stores verbosity (`detailed / concise`) and proactive guidance preference.
111
111
 
112
112
  ### Auto-Update Triggers
113
113
 
@@ -79,15 +79,18 @@ See [Documentation](documentation.mdx) for writing MDX docs, file limits, and th
79
79
 
80
80
  ## Adaptive Guidance
81
81
 
82
- The agent adapts its communication based on five independent skill dimensions stored in `memory/profile/skills.md`:
82
+ The agent adapts its communication based on four independent skill dimensions stored in `memory/profile/skills.md`:
83
83
 
84
- - **Programming Fundamentals** -- none / minimal / comfortable / advanced
85
- - **TypeScript** -- none / exposure / proficient
86
- - **API & Integration** -- none / basic / proficient
87
- - **Automation Concepts** -- none / low-code / custom
88
- - **Data Management** -- none / spreadsheets / databases
84
+ | Dimension | Levels | Assessment |
85
+ | --- | --- | --- |
86
+ | Platform Navigation | none / oriented / comfortable | Direct question |
87
+ | API & Integration | none / basic / proficient | Inferred from automation + tools |
88
+ | Automation Concepts | none / low-code / custom | Direct question |
89
+ | Domain Expertise | high / low | Inferred from identity answers |
89
90
 
90
- Each dimension is assessed separately during `/meta init` via 5-6 conditional questions. A user who has deep Zapier experience but no TypeScript knowledge will receive Zod explanations every time while getting automation concepts treated as familiar ground. The questions use conditional skipping to minimize friction: beginners answer 5 questions, developers answer 6.
91
+ Each dimension has its own adaptation rules in the [Interaction Guidance](../developer/interaction-guidance.mdx) reference. A user who has deep Zapier experience (automation: low-code) but has never called an API directly (apiIntegration: none) will get credential walkthroughs every time while having automation concepts treated as familiar ground.
92
+
93
+ `/meta init` runs a 6-question assessment: 3 identity questions, 2 competency questions, and 1 communication preference. Platform Navigation and Automation are assessed directly. API & Integration is inferred from the automation level and tools the user already uses. Domain Expertise is inferred from how specifically the user describes their goals.
91
94
 
92
95
  See [Agent System](agent.mdx) for the full assessment question set, dimensional interaction rules, and communication principles.
93
96
 
@@ -38,7 +38,7 @@ After `/meta init` and a first deployment, the structure looks like this:
38
38
  ├── profile/ # Developer profile (created by /meta init)
39
39
  │ ├── index.md # Profile summary with links to sub-files
40
40
  │ ├── identity.md # Organization, industry, goals, integrations
41
- │ ├── skills.md # TypeScript level, automation experience, growth
41
+ │ ├── skills.md # Skill dimensions and Growth Log
42
42
  │ └── preferences.md # Verbosity, guidance style, interaction patterns
43
43
  ├── deployment-state.md # Deploy IDs, resource inventory, org info
44
44
  ├── environment.md # Credentials, API keys, env vars
@@ -85,7 +85,7 @@ The `profile/` directory stores the developer's personal context -- organization
85
85
  .claude/memory/profile/
86
86
  ├── index.md # Profile summary with links to sub-files
87
87
  ├── identity.md # Organization, industry, goals, integrations
88
- ├── skills.md # TypeScript level, automation experience, growth history
88
+ ├── skills.md # Skill dimensions and Growth Log
89
89
  └── preferences.md # Verbosity, guidance style, interaction patterns
90
90
  ```
91
91
 
@@ -113,22 +113,32 @@ The `profile/` directory stores the developer's personal context -- organization
113
113
  - Google Sheets (reporting)
114
114
  ```
115
115
 
116
- **`skills.md`** stores skill levels as structured values so the Adaptive Guidance rules can apply them consistently. It also tracks a growth history table so the agent can detect when a level upgrade is warranted. Example:
116
+ **`skills.md`** stores four skill dimensions as structured values so the Adaptive Guidance rules in [Interaction Guidance](../developer/interaction-guidance.mdx) can apply them consistently. It also tracks a Growth Log so the agent can detect when a level upgrade is warranted. Example:
117
117
 
118
118
  ```markdown
119
119
  # Skills
120
120
 
121
- | Skill | Level | Since |
121
+ | Dimension | Level | Since |
122
122
  | --- | --- | --- |
123
- | TypeScript | beginner | 2026-02-25 |
124
- | AI automation | new | 2026-02-25 |
123
+ | platformNavigation | oriented | 2026-02-25 |
124
+ | apiIntegration | basic | 2026-02-25 |
125
+ | automation | low-code | 2026-02-25 |
126
+ | domainExpertise | high | 2026-02-25 |
125
127
 
126
- ## Growth History
128
+ ## Growth Log
127
129
 
128
- | Date | Change | Evidence |
129
- | --- | --- | --- |
130
+ | Date | Observation | Dimension | Change |
131
+ | --- | --- | --- | --- |
132
+ | 2026-03-01 | Navigated to Execution Logs and filtered by resource without direction | platformNavigation | none -> oriented |
130
133
  ```
131
134
 
135
+ Valid levels per dimension:
136
+
137
+ - `platformNavigation`: none / oriented / comfortable
138
+ - `apiIntegration`: none / basic / proficient
139
+ - `automation`: none / low-code / custom
140
+ - `domainExpertise`: high / low
141
+
132
142
  **`preferences.md`** stores verbosity and proactive guidance settings. Example:
133
143
 
134
144
  ```markdown
@@ -216,7 +216,7 @@ Created when you run `/meta init` in Claude Code. The agent asks six onboarding
216
216
  ├── profile/ # Developer profile (created by /meta init)
217
217
  │ ├── index.md
218
218
  │ ├── identity.md # Organization, goals, integrations
219
- │ ├── skills.md # TypeScript level, automation experience
219
+ │ ├── skills.md # Skill dimensions and Growth Log
220
220
  │ └── preferences.md # Verbosity and guidance style
221
221
  ├── deployment-state.md # Latest deployment outcomes
222
222
  ├── decisions.md # Architecture decisions recorded over time
@@ -98,7 +98,9 @@ The `.env.example` file provides the same template and is safe to commit. The ac
98
98
 
99
99
  ### Guided Setup with Claude Code
100
100
 
101
- After scaffolding, open the project in Claude Code and run `/meta init`. This command installs dependencies, walks you through `.env` setup, creates your developer profile in `.claude/memory/`, and optionally runs your first deploy -- all in one guided flow.
101
+ After scaffolding, open the project in Claude Code. The agent detects that the project is new and automatically walks you through setup: installing dependencies, configuring `.env`, creating your developer profile in `.claude/memory/`, and optionally running your first deploy. No commands needed -- just answer the questions.
102
+
103
+ If the automatic setup doesn't trigger, you can start it manually with `/meta init`.
102
104
 
103
105
  ---
104
106
 
@@ -145,13 +147,13 @@ Replace `<execution-id>` with the ID returned from the executions list.
145
147
 
146
148
  ## Next Steps
147
149
 
148
- - **Run `/meta init` in Claude Code** -- Guided setup that installs deps, configures `.env`, and creates your developer profile in `.claude/memory/`
150
+ - **Open in Claude Code** -- Setup runs automatically on first session (installs deps, configures `.env`, creates your developer profile)
149
151
  - [Development Framework](../framework/index.mdx) -- How Claude Code helps you build
150
152
  - [Resources](../resources/index.mdx) -- Define workflows and agents
151
153
  - [CLI Reference](../cli/index.mdx) -- Full command reference with flags
152
154
  - [Deployment](../deployment/index.mdx) -- Deployment lifecycle and environment variables
153
155
 
154
- When a new SDK version is released, run `elevasis update` to bring your project's managed files (CLAUDE.md, slash commands, `.gitignore`) up to date. The command adds missing files and flags any files that differ from the new template for agent-assisted review.
156
+ When a new SDK version is released, run `/meta fix` in Claude Code for an interactive upgrade that includes SDK update, drift repair, and documentation verification. Alternatively, run `elevasis update` from the terminal to update managed files (CLAUDE.md, slash commands, `.gitignore`) without agent interaction.
155
157
 
156
158
  ---
157
159