@elevasis/sdk 0.4.12 → 0.4.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 +291 -31
- package/dist/index.d.ts +1 -1
- package/dist/templates.js +22 -5
- package/dist/types/worker/index.d.ts +3 -1
- package/dist/worker/index.js +5 -1
- package/package.json +1 -1
- package/reference/framework/agent.mdx +5 -2
- package/reference/platform-tools/adapters.mdx +3 -1
- package/reference/platform-tools/index.mdx +5 -6
package/dist/cli.cjs
CHANGED
|
@@ -44060,6 +44060,12 @@ function registerDeployCommand(program3) {
|
|
|
44060
44060
|
if (documentation) {
|
|
44061
44061
|
console.log(source_default.gray(` docs ${source_default.white(String(documentation.length))} file${documentation.length !== 1 ? "s" : ""}`));
|
|
44062
44062
|
}
|
|
44063
|
+
const triggerCount = org.triggers?.length ?? 0;
|
|
44064
|
+
const integrationCount = org.integrations?.length ?? 0;
|
|
44065
|
+
const checkpointCount = org.humanCheckpoints?.length ?? 0;
|
|
44066
|
+
if (triggerCount > 0) console.log(source_default.gray(` triggers ${source_default.white(String(triggerCount))}`));
|
|
44067
|
+
if (integrationCount > 0) console.log(source_default.gray(` integrations ${source_default.white(String(integrationCount))}`));
|
|
44068
|
+
if (checkpointCount > 0) console.log(source_default.gray(` checkpoints ${source_default.white(String(checkpointCount))}`));
|
|
44063
44069
|
const relationshipCount = org.relationships ? Object.keys(org.relationships).length : 0;
|
|
44064
44070
|
if (relationshipCount > 0) {
|
|
44065
44071
|
console.log(source_default.gray(` rels ${source_default.white(String(relationshipCount))} resource${relationshipCount !== 1 ? "s" : ""}`));
|
|
@@ -44583,31 +44589,46 @@ var MANAGED_FILES = [
|
|
|
44583
44589
|
".claude/commands/work.md",
|
|
44584
44590
|
".claude/skills/creds/SKILL.md"
|
|
44585
44591
|
];
|
|
44592
|
+
var UI_INIT_FILES = [
|
|
44593
|
+
"ui/package.json",
|
|
44594
|
+
"ui/index.html",
|
|
44595
|
+
"ui/vite.config.ts",
|
|
44596
|
+
"ui/tsconfig.json",
|
|
44597
|
+
"ui/src/main.tsx",
|
|
44598
|
+
"ui/src/App.tsx",
|
|
44599
|
+
"ui/src/AuthRedirect.tsx",
|
|
44600
|
+
"ui/src/vite-env.d.ts",
|
|
44601
|
+
"ui/.env",
|
|
44602
|
+
"ui/.env.example"
|
|
44603
|
+
];
|
|
44586
44604
|
var SCAFFOLD_FILES = [...INIT_ONLY_FILES, ...MANAGED_FILES];
|
|
44587
|
-
|
|
44588
|
-
|
|
44589
|
-
|
|
44590
|
-
|
|
44591
|
-
|
|
44592
|
-
|
|
44593
|
-
|
|
44594
|
-
|
|
44595
|
-
|
|
44596
|
-
|
|
44597
|
-
|
|
44598
|
-
|
|
44599
|
-
|
|
44600
|
-
|
|
44601
|
-
|
|
44602
|
-
|
|
44603
|
-
|
|
44605
|
+
function getManagedTemplates(ctx = {}) {
|
|
44606
|
+
return {
|
|
44607
|
+
"elevasis.config.ts": configTemplate,
|
|
44608
|
+
".gitignore": () => gitignoreTemplate(ctx),
|
|
44609
|
+
"CLAUDE.md": () => claudeMdTemplate(ctx),
|
|
44610
|
+
".claude/settings.json": claudeSettingsTemplate,
|
|
44611
|
+
".claude/commands/docs.md": claudeDocsCommandTemplate,
|
|
44612
|
+
".claude/commands/resource.md": claudeResourceCommandTemplate,
|
|
44613
|
+
".claude/commands/tutorial.md": claudeTutorialCommandTemplate,
|
|
44614
|
+
".claude/commands/help.md": claudeHelpCommandTemplate,
|
|
44615
|
+
".claude/commands/templates.md": claudeTemplatesCommandTemplate,
|
|
44616
|
+
".claude/commands/database.md": claudeDatabaseCommandTemplate,
|
|
44617
|
+
".claude/commands/agent.md": claudeAgentCommandTemplate,
|
|
44618
|
+
".claude/commands/profile.md": claudeProfileCommandTemplate,
|
|
44619
|
+
".claude/commands/meta.md": claudeMetaCommandTemplate,
|
|
44620
|
+
".claude/commands/work.md": claudeWorkCommandTemplate,
|
|
44621
|
+
".claude/skills/creds/SKILL.md": claudeCredsSkillTemplate
|
|
44622
|
+
};
|
|
44623
|
+
}
|
|
44604
44624
|
function registerInitCommand(program3) {
|
|
44605
|
-
program3.command("init [directory]").description("Scaffold a new Elevasis workspace\n Example: elevasis init my-workspace").option("--force", "Overwrite existing files").action(wrapAction("init", async (directory, options2) => {
|
|
44625
|
+
program3.command("init [directory]").description("Scaffold a new Elevasis workspace\n Example: elevasis init my-workspace").option("--force", "Overwrite existing files").option("--ui", "Include a Vite + React UI app in ui/").action(wrapAction("init", async (directory, options2) => {
|
|
44606
44626
|
const targetDir = directory ? (0, import_path3.resolve)(directory) : process.cwd();
|
|
44607
44627
|
const orgSlug = toSlug((0, import_path3.basename)(targetDir));
|
|
44608
44628
|
if (!options2.force) {
|
|
44629
|
+
const filesToCheck = options2.ui ? [...SCAFFOLD_FILES, ...UI_INIT_FILES] : SCAFFOLD_FILES;
|
|
44609
44630
|
const conflicts = [];
|
|
44610
|
-
for (const file2 of
|
|
44631
|
+
for (const file2 of filesToCheck) {
|
|
44611
44632
|
try {
|
|
44612
44633
|
await (0, import_promises2.access)((0, import_path3.resolve)(targetDir, file2));
|
|
44613
44634
|
conflicts.push(file2);
|
|
@@ -44629,6 +44650,9 @@ function registerInitCommand(program3) {
|
|
|
44629
44650
|
await (0, import_promises2.mkdir)((0, import_path3.resolve)(targetDir, "docs/in-progress"), { recursive: true });
|
|
44630
44651
|
await (0, import_promises2.mkdir)((0, import_path3.resolve)(targetDir, ".claude/commands"), { recursive: true });
|
|
44631
44652
|
await (0, import_promises2.mkdir)((0, import_path3.resolve)(targetDir, ".claude/skills/creds"), { recursive: true });
|
|
44653
|
+
if (options2.ui) {
|
|
44654
|
+
await (0, import_promises2.mkdir)((0, import_path3.resolve)(targetDir, "ui/src"), { recursive: true });
|
|
44655
|
+
}
|
|
44632
44656
|
const files = {
|
|
44633
44657
|
"elevasis.config.ts": configTemplate(),
|
|
44634
44658
|
"package.json": packageJsonTemplate(orgSlug),
|
|
@@ -44637,7 +44661,7 @@ function registerInitCommand(program3) {
|
|
|
44637
44661
|
".env": envTemplate(),
|
|
44638
44662
|
".env.example": envExampleTemplate(),
|
|
44639
44663
|
".npmrc": npmrcTemplate(),
|
|
44640
|
-
".gitignore": gitignoreTemplate(),
|
|
44664
|
+
".gitignore": gitignoreTemplate({ hasUI: options2.ui }),
|
|
44641
44665
|
"src/index.ts": starterTemplate(),
|
|
44642
44666
|
"src/operations/platform-status.ts": platformStatusTemplate(),
|
|
44643
44667
|
"src/operations/index.ts": operationsBarrelTemplate(),
|
|
@@ -44646,7 +44670,7 @@ function registerInitCommand(program3) {
|
|
|
44646
44670
|
"src/shared/.gitkeep": "",
|
|
44647
44671
|
"docs/index.mdx": docsIndexTemplate(orgSlug),
|
|
44648
44672
|
"docs/in-progress/.gitkeep": "",
|
|
44649
|
-
"CLAUDE.md": claudeMdTemplate(),
|
|
44673
|
+
"CLAUDE.md": claudeMdTemplate({ hasUI: options2.ui }),
|
|
44650
44674
|
".claude/settings.json": claudeSettingsTemplate(),
|
|
44651
44675
|
".claude/commands/docs.md": claudeDocsCommandTemplate(),
|
|
44652
44676
|
".claude/commands/resource.md": claudeResourceCommandTemplate(),
|
|
@@ -44660,6 +44684,9 @@ function registerInitCommand(program3) {
|
|
|
44660
44684
|
".claude/commands/work.md": claudeWorkCommandTemplate(),
|
|
44661
44685
|
".claude/skills/creds/SKILL.md": claudeCredsSkillTemplate()
|
|
44662
44686
|
};
|
|
44687
|
+
if (options2.ui) {
|
|
44688
|
+
Object.assign(files, getUIFiles(orgSlug));
|
|
44689
|
+
}
|
|
44663
44690
|
for (const [filePath, content] of Object.entries(files)) {
|
|
44664
44691
|
await (0, import_promises2.writeFile)((0, import_path3.resolve)(targetDir, filePath), content, "utf-8");
|
|
44665
44692
|
}
|
|
@@ -44673,6 +44700,13 @@ function registerInitCommand(program3) {
|
|
|
44673
44700
|
console.log(source_default.gray(" # Copy .env.example to .env and add your API key"));
|
|
44674
44701
|
console.log(source_default.gray(" elevasis check"));
|
|
44675
44702
|
console.log(source_default.gray(" elevasis deploy"));
|
|
44703
|
+
if (options2.ui) {
|
|
44704
|
+
console.log("");
|
|
44705
|
+
console.log(source_default.gray(" UI app:"));
|
|
44706
|
+
console.log(source_default.gray(" cd ui && pnpm install"));
|
|
44707
|
+
console.log(source_default.gray(" # Set VITE_WORKOS_CLIENT_ID in ui/.env"));
|
|
44708
|
+
console.log(source_default.gray(" pnpm dev"));
|
|
44709
|
+
}
|
|
44676
44710
|
}));
|
|
44677
44711
|
}
|
|
44678
44712
|
function toSlug(name) {
|
|
@@ -44740,14 +44774,20 @@ function npmrcTemplate() {
|
|
|
44740
44774
|
return `auto-install-peers = true
|
|
44741
44775
|
`;
|
|
44742
44776
|
}
|
|
44743
|
-
function gitignoreTemplate() {
|
|
44744
|
-
|
|
44777
|
+
function gitignoreTemplate(ctx = {}) {
|
|
44778
|
+
let content = `node_modules/
|
|
44745
44779
|
.env
|
|
44746
44780
|
dist/
|
|
44747
44781
|
__elevasis_worker.ts
|
|
44748
44782
|
.claude/settings.local.json
|
|
44749
44783
|
.claude/memory/
|
|
44750
44784
|
`;
|
|
44785
|
+
if (ctx.hasUI) {
|
|
44786
|
+
content += `ui/node_modules/
|
|
44787
|
+
ui/dist/
|
|
44788
|
+
`;
|
|
44789
|
+
}
|
|
44790
|
+
return content;
|
|
44751
44791
|
}
|
|
44752
44792
|
function docsIndexTemplate(organization) {
|
|
44753
44793
|
return `---
|
|
@@ -44823,7 +44863,7 @@ elevasis exec echo --input '{"message": "hello"}'
|
|
|
44823
44863
|
function claudeSettingsTemplate() {
|
|
44824
44864
|
return JSON.stringify({ autoCompact: false }, null, 2) + "\n";
|
|
44825
44865
|
}
|
|
44826
|
-
function claudeMdTemplate() {
|
|
44866
|
+
function claudeMdTemplate(ctx = {}) {
|
|
44827
44867
|
return `<!-- initialized: false -->
|
|
44828
44868
|
|
|
44829
44869
|
# CLAUDE.md
|
|
@@ -44876,7 +44916,8 @@ proactivity -- to their assessed levels.
|
|
|
44876
44916
|
| Project resource map | \`docs/navigation.mdx\` | Understanding what's deployed |
|
|
44877
44917
|
| Project priorities | \`docs/priorities.mdx\` | Deciding what to work on next |
|
|
44878
44918
|
| User profile and skills | \`.claude/memory/profile/skills.md\` | Session start (mandatory) |
|
|
44879
|
-
| Cross-session memory | \`.claude/memory/index.md\` | Session start, recalling past context
|
|
44919
|
+
| Cross-session memory | \`.claude/memory/index.md\` | Session start, recalling past context |${ctx.hasUI ? `
|
|
44920
|
+
| UI app source | \`ui/src/\` | Modifying the frontend, adding routes or components |` : ""}
|
|
44880
44921
|
|
|
44881
44922
|
All \`reference/\` paths resolve to \`node_modules/@elevasis/sdk/reference/\`.
|
|
44882
44923
|
|
|
@@ -44898,7 +44939,17 @@ All \`reference/\` paths resolve to \`node_modules/@elevasis/sdk/reference/\`.
|
|
|
44898
44939
|
- When an error occurs, check \`.claude/memory/errors/\` first for past fixes.
|
|
44899
44940
|
If the error is new, check \`reference/troubleshooting/common-errors.mdx\`.
|
|
44900
44941
|
After resolving, record the error in \`memory/errors/\` with context and fix.
|
|
44901
|
-
If an error recurs 3+ times, promote it to a rule in this section.
|
|
44942
|
+
If an error recurs 3+ times, promote it to a rule in this section.${ctx.hasUI ? `
|
|
44943
|
+
|
|
44944
|
+
### UI App (\`ui/\`)
|
|
44945
|
+
|
|
44946
|
+
- \`ui/\` is a standalone Vite + React app with its own \`package.json\` -- not part of the pnpm workspace
|
|
44947
|
+
- Import from \`@elevasis/sdk-ui\`, never from \`@elevasis/sdk\` or \`@repo/ui\`
|
|
44948
|
+
- Dev server runs on port 5100: \`cd ui && pnpm dev\`
|
|
44949
|
+
- Set \`VITE_WORKOS_CLIENT_ID\` in \`ui/.env\` before running
|
|
44950
|
+
- \`ElevasisProvider\` is pre-configured in \`ui/src/App.tsx\` (oauth mode, redirectUri \`http://localhost:5100/auth-redirect\`, apiUrl \`http://localhost:5170\`)
|
|
44951
|
+
- 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
|
|
44952
|
+
- API must be running on port 5170 for the UI to work (\`pnpm --filter api dev\` from the platform monorepo)` : ""}
|
|
44902
44953
|
|
|
44903
44954
|
## Interaction Guidance
|
|
44904
44955
|
|
|
@@ -45837,12 +45888,166 @@ export const workflows = [echo]
|
|
|
45837
45888
|
export const agents = []
|
|
45838
45889
|
`;
|
|
45839
45890
|
}
|
|
45891
|
+
function getUIFiles(orgSlug) {
|
|
45892
|
+
return {
|
|
45893
|
+
"ui/package.json": uiPackageJsonTemplate(orgSlug),
|
|
45894
|
+
"ui/index.html": uiIndexHtmlTemplate(),
|
|
45895
|
+
"ui/vite.config.ts": uiViteConfigTemplate(),
|
|
45896
|
+
"ui/tsconfig.json": uiTsconfigTemplate(),
|
|
45897
|
+
"ui/src/main.tsx": uiMainTsxTemplate(),
|
|
45898
|
+
"ui/src/App.tsx": uiAppTsxTemplate(),
|
|
45899
|
+
"ui/src/AuthRedirect.tsx": uiAuthRedirectTemplate(),
|
|
45900
|
+
"ui/src/vite-env.d.ts": uiViteEnvDtsTemplate(),
|
|
45901
|
+
"ui/.env": uiEnvTemplate(),
|
|
45902
|
+
"ui/.env.example": uiEnvExampleTemplate()
|
|
45903
|
+
};
|
|
45904
|
+
}
|
|
45905
|
+
function uiPackageJsonTemplate(orgSlug) {
|
|
45906
|
+
return JSON.stringify({
|
|
45907
|
+
name: `${orgSlug}-ui`,
|
|
45908
|
+
private: true,
|
|
45909
|
+
type: "module",
|
|
45910
|
+
scripts: {
|
|
45911
|
+
dev: "vite",
|
|
45912
|
+
build: "tsc && vite build",
|
|
45913
|
+
preview: "vite preview"
|
|
45914
|
+
},
|
|
45915
|
+
dependencies: {
|
|
45916
|
+
"@elevasis/sdk-ui": "latest",
|
|
45917
|
+
"@mantine/core": "^8.0.0",
|
|
45918
|
+
"@mantine/hooks": "^8.0.0",
|
|
45919
|
+
"react": "^19.0.0",
|
|
45920
|
+
"react-dom": "^19.0.0",
|
|
45921
|
+
"react-router-dom": "^7.0.0"
|
|
45922
|
+
},
|
|
45923
|
+
devDependencies: {
|
|
45924
|
+
"@types/react": "^19.0.0",
|
|
45925
|
+
"@types/react-dom": "^19.0.0",
|
|
45926
|
+
"@vitejs/plugin-react": "^4.0.0",
|
|
45927
|
+
"typescript": "^5.7.0",
|
|
45928
|
+
"vite": "^6.0.0"
|
|
45929
|
+
}
|
|
45930
|
+
}, null, 2) + "\n";
|
|
45931
|
+
}
|
|
45932
|
+
function uiIndexHtmlTemplate() {
|
|
45933
|
+
return `<!doctype html>
|
|
45934
|
+
<html lang="en">
|
|
45935
|
+
<head>
|
|
45936
|
+
<meta charset="UTF-8" />
|
|
45937
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
45938
|
+
<title>Elevasis UI</title>
|
|
45939
|
+
</head>
|
|
45940
|
+
<body>
|
|
45941
|
+
<div id="root"></div>
|
|
45942
|
+
<script type="module" src="/src/main.tsx"></script>
|
|
45943
|
+
</body>
|
|
45944
|
+
</html>
|
|
45945
|
+
`;
|
|
45946
|
+
}
|
|
45947
|
+
function uiViteConfigTemplate() {
|
|
45948
|
+
return `import { defineConfig } from 'vite'
|
|
45949
|
+
import react from '@vitejs/plugin-react'
|
|
45950
|
+
|
|
45951
|
+
export default defineConfig({
|
|
45952
|
+
plugins: [react()],
|
|
45953
|
+
server: {
|
|
45954
|
+
port: 5100,
|
|
45955
|
+
},
|
|
45956
|
+
})
|
|
45957
|
+
`;
|
|
45958
|
+
}
|
|
45959
|
+
function uiTsconfigTemplate() {
|
|
45960
|
+
return JSON.stringify({
|
|
45961
|
+
compilerOptions: {
|
|
45962
|
+
target: "ES2022",
|
|
45963
|
+
lib: ["ES2022", "DOM", "DOM.Iterable"],
|
|
45964
|
+
module: "ESNext",
|
|
45965
|
+
moduleResolution: "bundler",
|
|
45966
|
+
jsx: "react-jsx",
|
|
45967
|
+
strict: true,
|
|
45968
|
+
esModuleInterop: true,
|
|
45969
|
+
skipLibCheck: true,
|
|
45970
|
+
forceConsistentCasingInFileNames: true,
|
|
45971
|
+
isolatedModules: true,
|
|
45972
|
+
noEmit: true
|
|
45973
|
+
},
|
|
45974
|
+
include: ["src"]
|
|
45975
|
+
}, null, 2) + "\n";
|
|
45976
|
+
}
|
|
45977
|
+
function uiMainTsxTemplate() {
|
|
45978
|
+
return `import { StrictMode } from 'react'
|
|
45979
|
+
import { createRoot } from 'react-dom/client'
|
|
45980
|
+
import { BrowserRouter } from 'react-router-dom'
|
|
45981
|
+
import { App } from './App'
|
|
45982
|
+
|
|
45983
|
+
createRoot(document.getElementById('root')!).render(
|
|
45984
|
+
<StrictMode>
|
|
45985
|
+
<BrowserRouter>
|
|
45986
|
+
<App />
|
|
45987
|
+
</BrowserRouter>
|
|
45988
|
+
</StrictMode>,
|
|
45989
|
+
)
|
|
45990
|
+
`;
|
|
45991
|
+
}
|
|
45992
|
+
function uiAppTsxTemplate() {
|
|
45993
|
+
return `import { Routes, Route } from 'react-router-dom'
|
|
45994
|
+
import { ElevasisProvider } from '@elevasis/sdk-ui'
|
|
45995
|
+
import { AuthRedirect } from './AuthRedirect'
|
|
45996
|
+
|
|
45997
|
+
export function App() {
|
|
45998
|
+
return (
|
|
45999
|
+
<ElevasisProvider
|
|
46000
|
+
mode="oauth"
|
|
46001
|
+
clientId={import.meta.env.VITE_WORKOS_CLIENT_ID}
|
|
46002
|
+
redirectUri="http://localhost:5100/auth-redirect"
|
|
46003
|
+
apiUrl="http://localhost:5170"
|
|
46004
|
+
>
|
|
46005
|
+
<Routes>
|
|
46006
|
+
<Route path="/" element={<h1>Home</h1>} />
|
|
46007
|
+
<Route path="/auth-redirect" element={<AuthRedirect />} />
|
|
46008
|
+
</Routes>
|
|
46009
|
+
</ElevasisProvider>
|
|
46010
|
+
)
|
|
46011
|
+
}
|
|
46012
|
+
`;
|
|
46013
|
+
}
|
|
46014
|
+
function uiAuthRedirectTemplate() {
|
|
46015
|
+
return `import { useEffect } from 'react'
|
|
46016
|
+
import { useNavigate } from 'react-router-dom'
|
|
46017
|
+
import { useAuthContext } from '@elevasis/sdk-ui/auth'
|
|
46018
|
+
|
|
46019
|
+
export function AuthRedirect() {
|
|
46020
|
+
const { user } = useAuthContext()
|
|
46021
|
+
const navigate = useNavigate()
|
|
46022
|
+
|
|
46023
|
+
useEffect(() => {
|
|
46024
|
+
if (user) {
|
|
46025
|
+
navigate('/', { replace: true })
|
|
46026
|
+
}
|
|
46027
|
+
}, [user, navigate])
|
|
46028
|
+
|
|
46029
|
+
return <p>Signing in...</p>
|
|
46030
|
+
}
|
|
46031
|
+
`;
|
|
46032
|
+
}
|
|
46033
|
+
function uiViteEnvDtsTemplate() {
|
|
46034
|
+
return `/// <reference types="vite/client" />
|
|
46035
|
+
`;
|
|
46036
|
+
}
|
|
46037
|
+
function uiEnvTemplate() {
|
|
46038
|
+
return `VITE_WORKOS_CLIENT_ID=
|
|
46039
|
+
`;
|
|
46040
|
+
}
|
|
46041
|
+
function uiEnvExampleTemplate() {
|
|
46042
|
+
return `VITE_WORKOS_CLIENT_ID=your_workos_client_id
|
|
46043
|
+
`;
|
|
46044
|
+
}
|
|
45840
46045
|
|
|
45841
46046
|
// src/cli/commands/update.ts
|
|
45842
46047
|
var import_path4 = require("path");
|
|
45843
46048
|
var import_promises3 = require("fs/promises");
|
|
45844
46049
|
function registerUpdateCommand(program3) {
|
|
45845
|
-
program3.command("update").description("Update project scaffold to latest template version").action(wrapAction("update", async () => {
|
|
46050
|
+
program3.command("update").description("Update project scaffold to latest template version").option("--ui", "Add a Vite + React UI app in ui/").action(wrapAction("update", async (options2 = {}) => {
|
|
45846
46051
|
const cwd = process.cwd();
|
|
45847
46052
|
const configPath = (0, import_path4.resolve)(cwd, "elevasis.config.ts");
|
|
45848
46053
|
let currentVersion = 0;
|
|
@@ -45855,16 +46060,28 @@ function registerUpdateCommand(program3) {
|
|
|
45855
46060
|
}
|
|
45856
46061
|
} catch {
|
|
45857
46062
|
}
|
|
45858
|
-
|
|
46063
|
+
const upToDate = currentVersion >= TEMPLATE_VERSION;
|
|
46064
|
+
if (upToDate && !options2.ui) {
|
|
45859
46065
|
console.log(source_default.green(` Project is up to date (template version ${TEMPLATE_VERSION})`));
|
|
45860
46066
|
return;
|
|
45861
46067
|
}
|
|
46068
|
+
let hasUI = !!options2.ui;
|
|
46069
|
+
if (!hasUI) {
|
|
46070
|
+
try {
|
|
46071
|
+
await (0, import_promises3.access)((0, import_path4.resolve)(cwd, "ui"));
|
|
46072
|
+
hasUI = true;
|
|
46073
|
+
} catch {
|
|
46074
|
+
}
|
|
46075
|
+
}
|
|
46076
|
+
const managedTemplates = getManagedTemplates({ hasUI });
|
|
45862
46077
|
const added = [];
|
|
45863
46078
|
const flagged = [];
|
|
45864
46079
|
const appendedGitignore = [];
|
|
45865
|
-
|
|
46080
|
+
const uiAffectedFiles = /* @__PURE__ */ new Set([".gitignore", "CLAUDE.md"]);
|
|
46081
|
+
const filesToProcess = upToDate ? MANAGED_FILES.filter((f) => uiAffectedFiles.has(f)) : MANAGED_FILES;
|
|
46082
|
+
for (const file2 of filesToProcess) {
|
|
45866
46083
|
const filePath = (0, import_path4.resolve)(cwd, file2);
|
|
45867
|
-
const templateFn =
|
|
46084
|
+
const templateFn = managedTemplates[file2];
|
|
45868
46085
|
if (!templateFn) continue;
|
|
45869
46086
|
const templateContent = templateFn();
|
|
45870
46087
|
if (file2 === ".gitignore") {
|
|
@@ -45933,8 +46150,34 @@ function registerUpdateCommand(program3) {
|
|
|
45933
46150
|
}
|
|
45934
46151
|
}
|
|
45935
46152
|
}
|
|
46153
|
+
const uiAdded = [];
|
|
46154
|
+
const uiSkipped = [];
|
|
46155
|
+
if (options2.ui) {
|
|
46156
|
+
const orgSlug = (0, import_path4.basename)(cwd).toLowerCase().replace(/[^a-z0-9-]/g, "-").replace(/^[^a-z]+/, "").replace(/-+/g, "-").replace(/-$/, "") || "my-workspace";
|
|
46157
|
+
await (0, import_promises3.mkdir)((0, import_path4.resolve)(cwd, "ui/src"), { recursive: true });
|
|
46158
|
+
const uiFiles = getUIFiles(orgSlug);
|
|
46159
|
+
for (const [file2, content] of Object.entries(uiFiles)) {
|
|
46160
|
+
const filePath = (0, import_path4.resolve)(cwd, file2);
|
|
46161
|
+
let exists = false;
|
|
46162
|
+
try {
|
|
46163
|
+
await (0, import_promises3.access)(filePath);
|
|
46164
|
+
exists = true;
|
|
46165
|
+
} catch {
|
|
46166
|
+
}
|
|
46167
|
+
if (!exists) {
|
|
46168
|
+
await (0, import_promises3.writeFile)(filePath, content, "utf-8");
|
|
46169
|
+
uiAdded.push(file2);
|
|
46170
|
+
} else {
|
|
46171
|
+
uiSkipped.push(file2);
|
|
46172
|
+
}
|
|
46173
|
+
}
|
|
46174
|
+
}
|
|
45936
46175
|
console.log("");
|
|
45937
|
-
|
|
46176
|
+
if (upToDate) {
|
|
46177
|
+
console.log(source_default.green.bold(` Added UI to project (template version ${TEMPLATE_VERSION})`));
|
|
46178
|
+
} else {
|
|
46179
|
+
console.log(source_default.green.bold(` Updated @elevasis/sdk template v${currentVersion} -> v${TEMPLATE_VERSION}`));
|
|
46180
|
+
}
|
|
45938
46181
|
if (added.length > 0) {
|
|
45939
46182
|
console.log("");
|
|
45940
46183
|
console.log(" Added:");
|
|
@@ -45961,6 +46204,23 @@ function registerUpdateCommand(program3) {
|
|
|
45961
46204
|
console.log(source_default.gray(" Run /meta update in Claude Code to merge flagged files."));
|
|
45962
46205
|
console.log(source_default.gray(" Or run /meta fix to verify and repair the full framework."));
|
|
45963
46206
|
}
|
|
46207
|
+
if (uiAdded.length > 0) {
|
|
46208
|
+
console.log("");
|
|
46209
|
+
console.log(" UI scaffold added:");
|
|
46210
|
+
for (const file2 of uiAdded) {
|
|
46211
|
+
console.log(source_default.green(` ${file2}`));
|
|
46212
|
+
}
|
|
46213
|
+
console.log("");
|
|
46214
|
+
console.log(source_default.gray(" Next: cd ui && pnpm install"));
|
|
46215
|
+
console.log(source_default.gray(" Set VITE_WORKOS_CLIENT_ID in ui/.env"));
|
|
46216
|
+
}
|
|
46217
|
+
if (uiSkipped.length > 0) {
|
|
46218
|
+
console.log("");
|
|
46219
|
+
console.log(" UI files already exist (skipped):");
|
|
46220
|
+
for (const file2 of uiSkipped) {
|
|
46221
|
+
console.log(source_default.gray(` ${file2}`));
|
|
46222
|
+
}
|
|
46223
|
+
}
|
|
45964
46224
|
console.log("");
|
|
45965
46225
|
}));
|
|
45966
46226
|
}
|
package/dist/index.d.ts
CHANGED
|
@@ -6355,4 +6355,4 @@ declare class ToolingError extends ExecutionError {
|
|
|
6355
6355
|
}
|
|
6356
6356
|
|
|
6357
6357
|
export { ExecutionError, RegistryValidationError, ResourceRegistry, StepType, ToolingError };
|
|
6358
|
-
export type { AbsoluteScheduleConfig, AcqCompany, AcqContact, AcqDeal, AcqList, AddChecklistItemParams, AddChecklistItemResult, AddToCampaignLead, AddToCampaignParams, AddToCampaignResult, AgentConfig, AgentConstraints, AgentDefinition, AgentMemory, ApifyToolMap, AppendBlocksParams, AppendBlocksResult, AppendRowsParams, AppendRowsResult, ApprovalToolMap, AttioToolMap, BatchUpdateParams, BatchUpdateResult, BulkImportParams, BulkImportResult, CancelHitlByDealIdParams, CancelSchedulesAndHitlByEmailParams, ClearDealFieldsParams, ClearRangeParams, ClearRangeResult, CompanyFilters, ConditionalNext, ContactFilters, Contract, CreateAttributeParams, CreateAttributeResult, CreateAutoPaymentLinkParams, CreateAutoPaymentLinkResult, CreateCardParams, CreateCardResult, CreateChecklistParams, CreateChecklistResult, CreateCheckoutSessionParams, CreateCheckoutSessionResult, CreateCompanyParams, CreateContactParams, CreateEnvelopeParams, CreateEnvelopeResult, CreateFolderParams, CreateFolderResult, CreateListParams, CreateNoteParams, CreateNoteResult, CreatePageParams, CreatePageResult, CreatePaymentLinkParams, CreatePaymentLinkResult, CreateRecordParams, CreateRecordResult, CreateScheduleInput, DeleteBlocksParams, DeleteBlocksResult, DeleteDealParams, DeleteNoteParams, DeleteNoteResult, DeletePageParams, DeletePageResult, DeleteRecordParams, DeleteRecordResult, DeleteRowByValueParams, DeleteRowByValueResult, DomainDefinition, DownloadDocumentParams, DownloadDocumentResult, DropboxToolMap, ElevasConfig, EmailToolMap, EnvelopeDocument, EventTriggerConfig, ExecutionContext, ExecutionInterface, ExecutionMetadata, ExecutionToolMap, FilterExpression, FilterRowsParams, FilterRowsResult, FormField, FormFieldType, FormSchema, GetBoardParams, GetBoardResult, GetCardChecklistsParams, GetCardChecklistsResult, GetCardsParams, GetCardsResult, GetEmailsParams, GetEmailsResult, GetEnvelopeParams, GetEnvelopeResult, GetHeadersParams, GetHeadersResult, GetLastRowParams, GetLastRowResult, GetListsParams, GetListsResult, GetPaymentLinkParams, GetPaymentLinkResult, GetRecordParams, GetRecordResult, GetRowByValueParams, GetRowByValueResult, GetSpreadsheetMetadataParams, GetSpreadsheetMetadataResult, GmailSendEmailParams, GmailSendEmailResult, GmailToolMap, GoogleSheetsToolMap, InstantlyToolMap, IntegrationDefinition, LLMAdapterFactory, LLMGenerateRequest, LLMGenerateResponse, LLMMessage, LLMModel, LeadToolMap, LinearNext, ListAllPagesResult, ListAttributesParams, ListAttributesResult, ListNotesParams, ListNotesResult, ListObjectsResult, ListPaymentLinksParams, ListPaymentLinksResult, MailsoToolMap, MailsoVerifyEmailParams, MailsoVerifyEmailResult, MarkProposalReviewedParams, MarkProposalSentParams, MethodEntry, ModelConfig, NextConfig, NotificationSDKInput, NotificationToolMap, NotionToolMap, OrganizationResources, PageWithChildren, PaginatedResult, PaginationParams$1 as PaginationParams, PdfToolMap, QueryRecordsParams, QueryRecordsResult, ReadPageParams, ReadPageResult, ReadSheetParams, ReadSheetResult, Recipient, RecurringScheduleConfig, RelationshipDeclaration, RelativeScheduleConfig, RemoveFromSubsequenceParams, RemoveFromSubsequenceResult, ResendGetEmailParams, ResendGetEmailResult, ResendSendEmailParams, ResendSendEmailResult, ResendToolMap, ResourceDefinition, ResourceDomain, ResourceMetricsConfig, ResourceRelationships, ResourceStatus, ResourceType, RunActorParams, RunActorResult, ScheduleOriginTracking, ScheduleTarget, ScheduleTriggerConfig, SchedulerToolMap, SendReplyParams, SendReplyResult, SetContactNurtureParams, SheetInfo, SignatureApiFieldType, SignatureApiToolMap, SigningPlace, SortCriteria, StepHandler, StorageDeleteInput, StorageDeleteOutput, StorageDownloadInput, StorageDownloadOutput, StorageListInput, StorageListOutput, StorageSignedUrlInput, StorageSignedUrlOutput, StorageToolMap, StorageUploadInput, StorageUploadOutput, StripeToolMap, SyncDealStageParams, TaskSchedule, TaskScheduleConfig, Tool, ToolExecutionOptions, ToolMethodMap, ToolingErrorType, TrelloCreateListParams, TrelloCreateListResult, TrelloToolMap, TriggerConfig, TriggerDefinition, UpdateAttributeParams, UpdateAttributeResult, UpdateBlocksParams, UpdateBlocksResult, UpdateCardParams, UpdateCardResult, UpdateChecklistItemParams, UpdateChecklistItemResult, UpdateCloseLostReasonParams, UpdateCompanyParams, UpdateContactParams, UpdateDiscoveryDataParams, UpdateFeesParams, UpdateInterestStatusParams, UpdateInterestStatusResult, UpdateListParams, UpdatePageTitleParams, UpdatePageTitleResult, UpdatePaymentLinkParams, UpdatePaymentLinkResult, UpdateProposalDataParams, UpdateRecordParams, UpdateRecordResult, UpdateRowByValueParams, UpdateRowByValueResult, UploadFileParams, UploadFileResult, UpsertCompanyParams, UpsertContactParams, UpsertDealParams, UpsertRowParams, UpsertRowResult, VoidEnvelopeParams, VoidEnvelopeResult, WebhookProviderType, WebhookTriggerConfig, WorkflowConfig, WorkflowDefinition, WorkflowStep, WriteSheetParams, WriteSheetResult };
|
|
6358
|
+
export type { AbsoluteScheduleConfig, AcqCompany, AcqContact, AcqDeal, AcqList, AddChecklistItemParams, AddChecklistItemResult, AddToCampaignLead, AddToCampaignParams, AddToCampaignResult, AgentConfig, AgentConstraints, AgentDefinition, AgentMemory, ApifyToolMap, AppendBlocksParams, AppendBlocksResult, AppendRowsParams, AppendRowsResult, ApprovalToolMap, AttioToolMap, BatchUpdateParams, BatchUpdateResult, BulkImportParams, BulkImportResult, CancelHitlByDealIdParams, CancelSchedulesAndHitlByEmailParams, ClearDealFieldsParams, ClearRangeParams, ClearRangeResult, CompanyFilters, ConditionalNext, ContactFilters, Contract, CreateAttributeParams, CreateAttributeResult, CreateAutoPaymentLinkParams, CreateAutoPaymentLinkResult, CreateCardParams, CreateCardResult, CreateChecklistParams, CreateChecklistResult, CreateCheckoutSessionParams, CreateCheckoutSessionResult, CreateCompanyParams, CreateContactParams, CreateEnvelopeParams, CreateEnvelopeResult, CreateFolderParams, CreateFolderResult, CreateListParams, CreateNoteParams, CreateNoteResult, CreatePageParams, CreatePageResult, CreatePaymentLinkParams, CreatePaymentLinkResult, CreateRecordParams, CreateRecordResult, CreateScheduleInput, DeleteBlocksParams, DeleteBlocksResult, DeleteDealParams, DeleteNoteParams, DeleteNoteResult, DeletePageParams, DeletePageResult, DeleteRecordParams, DeleteRecordResult, DeleteRowByValueParams, DeleteRowByValueResult, DomainDefinition, DownloadDocumentParams, DownloadDocumentResult, DropboxToolMap, ElevasConfig, EmailToolMap, EnvelopeDocument, EventTriggerConfig, ExecutionContext, ExecutionInterface, ExecutionMetadata, ExecutionToolMap, FilterExpression, FilterRowsParams, FilterRowsResult, FormField, FormFieldType, FormSchema, GetBoardParams, GetBoardResult, GetCardChecklistsParams, GetCardChecklistsResult, GetCardsParams, GetCardsResult, GetEmailsParams, GetEmailsResult, GetEnvelopeParams, GetEnvelopeResult, GetHeadersParams, GetHeadersResult, GetLastRowParams, GetLastRowResult, GetListsParams, GetListsResult, GetPaymentLinkParams, GetPaymentLinkResult, GetRecordParams, GetRecordResult, GetRowByValueParams, GetRowByValueResult, GetSpreadsheetMetadataParams, GetSpreadsheetMetadataResult, GmailSendEmailParams, GmailSendEmailResult, GmailToolMap, GoogleSheetsToolMap, HumanCheckpointDefinition, InstantlyToolMap, IntegrationDefinition, LLMAdapterFactory, LLMGenerateRequest, LLMGenerateResponse, LLMMessage, LLMModel, LeadToolMap, LinearNext, ListAllPagesResult, ListAttributesParams, ListAttributesResult, ListNotesParams, ListNotesResult, ListObjectsResult, ListPaymentLinksParams, ListPaymentLinksResult, MailsoToolMap, MailsoVerifyEmailParams, MailsoVerifyEmailResult, MarkProposalReviewedParams, MarkProposalSentParams, MethodEntry, ModelConfig, NextConfig, NotificationSDKInput, NotificationToolMap, NotionToolMap, OrganizationResources, PageWithChildren, PaginatedResult, PaginationParams$1 as PaginationParams, PdfToolMap, QueryRecordsParams, QueryRecordsResult, ReadPageParams, ReadPageResult, ReadSheetParams, ReadSheetResult, Recipient, RecurringScheduleConfig, RelationshipDeclaration, RelativeScheduleConfig, RemoveFromSubsequenceParams, RemoveFromSubsequenceResult, ResendGetEmailParams, ResendGetEmailResult, ResendSendEmailParams, ResendSendEmailResult, ResendToolMap, ResourceDefinition, ResourceDomain, ResourceMetricsConfig, ResourceRelationships, ResourceStatus, ResourceType, RunActorParams, RunActorResult, ScheduleOriginTracking, ScheduleTarget, ScheduleTriggerConfig, SchedulerToolMap, SendReplyParams, SendReplyResult, SetContactNurtureParams, SheetInfo, SignatureApiFieldType, SignatureApiToolMap, SigningPlace, SortCriteria, StepHandler, StorageDeleteInput, StorageDeleteOutput, StorageDownloadInput, StorageDownloadOutput, StorageListInput, StorageListOutput, StorageSignedUrlInput, StorageSignedUrlOutput, StorageToolMap, StorageUploadInput, StorageUploadOutput, StripeToolMap, SyncDealStageParams, TaskSchedule, TaskScheduleConfig, Tool, ToolExecutionOptions, ToolMethodMap, ToolingErrorType, TrelloCreateListParams, TrelloCreateListResult, TrelloToolMap, TriggerConfig, TriggerDefinition, UpdateAttributeParams, UpdateAttributeResult, UpdateBlocksParams, UpdateBlocksResult, UpdateCardParams, UpdateCardResult, UpdateChecklistItemParams, UpdateChecklistItemResult, UpdateCloseLostReasonParams, UpdateCompanyParams, UpdateContactParams, UpdateDiscoveryDataParams, UpdateFeesParams, UpdateInterestStatusParams, UpdateInterestStatusResult, UpdateListParams, UpdatePageTitleParams, UpdatePageTitleResult, UpdatePaymentLinkParams, UpdatePaymentLinkResult, UpdateProposalDataParams, UpdateRecordParams, UpdateRecordResult, UpdateRowByValueParams, UpdateRowByValueResult, UploadFileParams, UploadFileResult, UpsertCompanyParams, UpsertContactParams, UpsertDealParams, UpsertRowParams, UpsertRowResult, VoidEnvelopeParams, VoidEnvelopeResult, WebhookProviderType, WebhookTriggerConfig, WorkflowConfig, WorkflowDefinition, WorkflowStep, WriteSheetParams, WriteSheetResult };
|
package/dist/templates.js
CHANGED
|
@@ -1,17 +1,23 @@
|
|
|
1
1
|
// package.json
|
|
2
|
-
function gitignoreTemplate() {
|
|
3
|
-
|
|
2
|
+
function gitignoreTemplate(ctx = {}) {
|
|
3
|
+
let content = `node_modules/
|
|
4
4
|
.env
|
|
5
5
|
dist/
|
|
6
6
|
__elevasis_worker.ts
|
|
7
7
|
.claude/settings.local.json
|
|
8
8
|
.claude/memory/
|
|
9
9
|
`;
|
|
10
|
+
if (ctx.hasUI) {
|
|
11
|
+
content += `ui/node_modules/
|
|
12
|
+
ui/dist/
|
|
13
|
+
`;
|
|
14
|
+
}
|
|
15
|
+
return content;
|
|
10
16
|
}
|
|
11
17
|
function claudeSettingsTemplate() {
|
|
12
18
|
return JSON.stringify({ autoCompact: false }, null, 2) + "\n";
|
|
13
19
|
}
|
|
14
|
-
function claudeMdTemplate() {
|
|
20
|
+
function claudeMdTemplate(ctx = {}) {
|
|
15
21
|
return `<!-- initialized: false -->
|
|
16
22
|
|
|
17
23
|
# CLAUDE.md
|
|
@@ -64,7 +70,8 @@ proactivity -- to their assessed levels.
|
|
|
64
70
|
| Project resource map | \`docs/navigation.mdx\` | Understanding what's deployed |
|
|
65
71
|
| Project priorities | \`docs/priorities.mdx\` | Deciding what to work on next |
|
|
66
72
|
| User profile and skills | \`.claude/memory/profile/skills.md\` | Session start (mandatory) |
|
|
67
|
-
| Cross-session memory | \`.claude/memory/index.md\` | Session start, recalling past context
|
|
73
|
+
| Cross-session memory | \`.claude/memory/index.md\` | Session start, recalling past context |${ctx.hasUI ? `
|
|
74
|
+
| UI app source | \`ui/src/\` | Modifying the frontend, adding routes or components |` : ""}
|
|
68
75
|
|
|
69
76
|
All \`reference/\` paths resolve to \`node_modules/@elevasis/sdk/reference/\`.
|
|
70
77
|
|
|
@@ -86,7 +93,17 @@ All \`reference/\` paths resolve to \`node_modules/@elevasis/sdk/reference/\`.
|
|
|
86
93
|
- When an error occurs, check \`.claude/memory/errors/\` first for past fixes.
|
|
87
94
|
If the error is new, check \`reference/troubleshooting/common-errors.mdx\`.
|
|
88
95
|
After resolving, record the error in \`memory/errors/\` with context and fix.
|
|
89
|
-
If an error recurs 3+ times, promote it to a rule in this section.
|
|
96
|
+
If an error recurs 3+ times, promote it to a rule in this section.${ctx.hasUI ? `
|
|
97
|
+
|
|
98
|
+
### UI App (\`ui/\`)
|
|
99
|
+
|
|
100
|
+
- \`ui/\` is a standalone Vite + React app with its own \`package.json\` -- not part of the pnpm workspace
|
|
101
|
+
- Import from \`@elevasis/sdk-ui\`, never from \`@elevasis/sdk\` or \`@repo/ui\`
|
|
102
|
+
- Dev server runs on port 5100: \`cd ui && pnpm dev\`
|
|
103
|
+
- Set \`VITE_WORKOS_CLIENT_ID\` in \`ui/.env\` before running
|
|
104
|
+
- \`ElevasisProvider\` is pre-configured in \`ui/src/App.tsx\` (oauth mode, redirectUri \`http://localhost:5100/auth-redirect\`, apiUrl \`http://localhost:5170\`)
|
|
105
|
+
- 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
|
|
106
|
+
- API must be running on port 5170 for the UI to work (\`pnpm --filter api dev\` from the platform monorepo)` : ""}
|
|
90
107
|
|
|
91
108
|
## Interaction Guidance
|
|
92
109
|
|
|
@@ -6,7 +6,9 @@
|
|
|
6
6
|
*
|
|
7
7
|
* Message protocol:
|
|
8
8
|
* Parent -> Worker: { type: 'manifest' }
|
|
9
|
-
* Worker -> Parent: { type: 'manifest', workflows: [...], agents: [...]
|
|
9
|
+
* Worker -> Parent: { type: 'manifest', workflows: [...], agents: [...],
|
|
10
|
+
* triggers?: [...], integrations?: [...], humanCheckpoints?: [...],
|
|
11
|
+
* relationships?: {...} }
|
|
10
12
|
*
|
|
11
13
|
* Parent -> Worker: { type: 'execute', resourceId, executionId, input, organizationId?, organizationName?,
|
|
12
14
|
* sessionId?, sessionTurnNumber?, parentExecutionId?, executionDepth }
|
package/dist/worker/index.js
CHANGED
|
@@ -5130,7 +5130,11 @@ function startWorker(org) {
|
|
|
5130
5130
|
status: a.config.status,
|
|
5131
5131
|
description: a.config.description,
|
|
5132
5132
|
version: a.config.version
|
|
5133
|
-
}))
|
|
5133
|
+
})),
|
|
5134
|
+
triggers: org.triggers ?? [],
|
|
5135
|
+
integrations: org.integrations ?? [],
|
|
5136
|
+
humanCheckpoints: org.humanCheckpoints ?? [],
|
|
5137
|
+
relationships: org.relationships ?? void 0
|
|
5134
5138
|
});
|
|
5135
5139
|
return;
|
|
5136
5140
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@elevasis/sdk",
|
|
3
|
-
"version": "0.4.
|
|
3
|
+
"version": "0.4.13",
|
|
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",
|
|
@@ -40,7 +40,7 @@ At the start of every session the agent runs these steps silently before respond
|
|
|
40
40
|
|
|
41
41
|
Slash commands are short Markdown instruction files in `.claude/commands/`. When you type `/command-name` in a Claude Code session, the agent reads the corresponding file and follows its instructions.
|
|
42
42
|
|
|
43
|
-
|
|
43
|
+
Ten commands and one skill are scaffolded by `elevasis init` and committed to version control so collaborators get the same experience:
|
|
44
44
|
|
|
45
45
|
| Command | File | Purpose |
|
|
46
46
|
| --- | --- | --- |
|
|
@@ -53,6 +53,9 @@ All nine commands are scaffolded by `elevasis init` and committed to version con
|
|
|
53
53
|
| `/tutorial` | `tutorial.md` | Progressive learning path for new developers |
|
|
54
54
|
| `/help` | `help.md` | Displays the full command tree and navigation map |
|
|
55
55
|
| `/profile` | `profile.md` | Views and updates the developer profile in `memory/profile/` |
|
|
56
|
+
| `/work` | `work.md` | In-progress task tracking -- save, resume, list |
|
|
57
|
+
|
|
58
|
+
The `/creds` skill (`.claude/skills/creds/SKILL.md`) is also scaffolded. It auto-triggers when the agent detects credential-related context and manages credential storage and retrieval.
|
|
56
59
|
|
|
57
60
|
### `/meta` Command
|
|
58
61
|
|
|
@@ -172,4 +175,4 @@ Applies when TypeScript level is `advanced` and automation level is `experienced
|
|
|
172
175
|
|
|
173
176
|
---
|
|
174
177
|
|
|
175
|
-
**Last Updated:** 2026-02
|
|
178
|
+
**Last Updated:** 2026-03-02
|
|
@@ -853,7 +853,7 @@ Method names are compile-time checked against the type map keys -- misspelling a
|
|
|
853
853
|
| Tool has a typed adapter (all integrations + platform tools) | Adapter |
|
|
854
854
|
| Need autocomplete and type safety | Adapter |
|
|
855
855
|
| New dispatcher method added server-side, no SDK update yet | `platform.call()` |
|
|
856
|
-
| Tool without a typed adapter (supabase, session-memory,
|
|
856
|
+
| Tool without a typed adapter (supabase, session-memory, status, http) | `platform.call()` |
|
|
857
857
|
|
|
858
858
|
`platform.call()` remains the universal escape hatch. Every adapter call compiles down to it. Both approaches work simultaneously with no conflicts.
|
|
859
859
|
|
|
@@ -925,3 +925,5 @@ Timeouts: LLM calls have a 120s timeout. All other tool calls have a 60s timeout
|
|
|
925
925
|
---
|
|
926
926
|
|
|
927
927
|
**Last Updated:** 2026-03-02
|
|
928
|
+
|
|
929
|
+
|
|
@@ -40,23 +40,22 @@ Both patterns return a Promise that resolves with the tool result or rejects wit
|
|
|
40
40
|
|
|
41
41
|
## Integration Adapters
|
|
42
42
|
|
|
43
|
-
|
|
43
|
+
Twelve integration adapters give you access to 60+ tool methods covering third-party APIs. Pass the `credential` field with the name of the stored credential for that service. Supabase is listed separately under [Database Access](#database-access) below.
|
|
44
44
|
|
|
45
45
|
| Adapter | Tools | Credential Shape |
|
|
46
46
|
| --- | --- | --- |
|
|
47
|
-
| Attio |
|
|
47
|
+
| Attio | 12 (CRUD + schema + notes) | `{ apiKey }` |
|
|
48
48
|
| Google Sheets | 13 (read/write/filter/upsert) | OAuth2 / service account |
|
|
49
49
|
| Trello | 10 (cards/lists/checklists) | `{ apiKey, token }` |
|
|
50
50
|
| Notion | 8 (pages + blocks) | `{ token }` |
|
|
51
51
|
| Stripe | 6 (payment links + checkout) | `{ secretKey }` |
|
|
52
52
|
| Instantly | 5 (email campaigns) | `{ apiKey }` |
|
|
53
53
|
| Gmail | 2 (send email) | OAuth2 / service account |
|
|
54
|
-
| Resend |
|
|
55
|
-
| SignatureAPI |
|
|
54
|
+
| Resend | 2 (send/get email) | `{ apiKey }` |
|
|
55
|
+
| SignatureAPI | 4 (envelopes) | `{ apiKey }` |
|
|
56
56
|
| Dropbox | 2 (upload/folder) | `{ accessToken }` |
|
|
57
57
|
| Apify | 1 (run actor) | `{ token }` |
|
|
58
58
|
| Mailso | 1 (verify email) | `{ apiKey }` |
|
|
59
|
-
| Supabase | 7 (insert/select/update/delete/upsert/rpc/count) | `{ url, serviceRoleKey }` |
|
|
60
59
|
|
|
61
60
|
Credentials are stored in the Elevasis credentials table and injected server-side. The credential name you pass in `credential` must match the name you set when storing the credential.
|
|
62
61
|
|
|
@@ -188,7 +187,7 @@ const qualified = await platform.call({
|
|
|
188
187
|
|
|
189
188
|
## Documentation
|
|
190
189
|
|
|
191
|
-
- [Typed Adapters](adapters.mdx) - Type-safe wrappers for all 12 integrations +
|
|
190
|
+
- [Typed Adapters](adapters.mdx) - Type-safe wrappers for all 12 integrations + 9 platform services with full autocomplete (recommended)
|
|
192
191
|
- [Integration Examples](examples.mdx) - Working code examples for email, CRM, PDF, LLM, and more
|
|
193
192
|
|
|
194
193
|
---
|