@elevasis/sdk 1.1.0 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli.cjs +59 -511
- package/dist/index.d.ts +508 -481
- package/package.json +1 -1
package/dist/cli.cjs
CHANGED
|
@@ -6,9 +6,6 @@ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
|
6
6
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
7
7
|
var __getProtoOf = Object.getPrototypeOf;
|
|
8
8
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
9
|
-
var __esm = (fn, res) => function __init() {
|
|
10
|
-
return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res;
|
|
11
|
-
};
|
|
12
9
|
var __commonJS = (cb, mod) => function __require() {
|
|
13
10
|
return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
|
|
14
11
|
};
|
|
@@ -26490,65 +26487,6 @@ var require_zod = __commonJS({
|
|
|
26490
26487
|
}
|
|
26491
26488
|
});
|
|
26492
26489
|
|
|
26493
|
-
// src/cli/config.ts
|
|
26494
|
-
var config_exports = {};
|
|
26495
|
-
__export(config_exports, {
|
|
26496
|
-
findEnvFile: () => findEnvFile,
|
|
26497
|
-
resolveApiKey: () => resolveApiKey,
|
|
26498
|
-
resolveApiUrl: () => resolveApiUrl,
|
|
26499
|
-
resolveEnvironment: () => resolveEnvironment
|
|
26500
|
-
});
|
|
26501
|
-
function resolveApiUrl(cliOverride, prod) {
|
|
26502
|
-
if (cliOverride) return cliOverride;
|
|
26503
|
-
if (prod) return PROD_API_URL;
|
|
26504
|
-
if (process.env.ELEVASIS_API_URL) return process.env.ELEVASIS_API_URL;
|
|
26505
|
-
if (process.env.NODE_ENV === "development") return DEV_API_URL;
|
|
26506
|
-
return PROD_API_URL;
|
|
26507
|
-
}
|
|
26508
|
-
function resolveEnvironment(prod) {
|
|
26509
|
-
if (prod) return "production";
|
|
26510
|
-
return process.env.NODE_ENV === "development" ? "development" : "production";
|
|
26511
|
-
}
|
|
26512
|
-
function resolveApiKey(prod) {
|
|
26513
|
-
if (!prod && process.env.NODE_ENV === "development") {
|
|
26514
|
-
return process.env.ELEVASIS_PLATFORM_KEY_DEV ?? process.env.ELEVASIS_PLATFORM_KEY ?? "";
|
|
26515
|
-
}
|
|
26516
|
-
return process.env.ELEVASIS_PLATFORM_KEY ?? "";
|
|
26517
|
-
}
|
|
26518
|
-
function findEnvFile(startDir) {
|
|
26519
|
-
const cwd = (0, import_path.resolve)(startDir ?? process.cwd());
|
|
26520
|
-
let dir = cwd;
|
|
26521
|
-
while (true) {
|
|
26522
|
-
const candidate = (0, import_path.resolve)(dir, ".env");
|
|
26523
|
-
if ((0, import_fs.existsSync)(candidate)) return candidate;
|
|
26524
|
-
const parent = (0, import_path.dirname)(dir);
|
|
26525
|
-
if (parent === dir) break;
|
|
26526
|
-
dir = parent;
|
|
26527
|
-
}
|
|
26528
|
-
dir = cwd;
|
|
26529
|
-
while (true) {
|
|
26530
|
-
if ((0, import_fs.existsSync)((0, import_path.resolve)(dir, "pnpm-workspace.yaml"))) {
|
|
26531
|
-
const candidate = (0, import_path.resolve)(dir, ".env");
|
|
26532
|
-
if ((0, import_fs.existsSync)(candidate)) return candidate;
|
|
26533
|
-
break;
|
|
26534
|
-
}
|
|
26535
|
-
const parent = (0, import_path.dirname)(dir);
|
|
26536
|
-
if (parent === dir) break;
|
|
26537
|
-
dir = parent;
|
|
26538
|
-
}
|
|
26539
|
-
return void 0;
|
|
26540
|
-
}
|
|
26541
|
-
var import_fs, import_path, DEV_API_URL, PROD_API_URL;
|
|
26542
|
-
var init_config = __esm({
|
|
26543
|
-
"src/cli/config.ts"() {
|
|
26544
|
-
"use strict";
|
|
26545
|
-
import_fs = require("fs");
|
|
26546
|
-
import_path = require("path");
|
|
26547
|
-
DEV_API_URL = "http://localhost:5170";
|
|
26548
|
-
PROD_API_URL = "https://api.elevasis.io";
|
|
26549
|
-
}
|
|
26550
|
-
});
|
|
26551
|
-
|
|
26552
26490
|
// src/cli/index.ts
|
|
26553
26491
|
var import_dotenv = __toESM(require_main(), 1);
|
|
26554
26492
|
|
|
@@ -43835,11 +43773,53 @@ var ResourceRegistry = class {
|
|
|
43835
43773
|
}
|
|
43836
43774
|
};
|
|
43837
43775
|
|
|
43838
|
-
// src/cli/
|
|
43839
|
-
|
|
43776
|
+
// src/cli/config.ts
|
|
43777
|
+
var import_fs = require("fs");
|
|
43778
|
+
var import_path = require("path");
|
|
43779
|
+
var DEV_API_URL = "http://localhost:5170";
|
|
43780
|
+
var PROD_API_URL = "https://api.elevasis.io";
|
|
43781
|
+
function resolveApiUrl(cliOverride, prod) {
|
|
43782
|
+
if (cliOverride) return cliOverride;
|
|
43783
|
+
if (prod) return PROD_API_URL;
|
|
43784
|
+
if (process.env.ELEVASIS_API_URL) return process.env.ELEVASIS_API_URL;
|
|
43785
|
+
if (process.env.NODE_ENV === "development") return DEV_API_URL;
|
|
43786
|
+
return PROD_API_URL;
|
|
43787
|
+
}
|
|
43788
|
+
function resolveEnvironment(prod) {
|
|
43789
|
+
if (prod) return "production";
|
|
43790
|
+
return process.env.NODE_ENV === "development" ? "development" : "production";
|
|
43791
|
+
}
|
|
43792
|
+
function resolveApiKey(prod) {
|
|
43793
|
+
if (!prod && process.env.NODE_ENV === "development") {
|
|
43794
|
+
return process.env.ELEVASIS_PLATFORM_KEY_DEV ?? process.env.ELEVASIS_PLATFORM_KEY ?? "";
|
|
43795
|
+
}
|
|
43796
|
+
return process.env.ELEVASIS_PLATFORM_KEY ?? "";
|
|
43797
|
+
}
|
|
43798
|
+
function findEnvFile(startDir) {
|
|
43799
|
+
const cwd = (0, import_path.resolve)(startDir ?? process.cwd());
|
|
43800
|
+
let dir = cwd;
|
|
43801
|
+
while (true) {
|
|
43802
|
+
const candidate = (0, import_path.resolve)(dir, ".env");
|
|
43803
|
+
if ((0, import_fs.existsSync)(candidate)) return candidate;
|
|
43804
|
+
const parent = (0, import_path.dirname)(dir);
|
|
43805
|
+
if (parent === dir) break;
|
|
43806
|
+
dir = parent;
|
|
43807
|
+
}
|
|
43808
|
+
dir = cwd;
|
|
43809
|
+
while (true) {
|
|
43810
|
+
if ((0, import_fs.existsSync)((0, import_path.resolve)(dir, "pnpm-workspace.yaml"))) {
|
|
43811
|
+
const candidate = (0, import_path.resolve)(dir, ".env");
|
|
43812
|
+
if ((0, import_fs.existsSync)(candidate)) return candidate;
|
|
43813
|
+
break;
|
|
43814
|
+
}
|
|
43815
|
+
const parent = (0, import_path.dirname)(dir);
|
|
43816
|
+
if (parent === dir) break;
|
|
43817
|
+
dir = parent;
|
|
43818
|
+
}
|
|
43819
|
+
return void 0;
|
|
43820
|
+
}
|
|
43840
43821
|
|
|
43841
43822
|
// src/cli/api-client.ts
|
|
43842
|
-
init_config();
|
|
43843
43823
|
function getApiKey(apiUrl) {
|
|
43844
43824
|
const isProd = !apiUrl.includes("localhost");
|
|
43845
43825
|
const key = resolveApiKey(isProd);
|
|
@@ -43937,7 +43917,7 @@ function wrapAction(commandName, fn) {
|
|
|
43937
43917
|
// package.json
|
|
43938
43918
|
var package_default = {
|
|
43939
43919
|
name: "@elevasis/sdk",
|
|
43940
|
-
version: "1.
|
|
43920
|
+
version: "1.2.0",
|
|
43941
43921
|
description: "SDK for building Elevasis organization resources",
|
|
43942
43922
|
type: "module",
|
|
43943
43923
|
bin: {
|
|
@@ -44060,8 +44040,8 @@ function bumpVersion(current, type) {
|
|
|
44060
44040
|
}
|
|
44061
44041
|
}
|
|
44062
44042
|
var IGNORED_DOC_DIRS = /* @__PURE__ */ new Set([".archive"]);
|
|
44063
|
-
async function scanDocumentation() {
|
|
44064
|
-
const
|
|
44043
|
+
async function scanDocumentation(docsDir) {
|
|
44044
|
+
const resolvedDocsDir = (0, import_path2.resolve)(docsDir ?? "docs");
|
|
44065
44045
|
const files = [];
|
|
44066
44046
|
let totalSize = 0;
|
|
44067
44047
|
async function scan(dir, relPrefix) {
|
|
@@ -44077,7 +44057,7 @@ async function scanDocumentation() {
|
|
|
44077
44057
|
if (entry.isDirectory()) {
|
|
44078
44058
|
if (IGNORED_DOC_DIRS.has(entry.name)) continue;
|
|
44079
44059
|
await scan(fullPath, relPath);
|
|
44080
|
-
} else if (entry.isFile() && entry.name.endsWith(".mdx")) {
|
|
44060
|
+
} else if (entry.isFile() && (entry.name.endsWith(".mdx") || entry.name.endsWith(".md"))) {
|
|
44081
44061
|
const raw = await (0, import_promises.readFile)(fullPath, "utf-8");
|
|
44082
44062
|
const fileSize = Buffer.byteLength(raw, "utf-8");
|
|
44083
44063
|
if (fileSize > 100 * 1024) {
|
|
@@ -44103,427 +44083,9 @@ async function scanDocumentation() {
|
|
|
44103
44083
|
}
|
|
44104
44084
|
}
|
|
44105
44085
|
}
|
|
44106
|
-
await scan(
|
|
44086
|
+
await scan(resolvedDocsDir, "");
|
|
44107
44087
|
return files.length > 0 ? files : void 0;
|
|
44108
44088
|
}
|
|
44109
|
-
function escapeMdx(text) {
|
|
44110
|
-
if (!text) return "";
|
|
44111
|
-
return text.replace(/\|/g, "\\|").replace(/\{/g, "\\{").replace(/\}/g, "\\}");
|
|
44112
|
-
}
|
|
44113
|
-
async function generateResourceMap(org) {
|
|
44114
|
-
const workflows = org.workflows ?? [];
|
|
44115
|
-
const agents = org.agents ?? [];
|
|
44116
|
-
const lines = [
|
|
44117
|
-
"---",
|
|
44118
|
-
"title: Resource Map",
|
|
44119
|
-
"description: Auto-generated resource inventory (updated on each deploy)",
|
|
44120
|
-
"order: 998",
|
|
44121
|
-
"---",
|
|
44122
|
-
"",
|
|
44123
|
-
"# Resource Map",
|
|
44124
|
-
"",
|
|
44125
|
-
"> Auto-generated by `elevasis-sdk deploy`. Do not edit manually.",
|
|
44126
|
-
""
|
|
44127
|
-
];
|
|
44128
|
-
if (workflows.length > 0) {
|
|
44129
|
-
lines.push(
|
|
44130
|
-
"## Workflows",
|
|
44131
|
-
"",
|
|
44132
|
-
"| Resource ID | Name | Version | Status | Description |",
|
|
44133
|
-
"| --- | --- | --- | --- | --- |"
|
|
44134
|
-
);
|
|
44135
|
-
for (const w of workflows) {
|
|
44136
|
-
const desc = escapeMdx(w.config.description);
|
|
44137
|
-
lines.push(
|
|
44138
|
-
`| \`${w.config.resourceId}\` | ${escapeMdx(w.config.name)} | ${w.config.version} | ${w.config.status} | ${desc} |`
|
|
44139
|
-
);
|
|
44140
|
-
}
|
|
44141
|
-
lines.push("");
|
|
44142
|
-
}
|
|
44143
|
-
if (agents.length > 0) {
|
|
44144
|
-
lines.push(
|
|
44145
|
-
"## Agents",
|
|
44146
|
-
"",
|
|
44147
|
-
"| Resource ID | Name | Version | Status | Description |",
|
|
44148
|
-
"| --- | --- | --- | --- | --- |"
|
|
44149
|
-
);
|
|
44150
|
-
for (const a of agents) {
|
|
44151
|
-
const desc = escapeMdx(a.config.description);
|
|
44152
|
-
lines.push(
|
|
44153
|
-
`| \`${a.config.resourceId}\` | ${escapeMdx(a.config.name)} | ${a.config.version} | ${a.config.status} | ${desc} |`
|
|
44154
|
-
);
|
|
44155
|
-
}
|
|
44156
|
-
lines.push("");
|
|
44157
|
-
}
|
|
44158
|
-
lines.push(
|
|
44159
|
-
`**Total:** ${workflows.length + agents.length} resources (${workflows.length} workflows, ${agents.length} agents)`,
|
|
44160
|
-
""
|
|
44161
|
-
);
|
|
44162
|
-
await (0, import_promises.mkdir)((0, import_path2.resolve)("docs"), { recursive: true });
|
|
44163
|
-
await (0, import_promises.writeFile)((0, import_path2.resolve)("docs/resource-map.mdx"), lines.join("\n"), "utf-8");
|
|
44164
|
-
}
|
|
44165
|
-
async function generateProjectMap(org) {
|
|
44166
|
-
const workflows = org.workflows ?? [];
|
|
44167
|
-
const agents = org.agents ?? [];
|
|
44168
|
-
const lastDeploy = (/* @__PURE__ */ new Date()).toISOString().split("T")[0];
|
|
44169
|
-
const lines = [
|
|
44170
|
-
"---",
|
|
44171
|
-
"title: Project Map",
|
|
44172
|
-
"description: Auto-generated project map (updated on each deploy)",
|
|
44173
|
-
"order: 999",
|
|
44174
|
-
"---",
|
|
44175
|
-
"",
|
|
44176
|
-
"# Project Map",
|
|
44177
|
-
"",
|
|
44178
|
-
"> Auto-generated by `elevasis-sdk deploy` and `/fix`. Do not edit manually.",
|
|
44179
|
-
"",
|
|
44180
|
-
"## Project Overview",
|
|
44181
|
-
"",
|
|
44182
|
-
"| Field | Value |",
|
|
44183
|
-
"| --- | --- |",
|
|
44184
|
-
`| SDK Version | ${SDK_VERSION} |`,
|
|
44185
|
-
`| Last Deploy | ${lastDeploy} |`,
|
|
44186
|
-
`| Resources | ${workflows.length} workflows, ${agents.length} agents |`,
|
|
44187
|
-
""
|
|
44188
|
-
];
|
|
44189
|
-
lines.push(
|
|
44190
|
-
"## Source Domains",
|
|
44191
|
-
"",
|
|
44192
|
-
"Scanned from `src/*/` subdirectories.",
|
|
44193
|
-
"",
|
|
44194
|
-
"| Domain | Path | Resources | Types |",
|
|
44195
|
-
"| --- | --- | --- | --- |"
|
|
44196
|
-
);
|
|
44197
|
-
try {
|
|
44198
|
-
const srcEntries = await (0, import_promises.readdir)((0, import_path2.resolve)("src"), { withFileTypes: true });
|
|
44199
|
-
const domainDirs = srcEntries.filter((e) => e.isDirectory());
|
|
44200
|
-
if (domainDirs.length === 0) {
|
|
44201
|
-
lines.push("| (none) | src/ | 0 | \u2014 |");
|
|
44202
|
-
} else {
|
|
44203
|
-
for (const d of domainDirs) {
|
|
44204
|
-
const domainName = d.name;
|
|
44205
|
-
const allResources = [...workflows, ...agents];
|
|
44206
|
-
const domainResources = allResources.filter(
|
|
44207
|
-
(r) => Array.isArray(r.config.domains) && r.config.domains.includes(domainName)
|
|
44208
|
-
);
|
|
44209
|
-
const resourceCount = domainResources.length;
|
|
44210
|
-
let types;
|
|
44211
|
-
if (resourceCount === 0) {
|
|
44212
|
-
types = "(utilities)";
|
|
44213
|
-
} else {
|
|
44214
|
-
const wCount = workflows.filter(
|
|
44215
|
-
(w) => Array.isArray(w.config.domains) && w.config.domains.includes(domainName)
|
|
44216
|
-
).length;
|
|
44217
|
-
const aCount = agents.filter(
|
|
44218
|
-
(a) => Array.isArray(a.config.domains) && a.config.domains.includes(domainName)
|
|
44219
|
-
).length;
|
|
44220
|
-
const parts = [];
|
|
44221
|
-
if (wCount > 0) parts.push(`${wCount} workflow${wCount !== 1 ? "s" : ""}`);
|
|
44222
|
-
if (aCount > 0) parts.push(`${aCount} agent${aCount !== 1 ? "s" : ""}`);
|
|
44223
|
-
types = parts.join(", ");
|
|
44224
|
-
}
|
|
44225
|
-
lines.push(`| ${domainName} | src/${domainName}/ | ${resourceCount} | ${types} |`);
|
|
44226
|
-
}
|
|
44227
|
-
}
|
|
44228
|
-
} catch {
|
|
44229
|
-
lines.push("| (src/ not found) | \u2014 | 0 | \u2014 |");
|
|
44230
|
-
}
|
|
44231
|
-
lines.push("");
|
|
44232
|
-
lines.push(
|
|
44233
|
-
"## Resources",
|
|
44234
|
-
"",
|
|
44235
|
-
"| Type | Count |",
|
|
44236
|
-
"| --- | --- |",
|
|
44237
|
-
`| Workflows | ${workflows.length} |`,
|
|
44238
|
-
`| Agents | ${agents.length} |`,
|
|
44239
|
-
"",
|
|
44240
|
-
`Full inventory (names, versions, descriptions): \`docs/resource-map.mdx\``,
|
|
44241
|
-
""
|
|
44242
|
-
);
|
|
44243
|
-
lines.push(
|
|
44244
|
-
"## Documentation Index",
|
|
44245
|
-
"",
|
|
44246
|
-
"Scanned from `docs/*.mdx` frontmatter.",
|
|
44247
|
-
"",
|
|
44248
|
-
"| Title | Path | Description |",
|
|
44249
|
-
"| --- | --- | --- |"
|
|
44250
|
-
);
|
|
44251
|
-
try {
|
|
44252
|
-
const docEntries = [];
|
|
44253
|
-
async function scanDocsDir(dir, relPrefix) {
|
|
44254
|
-
let entries;
|
|
44255
|
-
try {
|
|
44256
|
-
entries = await (0, import_promises.readdir)(dir, { withFileTypes: true });
|
|
44257
|
-
} catch {
|
|
44258
|
-
return;
|
|
44259
|
-
}
|
|
44260
|
-
for (const entry of entries) {
|
|
44261
|
-
const relPath = relPrefix ? `${relPrefix}/${entry.name}` : entry.name;
|
|
44262
|
-
if (entry.isDirectory()) {
|
|
44263
|
-
if (IGNORED_DOC_DIRS.has(entry.name)) continue;
|
|
44264
|
-
await scanDocsDir((0, import_path2.resolve)(dir, entry.name), relPath);
|
|
44265
|
-
} else if (entry.isFile() && entry.name.endsWith(".mdx") && relPath !== "project-map.mdx" && relPath !== "resource-map.mdx") {
|
|
44266
|
-
try {
|
|
44267
|
-
const raw = await (0, import_promises.readFile)((0, import_path2.resolve)(dir, entry.name), "utf-8");
|
|
44268
|
-
const fmMatch = raw.match(/^---\r?\n([\s\S]*?)\r?\n---/);
|
|
44269
|
-
let title = relPath;
|
|
44270
|
-
let description = "";
|
|
44271
|
-
let order = 9999;
|
|
44272
|
-
if (fmMatch) {
|
|
44273
|
-
const fm = fmMatch[1];
|
|
44274
|
-
const titleMatch = fm.match(/^title:\s*(.+)$/m);
|
|
44275
|
-
const descMatch = fm.match(/^description:\s*(.+)$/m);
|
|
44276
|
-
const orderMatch = fm.match(/^order:\s*(\d+)$/m);
|
|
44277
|
-
if (titleMatch) title = titleMatch[1].trim();
|
|
44278
|
-
if (descMatch) description = descMatch[1].trim();
|
|
44279
|
-
if (orderMatch) order = parseInt(orderMatch[1], 10);
|
|
44280
|
-
}
|
|
44281
|
-
docEntries.push({ title, path: `docs/${relPath}`, description, order });
|
|
44282
|
-
} catch {
|
|
44283
|
-
}
|
|
44284
|
-
}
|
|
44285
|
-
}
|
|
44286
|
-
}
|
|
44287
|
-
await scanDocsDir((0, import_path2.resolve)("docs"), "");
|
|
44288
|
-
docEntries.sort((a, b) => {
|
|
44289
|
-
if (a.order !== b.order) return a.order - b.order;
|
|
44290
|
-
return a.title.localeCompare(b.title);
|
|
44291
|
-
});
|
|
44292
|
-
if (docEntries.length === 0) {
|
|
44293
|
-
lines.push("| (none) | \u2014 | \u2014 |");
|
|
44294
|
-
} else {
|
|
44295
|
-
for (const doc of docEntries) {
|
|
44296
|
-
lines.push(`| ${escapeMdx(doc.title)} | ${doc.path} | ${escapeMdx(doc.description)} |`);
|
|
44297
|
-
}
|
|
44298
|
-
}
|
|
44299
|
-
} catch {
|
|
44300
|
-
lines.push("| (docs/ not found) | \u2014 | \u2014 |");
|
|
44301
|
-
}
|
|
44302
|
-
lines.push("");
|
|
44303
|
-
lines.push("## SDK Reference", "");
|
|
44304
|
-
try {
|
|
44305
|
-
const navPath = (0, import_path2.resolve)("node_modules/@elevasis/sdk/reference/_navigation.md");
|
|
44306
|
-
const navContent = await (0, import_promises.readFile)(navPath, "utf-8");
|
|
44307
|
-
const navLines = navContent.split(/\r?\n/);
|
|
44308
|
-
const categories = [];
|
|
44309
|
-
let current = null;
|
|
44310
|
-
for (const line of navLines) {
|
|
44311
|
-
const headingMatch = line.match(/^##\s+(.+)$/);
|
|
44312
|
-
if (headingMatch) {
|
|
44313
|
-
if (current) categories.push(current);
|
|
44314
|
-
current = { name: headingMatch[1].trim(), titles: [], count: 0 };
|
|
44315
|
-
continue;
|
|
44316
|
-
}
|
|
44317
|
-
if (current) {
|
|
44318
|
-
const rowMatch = line.match(/^\|\s*([^|]+?)\s*\|/);
|
|
44319
|
-
if (rowMatch && !line.match(/^[\s|:-]+$/)) {
|
|
44320
|
-
const cellText = rowMatch[1].trim();
|
|
44321
|
-
if (cellText && cellText !== "File" && cellText !== "Title" && cellText !== "---") {
|
|
44322
|
-
current.titles.push(cellText);
|
|
44323
|
-
current.count++;
|
|
44324
|
-
}
|
|
44325
|
-
}
|
|
44326
|
-
}
|
|
44327
|
-
}
|
|
44328
|
-
if (current) categories.push(current);
|
|
44329
|
-
if (categories.length === 0) {
|
|
44330
|
-
lines.push("SDK reference found but no categories parsed.", "");
|
|
44331
|
-
} else {
|
|
44332
|
-
lines.push("| Category | Files | Covers |", "| --- | --- | --- |");
|
|
44333
|
-
for (const cat of categories) {
|
|
44334
|
-
const covers = cat.titles.slice(0, 5).join(", ") + (cat.titles.length > 5 ? ", ..." : "");
|
|
44335
|
-
lines.push(`| ${escapeMdx(cat.name)} | ${cat.count} | ${escapeMdx(covers)} |`);
|
|
44336
|
-
}
|
|
44337
|
-
lines.push("");
|
|
44338
|
-
lines.push("Full reference: `reference/_navigation.md`", "");
|
|
44339
|
-
}
|
|
44340
|
-
} catch {
|
|
44341
|
-
lines.push("SDK reference not found. Run `pnpm install`.", "");
|
|
44342
|
-
}
|
|
44343
|
-
lines.push("## Command and Rules System", "", "### Commands", "");
|
|
44344
|
-
try {
|
|
44345
|
-
const cmdEntries = await (0, import_promises.readdir)((0, import_path2.resolve)(".claude/commands"), { withFileTypes: true });
|
|
44346
|
-
const cmdFiles = cmdEntries.filter((e) => e.isFile() && e.name.endsWith(".md"));
|
|
44347
|
-
if (cmdFiles.length === 0) {
|
|
44348
|
-
lines.push("No commands found.", "");
|
|
44349
|
-
} else {
|
|
44350
|
-
lines.push("| Command | File | Purpose |", "| --- | --- | --- |");
|
|
44351
|
-
for (const f of cmdFiles) {
|
|
44352
|
-
const cmdName = f.name.replace(/\.md$/, "");
|
|
44353
|
-
let purpose = "";
|
|
44354
|
-
try {
|
|
44355
|
-
const raw = await (0, import_promises.readFile)((0, import_path2.resolve)(".claude/commands", f.name), "utf-8");
|
|
44356
|
-
const goalMatch = raw.match(/\*\*Goal:\*\*\s*(.+)/);
|
|
44357
|
-
if (goalMatch) {
|
|
44358
|
-
purpose = goalMatch[1].trim();
|
|
44359
|
-
} else {
|
|
44360
|
-
const firstNonEmpty = raw.split(/\r?\n/).find((l) => l.trim() && !l.startsWith("#"));
|
|
44361
|
-
purpose = firstNonEmpty ? firstNonEmpty.trim() : "";
|
|
44362
|
-
}
|
|
44363
|
-
} catch {
|
|
44364
|
-
}
|
|
44365
|
-
lines.push(`| ${cmdName} | .claude/commands/${f.name} | ${escapeMdx(purpose.slice(0, 80))} |`);
|
|
44366
|
-
}
|
|
44367
|
-
lines.push("");
|
|
44368
|
-
}
|
|
44369
|
-
} catch {
|
|
44370
|
-
lines.push("No .claude/commands/ directory found.", "");
|
|
44371
|
-
}
|
|
44372
|
-
lines.push("### Rules (auto-injected)", "");
|
|
44373
|
-
try {
|
|
44374
|
-
const ruleEntries = await (0, import_promises.readdir)((0, import_path2.resolve)(".claude/rules"), { withFileTypes: true });
|
|
44375
|
-
const ruleFiles = ruleEntries.filter((e) => e.isFile() && e.name.endsWith(".md"));
|
|
44376
|
-
if (ruleFiles.length === 0) {
|
|
44377
|
-
lines.push("No rules found.", "");
|
|
44378
|
-
} else {
|
|
44379
|
-
lines.push("| Rule | File | Scope |", "| --- | --- | --- |");
|
|
44380
|
-
for (const f of ruleFiles) {
|
|
44381
|
-
const ruleName = f.name.replace(/\.md$/, "").replace(/-/g, " ").replace(/\b\w/g, (c) => c.toUpperCase());
|
|
44382
|
-
let scope = "";
|
|
44383
|
-
try {
|
|
44384
|
-
const raw = await (0, import_promises.readFile)((0, import_path2.resolve)(".claude/rules", f.name), "utf-8");
|
|
44385
|
-
const fmMatch = raw.match(/^---\r?\n([\s\S]*?)\r?\n---/);
|
|
44386
|
-
if (fmMatch) {
|
|
44387
|
-
const descMatch = fmMatch[1].match(/^description:\s*(.+)$/m);
|
|
44388
|
-
if (descMatch) scope = descMatch[1].trim();
|
|
44389
|
-
}
|
|
44390
|
-
if (!scope) {
|
|
44391
|
-
const firstNonEmpty = raw.split(/\r?\n/).find((l) => l.trim() && !l.startsWith("#") && !l.startsWith("---"));
|
|
44392
|
-
scope = firstNonEmpty ? firstNonEmpty.trim() : "";
|
|
44393
|
-
}
|
|
44394
|
-
} catch {
|
|
44395
|
-
}
|
|
44396
|
-
lines.push(`| ${ruleName} | .claude/rules/${f.name} | ${escapeMdx(scope.slice(0, 80))} |`);
|
|
44397
|
-
}
|
|
44398
|
-
lines.push("");
|
|
44399
|
-
}
|
|
44400
|
-
} catch {
|
|
44401
|
-
lines.push("No .claude/rules/ directory found.", "");
|
|
44402
|
-
}
|
|
44403
|
-
lines.push("### Skills", "");
|
|
44404
|
-
try {
|
|
44405
|
-
const skillEntries = await (0, import_promises.readdir)((0, import_path2.resolve)(".claude/skills"), { withFileTypes: true });
|
|
44406
|
-
const skillDirs = skillEntries.filter((e) => e.isDirectory());
|
|
44407
|
-
if (skillDirs.length === 0) {
|
|
44408
|
-
lines.push("No skills found.", "");
|
|
44409
|
-
} else {
|
|
44410
|
-
lines.push("| Skill | File | Trigger |", "| --- | --- | --- |");
|
|
44411
|
-
for (const d of skillDirs) {
|
|
44412
|
-
const skillFile = (0, import_path2.resolve)(".claude/skills", d.name, "SKILL.md");
|
|
44413
|
-
let trigger = "";
|
|
44414
|
-
try {
|
|
44415
|
-
const raw = await (0, import_promises.readFile)(skillFile, "utf-8");
|
|
44416
|
-
const fmMatch = raw.match(/^---\r?\n([\s\S]*?)\r?\n---/);
|
|
44417
|
-
if (fmMatch) {
|
|
44418
|
-
const descMatch = fmMatch[1].match(/^description:\s*(.+)$/m);
|
|
44419
|
-
if (descMatch) trigger = descMatch[1].trim();
|
|
44420
|
-
}
|
|
44421
|
-
if (!trigger) {
|
|
44422
|
-
const firstNonEmpty = raw.split(/\r?\n/).find((l) => l.trim() && !l.startsWith("#") && !l.startsWith("---"));
|
|
44423
|
-
trigger = firstNonEmpty ? firstNonEmpty.trim() : "";
|
|
44424
|
-
}
|
|
44425
|
-
} catch {
|
|
44426
|
-
}
|
|
44427
|
-
lines.push(`| ${d.name} | .claude/skills/${d.name}/SKILL.md | ${escapeMdx(trigger.slice(0, 80))} |`);
|
|
44428
|
-
}
|
|
44429
|
-
lines.push("");
|
|
44430
|
-
}
|
|
44431
|
-
} catch {
|
|
44432
|
-
lines.push("No .claude/skills/ directory found.", "");
|
|
44433
|
-
}
|
|
44434
|
-
lines.push("## Memory System", "", "Scanned from `.claude/memory/` structure.", "");
|
|
44435
|
-
try {
|
|
44436
|
-
const memoryFiles = [];
|
|
44437
|
-
async function scanMemory(dir, relPrefix) {
|
|
44438
|
-
let entries;
|
|
44439
|
-
try {
|
|
44440
|
-
entries = await (0, import_promises.readdir)(dir, { withFileTypes: true });
|
|
44441
|
-
} catch {
|
|
44442
|
-
return;
|
|
44443
|
-
}
|
|
44444
|
-
for (const entry of entries) {
|
|
44445
|
-
const fullPath = (0, import_path2.resolve)(dir, entry.name);
|
|
44446
|
-
const relPath = relPrefix ? `${relPrefix}/${entry.name}` : entry.name;
|
|
44447
|
-
if (entry.isDirectory()) {
|
|
44448
|
-
await scanMemory(fullPath, relPath);
|
|
44449
|
-
} else if (entry.isFile()) {
|
|
44450
|
-
try {
|
|
44451
|
-
const s = await (0, import_promises.stat)(fullPath);
|
|
44452
|
-
const mtime = s.mtime.toISOString().split("T")[0];
|
|
44453
|
-
let purpose = entry.name.replace(/\.[^.]+$/, "").replace(/-/g, " ").replace(/_/g, " ");
|
|
44454
|
-
if (purpose === "index") purpose = "Memory root";
|
|
44455
|
-
else purpose = purpose.replace(/\b\w/g, (c) => c.toUpperCase());
|
|
44456
|
-
memoryFiles.push({ rel: relPath, purpose, mtime });
|
|
44457
|
-
} catch {
|
|
44458
|
-
}
|
|
44459
|
-
}
|
|
44460
|
-
}
|
|
44461
|
-
}
|
|
44462
|
-
await scanMemory((0, import_path2.resolve)(".claude/memory"), "");
|
|
44463
|
-
if (memoryFiles.length === 0) {
|
|
44464
|
-
lines.push("No memory files found.", "");
|
|
44465
|
-
} else {
|
|
44466
|
-
lines.push("| File | Purpose | Last Modified |", "| --- | --- | --- |");
|
|
44467
|
-
for (const m of memoryFiles) {
|
|
44468
|
-
lines.push(`| .claude/memory/${m.rel} | ${escapeMdx(m.purpose)} | ${m.mtime} |`);
|
|
44469
|
-
}
|
|
44470
|
-
lines.push("");
|
|
44471
|
-
}
|
|
44472
|
-
} catch {
|
|
44473
|
-
lines.push("Not configured", "");
|
|
44474
|
-
}
|
|
44475
|
-
lines.push("## Configuration", "");
|
|
44476
|
-
let apiKeySet = "no";
|
|
44477
|
-
let nodeEnv = "not set";
|
|
44478
|
-
try {
|
|
44479
|
-
const { findEnvFile: findEnvFile2 } = await Promise.resolve().then(() => (init_config(), config_exports));
|
|
44480
|
-
const envContent = await (0, import_promises.readFile)(findEnvFile2() ?? (0, import_path2.resolve)(".env"), "utf-8");
|
|
44481
|
-
const apiKeyMatch = envContent.match(/^ELEVASIS_PLATFORM_KEY=(.+)$/m);
|
|
44482
|
-
if (apiKeyMatch && apiKeyMatch[1].trim()) apiKeySet = "yes";
|
|
44483
|
-
const nodeEnvMatch = envContent.match(/^NODE_ENV=(.+)$/m);
|
|
44484
|
-
if (nodeEnvMatch && nodeEnvMatch[1].trim()) nodeEnv = nodeEnvMatch[1].trim();
|
|
44485
|
-
} catch {
|
|
44486
|
-
}
|
|
44487
|
-
lines.push(
|
|
44488
|
-
"| Setting | Source | Value |",
|
|
44489
|
-
"| --- | --- | --- |",
|
|
44490
|
-
`| SDK Version | package.json | ${SDK_VERSION} |`,
|
|
44491
|
-
`| API Key Set | .env | ${apiKeySet} |`,
|
|
44492
|
-
`| Node Env | .env | ${nodeEnv} |`,
|
|
44493
|
-
""
|
|
44494
|
-
);
|
|
44495
|
-
await (0, import_promises.mkdir)((0, import_path2.resolve)("docs"), { recursive: true });
|
|
44496
|
-
await (0, import_promises.writeFile)((0, import_path2.resolve)("docs/project-map.mdx"), lines.join("\n"), "utf-8");
|
|
44497
|
-
}
|
|
44498
|
-
async function generateNavigationMap(docs) {
|
|
44499
|
-
const excludedFiles = /* @__PURE__ */ new Set(["docs/navigation-map.mdx", "docs/project-map.mdx", "docs/resource-map.mdx"]);
|
|
44500
|
-
const filtered = docs.filter((doc) => !excludedFiles.has(doc.path)).sort((a, b) => {
|
|
44501
|
-
const orderA = a.frontmatter.order ?? 9999;
|
|
44502
|
-
const orderB = b.frontmatter.order ?? 9999;
|
|
44503
|
-
if (orderA !== orderB) return orderA - orderB;
|
|
44504
|
-
return a.frontmatter.title.localeCompare(b.frontmatter.title);
|
|
44505
|
-
});
|
|
44506
|
-
const lines = [
|
|
44507
|
-
"---",
|
|
44508
|
-
"title: Navigation Map",
|
|
44509
|
-
"description: Auto-generated table of contents for all documentation (updated on each deploy)",
|
|
44510
|
-
"order: 997",
|
|
44511
|
-
"---",
|
|
44512
|
-
"",
|
|
44513
|
-
"# Navigation Map",
|
|
44514
|
-
"",
|
|
44515
|
-
"> Auto-generated by `elevasis-sdk deploy`. Do not edit manually.",
|
|
44516
|
-
"",
|
|
44517
|
-
"| Title | Description | Path |",
|
|
44518
|
-
"| --- | --- | --- |"
|
|
44519
|
-
];
|
|
44520
|
-
for (const doc of filtered) {
|
|
44521
|
-
lines.push(`| ${escapeMdx(doc.frontmatter.title)} | ${escapeMdx(doc.frontmatter.description)} | ${doc.path} |`);
|
|
44522
|
-
}
|
|
44523
|
-
lines.push("");
|
|
44524
|
-
await (0, import_promises.mkdir)((0, import_path2.resolve)("docs"), { recursive: true });
|
|
44525
|
-
await (0, import_promises.writeFile)((0, import_path2.resolve)("docs/navigation-map.mdx"), lines.join("\n"), "utf-8");
|
|
44526
|
-
}
|
|
44527
44089
|
function registerDeployCommand(program3) {
|
|
44528
44090
|
program3.command("deploy").description(
|
|
44529
44091
|
"Validate, bundle, upload, and deploy project resources\n Example: elevasis-sdk deploy --api-url http://localhost:5170"
|
|
@@ -44535,6 +44097,14 @@ function registerDeployCommand(program3) {
|
|
|
44535
44097
|
const apiUrl = resolveApiUrl(options2.apiUrl, options2.prod);
|
|
44536
44098
|
const env2 = resolveEnvironment(options2.prod);
|
|
44537
44099
|
const entryPath = options2.entry ?? "./src/index.ts";
|
|
44100
|
+
let elevasConfig = {};
|
|
44101
|
+
try {
|
|
44102
|
+
const configModule = await loadTsModule("elevasis.config.ts");
|
|
44103
|
+
if (configModule.default && typeof configModule.default === "object") {
|
|
44104
|
+
elevasConfig = configModule.default;
|
|
44105
|
+
}
|
|
44106
|
+
} catch {
|
|
44107
|
+
}
|
|
44538
44108
|
const authSpinner = ora("Authenticating...").start();
|
|
44539
44109
|
let orgName;
|
|
44540
44110
|
try {
|
|
@@ -44619,12 +44189,8 @@ function registerDeployCommand(program3) {
|
|
|
44619
44189
|
}
|
|
44620
44190
|
throw error46;
|
|
44621
44191
|
}
|
|
44622
|
-
await
|
|
44623
|
-
await generateProjectMap(org);
|
|
44624
|
-
let documentation = await scanDocumentation();
|
|
44192
|
+
const documentation = await scanDocumentation(elevasConfig.docsDir);
|
|
44625
44193
|
if (documentation) {
|
|
44626
|
-
await generateNavigationMap(documentation);
|
|
44627
|
-
documentation = await scanDocumentation();
|
|
44628
44194
|
console.log(
|
|
44629
44195
|
source_default.gray(
|
|
44630
44196
|
` docs ${source_default.white(String(documentation.length))} file${documentation.length !== 1 ? "s" : ""}`
|
|
@@ -44844,7 +44410,6 @@ function registerCheckCommand(program3) {
|
|
|
44844
44410
|
|
|
44845
44411
|
// src/cli/commands/exec.ts
|
|
44846
44412
|
var import_node_fs = require("node:fs");
|
|
44847
|
-
init_config();
|
|
44848
44413
|
var POLL_INTERVAL_MS = 3e3;
|
|
44849
44414
|
async function pollForCompletion(resourceId, executionId, apiUrl) {
|
|
44850
44415
|
const pollSpinner = ora("Waiting for completion...").start();
|
|
@@ -44964,7 +44529,6 @@ function registerExecCommand(program3) {
|
|
|
44964
44529
|
}
|
|
44965
44530
|
|
|
44966
44531
|
// src/cli/commands/resources.ts
|
|
44967
|
-
init_config();
|
|
44968
44532
|
function registerResourcesCommand(program3) {
|
|
44969
44533
|
program3.command("resources").description("List deployed resources for your organization").option("--api-url <url>", "API URL").option("--json", "Output as JSON").action(wrapAction("resources", async (options2) => {
|
|
44970
44534
|
const apiUrl = resolveApiUrl(options2.apiUrl);
|
|
@@ -45010,7 +44574,6 @@ function registerResourcesCommand(program3) {
|
|
|
45010
44574
|
}
|
|
45011
44575
|
|
|
45012
44576
|
// src/cli/commands/executions.ts
|
|
45013
|
-
init_config();
|
|
45014
44577
|
function registerExecutionsCommand(program3) {
|
|
45015
44578
|
program3.command("executions <resourceId>").description("List execution history for a resource\n Example: elevasis-sdk executions my-workflow --limit 10").option("--api-url <url>", "API URL").option("--json", "Output as JSON").option("--limit <number>", "Limit number of results (default: 50)").option("--status <status>", "Filter by status (running|completed|failed)").action(wrapAction("executions", async (resourceId, options2) => {
|
|
45016
44579
|
const apiUrl = resolveApiUrl(options2.apiUrl);
|
|
@@ -45069,7 +44632,6 @@ function registerExecutionsCommand(program3) {
|
|
|
45069
44632
|
}
|
|
45070
44633
|
|
|
45071
44634
|
// src/cli/commands/execution.ts
|
|
45072
|
-
init_config();
|
|
45073
44635
|
function registerExecutionCommand(program3) {
|
|
45074
44636
|
program3.command("execution <resourceId> <executionId>").description("Get detailed information about a specific execution\n Example: elevasis-sdk execution my-workflow abc-123-uuid --logs-only").option("--api-url <url>", "API URL").option("--json", "Output raw JSON response").option("--logs-only", "Show only execution logs").option("--input", "Include input data in output").option("--result", "Include result data in output").action(wrapAction("execution", async (resourceId, executionId, options2) => {
|
|
45075
44637
|
const apiUrl = resolveApiUrl(options2.apiUrl);
|
|
@@ -45172,7 +44734,6 @@ function displayLog(log) {
|
|
|
45172
44734
|
}
|
|
45173
44735
|
|
|
45174
44736
|
// src/cli/commands/deployments.ts
|
|
45175
|
-
init_config();
|
|
45176
44737
|
function registerDeploymentsCommand(program3) {
|
|
45177
44738
|
program3.command("deployments").description("List deployments for your organization").option("--api-url <url>", "API URL").option("--json", "Output as JSON").action(wrapAction("deployments", async (options2) => {
|
|
45178
44739
|
const apiUrl = resolveApiUrl(options2.apiUrl);
|
|
@@ -45233,7 +44794,6 @@ function registerDeploymentsCommand(program3) {
|
|
|
45233
44794
|
}
|
|
45234
44795
|
|
|
45235
44796
|
// src/cli/commands/describe.ts
|
|
45236
|
-
init_config();
|
|
45237
44797
|
function hasSchemaContent(schema) {
|
|
45238
44798
|
return Object.keys(schema).some((k) => k !== "$schema");
|
|
45239
44799
|
}
|
|
@@ -45303,9 +44863,6 @@ function registerDescribeCommand(program3) {
|
|
|
45303
44863
|
);
|
|
45304
44864
|
}
|
|
45305
44865
|
|
|
45306
|
-
// src/cli/commands/creds/creds.ts
|
|
45307
|
-
init_config();
|
|
45308
|
-
|
|
45309
44866
|
// src/cli/commands/creds/creds-list.ts
|
|
45310
44867
|
async function listCreds(apiUrl, json2) {
|
|
45311
44868
|
const spinner = ora("Fetching credentials...").start();
|
|
@@ -45516,9 +45073,6 @@ function registerCredsCommand(program3) {
|
|
|
45516
45073
|
}));
|
|
45517
45074
|
}
|
|
45518
45075
|
|
|
45519
|
-
// src/cli/commands/error/error.ts
|
|
45520
|
-
init_config();
|
|
45521
|
-
|
|
45522
45076
|
// src/cli/commands/error/error-resolve.ts
|
|
45523
45077
|
async function resolveError(apiUrl, errorId) {
|
|
45524
45078
|
const spinner = ora("Resolving error...").start();
|
|
@@ -45555,7 +45109,6 @@ function registerErrorCommand(program3) {
|
|
|
45555
45109
|
}
|
|
45556
45110
|
|
|
45557
45111
|
// src/cli/commands/rename.ts
|
|
45558
|
-
init_config();
|
|
45559
45112
|
function registerRenameCommand(program3) {
|
|
45560
45113
|
program3.command("rename <oldResourceId>").description("Rename a resource ID across all platform tables (dry run by default)").requiredOption("--to <newResourceId>", "New resource ID").option("--execute", "Apply the rename (default: dry run preview only)").option("--prod", "Target production (overrides NODE_ENV=development)").option("--api-url <url>", "API URL").action(
|
|
45561
45114
|
wrapAction("rename", async (oldResourceId, options2) => {
|
|
@@ -45594,7 +45147,6 @@ function registerRenameCommand(program3) {
|
|
|
45594
45147
|
}
|
|
45595
45148
|
|
|
45596
45149
|
// src/cli/commands/project/projects.ts
|
|
45597
|
-
init_config();
|
|
45598
45150
|
function registerProjectList(program3) {
|
|
45599
45151
|
program3.command("project:list").description("List all projects\n Example: elevasis-sdk project:list --kind internal").option("--kind <kind>", "Filter by kind: client_engagement | internal | research | other").option("--status <status>", "Filter by status: active | on_track | at_risk | blocked | completed | paused").option("--api-url <url>", "API base URL").option("--pretty", "Render human-readable output instead of raw JSON").action(
|
|
45600
45152
|
wrapAction("project:list", async (options2) => {
|
|
@@ -45724,7 +45276,6 @@ Project ${id} deleted.`));
|
|
|
45724
45276
|
}
|
|
45725
45277
|
|
|
45726
45278
|
// src/cli/commands/project/milestones.ts
|
|
45727
|
-
init_config();
|
|
45728
45279
|
function registerMilestoneList(program3) {
|
|
45729
45280
|
program3.command("project:milestone:list").description("List milestones for a project\n Example: elevasis-sdk project:milestone:list --project <uuid>").requiredOption("--project <project-id>", "Project ID (UUID)").option("--api-url <url>", "API base URL").option("--pretty", "Render human-readable output instead of raw JSON").action(
|
|
45730
45281
|
wrapAction("project:milestone:list", async (options2) => {
|
|
@@ -45833,7 +45384,6 @@ Milestone ${id} deleted.`));
|
|
|
45833
45384
|
}
|
|
45834
45385
|
|
|
45835
45386
|
// src/cli/commands/project/tasks.ts
|
|
45836
|
-
init_config();
|
|
45837
45387
|
function registerTaskList(program3) {
|
|
45838
45388
|
program3.command("project:task:list").description(
|
|
45839
45389
|
"List tasks for a project\n Example: elevasis-sdk project:task:list --project <uuid> --status in_progress"
|
|
@@ -46103,7 +45653,6 @@ Resume context saved for task ${id}`));
|
|
|
46103
45653
|
}
|
|
46104
45654
|
|
|
46105
45655
|
// src/cli/commands/project/notes.ts
|
|
46106
|
-
init_config();
|
|
46107
45656
|
function registerNoteList(program3) {
|
|
46108
45657
|
program3.command("project:note:list").description("List notes for a project\n Example: elevasis-sdk project:note:list --project <uuid>").requiredOption("--project <project-id>", "Project ID (UUID)").option("--api-url <url>", "API base URL").option("--pretty", "Render human-readable output instead of raw JSON").action(
|
|
46109
45658
|
wrapAction("project:note:list", async (options2) => {
|
|
@@ -46216,7 +45765,6 @@ function registerProjectCommands(program3) {
|
|
|
46216
45765
|
}
|
|
46217
45766
|
|
|
46218
45767
|
// src/cli/index.ts
|
|
46219
|
-
init_config();
|
|
46220
45768
|
var envPath = findEnvFile();
|
|
46221
45769
|
if (envPath) {
|
|
46222
45770
|
(0, import_dotenv.config)({ path: envPath, override: true });
|