@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.
- package/dist/cli.cjs +276 -298
- package/dist/index.d.ts +13 -256
- package/dist/index.js +10 -38
- package/dist/templates.js +193 -187
- package/dist/types/worker/adapters/index.d.ts +0 -1
- package/dist/worker/index.js +126 -75
- package/package.json +1 -1
- package/reference/_navigation.md +13 -57
- package/reference/concepts.mdx +203 -0
- package/reference/deployment/{command-center-ui.mdx → command-center.mdx} +229 -151
- package/reference/deployment/index.mdx +158 -153
- package/reference/framework/agent.mdx +168 -151
- package/reference/framework/index.mdx +182 -103
- package/reference/framework/memory.mdx +347 -347
- package/reference/framework/project-structure.mdx +3 -13
- package/reference/framework/tutorial-system.mdx +253 -0
- package/reference/{getting-started/index.mdx → getting-started.mdx} +6 -7
- package/reference/index.mdx +117 -114
- package/reference/platform-tools/adapters.mdx +175 -32
- package/reference/platform-tools/index.mdx +354 -195
- package/reference/resources/index.mdx +5 -0
- package/reference/{roadmap/index.mdx → roadmap.mdx} +1 -1
- package/reference/{runtime/index.mdx → runtime.mdx} +196 -141
- package/dist/types/worker/adapters/trello.d.ts +0 -14
- package/reference/concepts/index.mdx +0 -203
- package/reference/deployment/command-view.mdx +0 -154
- package/reference/framework/documentation.mdx +0 -92
- package/reference/platform-tools/examples.mdx +0 -170
- package/reference/runtime/limits.mdx +0 -75
- package/reference/security/credentials.mdx +0 -141
- /package/reference/{cli/index.mdx → cli.mdx} +0 -0
- /package/reference/{developer → framework}/interaction-guidance.mdx +0 -0
- /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
|
-
*
|
|
43297
|
-
*
|
|
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
|
|
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
|
-
|
|
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.
|
|
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 =
|
|
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' | '
|
|
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
|
-
|
|
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
|
-
|
|
45212
|
-
|
|
45213
|
-
elevasis-sdk exec <resourceId> --input '...'
|
|
45214
|
-
elevasis-sdk resources
|
|
45215
|
-
elevasis-sdk describe <resourceId>
|
|
45216
|
-
elevasis-sdk executions <resourceId>
|
|
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
|
-
|
|
45261
|
-
|
|
45262
|
-
|
|
45263
|
-
|
|
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
|
-
|
|
45266
|
-
|
|
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 \`
|
|
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
|
-
|
|
45505
|
-
|
|
45506
|
-
- \`elevasis-sdk
|
|
45507
|
-
- \`elevasis-sdk
|
|
45508
|
-
- \`elevasis-sdk
|
|
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
|
-
- \`
|
|
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
|
-
|
|
45661
|
-
1 Welcome & Orientation
|
|
45662
|
-
2
|
|
45663
|
-
3
|
|
45664
|
-
4
|
|
45665
|
-
|
|
45666
|
-
|
|
45667
|
-
|
|
45668
|
-
|
|
45669
|
-
|
|
45670
|
-
8
|
|
45671
|
-
9
|
|
45672
|
-
10
|
|
45673
|
-
|
|
45674
|
-
|
|
45675
|
-
|
|
45676
|
-
|
|
45677
|
-
|
|
45678
|
-
|
|
45679
|
-
|
|
45680
|
-
|
|
45681
|
-
17
|
|
45682
|
-
18
|
|
45683
|
-
19
|
|
45684
|
-
|
|
45685
|
-
|
|
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
|
|
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,
|
|
45709
|
-
6.
|
|
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
|
-
**
|
|
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
|
-
**
|
|
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
|
-
**
|
|
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
|
-
**
|
|
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
|
-
**
|
|
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
|
-
**
|
|
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
|
-
**
|
|
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
|
|
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
|
-
##
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
**
|
|
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
|
-
**
|
|
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
|
|
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
|
-
|
|
|
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. "
|
|
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
|
|
46166
|
-
-
|
|
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
|
|
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.
|
|
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
|
|
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
|
-
|
|
47189
|
-
|
|
47190
|
-
|
|
47191
|
-
|
|
47192
|
-
|
|
47193
|
-
|
|
47194
|
-
|
|
47195
|
-
|
|
47196
|
-
|
|
47197
|
-
|
|
47198
|
-
|
|
47199
|
-
|
|
47200
|
-
|
|
47201
|
-
|
|
47202
|
-
|
|
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
|
-
|
|
47205
|
-
|
|
47206
|
-
|
|
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
|
-
|
|
47243
|
-
|
|
47244
|
-
|
|
47245
|
-
|
|
47246
|
-
|
|
47247
|
-
|
|
47248
|
-
|
|
47249
|
-
|
|
47250
|
-
|
|
47251
|
-
|
|
47252
|
-
|
|
47253
|
-
|
|
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
|
-
|
|
47256
|
-
|
|
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 {
|
|
47275
|
-
import {
|
|
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
|
-
<
|
|
47281
|
-
|
|
47282
|
-
|
|
47283
|
-
|
|
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
|
-
</
|
|
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(" #
|
|
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"
|
|
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
|
|
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) => {
|