@elevasis/sdk 1.29.0 → 1.30.1
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 +1610 -594
- package/dist/index.d.ts +87 -1
- package/dist/index.js +30 -25
- package/dist/node/index.d.ts +84 -1
- package/dist/test-utils/index.d.ts +84 -1
- package/dist/test-utils/index.js +242 -23
- package/dist/worker/index.js +1 -0
- package/package.json +4 -4
- package/reference/claude-config/rules/topbar-actions.md +70 -0
- package/reference/claude-config/skills/om/SKILL.md +18 -1
- package/reference/claude-config/skills/om/operations/scaffold.md +153 -0
- package/reference/claude-config/sync-notes/2026-05-04-knowledge-bundle.md +83 -83
- package/reference/claude-config/sync-notes/2026-05-14-organization-model-ontology-refactor.md +45 -45
- package/reference/claude-config/sync-notes/2026-05-15-om-skill-rename-and-write-family.md +52 -52
- package/reference/claude-config/sync-notes/2026-05-17-sdk-boundary-consolidation.md +33 -33
- package/reference/claude-config/sync-notes/2026-05-20-om-define-helpers.md +32 -32
- package/reference/claude-config/sync-notes/2026-05-22-access-model-and-right-panel.md +43 -43
- package/reference/claude-config/sync-notes/2026-05-22-lead-gen-tenant-config.md +40 -40
- package/reference/claude-config/sync-notes/2026-05-22-org-model-multi-file-split.md +61 -61
- package/reference/claude-config/sync-notes/2026-05-23-branding-names-to-identity.md +49 -49
- package/reference/claude-config/sync-notes/2026-05-23-lead-gen-manage-access.md +31 -31
- package/reference/claude-config/sync-notes/2026-05-23-om-deployment-drift-detection.md +42 -42
- package/reference/claude-config/sync-notes/2026-05-23-om-full-model-deploy-contract.md +33 -33
- package/reference/claude-config/sync-notes/2026-05-23-ui-sdk-package-fixes.md +37 -37
- package/reference/claude-config/sync-notes/2026-05-24-platform-invite-router-core-baseline.md +28 -28
- package/reference/claude-config/sync-notes/2026-05-24-system-interface-readiness.md +43 -43
- package/reference/claude-config/sync-notes/2026-05-25-invitation-login-loader.md +26 -0
- package/reference/claude-config/sync-notes/2026-05-25-om-topbar-requests.md +33 -0
- package/reference/claude-config/sync-notes/2026-05-25-system-interface-profile-registry-and-substrate.md +35 -0
- package/reference/claude-config/sync-notes/2026-05-25-tenant-om-scaffold-cli.md +49 -0
- package/reference/claude-config/sync-notes/2026-05-25-vibe-operate-intent.md +47 -0
- package/reference/examples/organization-model.ts +18 -0
- package/reference/rules/organization-model.md +4 -1
- package/reference/rules/organization-os.md +7 -1
- package/reference/rules/ui.md +207 -207
- package/reference/rules/vibe.md +52 -18
- package/reference/scaffold/index.mdx +9 -7
- package/reference/scaffold/operations/scaffold-maintenance.md +14 -4
- package/reference/scaffold/reference/contracts.md +423 -338
- package/reference/scaffold/reference/glossary.md +14 -2
- package/reference/scaffold/reference/system-interface-capabilities.md +50 -0
- /package/reference/claude-config/skills/deploy/{skill.md → SKILL.md} +0 -0
package/dist/cli.cjs
CHANGED
|
@@ -6,6 +6,9 @@ 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
|
+
};
|
|
9
12
|
var __commonJS = (cb, mod) => function __require() {
|
|
10
13
|
return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
|
|
11
14
|
};
|
|
@@ -104,7 +107,7 @@ var require_main = __commonJS({
|
|
|
104
107
|
"../../node_modules/.pnpm/dotenv@16.6.1/node_modules/dotenv/lib/main.js"(exports2, module2) {
|
|
105
108
|
var fs2 = require("fs");
|
|
106
109
|
var path3 = require("path");
|
|
107
|
-
var
|
|
110
|
+
var os3 = require("os");
|
|
108
111
|
var crypto = require("crypto");
|
|
109
112
|
var packageJson = require_package();
|
|
110
113
|
var version2 = packageJson.version;
|
|
@@ -227,7 +230,7 @@ var require_main = __commonJS({
|
|
|
227
230
|
return null;
|
|
228
231
|
}
|
|
229
232
|
function _resolveHome(envPath2) {
|
|
230
|
-
return envPath2[0] === "~" ? path3.join(
|
|
233
|
+
return envPath2[0] === "~" ? path3.join(os3.homedir(), envPath2.slice(1)) : envPath2;
|
|
231
234
|
}
|
|
232
235
|
function _configVault(options) {
|
|
233
236
|
const debug = Boolean(options && options.debug);
|
|
@@ -3127,6 +3130,522 @@ var require_commander = __commonJS({
|
|
|
3127
3130
|
}
|
|
3128
3131
|
});
|
|
3129
3132
|
|
|
3133
|
+
// ../../node_modules/.pnpm/chalk@5.6.2/node_modules/chalk/source/vendor/ansi-styles/index.js
|
|
3134
|
+
function assembleStyles() {
|
|
3135
|
+
const codes = /* @__PURE__ */ new Map();
|
|
3136
|
+
for (const [groupName, group] of Object.entries(styles)) {
|
|
3137
|
+
for (const [styleName, style] of Object.entries(group)) {
|
|
3138
|
+
styles[styleName] = {
|
|
3139
|
+
open: `\x1B[${style[0]}m`,
|
|
3140
|
+
close: `\x1B[${style[1]}m`
|
|
3141
|
+
};
|
|
3142
|
+
group[styleName] = styles[styleName];
|
|
3143
|
+
codes.set(style[0], style[1]);
|
|
3144
|
+
}
|
|
3145
|
+
Object.defineProperty(styles, groupName, {
|
|
3146
|
+
value: group,
|
|
3147
|
+
enumerable: false
|
|
3148
|
+
});
|
|
3149
|
+
}
|
|
3150
|
+
Object.defineProperty(styles, "codes", {
|
|
3151
|
+
value: codes,
|
|
3152
|
+
enumerable: false
|
|
3153
|
+
});
|
|
3154
|
+
styles.color.close = "\x1B[39m";
|
|
3155
|
+
styles.bgColor.close = "\x1B[49m";
|
|
3156
|
+
styles.color.ansi = wrapAnsi16();
|
|
3157
|
+
styles.color.ansi256 = wrapAnsi256();
|
|
3158
|
+
styles.color.ansi16m = wrapAnsi16m();
|
|
3159
|
+
styles.bgColor.ansi = wrapAnsi16(ANSI_BACKGROUND_OFFSET);
|
|
3160
|
+
styles.bgColor.ansi256 = wrapAnsi256(ANSI_BACKGROUND_OFFSET);
|
|
3161
|
+
styles.bgColor.ansi16m = wrapAnsi16m(ANSI_BACKGROUND_OFFSET);
|
|
3162
|
+
Object.defineProperties(styles, {
|
|
3163
|
+
rgbToAnsi256: {
|
|
3164
|
+
value(red, green, blue) {
|
|
3165
|
+
if (red === green && green === blue) {
|
|
3166
|
+
if (red < 8) {
|
|
3167
|
+
return 16;
|
|
3168
|
+
}
|
|
3169
|
+
if (red > 248) {
|
|
3170
|
+
return 231;
|
|
3171
|
+
}
|
|
3172
|
+
return Math.round((red - 8) / 247 * 24) + 232;
|
|
3173
|
+
}
|
|
3174
|
+
return 16 + 36 * Math.round(red / 255 * 5) + 6 * Math.round(green / 255 * 5) + Math.round(blue / 255 * 5);
|
|
3175
|
+
},
|
|
3176
|
+
enumerable: false
|
|
3177
|
+
},
|
|
3178
|
+
hexToRgb: {
|
|
3179
|
+
value(hex3) {
|
|
3180
|
+
const matches = /[a-f\d]{6}|[a-f\d]{3}/i.exec(hex3.toString(16));
|
|
3181
|
+
if (!matches) {
|
|
3182
|
+
return [0, 0, 0];
|
|
3183
|
+
}
|
|
3184
|
+
let [colorString] = matches;
|
|
3185
|
+
if (colorString.length === 3) {
|
|
3186
|
+
colorString = [...colorString].map((character) => character + character).join("");
|
|
3187
|
+
}
|
|
3188
|
+
const integer2 = Number.parseInt(colorString, 16);
|
|
3189
|
+
return [
|
|
3190
|
+
/* eslint-disable no-bitwise */
|
|
3191
|
+
integer2 >> 16 & 255,
|
|
3192
|
+
integer2 >> 8 & 255,
|
|
3193
|
+
integer2 & 255
|
|
3194
|
+
/* eslint-enable no-bitwise */
|
|
3195
|
+
];
|
|
3196
|
+
},
|
|
3197
|
+
enumerable: false
|
|
3198
|
+
},
|
|
3199
|
+
hexToAnsi256: {
|
|
3200
|
+
value: (hex3) => styles.rgbToAnsi256(...styles.hexToRgb(hex3)),
|
|
3201
|
+
enumerable: false
|
|
3202
|
+
},
|
|
3203
|
+
ansi256ToAnsi: {
|
|
3204
|
+
value(code) {
|
|
3205
|
+
if (code < 8) {
|
|
3206
|
+
return 30 + code;
|
|
3207
|
+
}
|
|
3208
|
+
if (code < 16) {
|
|
3209
|
+
return 90 + (code - 8);
|
|
3210
|
+
}
|
|
3211
|
+
let red;
|
|
3212
|
+
let green;
|
|
3213
|
+
let blue;
|
|
3214
|
+
if (code >= 232) {
|
|
3215
|
+
red = ((code - 232) * 10 + 8) / 255;
|
|
3216
|
+
green = red;
|
|
3217
|
+
blue = red;
|
|
3218
|
+
} else {
|
|
3219
|
+
code -= 16;
|
|
3220
|
+
const remainder = code % 36;
|
|
3221
|
+
red = Math.floor(code / 36) / 5;
|
|
3222
|
+
green = Math.floor(remainder / 6) / 5;
|
|
3223
|
+
blue = remainder % 6 / 5;
|
|
3224
|
+
}
|
|
3225
|
+
const value = Math.max(red, green, blue) * 2;
|
|
3226
|
+
if (value === 0) {
|
|
3227
|
+
return 30;
|
|
3228
|
+
}
|
|
3229
|
+
let result = 30 + (Math.round(blue) << 2 | Math.round(green) << 1 | Math.round(red));
|
|
3230
|
+
if (value === 2) {
|
|
3231
|
+
result += 60;
|
|
3232
|
+
}
|
|
3233
|
+
return result;
|
|
3234
|
+
},
|
|
3235
|
+
enumerable: false
|
|
3236
|
+
},
|
|
3237
|
+
rgbToAnsi: {
|
|
3238
|
+
value: (red, green, blue) => styles.ansi256ToAnsi(styles.rgbToAnsi256(red, green, blue)),
|
|
3239
|
+
enumerable: false
|
|
3240
|
+
},
|
|
3241
|
+
hexToAnsi: {
|
|
3242
|
+
value: (hex3) => styles.ansi256ToAnsi(styles.hexToAnsi256(hex3)),
|
|
3243
|
+
enumerable: false
|
|
3244
|
+
}
|
|
3245
|
+
});
|
|
3246
|
+
return styles;
|
|
3247
|
+
}
|
|
3248
|
+
var ANSI_BACKGROUND_OFFSET, wrapAnsi16, wrapAnsi256, wrapAnsi16m, styles, modifierNames, foregroundColorNames, backgroundColorNames, colorNames, ansiStyles, ansi_styles_default;
|
|
3249
|
+
var init_ansi_styles = __esm({
|
|
3250
|
+
"../../node_modules/.pnpm/chalk@5.6.2/node_modules/chalk/source/vendor/ansi-styles/index.js"() {
|
|
3251
|
+
ANSI_BACKGROUND_OFFSET = 10;
|
|
3252
|
+
wrapAnsi16 = (offset = 0) => (code) => `\x1B[${code + offset}m`;
|
|
3253
|
+
wrapAnsi256 = (offset = 0) => (code) => `\x1B[${38 + offset};5;${code}m`;
|
|
3254
|
+
wrapAnsi16m = (offset = 0) => (red, green, blue) => `\x1B[${38 + offset};2;${red};${green};${blue}m`;
|
|
3255
|
+
styles = {
|
|
3256
|
+
modifier: {
|
|
3257
|
+
reset: [0, 0],
|
|
3258
|
+
// 21 isn't widely supported and 22 does the same thing
|
|
3259
|
+
bold: [1, 22],
|
|
3260
|
+
dim: [2, 22],
|
|
3261
|
+
italic: [3, 23],
|
|
3262
|
+
underline: [4, 24],
|
|
3263
|
+
overline: [53, 55],
|
|
3264
|
+
inverse: [7, 27],
|
|
3265
|
+
hidden: [8, 28],
|
|
3266
|
+
strikethrough: [9, 29]
|
|
3267
|
+
},
|
|
3268
|
+
color: {
|
|
3269
|
+
black: [30, 39],
|
|
3270
|
+
red: [31, 39],
|
|
3271
|
+
green: [32, 39],
|
|
3272
|
+
yellow: [33, 39],
|
|
3273
|
+
blue: [34, 39],
|
|
3274
|
+
magenta: [35, 39],
|
|
3275
|
+
cyan: [36, 39],
|
|
3276
|
+
white: [37, 39],
|
|
3277
|
+
// Bright color
|
|
3278
|
+
blackBright: [90, 39],
|
|
3279
|
+
gray: [90, 39],
|
|
3280
|
+
// Alias of `blackBright`
|
|
3281
|
+
grey: [90, 39],
|
|
3282
|
+
// Alias of `blackBright`
|
|
3283
|
+
redBright: [91, 39],
|
|
3284
|
+
greenBright: [92, 39],
|
|
3285
|
+
yellowBright: [93, 39],
|
|
3286
|
+
blueBright: [94, 39],
|
|
3287
|
+
magentaBright: [95, 39],
|
|
3288
|
+
cyanBright: [96, 39],
|
|
3289
|
+
whiteBright: [97, 39]
|
|
3290
|
+
},
|
|
3291
|
+
bgColor: {
|
|
3292
|
+
bgBlack: [40, 49],
|
|
3293
|
+
bgRed: [41, 49],
|
|
3294
|
+
bgGreen: [42, 49],
|
|
3295
|
+
bgYellow: [43, 49],
|
|
3296
|
+
bgBlue: [44, 49],
|
|
3297
|
+
bgMagenta: [45, 49],
|
|
3298
|
+
bgCyan: [46, 49],
|
|
3299
|
+
bgWhite: [47, 49],
|
|
3300
|
+
// Bright color
|
|
3301
|
+
bgBlackBright: [100, 49],
|
|
3302
|
+
bgGray: [100, 49],
|
|
3303
|
+
// Alias of `bgBlackBright`
|
|
3304
|
+
bgGrey: [100, 49],
|
|
3305
|
+
// Alias of `bgBlackBright`
|
|
3306
|
+
bgRedBright: [101, 49],
|
|
3307
|
+
bgGreenBright: [102, 49],
|
|
3308
|
+
bgYellowBright: [103, 49],
|
|
3309
|
+
bgBlueBright: [104, 49],
|
|
3310
|
+
bgMagentaBright: [105, 49],
|
|
3311
|
+
bgCyanBright: [106, 49],
|
|
3312
|
+
bgWhiteBright: [107, 49]
|
|
3313
|
+
}
|
|
3314
|
+
};
|
|
3315
|
+
modifierNames = Object.keys(styles.modifier);
|
|
3316
|
+
foregroundColorNames = Object.keys(styles.color);
|
|
3317
|
+
backgroundColorNames = Object.keys(styles.bgColor);
|
|
3318
|
+
colorNames = [...foregroundColorNames, ...backgroundColorNames];
|
|
3319
|
+
ansiStyles = assembleStyles();
|
|
3320
|
+
ansi_styles_default = ansiStyles;
|
|
3321
|
+
}
|
|
3322
|
+
});
|
|
3323
|
+
|
|
3324
|
+
// ../../node_modules/.pnpm/chalk@5.6.2/node_modules/chalk/source/vendor/supports-color/index.js
|
|
3325
|
+
function hasFlag(flag, argv = globalThis.Deno ? globalThis.Deno.args : import_node_process.default.argv) {
|
|
3326
|
+
const prefix = flag.startsWith("-") ? "" : flag.length === 1 ? "-" : "--";
|
|
3327
|
+
const position = argv.indexOf(prefix + flag);
|
|
3328
|
+
const terminatorPosition = argv.indexOf("--");
|
|
3329
|
+
return position !== -1 && (terminatorPosition === -1 || position < terminatorPosition);
|
|
3330
|
+
}
|
|
3331
|
+
function envForceColor() {
|
|
3332
|
+
if ("FORCE_COLOR" in env) {
|
|
3333
|
+
if (env.FORCE_COLOR === "true") {
|
|
3334
|
+
return 1;
|
|
3335
|
+
}
|
|
3336
|
+
if (env.FORCE_COLOR === "false") {
|
|
3337
|
+
return 0;
|
|
3338
|
+
}
|
|
3339
|
+
return env.FORCE_COLOR.length === 0 ? 1 : Math.min(Number.parseInt(env.FORCE_COLOR, 10), 3);
|
|
3340
|
+
}
|
|
3341
|
+
}
|
|
3342
|
+
function translateLevel(level) {
|
|
3343
|
+
if (level === 0) {
|
|
3344
|
+
return false;
|
|
3345
|
+
}
|
|
3346
|
+
return {
|
|
3347
|
+
level,
|
|
3348
|
+
hasBasic: true,
|
|
3349
|
+
has256: level >= 2,
|
|
3350
|
+
has16m: level >= 3
|
|
3351
|
+
};
|
|
3352
|
+
}
|
|
3353
|
+
function _supportsColor(haveStream, { streamIsTTY, sniffFlags = true } = {}) {
|
|
3354
|
+
const noFlagForceColor = envForceColor();
|
|
3355
|
+
if (noFlagForceColor !== void 0) {
|
|
3356
|
+
flagForceColor = noFlagForceColor;
|
|
3357
|
+
}
|
|
3358
|
+
const forceColor = sniffFlags ? flagForceColor : noFlagForceColor;
|
|
3359
|
+
if (forceColor === 0) {
|
|
3360
|
+
return 0;
|
|
3361
|
+
}
|
|
3362
|
+
if (sniffFlags) {
|
|
3363
|
+
if (hasFlag("color=16m") || hasFlag("color=full") || hasFlag("color=truecolor")) {
|
|
3364
|
+
return 3;
|
|
3365
|
+
}
|
|
3366
|
+
if (hasFlag("color=256")) {
|
|
3367
|
+
return 2;
|
|
3368
|
+
}
|
|
3369
|
+
}
|
|
3370
|
+
if ("TF_BUILD" in env && "AGENT_NAME" in env) {
|
|
3371
|
+
return 1;
|
|
3372
|
+
}
|
|
3373
|
+
if (haveStream && !streamIsTTY && forceColor === void 0) {
|
|
3374
|
+
return 0;
|
|
3375
|
+
}
|
|
3376
|
+
const min = forceColor || 0;
|
|
3377
|
+
if (env.TERM === "dumb") {
|
|
3378
|
+
return min;
|
|
3379
|
+
}
|
|
3380
|
+
if (import_node_process.default.platform === "win32") {
|
|
3381
|
+
const osRelease = import_node_os.default.release().split(".");
|
|
3382
|
+
if (Number(osRelease[0]) >= 10 && Number(osRelease[2]) >= 10586) {
|
|
3383
|
+
return Number(osRelease[2]) >= 14931 ? 3 : 2;
|
|
3384
|
+
}
|
|
3385
|
+
return 1;
|
|
3386
|
+
}
|
|
3387
|
+
if ("CI" in env) {
|
|
3388
|
+
if (["GITHUB_ACTIONS", "GITEA_ACTIONS", "CIRCLECI"].some((key) => key in env)) {
|
|
3389
|
+
return 3;
|
|
3390
|
+
}
|
|
3391
|
+
if (["TRAVIS", "APPVEYOR", "GITLAB_CI", "BUILDKITE", "DRONE"].some((sign) => sign in env) || env.CI_NAME === "codeship") {
|
|
3392
|
+
return 1;
|
|
3393
|
+
}
|
|
3394
|
+
return min;
|
|
3395
|
+
}
|
|
3396
|
+
if ("TEAMCITY_VERSION" in env) {
|
|
3397
|
+
return /^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.test(env.TEAMCITY_VERSION) ? 1 : 0;
|
|
3398
|
+
}
|
|
3399
|
+
if (env.COLORTERM === "truecolor") {
|
|
3400
|
+
return 3;
|
|
3401
|
+
}
|
|
3402
|
+
if (env.TERM === "xterm-kitty") {
|
|
3403
|
+
return 3;
|
|
3404
|
+
}
|
|
3405
|
+
if (env.TERM === "xterm-ghostty") {
|
|
3406
|
+
return 3;
|
|
3407
|
+
}
|
|
3408
|
+
if (env.TERM === "wezterm") {
|
|
3409
|
+
return 3;
|
|
3410
|
+
}
|
|
3411
|
+
if ("TERM_PROGRAM" in env) {
|
|
3412
|
+
const version2 = Number.parseInt((env.TERM_PROGRAM_VERSION || "").split(".")[0], 10);
|
|
3413
|
+
switch (env.TERM_PROGRAM) {
|
|
3414
|
+
case "iTerm.app": {
|
|
3415
|
+
return version2 >= 3 ? 3 : 2;
|
|
3416
|
+
}
|
|
3417
|
+
case "Apple_Terminal": {
|
|
3418
|
+
return 2;
|
|
3419
|
+
}
|
|
3420
|
+
}
|
|
3421
|
+
}
|
|
3422
|
+
if (/-256(color)?$/i.test(env.TERM)) {
|
|
3423
|
+
return 2;
|
|
3424
|
+
}
|
|
3425
|
+
if (/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(env.TERM)) {
|
|
3426
|
+
return 1;
|
|
3427
|
+
}
|
|
3428
|
+
if ("COLORTERM" in env) {
|
|
3429
|
+
return 1;
|
|
3430
|
+
}
|
|
3431
|
+
return min;
|
|
3432
|
+
}
|
|
3433
|
+
function createSupportsColor(stream, options = {}) {
|
|
3434
|
+
const level = _supportsColor(stream, {
|
|
3435
|
+
streamIsTTY: stream && stream.isTTY,
|
|
3436
|
+
...options
|
|
3437
|
+
});
|
|
3438
|
+
return translateLevel(level);
|
|
3439
|
+
}
|
|
3440
|
+
var import_node_process, import_node_os, import_node_tty, env, flagForceColor, supportsColor, supports_color_default;
|
|
3441
|
+
var init_supports_color = __esm({
|
|
3442
|
+
"../../node_modules/.pnpm/chalk@5.6.2/node_modules/chalk/source/vendor/supports-color/index.js"() {
|
|
3443
|
+
import_node_process = __toESM(require("node:process"), 1);
|
|
3444
|
+
import_node_os = __toESM(require("node:os"), 1);
|
|
3445
|
+
import_node_tty = __toESM(require("node:tty"), 1);
|
|
3446
|
+
({ env } = import_node_process.default);
|
|
3447
|
+
if (hasFlag("no-color") || hasFlag("no-colors") || hasFlag("color=false") || hasFlag("color=never")) {
|
|
3448
|
+
flagForceColor = 0;
|
|
3449
|
+
} else if (hasFlag("color") || hasFlag("colors") || hasFlag("color=true") || hasFlag("color=always")) {
|
|
3450
|
+
flagForceColor = 1;
|
|
3451
|
+
}
|
|
3452
|
+
supportsColor = {
|
|
3453
|
+
stdout: createSupportsColor({ isTTY: import_node_tty.default.isatty(1) }),
|
|
3454
|
+
stderr: createSupportsColor({ isTTY: import_node_tty.default.isatty(2) })
|
|
3455
|
+
};
|
|
3456
|
+
supports_color_default = supportsColor;
|
|
3457
|
+
}
|
|
3458
|
+
});
|
|
3459
|
+
|
|
3460
|
+
// ../../node_modules/.pnpm/chalk@5.6.2/node_modules/chalk/source/utilities.js
|
|
3461
|
+
function stringReplaceAll(string4, substring, replacer) {
|
|
3462
|
+
let index = string4.indexOf(substring);
|
|
3463
|
+
if (index === -1) {
|
|
3464
|
+
return string4;
|
|
3465
|
+
}
|
|
3466
|
+
const substringLength = substring.length;
|
|
3467
|
+
let endIndex = 0;
|
|
3468
|
+
let returnValue = "";
|
|
3469
|
+
do {
|
|
3470
|
+
returnValue += string4.slice(endIndex, index) + substring + replacer;
|
|
3471
|
+
endIndex = index + substringLength;
|
|
3472
|
+
index = string4.indexOf(substring, endIndex);
|
|
3473
|
+
} while (index !== -1);
|
|
3474
|
+
returnValue += string4.slice(endIndex);
|
|
3475
|
+
return returnValue;
|
|
3476
|
+
}
|
|
3477
|
+
function stringEncaseCRLFWithFirstIndex(string4, prefix, postfix, index) {
|
|
3478
|
+
let endIndex = 0;
|
|
3479
|
+
let returnValue = "";
|
|
3480
|
+
do {
|
|
3481
|
+
const gotCR = string4[index - 1] === "\r";
|
|
3482
|
+
returnValue += string4.slice(endIndex, gotCR ? index - 1 : index) + prefix + (gotCR ? "\r\n" : "\n") + postfix;
|
|
3483
|
+
endIndex = index + 1;
|
|
3484
|
+
index = string4.indexOf("\n", endIndex);
|
|
3485
|
+
} while (index !== -1);
|
|
3486
|
+
returnValue += string4.slice(endIndex);
|
|
3487
|
+
return returnValue;
|
|
3488
|
+
}
|
|
3489
|
+
var init_utilities = __esm({
|
|
3490
|
+
"../../node_modules/.pnpm/chalk@5.6.2/node_modules/chalk/source/utilities.js"() {
|
|
3491
|
+
}
|
|
3492
|
+
});
|
|
3493
|
+
|
|
3494
|
+
// ../../node_modules/.pnpm/chalk@5.6.2/node_modules/chalk/source/index.js
|
|
3495
|
+
function createChalk(options) {
|
|
3496
|
+
return chalkFactory(options);
|
|
3497
|
+
}
|
|
3498
|
+
var stdoutColor, stderrColor, GENERATOR, STYLER, IS_EMPTY, levelMapping, styles2, applyOptions, chalkFactory, getModelAnsi, usedModels, proto, createStyler, createBuilder, applyStyle, chalk, chalkStderr, source_default;
|
|
3499
|
+
var init_source = __esm({
|
|
3500
|
+
"../../node_modules/.pnpm/chalk@5.6.2/node_modules/chalk/source/index.js"() {
|
|
3501
|
+
init_ansi_styles();
|
|
3502
|
+
init_supports_color();
|
|
3503
|
+
init_utilities();
|
|
3504
|
+
({ stdout: stdoutColor, stderr: stderrColor } = supports_color_default);
|
|
3505
|
+
GENERATOR = Symbol("GENERATOR");
|
|
3506
|
+
STYLER = Symbol("STYLER");
|
|
3507
|
+
IS_EMPTY = Symbol("IS_EMPTY");
|
|
3508
|
+
levelMapping = [
|
|
3509
|
+
"ansi",
|
|
3510
|
+
"ansi",
|
|
3511
|
+
"ansi256",
|
|
3512
|
+
"ansi16m"
|
|
3513
|
+
];
|
|
3514
|
+
styles2 = /* @__PURE__ */ Object.create(null);
|
|
3515
|
+
applyOptions = (object2, options = {}) => {
|
|
3516
|
+
if (options.level && !(Number.isInteger(options.level) && options.level >= 0 && options.level <= 3)) {
|
|
3517
|
+
throw new Error("The `level` option should be an integer from 0 to 3");
|
|
3518
|
+
}
|
|
3519
|
+
const colorLevel = stdoutColor ? stdoutColor.level : 0;
|
|
3520
|
+
object2.level = options.level === void 0 ? colorLevel : options.level;
|
|
3521
|
+
};
|
|
3522
|
+
chalkFactory = (options) => {
|
|
3523
|
+
const chalk2 = (...strings) => strings.join(" ");
|
|
3524
|
+
applyOptions(chalk2, options);
|
|
3525
|
+
Object.setPrototypeOf(chalk2, createChalk.prototype);
|
|
3526
|
+
return chalk2;
|
|
3527
|
+
};
|
|
3528
|
+
Object.setPrototypeOf(createChalk.prototype, Function.prototype);
|
|
3529
|
+
for (const [styleName, style] of Object.entries(ansi_styles_default)) {
|
|
3530
|
+
styles2[styleName] = {
|
|
3531
|
+
get() {
|
|
3532
|
+
const builder = createBuilder(this, createStyler(style.open, style.close, this[STYLER]), this[IS_EMPTY]);
|
|
3533
|
+
Object.defineProperty(this, styleName, { value: builder });
|
|
3534
|
+
return builder;
|
|
3535
|
+
}
|
|
3536
|
+
};
|
|
3537
|
+
}
|
|
3538
|
+
styles2.visible = {
|
|
3539
|
+
get() {
|
|
3540
|
+
const builder = createBuilder(this, this[STYLER], true);
|
|
3541
|
+
Object.defineProperty(this, "visible", { value: builder });
|
|
3542
|
+
return builder;
|
|
3543
|
+
}
|
|
3544
|
+
};
|
|
3545
|
+
getModelAnsi = (model, level, type, ...arguments_) => {
|
|
3546
|
+
if (model === "rgb") {
|
|
3547
|
+
if (level === "ansi16m") {
|
|
3548
|
+
return ansi_styles_default[type].ansi16m(...arguments_);
|
|
3549
|
+
}
|
|
3550
|
+
if (level === "ansi256") {
|
|
3551
|
+
return ansi_styles_default[type].ansi256(ansi_styles_default.rgbToAnsi256(...arguments_));
|
|
3552
|
+
}
|
|
3553
|
+
return ansi_styles_default[type].ansi(ansi_styles_default.rgbToAnsi(...arguments_));
|
|
3554
|
+
}
|
|
3555
|
+
if (model === "hex") {
|
|
3556
|
+
return getModelAnsi("rgb", level, type, ...ansi_styles_default.hexToRgb(...arguments_));
|
|
3557
|
+
}
|
|
3558
|
+
return ansi_styles_default[type][model](...arguments_);
|
|
3559
|
+
};
|
|
3560
|
+
usedModels = ["rgb", "hex", "ansi256"];
|
|
3561
|
+
for (const model of usedModels) {
|
|
3562
|
+
styles2[model] = {
|
|
3563
|
+
get() {
|
|
3564
|
+
const { level } = this;
|
|
3565
|
+
return function(...arguments_) {
|
|
3566
|
+
const styler = createStyler(getModelAnsi(model, levelMapping[level], "color", ...arguments_), ansi_styles_default.color.close, this[STYLER]);
|
|
3567
|
+
return createBuilder(this, styler, this[IS_EMPTY]);
|
|
3568
|
+
};
|
|
3569
|
+
}
|
|
3570
|
+
};
|
|
3571
|
+
const bgModel = "bg" + model[0].toUpperCase() + model.slice(1);
|
|
3572
|
+
styles2[bgModel] = {
|
|
3573
|
+
get() {
|
|
3574
|
+
const { level } = this;
|
|
3575
|
+
return function(...arguments_) {
|
|
3576
|
+
const styler = createStyler(getModelAnsi(model, levelMapping[level], "bgColor", ...arguments_), ansi_styles_default.bgColor.close, this[STYLER]);
|
|
3577
|
+
return createBuilder(this, styler, this[IS_EMPTY]);
|
|
3578
|
+
};
|
|
3579
|
+
}
|
|
3580
|
+
};
|
|
3581
|
+
}
|
|
3582
|
+
proto = Object.defineProperties(() => {
|
|
3583
|
+
}, {
|
|
3584
|
+
...styles2,
|
|
3585
|
+
level: {
|
|
3586
|
+
enumerable: true,
|
|
3587
|
+
get() {
|
|
3588
|
+
return this[GENERATOR].level;
|
|
3589
|
+
},
|
|
3590
|
+
set(level) {
|
|
3591
|
+
this[GENERATOR].level = level;
|
|
3592
|
+
}
|
|
3593
|
+
}
|
|
3594
|
+
});
|
|
3595
|
+
createStyler = (open, close, parent) => {
|
|
3596
|
+
let openAll;
|
|
3597
|
+
let closeAll;
|
|
3598
|
+
if (parent === void 0) {
|
|
3599
|
+
openAll = open;
|
|
3600
|
+
closeAll = close;
|
|
3601
|
+
} else {
|
|
3602
|
+
openAll = parent.openAll + open;
|
|
3603
|
+
closeAll = close + parent.closeAll;
|
|
3604
|
+
}
|
|
3605
|
+
return {
|
|
3606
|
+
open,
|
|
3607
|
+
close,
|
|
3608
|
+
openAll,
|
|
3609
|
+
closeAll,
|
|
3610
|
+
parent
|
|
3611
|
+
};
|
|
3612
|
+
};
|
|
3613
|
+
createBuilder = (self2, _styler, _isEmpty) => {
|
|
3614
|
+
const builder = (...arguments_) => applyStyle(builder, arguments_.length === 1 ? "" + arguments_[0] : arguments_.join(" "));
|
|
3615
|
+
Object.setPrototypeOf(builder, proto);
|
|
3616
|
+
builder[GENERATOR] = self2;
|
|
3617
|
+
builder[STYLER] = _styler;
|
|
3618
|
+
builder[IS_EMPTY] = _isEmpty;
|
|
3619
|
+
return builder;
|
|
3620
|
+
};
|
|
3621
|
+
applyStyle = (self2, string4) => {
|
|
3622
|
+
if (self2.level <= 0 || !string4) {
|
|
3623
|
+
return self2[IS_EMPTY] ? "" : string4;
|
|
3624
|
+
}
|
|
3625
|
+
let styler = self2[STYLER];
|
|
3626
|
+
if (styler === void 0) {
|
|
3627
|
+
return string4;
|
|
3628
|
+
}
|
|
3629
|
+
const { openAll, closeAll } = styler;
|
|
3630
|
+
if (string4.includes("\x1B")) {
|
|
3631
|
+
while (styler !== void 0) {
|
|
3632
|
+
string4 = stringReplaceAll(string4, styler.close, styler.open);
|
|
3633
|
+
styler = styler.parent;
|
|
3634
|
+
}
|
|
3635
|
+
}
|
|
3636
|
+
const lfIndex = string4.indexOf("\n");
|
|
3637
|
+
if (lfIndex !== -1) {
|
|
3638
|
+
string4 = stringEncaseCRLFWithFirstIndex(string4, closeAll, openAll, lfIndex);
|
|
3639
|
+
}
|
|
3640
|
+
return openAll + string4 + closeAll;
|
|
3641
|
+
};
|
|
3642
|
+
Object.defineProperties(createChalk.prototype, styles2);
|
|
3643
|
+
chalk = createChalk();
|
|
3644
|
+
chalkStderr = createChalk({ level: stderrColor ? stderrColor.level : 0 });
|
|
3645
|
+
source_default = chalk;
|
|
3646
|
+
}
|
|
3647
|
+
});
|
|
3648
|
+
|
|
3130
3649
|
// ../../node_modules/.pnpm/mimic-fn@2.1.0/node_modules/mimic-fn/index.js
|
|
3131
3650
|
var require_mimic_fn = __commonJS({
|
|
3132
3651
|
"../../node_modules/.pnpm/mimic-fn@2.1.0/node_modules/mimic-fn/index.js"(exports2, module2) {
|
|
@@ -5246,7 +5765,7 @@ var require_buffer_list = __commonJS({
|
|
|
5246
5765
|
}
|
|
5247
5766
|
}, {
|
|
5248
5767
|
key: "join",
|
|
5249
|
-
value: function
|
|
5768
|
+
value: function join13(s) {
|
|
5250
5769
|
if (this.length === 0) return "";
|
|
5251
5770
|
var p = this.head;
|
|
5252
5771
|
var ret = "" + p.data;
|
|
@@ -23005,530 +23524,945 @@ var require_zod = __commonJS({
|
|
|
23005
23524
|
}
|
|
23006
23525
|
});
|
|
23007
23526
|
|
|
23008
|
-
// src/cli/
|
|
23009
|
-
|
|
23010
|
-
|
|
23011
|
-
|
|
23527
|
+
// src/cli/config.ts
|
|
23528
|
+
function resolveApiUrl(cliOverride, prod) {
|
|
23529
|
+
if (cliOverride) return cliOverride;
|
|
23530
|
+
if (prod) return PROD_API_URL;
|
|
23531
|
+
if (process.env.ELEVASIS_API_URL) return process.env.ELEVASIS_API_URL;
|
|
23532
|
+
if (process.env.NODE_ENV === "development") return DEV_API_URL;
|
|
23533
|
+
return PROD_API_URL;
|
|
23534
|
+
}
|
|
23535
|
+
function resolveEnvironment(prod) {
|
|
23536
|
+
if (prod) return "production";
|
|
23537
|
+
return process.env.NODE_ENV === "development" ? "development" : "production";
|
|
23538
|
+
}
|
|
23539
|
+
function resolveApiKey(prod) {
|
|
23540
|
+
if (!prod && process.env.NODE_ENV === "development") {
|
|
23541
|
+
return process.env.ELEVASIS_PLATFORM_KEY_DEV ?? process.env.ELEVASIS_PLATFORM_KEY ?? "";
|
|
23542
|
+
}
|
|
23543
|
+
return process.env.ELEVASIS_PLATFORM_KEY ?? "";
|
|
23544
|
+
}
|
|
23545
|
+
function tryFindProjectRoot(startDir) {
|
|
23546
|
+
const raw = (0, import_path.resolve)(startDir);
|
|
23547
|
+
let dir;
|
|
23548
|
+
try {
|
|
23549
|
+
dir = (0, import_fs.realpathSync)(raw);
|
|
23550
|
+
} catch {
|
|
23551
|
+
dir = raw;
|
|
23552
|
+
}
|
|
23553
|
+
while (true) {
|
|
23554
|
+
if ((0, import_fs.existsSync)((0, import_path.join)(dir, ".elevasis"))) return dir;
|
|
23555
|
+
const parent = (0, import_path.dirname)(dir);
|
|
23556
|
+
if (parent === dir) break;
|
|
23557
|
+
dir = parent;
|
|
23558
|
+
}
|
|
23559
|
+
return null;
|
|
23560
|
+
}
|
|
23561
|
+
function findProjectRoot(startDir) {
|
|
23562
|
+
const root = tryFindProjectRoot(startDir);
|
|
23563
|
+
if (root !== null) return root;
|
|
23564
|
+
process.stderr.write(
|
|
23565
|
+
"Not inside an Elevasis project. Run this command from a project directory (an Elevasis project has a .elevasis file at its root).\n"
|
|
23566
|
+
);
|
|
23567
|
+
process.exit(1);
|
|
23568
|
+
}
|
|
23569
|
+
function isHelpOrVersionOnly() {
|
|
23570
|
+
const args = process.argv.slice(2);
|
|
23571
|
+
return args.length > 0 && args.every((a) => ["--help", "-h", "--version", "-V"].includes(a));
|
|
23572
|
+
}
|
|
23573
|
+
function getProjectRoot() {
|
|
23574
|
+
if (_projectRoot !== void 0) return _projectRoot;
|
|
23575
|
+
_projectRoot = isHelpOrVersionOnly() ? process.cwd() : findProjectRoot(process.cwd());
|
|
23576
|
+
return _projectRoot;
|
|
23577
|
+
}
|
|
23578
|
+
function resolveProjectRelative(relOrAbsPath) {
|
|
23579
|
+
if ((0, import_path.isAbsolute)(relOrAbsPath)) return relOrAbsPath;
|
|
23580
|
+
return (0, import_path.resolve)(getProjectRoot(), relOrAbsPath);
|
|
23581
|
+
}
|
|
23582
|
+
function findEnvFile(_startDir) {
|
|
23583
|
+
const projectRoot = tryFindProjectRoot(process.cwd());
|
|
23584
|
+
if (projectRoot === null) return void 0;
|
|
23585
|
+
const candidate = (0, import_path.join)(projectRoot, ".env");
|
|
23586
|
+
return (0, import_fs.existsSync)(candidate) ? candidate : void 0;
|
|
23587
|
+
}
|
|
23588
|
+
function findPackageRoot(startDir) {
|
|
23589
|
+
const raw = (0, import_path.resolve)(startDir);
|
|
23590
|
+
let dir;
|
|
23591
|
+
try {
|
|
23592
|
+
dir = (0, import_fs.realpathSync)(raw);
|
|
23593
|
+
} catch {
|
|
23594
|
+
dir = raw;
|
|
23595
|
+
}
|
|
23596
|
+
const projectRoot = tryFindProjectRoot(dir);
|
|
23597
|
+
while (true) {
|
|
23598
|
+
if ((0, import_fs.existsSync)((0, import_path.join)(dir, "package.json"))) return dir;
|
|
23599
|
+
const parent = (0, import_path.dirname)(dir);
|
|
23600
|
+
if (parent === dir) break;
|
|
23601
|
+
if (projectRoot !== null && dir === projectRoot) break;
|
|
23602
|
+
dir = parent;
|
|
23603
|
+
}
|
|
23604
|
+
process.stderr.write(
|
|
23605
|
+
"No package.json found between the current directory and the project root.\nRemediation: run this command from inside a package directory (one that contains package.json).\n"
|
|
23606
|
+
);
|
|
23607
|
+
process.exit(1);
|
|
23608
|
+
}
|
|
23609
|
+
function getPackageRoot() {
|
|
23610
|
+
if (_packageRoot !== void 0) return _packageRoot;
|
|
23611
|
+
_packageRoot = isHelpOrVersionOnly() ? process.cwd() : findPackageRoot(process.cwd());
|
|
23612
|
+
return _packageRoot;
|
|
23613
|
+
}
|
|
23614
|
+
function resolvePackageRelative(relOrAbsPath) {
|
|
23615
|
+
if ((0, import_path.isAbsolute)(relOrAbsPath)) return relOrAbsPath;
|
|
23616
|
+
return (0, import_path.resolve)(getPackageRoot(), relOrAbsPath);
|
|
23617
|
+
}
|
|
23618
|
+
var import_fs, import_path, DEV_API_URL, PROD_API_URL, _projectRoot, _packageRoot;
|
|
23619
|
+
var init_config = __esm({
|
|
23620
|
+
"src/cli/config.ts"() {
|
|
23621
|
+
"use strict";
|
|
23622
|
+
import_fs = require("fs");
|
|
23623
|
+
import_path = require("path");
|
|
23624
|
+
DEV_API_URL = "http://localhost:5170";
|
|
23625
|
+
PROD_API_URL = "https://api.elevasis.io";
|
|
23626
|
+
}
|
|
23012
23627
|
});
|
|
23013
|
-
module.exports = __toCommonJS(index_exports);
|
|
23014
|
-
var import_dotenv = __toESM(require_main(), 1);
|
|
23015
|
-
var import_fs4 = require("fs");
|
|
23016
|
-
var import_path4 = require("path");
|
|
23017
23628
|
|
|
23018
|
-
//
|
|
23019
|
-
|
|
23020
|
-
|
|
23021
|
-
|
|
23022
|
-
|
|
23023
|
-
|
|
23024
|
-
|
|
23025
|
-
|
|
23026
|
-
|
|
23027
|
-
|
|
23028
|
-
|
|
23029
|
-
|
|
23030
|
-
|
|
23031
|
-
|
|
23032
|
-
|
|
23033
|
-
|
|
23629
|
+
// src/cli/commands/om/project-layout.ts
|
|
23630
|
+
function assertSplitLayout(projectDir) {
|
|
23631
|
+
const omDir = (0, import_node_path7.join)(projectDir, "core", "config", "organization-model");
|
|
23632
|
+
const missing = REQUIRED_FILES.filter((f) => !(0, import_node_fs7.existsSync)((0, import_node_path7.join)(omDir, f)));
|
|
23633
|
+
if (missing.length > 0) {
|
|
23634
|
+
throw new Error(
|
|
23635
|
+
"Legacy single-file OM layout detected. Split into `core/config/organization-model/{profile.ts, systems.ts, navigation.ts}` before scaffolding."
|
|
23636
|
+
);
|
|
23637
|
+
}
|
|
23638
|
+
}
|
|
23639
|
+
var import_node_fs7, import_node_path7, REQUIRED_FILES;
|
|
23640
|
+
var init_project_layout = __esm({
|
|
23641
|
+
"src/cli/commands/om/project-layout.ts"() {
|
|
23642
|
+
"use strict";
|
|
23643
|
+
import_node_fs7 = require("node:fs");
|
|
23644
|
+
import_node_path7 = require("node:path");
|
|
23645
|
+
REQUIRED_FILES = ["profile.ts", "systems.ts", "navigation.ts"];
|
|
23646
|
+
}
|
|
23647
|
+
});
|
|
23034
23648
|
|
|
23035
|
-
//
|
|
23036
|
-
|
|
23037
|
-
|
|
23038
|
-
|
|
23039
|
-
|
|
23040
|
-
var styles = {
|
|
23041
|
-
modifier: {
|
|
23042
|
-
reset: [0, 0],
|
|
23043
|
-
// 21 isn't widely supported and 22 does the same thing
|
|
23044
|
-
bold: [1, 22],
|
|
23045
|
-
dim: [2, 22],
|
|
23046
|
-
italic: [3, 23],
|
|
23047
|
-
underline: [4, 24],
|
|
23048
|
-
overline: [53, 55],
|
|
23049
|
-
inverse: [7, 27],
|
|
23050
|
-
hidden: [8, 28],
|
|
23051
|
-
strikethrough: [9, 29]
|
|
23052
|
-
},
|
|
23053
|
-
color: {
|
|
23054
|
-
black: [30, 39],
|
|
23055
|
-
red: [31, 39],
|
|
23056
|
-
green: [32, 39],
|
|
23057
|
-
yellow: [33, 39],
|
|
23058
|
-
blue: [34, 39],
|
|
23059
|
-
magenta: [35, 39],
|
|
23060
|
-
cyan: [36, 39],
|
|
23061
|
-
white: [37, 39],
|
|
23062
|
-
// Bright color
|
|
23063
|
-
blackBright: [90, 39],
|
|
23064
|
-
gray: [90, 39],
|
|
23065
|
-
// Alias of `blackBright`
|
|
23066
|
-
grey: [90, 39],
|
|
23067
|
-
// Alias of `blackBright`
|
|
23068
|
-
redBright: [91, 39],
|
|
23069
|
-
greenBright: [92, 39],
|
|
23070
|
-
yellowBright: [93, 39],
|
|
23071
|
-
blueBright: [94, 39],
|
|
23072
|
-
magentaBright: [95, 39],
|
|
23073
|
-
cyanBright: [96, 39],
|
|
23074
|
-
whiteBright: [97, 39]
|
|
23075
|
-
},
|
|
23076
|
-
bgColor: {
|
|
23077
|
-
bgBlack: [40, 49],
|
|
23078
|
-
bgRed: [41, 49],
|
|
23079
|
-
bgGreen: [42, 49],
|
|
23080
|
-
bgYellow: [43, 49],
|
|
23081
|
-
bgBlue: [44, 49],
|
|
23082
|
-
bgMagenta: [45, 49],
|
|
23083
|
-
bgCyan: [46, 49],
|
|
23084
|
-
bgWhite: [47, 49],
|
|
23085
|
-
// Bright color
|
|
23086
|
-
bgBlackBright: [100, 49],
|
|
23087
|
-
bgGray: [100, 49],
|
|
23088
|
-
// Alias of `bgBlackBright`
|
|
23089
|
-
bgGrey: [100, 49],
|
|
23090
|
-
// Alias of `bgBlackBright`
|
|
23091
|
-
bgRedBright: [101, 49],
|
|
23092
|
-
bgGreenBright: [102, 49],
|
|
23093
|
-
bgYellowBright: [103, 49],
|
|
23094
|
-
bgBlueBright: [104, 49],
|
|
23095
|
-
bgMagentaBright: [105, 49],
|
|
23096
|
-
bgCyanBright: [106, 49],
|
|
23097
|
-
bgWhiteBright: [107, 49]
|
|
23649
|
+
// src/cli/commands/om/prompt-helpers.ts
|
|
23650
|
+
async function promptIfAbsent(value, question, options) {
|
|
23651
|
+
if (value !== void 0) return value;
|
|
23652
|
+
if (!process.stdin.isTTY) {
|
|
23653
|
+
return options?.default ?? "";
|
|
23098
23654
|
}
|
|
23099
|
-
|
|
23100
|
-
|
|
23101
|
-
|
|
23102
|
-
|
|
23103
|
-
|
|
23104
|
-
|
|
23105
|
-
|
|
23106
|
-
|
|
23107
|
-
|
|
23108
|
-
styles[styleName] = {
|
|
23109
|
-
open: `\x1B[${style[0]}m`,
|
|
23110
|
-
close: `\x1B[${style[1]}m`
|
|
23111
|
-
};
|
|
23112
|
-
group[styleName] = styles[styleName];
|
|
23113
|
-
codes.set(style[0], style[1]);
|
|
23114
|
-
}
|
|
23115
|
-
Object.defineProperty(styles, groupName, {
|
|
23116
|
-
value: group,
|
|
23117
|
-
enumerable: false
|
|
23655
|
+
const rl = readline2.createInterface({
|
|
23656
|
+
input: process.stdin,
|
|
23657
|
+
output: process.stdout
|
|
23658
|
+
});
|
|
23659
|
+
return new Promise((resolve5) => {
|
|
23660
|
+
const prompt = options?.default ? `${question} [${options.default}]: ` : `${question}: `;
|
|
23661
|
+
rl.question(prompt, (answer) => {
|
|
23662
|
+
rl.close();
|
|
23663
|
+
resolve5(answer.trim() || (options?.default ?? ""));
|
|
23118
23664
|
});
|
|
23119
|
-
}
|
|
23120
|
-
Object.defineProperty(styles, "codes", {
|
|
23121
|
-
value: codes,
|
|
23122
|
-
enumerable: false
|
|
23123
23665
|
});
|
|
23124
|
-
|
|
23125
|
-
|
|
23126
|
-
|
|
23127
|
-
|
|
23128
|
-
|
|
23129
|
-
|
|
23130
|
-
|
|
23131
|
-
|
|
23132
|
-
|
|
23133
|
-
|
|
23134
|
-
|
|
23135
|
-
|
|
23136
|
-
|
|
23137
|
-
|
|
23138
|
-
|
|
23139
|
-
|
|
23140
|
-
|
|
23141
|
-
|
|
23142
|
-
|
|
23143
|
-
|
|
23144
|
-
|
|
23666
|
+
}
|
|
23667
|
+
var readline2;
|
|
23668
|
+
var init_prompt_helpers = __esm({
|
|
23669
|
+
"src/cli/commands/om/prompt-helpers.ts"() {
|
|
23670
|
+
"use strict";
|
|
23671
|
+
readline2 = __toESM(require("node:readline"), 1);
|
|
23672
|
+
}
|
|
23673
|
+
});
|
|
23674
|
+
|
|
23675
|
+
// src/cli/commands/om/error-map.ts
|
|
23676
|
+
function mapValidationError(stderr) {
|
|
23677
|
+
for (const entry of ERROR_MAP) {
|
|
23678
|
+
if (entry.pattern.test(stderr)) {
|
|
23679
|
+
return entry.friendlyMessage;
|
|
23680
|
+
}
|
|
23681
|
+
}
|
|
23682
|
+
return "Validation failed \u2014 see below. Fix the issue and re-run, or use `om:scaffold:fill` for guided remediation:\n" + stderr;
|
|
23683
|
+
}
|
|
23684
|
+
var ERROR_MAP;
|
|
23685
|
+
var init_error_map = __esm({
|
|
23686
|
+
"src/cli/commands/om/error-map.ts"() {
|
|
23687
|
+
"use strict";
|
|
23688
|
+
ERROR_MAP = [
|
|
23689
|
+
{
|
|
23690
|
+
pattern: /systemPath.*not assignable/i,
|
|
23691
|
+
friendlyMessage: "The system path you entered doesn't match any authored system. Check `templateSystems` in `systems.ts` for valid IDs."
|
|
23145
23692
|
},
|
|
23146
|
-
|
|
23147
|
-
|
|
23148
|
-
|
|
23149
|
-
value(hex3) {
|
|
23150
|
-
const matches = /[a-f\d]{6}|[a-f\d]{3}/i.exec(hex3.toString(16));
|
|
23151
|
-
if (!matches) {
|
|
23152
|
-
return [0, 0, 0];
|
|
23153
|
-
}
|
|
23154
|
-
let [colorString] = matches;
|
|
23155
|
-
if (colorString.length === 3) {
|
|
23156
|
-
colorString = [...colorString].map((character) => character + character).join("");
|
|
23157
|
-
}
|
|
23158
|
-
const integer2 = Number.parseInt(colorString, 16);
|
|
23159
|
-
return [
|
|
23160
|
-
/* eslint-disable no-bitwise */
|
|
23161
|
-
integer2 >> 16 & 255,
|
|
23162
|
-
integer2 >> 8 & 255,
|
|
23163
|
-
integer2 & 255
|
|
23164
|
-
/* eslint-enable no-bitwise */
|
|
23165
|
-
];
|
|
23693
|
+
{
|
|
23694
|
+
pattern: /apiInterface.*required/i,
|
|
23695
|
+
friendlyMessage: "This system is API-backed but is missing the `apiInterface` block. Run `om:scaffold:system --id {path} --api-backed`."
|
|
23166
23696
|
},
|
|
23167
|
-
|
|
23168
|
-
|
|
23169
|
-
|
|
23170
|
-
value: (hex3) => styles.rgbToAnsi256(...styles.hexToRgb(hex3)),
|
|
23171
|
-
enumerable: false
|
|
23172
|
-
},
|
|
23173
|
-
ansi256ToAnsi: {
|
|
23174
|
-
value(code) {
|
|
23175
|
-
if (code < 8) {
|
|
23176
|
-
return 30 + code;
|
|
23177
|
-
}
|
|
23178
|
-
if (code < 16) {
|
|
23179
|
-
return 90 + (code - 8);
|
|
23180
|
-
}
|
|
23181
|
-
let red;
|
|
23182
|
-
let green;
|
|
23183
|
-
let blue;
|
|
23184
|
-
if (code >= 232) {
|
|
23185
|
-
red = ((code - 232) * 10 + 8) / 255;
|
|
23186
|
-
green = red;
|
|
23187
|
-
blue = red;
|
|
23188
|
-
} else {
|
|
23189
|
-
code -= 16;
|
|
23190
|
-
const remainder = code % 36;
|
|
23191
|
-
red = Math.floor(code / 36) / 5;
|
|
23192
|
-
green = Math.floor(remainder / 6) / 5;
|
|
23193
|
-
blue = remainder % 6 / 5;
|
|
23194
|
-
}
|
|
23195
|
-
const value = Math.max(red, green, blue) * 2;
|
|
23196
|
-
if (value === 0) {
|
|
23197
|
-
return 30;
|
|
23198
|
-
}
|
|
23199
|
-
let result = 30 + (Math.round(blue) << 2 | Math.round(green) << 1 | Math.round(red));
|
|
23200
|
-
if (value === 2) {
|
|
23201
|
-
result += 60;
|
|
23202
|
-
}
|
|
23203
|
-
return result;
|
|
23697
|
+
{
|
|
23698
|
+
pattern: /primaryAction.*not in.*actions/i,
|
|
23699
|
+
friendlyMessage: "The primary action you set is not in the resource's `actions` list. Add it to `resource.ontology.actions` first."
|
|
23204
23700
|
},
|
|
23205
|
-
|
|
23206
|
-
|
|
23207
|
-
|
|
23208
|
-
|
|
23209
|
-
|
|
23210
|
-
|
|
23211
|
-
|
|
23212
|
-
|
|
23213
|
-
|
|
23214
|
-
|
|
23215
|
-
|
|
23216
|
-
return styles;
|
|
23217
|
-
}
|
|
23218
|
-
var ansiStyles = assembleStyles();
|
|
23219
|
-
var ansi_styles_default = ansiStyles;
|
|
23701
|
+
{
|
|
23702
|
+
pattern: /ZodError.*required/i,
|
|
23703
|
+
friendlyMessage: "A required field is missing. Run `om:scaffold:fill --system {id}` to see what's needed."
|
|
23704
|
+
},
|
|
23705
|
+
{
|
|
23706
|
+
pattern: /Cannot find module.*organization-model/i,
|
|
23707
|
+
friendlyMessage: "OM config files can't be loaded. Run `pnpm -C operations check-types` directly to see the full TypeScript error."
|
|
23708
|
+
}
|
|
23709
|
+
];
|
|
23710
|
+
}
|
|
23711
|
+
});
|
|
23220
23712
|
|
|
23221
|
-
//
|
|
23222
|
-
|
|
23223
|
-
|
|
23224
|
-
|
|
23225
|
-
|
|
23226
|
-
|
|
23227
|
-
|
|
23228
|
-
|
|
23229
|
-
|
|
23230
|
-
}
|
|
23231
|
-
|
|
23232
|
-
|
|
23233
|
-
|
|
23234
|
-
|
|
23235
|
-
|
|
23236
|
-
|
|
23713
|
+
// src/cli/commands/om/emit-system.ts
|
|
23714
|
+
function emitSystemEntry(opts) {
|
|
23715
|
+
const apiInterfaceBlock = opts.apiBacked ? `
|
|
23716
|
+
apiInterface: {
|
|
23717
|
+
lifecycle: 'active',
|
|
23718
|
+
readinessProfile: 'standard',
|
|
23719
|
+
resourceIds: []
|
|
23720
|
+
},` : "";
|
|
23721
|
+
const code = ` {
|
|
23722
|
+
id: '${opts.id}',
|
|
23723
|
+
title: '${opts.title}',
|
|
23724
|
+
kind: '${opts.kind}',
|
|
23725
|
+
enabled: true,
|
|
23726
|
+
governedByKnowledge: [],
|
|
23727
|
+
drivesGoals: [],
|
|
23728
|
+
lifecycle: 'active',${apiInterfaceBlock}
|
|
23729
|
+
},
|
|
23730
|
+
`;
|
|
23731
|
+
const anchor = /^\] as const\s*$/m;
|
|
23732
|
+
return { code, anchor };
|
|
23237
23733
|
}
|
|
23238
|
-
|
|
23239
|
-
|
|
23240
|
-
|
|
23241
|
-
|
|
23734
|
+
var init_emit_system = __esm({
|
|
23735
|
+
"src/cli/commands/om/emit-system.ts"() {
|
|
23736
|
+
"use strict";
|
|
23737
|
+
}
|
|
23738
|
+
});
|
|
23739
|
+
|
|
23740
|
+
// src/cli/commands/om/splice.ts
|
|
23741
|
+
async function withSnapshotRollback(filePaths, op) {
|
|
23742
|
+
const snapshots = /* @__PURE__ */ new Map();
|
|
23743
|
+
for (const filePath of filePaths) {
|
|
23744
|
+
try {
|
|
23745
|
+
snapshots.set(filePath, (0, import_node_fs8.readFileSync)(filePath, "utf8"));
|
|
23746
|
+
} catch {
|
|
23747
|
+
snapshots.set(filePath, null);
|
|
23242
23748
|
}
|
|
23243
|
-
|
|
23244
|
-
|
|
23749
|
+
}
|
|
23750
|
+
try {
|
|
23751
|
+
return await op();
|
|
23752
|
+
} catch (err) {
|
|
23753
|
+
for (const [filePath, snapshot] of snapshots) {
|
|
23754
|
+
if (snapshot !== null) {
|
|
23755
|
+
try {
|
|
23756
|
+
(0, import_node_fs8.writeFileSync)(filePath, snapshot, "utf8");
|
|
23757
|
+
} catch {
|
|
23758
|
+
}
|
|
23759
|
+
}
|
|
23245
23760
|
}
|
|
23246
|
-
|
|
23761
|
+
throw err;
|
|
23247
23762
|
}
|
|
23248
23763
|
}
|
|
23249
|
-
function
|
|
23250
|
-
|
|
23251
|
-
|
|
23764
|
+
function insertBeforeAnchorInContent(content, code, anchor) {
|
|
23765
|
+
const lines = content.split("\n");
|
|
23766
|
+
const anchorIndex = lines.findIndex((line) => anchor.test(line));
|
|
23767
|
+
if (anchorIndex === -1) {
|
|
23768
|
+
throw new Error(
|
|
23769
|
+
`[om:scaffold] Anchor pattern ${anchor} not found in file. The file may have been manually edited. Rollback will restore the original.`
|
|
23770
|
+
);
|
|
23252
23771
|
}
|
|
23253
|
-
|
|
23254
|
-
|
|
23255
|
-
|
|
23256
|
-
has256: level >= 2,
|
|
23257
|
-
has16m: level >= 3
|
|
23258
|
-
};
|
|
23772
|
+
const codeLines = code.endsWith("\n") ? code.slice(0, -1).split("\n") : code.split("\n");
|
|
23773
|
+
lines.splice(anchorIndex, 0, ...codeLines);
|
|
23774
|
+
return lines.join("\n");
|
|
23259
23775
|
}
|
|
23260
|
-
function
|
|
23261
|
-
const
|
|
23262
|
-
|
|
23263
|
-
|
|
23776
|
+
async function appendBeforeAnchor(filePath, code, anchor) {
|
|
23777
|
+
const content = (0, import_node_fs8.readFileSync)(filePath, "utf8");
|
|
23778
|
+
const updated = insertBeforeAnchorInContent(content, code, anchor);
|
|
23779
|
+
(0, import_node_fs8.writeFileSync)(filePath, updated, "utf8");
|
|
23780
|
+
}
|
|
23781
|
+
async function applyConstImport(systemsFilePath, importLine, fieldLine, importAnchor, fieldAnchor, newConstFilePath, newConstFileCode) {
|
|
23782
|
+
(0, import_node_fs8.mkdirSync)((0, import_node_path8.dirname)(newConstFilePath), { recursive: true });
|
|
23783
|
+
(0, import_node_fs8.writeFileSync)(newConstFilePath, newConstFileCode, "utf8");
|
|
23784
|
+
const systemsContent = (0, import_node_fs8.readFileSync)(systemsFilePath, "utf8");
|
|
23785
|
+
const afterImport = insertBeforeAnchorInContent(systemsContent, importLine + "\n", importAnchor);
|
|
23786
|
+
const lines = afterImport.split("\n");
|
|
23787
|
+
const fieldAnchorIndex = lines.findIndex((line) => fieldAnchor.test(line));
|
|
23788
|
+
if (fieldAnchorIndex === -1) {
|
|
23789
|
+
throw new Error(
|
|
23790
|
+
`[om:scaffold] Field anchor pattern ${fieldAnchor} not found in ${systemsFilePath}. The system entry may not exist yet. Run om:scaffold:system first.`
|
|
23791
|
+
);
|
|
23264
23792
|
}
|
|
23265
|
-
|
|
23266
|
-
|
|
23267
|
-
|
|
23793
|
+
lines.splice(fieldAnchorIndex + 1, 0, fieldLine);
|
|
23794
|
+
(0, import_node_fs8.writeFileSync)(systemsFilePath, lines.join("\n"), "utf8");
|
|
23795
|
+
}
|
|
23796
|
+
var import_node_fs8, import_node_path8;
|
|
23797
|
+
var init_splice = __esm({
|
|
23798
|
+
"src/cli/commands/om/splice.ts"() {
|
|
23799
|
+
"use strict";
|
|
23800
|
+
import_node_fs8 = require("node:fs");
|
|
23801
|
+
import_node_path8 = require("node:path");
|
|
23268
23802
|
}
|
|
23269
|
-
|
|
23270
|
-
|
|
23271
|
-
|
|
23272
|
-
|
|
23273
|
-
|
|
23274
|
-
|
|
23803
|
+
});
|
|
23804
|
+
|
|
23805
|
+
// src/cli/commands/om/scaffold-system.ts
|
|
23806
|
+
var scaffold_system_exports = {};
|
|
23807
|
+
__export(scaffold_system_exports, {
|
|
23808
|
+
default: () => scaffoldSystem
|
|
23809
|
+
});
|
|
23810
|
+
function runValidation(projectDir) {
|
|
23811
|
+
for (const script of ["check-types", "check"]) {
|
|
23812
|
+
const result = (0, import_node_child_process2.spawnSync)("pnpm", ["-C", "operations", "run", script], {
|
|
23813
|
+
cwd: projectDir,
|
|
23814
|
+
encoding: "utf8",
|
|
23815
|
+
shell: true
|
|
23816
|
+
});
|
|
23817
|
+
if (result.status !== 0) {
|
|
23818
|
+
return (result.stderr ?? "") + (result.stdout ?? "");
|
|
23275
23819
|
}
|
|
23276
23820
|
}
|
|
23277
|
-
|
|
23278
|
-
|
|
23279
|
-
|
|
23280
|
-
|
|
23281
|
-
|
|
23282
|
-
|
|
23283
|
-
const
|
|
23284
|
-
if (
|
|
23285
|
-
|
|
23821
|
+
return null;
|
|
23822
|
+
}
|
|
23823
|
+
async function scaffoldSystem(opts) {
|
|
23824
|
+
const projectDir = getProjectRoot();
|
|
23825
|
+
assertSplitLayout(projectDir);
|
|
23826
|
+
const options = opts;
|
|
23827
|
+
const id = await promptIfAbsent(options.id, "System path (e.g. sales.crm)");
|
|
23828
|
+
if (!id) {
|
|
23829
|
+
process.stderr.write(source_default.red("System path is required. Pass --id <path> or enter it at the prompt.\n"));
|
|
23830
|
+
process.exit(1);
|
|
23286
23831
|
}
|
|
23287
|
-
|
|
23288
|
-
|
|
23289
|
-
|
|
23290
|
-
|
|
23291
|
-
}
|
|
23292
|
-
return 1;
|
|
23832
|
+
const title = await promptIfAbsent(options.title, "Display title");
|
|
23833
|
+
if (!title) {
|
|
23834
|
+
process.stderr.write(source_default.red("Display title is required. Pass --title <text> or enter it at the prompt.\n"));
|
|
23835
|
+
process.exit(1);
|
|
23293
23836
|
}
|
|
23294
|
-
|
|
23295
|
-
|
|
23296
|
-
|
|
23837
|
+
const rawKind = await promptIfAbsent(
|
|
23838
|
+
options.kind,
|
|
23839
|
+
"Kind (operational / analytical / support)",
|
|
23840
|
+
{
|
|
23841
|
+
default: "operational"
|
|
23297
23842
|
}
|
|
23298
|
-
|
|
23299
|
-
|
|
23843
|
+
);
|
|
23844
|
+
const kind = rawKind || "operational";
|
|
23845
|
+
let apiBacked = Boolean(options.apiBacked);
|
|
23846
|
+
if (!apiBacked && process.stdin.isTTY) {
|
|
23847
|
+
const answer = await promptIfAbsent(void 0, "Is this system API-backed? (adds apiInterface) [y/N]", {
|
|
23848
|
+
default: "N"
|
|
23849
|
+
});
|
|
23850
|
+
apiBacked = answer.trim().toLowerCase() === "y";
|
|
23851
|
+
}
|
|
23852
|
+
const { code, anchor } = emitSystemEntry({ id, title, kind, apiBacked });
|
|
23853
|
+
if (options.dryRun) {
|
|
23854
|
+
console.log(source_default.cyan("Dry-run mode \u2014 no files written.\n"));
|
|
23855
|
+
console.log(source_default.gray("Proposed addition to core/config/organization-model/systems.ts:"));
|
|
23856
|
+
console.log(code);
|
|
23857
|
+
if (apiBacked) {
|
|
23858
|
+
console.log(
|
|
23859
|
+
source_default.yellow("Reminder: add resource IDs to the `apiInterface.resourceIds` array after scaffolding resources.")
|
|
23860
|
+
);
|
|
23300
23861
|
}
|
|
23301
|
-
return
|
|
23862
|
+
return;
|
|
23302
23863
|
}
|
|
23303
|
-
|
|
23304
|
-
|
|
23864
|
+
const systemsFilePath = (0, import_node_path9.join)(projectDir, "core", "config", "organization-model", "systems.ts");
|
|
23865
|
+
try {
|
|
23866
|
+
await withSnapshotRollback([systemsFilePath], async () => {
|
|
23867
|
+
await appendBeforeAnchor(systemsFilePath, code, anchor);
|
|
23868
|
+
const validationError = runValidation(projectDir);
|
|
23869
|
+
if (validationError !== null) {
|
|
23870
|
+
throw new Error(validationError);
|
|
23871
|
+
}
|
|
23872
|
+
});
|
|
23873
|
+
} catch (err) {
|
|
23874
|
+
const raw = err instanceof Error ? err.message : String(err);
|
|
23875
|
+
process.stderr.write(source_default.red(mapValidationError(raw)) + "\n");
|
|
23876
|
+
process.exit(1);
|
|
23305
23877
|
}
|
|
23306
|
-
|
|
23307
|
-
|
|
23878
|
+
console.log(source_default.green(`System \`${id}\` scaffolded in core/config/organization-model/systems.ts`));
|
|
23879
|
+
if (apiBacked) {
|
|
23880
|
+
console.log(
|
|
23881
|
+
source_default.yellow("Reminder: add resource IDs to the `apiInterface.resourceIds` array after scaffolding resources.")
|
|
23882
|
+
);
|
|
23308
23883
|
}
|
|
23309
|
-
|
|
23310
|
-
|
|
23884
|
+
}
|
|
23885
|
+
var import_node_path9, import_node_child_process2;
|
|
23886
|
+
var init_scaffold_system = __esm({
|
|
23887
|
+
"src/cli/commands/om/scaffold-system.ts"() {
|
|
23888
|
+
"use strict";
|
|
23889
|
+
import_node_path9 = require("node:path");
|
|
23890
|
+
import_node_child_process2 = require("node:child_process");
|
|
23891
|
+
init_source();
|
|
23892
|
+
init_config();
|
|
23893
|
+
init_project_layout();
|
|
23894
|
+
init_prompt_helpers();
|
|
23895
|
+
init_error_map();
|
|
23896
|
+
init_emit_system();
|
|
23897
|
+
init_splice();
|
|
23898
|
+
}
|
|
23899
|
+
});
|
|
23900
|
+
|
|
23901
|
+
// src/cli/commands/om/emit-resource.ts
|
|
23902
|
+
function emitResourceEntry(opts) {
|
|
23903
|
+
const ontologyBlock = opts.primaryAction !== void 0 ? ` ontology: {
|
|
23904
|
+
actions: ['${opts.primaryAction}'],
|
|
23905
|
+
primaryAction: '${opts.primaryAction}'
|
|
23906
|
+
},
|
|
23907
|
+
` : ` ontology: {},
|
|
23908
|
+
`;
|
|
23909
|
+
const code = ` '${opts.id}': {
|
|
23910
|
+
id: '${opts.id}',
|
|
23911
|
+
order: 10,
|
|
23912
|
+
kind: 'workflow',
|
|
23913
|
+
systemPath: '${opts.systemPath}',
|
|
23914
|
+
systemId: '${opts.systemPath}',
|
|
23915
|
+
title: '${opts.title}',
|
|
23916
|
+
description: '',
|
|
23917
|
+
status: 'active',
|
|
23918
|
+
${ontologyBlock} codeRefs: []
|
|
23919
|
+
},
|
|
23920
|
+
`;
|
|
23921
|
+
const anchor = /^export const templateResources\s*=/m;
|
|
23922
|
+
return { code, anchor };
|
|
23923
|
+
}
|
|
23924
|
+
var init_emit_resource = __esm({
|
|
23925
|
+
"src/cli/commands/om/emit-resource.ts"() {
|
|
23926
|
+
"use strict";
|
|
23311
23927
|
}
|
|
23312
|
-
|
|
23313
|
-
|
|
23928
|
+
});
|
|
23929
|
+
|
|
23930
|
+
// src/cli/commands/om/scaffold-resource.ts
|
|
23931
|
+
var scaffold_resource_exports = {};
|
|
23932
|
+
__export(scaffold_resource_exports, {
|
|
23933
|
+
default: () => scaffoldResource
|
|
23934
|
+
});
|
|
23935
|
+
function runValidation2(projectDir) {
|
|
23936
|
+
for (const script of ["check-types", "check"]) {
|
|
23937
|
+
const result = (0, import_node_child_process3.spawnSync)("pnpm", ["-C", "operations", "run", script], {
|
|
23938
|
+
cwd: projectDir,
|
|
23939
|
+
encoding: "utf8",
|
|
23940
|
+
shell: true
|
|
23941
|
+
});
|
|
23942
|
+
if (result.status !== 0) {
|
|
23943
|
+
return (result.stderr ?? "") + (result.stdout ?? "");
|
|
23944
|
+
}
|
|
23314
23945
|
}
|
|
23315
|
-
|
|
23316
|
-
|
|
23946
|
+
return null;
|
|
23947
|
+
}
|
|
23948
|
+
async function scaffoldResource(opts) {
|
|
23949
|
+
const projectDir = getProjectRoot();
|
|
23950
|
+
assertSplitLayout(projectDir);
|
|
23951
|
+
const options = opts;
|
|
23952
|
+
const id = await promptIfAbsent(options.id, "Resource id (e.g. lead-discovery-workflow)");
|
|
23953
|
+
if (!id) {
|
|
23954
|
+
process.stderr.write(source_default.red("Resource id is required. Pass --id <id> or enter it at the prompt.\n"));
|
|
23955
|
+
process.exit(1);
|
|
23317
23956
|
}
|
|
23318
|
-
|
|
23319
|
-
|
|
23320
|
-
|
|
23321
|
-
|
|
23322
|
-
|
|
23323
|
-
|
|
23324
|
-
|
|
23325
|
-
return 2;
|
|
23326
|
-
}
|
|
23327
|
-
}
|
|
23957
|
+
const systemPath = await promptIfAbsent(
|
|
23958
|
+
options.systemPath,
|
|
23959
|
+
"System path to attach to (e.g. sales.crm)"
|
|
23960
|
+
);
|
|
23961
|
+
if (!systemPath) {
|
|
23962
|
+
process.stderr.write(source_default.red("System path is required. Pass --system-path <path> or enter it at the prompt.\n"));
|
|
23963
|
+
process.exit(1);
|
|
23328
23964
|
}
|
|
23329
|
-
|
|
23330
|
-
|
|
23965
|
+
const title = await promptIfAbsent(options.title, "Resource display title");
|
|
23966
|
+
if (!title) {
|
|
23967
|
+
process.stderr.write(source_default.red("Display title is required. Pass --title <text> or enter it at the prompt.\n"));
|
|
23968
|
+
process.exit(1);
|
|
23331
23969
|
}
|
|
23332
|
-
|
|
23333
|
-
|
|
23970
|
+
const rawPrimaryAction = await promptIfAbsent(
|
|
23971
|
+
options.primaryAction,
|
|
23972
|
+
"Primary action id (leave blank to omit)",
|
|
23973
|
+
{ default: "" }
|
|
23974
|
+
);
|
|
23975
|
+
const primaryAction = rawPrimaryAction || void 0;
|
|
23976
|
+
const { code, anchor } = emitResourceEntry({ id, systemPath, title, primaryAction });
|
|
23977
|
+
if (options.dryRun) {
|
|
23978
|
+
console.log(source_default.cyan("Dry-run mode \u2014 no files written.\n"));
|
|
23979
|
+
console.log(source_default.gray("Proposed addition to core/config/organization-model/systems.ts:"));
|
|
23980
|
+
console.log(code);
|
|
23981
|
+
return;
|
|
23334
23982
|
}
|
|
23335
|
-
|
|
23336
|
-
|
|
23983
|
+
const systemsFilePath = (0, import_node_path10.join)(projectDir, "core", "config", "organization-model", "systems.ts");
|
|
23984
|
+
try {
|
|
23985
|
+
await withSnapshotRollback([systemsFilePath], async () => {
|
|
23986
|
+
await appendBeforeAnchor(systemsFilePath, code, anchor);
|
|
23987
|
+
const validationError = runValidation2(projectDir);
|
|
23988
|
+
if (validationError !== null) {
|
|
23989
|
+
const systemPathHint = /systemPath.*not assignable/i.test(validationError) ? `
|
|
23990
|
+
Resource \`${id}\` references system \`${systemPath}\` which is not in \`templateSystems\`. Run \`om:scaffold:system --id ${systemPath}\` first.` : "";
|
|
23991
|
+
throw new Error(validationError + systemPathHint);
|
|
23992
|
+
}
|
|
23993
|
+
});
|
|
23994
|
+
} catch (err) {
|
|
23995
|
+
const raw = err instanceof Error ? err.message : String(err);
|
|
23996
|
+
process.stderr.write(source_default.red(mapValidationError(raw)) + "\n");
|
|
23997
|
+
process.exit(1);
|
|
23337
23998
|
}
|
|
23338
|
-
|
|
23999
|
+
console.log(source_default.green(`Resource \`${id}\` scaffolded in core/config/organization-model/systems.ts`));
|
|
23339
24000
|
}
|
|
23340
|
-
|
|
23341
|
-
|
|
23342
|
-
|
|
23343
|
-
|
|
23344
|
-
|
|
23345
|
-
|
|
24001
|
+
var import_node_path10, import_node_child_process3;
|
|
24002
|
+
var init_scaffold_resource = __esm({
|
|
24003
|
+
"src/cli/commands/om/scaffold-resource.ts"() {
|
|
24004
|
+
"use strict";
|
|
24005
|
+
import_node_path10 = require("node:path");
|
|
24006
|
+
import_node_child_process3 = require("node:child_process");
|
|
24007
|
+
init_source();
|
|
24008
|
+
init_config();
|
|
24009
|
+
init_project_layout();
|
|
24010
|
+
init_prompt_helpers();
|
|
24011
|
+
init_error_map();
|
|
24012
|
+
init_emit_resource();
|
|
24013
|
+
init_splice();
|
|
24014
|
+
}
|
|
24015
|
+
});
|
|
24016
|
+
|
|
24017
|
+
// src/cli/commands/om/emit-role.ts
|
|
24018
|
+
function emitRoleEntry(opts) {
|
|
24019
|
+
const code = ` {
|
|
24020
|
+
id: '${opts.id}',
|
|
24021
|
+
title: '${opts.title}',
|
|
24022
|
+
description: '${opts.description}'
|
|
24023
|
+
},
|
|
24024
|
+
`;
|
|
24025
|
+
const anchor = /^ {2}\]\s*$/m;
|
|
24026
|
+
return { code, anchor };
|
|
23346
24027
|
}
|
|
23347
|
-
var
|
|
23348
|
-
|
|
23349
|
-
|
|
23350
|
-
}
|
|
23351
|
-
|
|
24028
|
+
var init_emit_role = __esm({
|
|
24029
|
+
"src/cli/commands/om/emit-role.ts"() {
|
|
24030
|
+
"use strict";
|
|
24031
|
+
}
|
|
24032
|
+
});
|
|
23352
24033
|
|
|
23353
|
-
//
|
|
23354
|
-
|
|
23355
|
-
|
|
23356
|
-
|
|
23357
|
-
|
|
24034
|
+
// src/cli/commands/om/scaffold-role.ts
|
|
24035
|
+
var scaffold_role_exports = {};
|
|
24036
|
+
__export(scaffold_role_exports, {
|
|
24037
|
+
default: () => scaffoldRole
|
|
24038
|
+
});
|
|
24039
|
+
function runValidation3(projectDir) {
|
|
24040
|
+
for (const script of ["check-types", "check"]) {
|
|
24041
|
+
const result = (0, import_node_child_process4.spawnSync)("pnpm", ["-C", "operations", "run", script], {
|
|
24042
|
+
cwd: projectDir,
|
|
24043
|
+
encoding: "utf8",
|
|
24044
|
+
shell: true
|
|
24045
|
+
});
|
|
24046
|
+
if (result.status !== 0) {
|
|
24047
|
+
return (result.stderr ?? "") + (result.stdout ?? "");
|
|
24048
|
+
}
|
|
23358
24049
|
}
|
|
23359
|
-
|
|
23360
|
-
let endIndex = 0;
|
|
23361
|
-
let returnValue = "";
|
|
23362
|
-
do {
|
|
23363
|
-
returnValue += string4.slice(endIndex, index) + substring + replacer;
|
|
23364
|
-
endIndex = index + substringLength;
|
|
23365
|
-
index = string4.indexOf(substring, endIndex);
|
|
23366
|
-
} while (index !== -1);
|
|
23367
|
-
returnValue += string4.slice(endIndex);
|
|
23368
|
-
return returnValue;
|
|
24050
|
+
return null;
|
|
23369
24051
|
}
|
|
23370
|
-
function
|
|
23371
|
-
|
|
23372
|
-
|
|
23373
|
-
|
|
23374
|
-
|
|
23375
|
-
|
|
23376
|
-
|
|
23377
|
-
|
|
23378
|
-
}
|
|
23379
|
-
|
|
23380
|
-
|
|
24052
|
+
async function scaffoldRole(opts) {
|
|
24053
|
+
const projectDir = getProjectRoot();
|
|
24054
|
+
assertSplitLayout(projectDir);
|
|
24055
|
+
const options = opts;
|
|
24056
|
+
const id = await promptIfAbsent(options.id, "Role id (e.g. ops-lead)");
|
|
24057
|
+
if (!id) {
|
|
24058
|
+
process.stderr.write(source_default.red("Role id is required. Pass --id <id> or enter it at the prompt.\n"));
|
|
24059
|
+
process.exit(1);
|
|
24060
|
+
}
|
|
24061
|
+
const title = await promptIfAbsent(options.title, "Display label");
|
|
24062
|
+
if (!title) {
|
|
24063
|
+
process.stderr.write(source_default.red("Display label is required. Pass --title <text> or enter it at the prompt.\n"));
|
|
24064
|
+
process.exit(1);
|
|
24065
|
+
}
|
|
24066
|
+
const description = await promptIfAbsent(options.description, "Short description", {
|
|
24067
|
+
default: ""
|
|
24068
|
+
});
|
|
24069
|
+
const { code, anchor } = emitRoleEntry({ id, title, description: description || "" });
|
|
24070
|
+
if (options.dryRun) {
|
|
24071
|
+
console.log(source_default.cyan("Dry-run mode \u2014 no files written.\n"));
|
|
24072
|
+
console.log(source_default.gray("Proposed addition to core/config/organization-model/profile.ts:"));
|
|
24073
|
+
console.log(code);
|
|
24074
|
+
return;
|
|
24075
|
+
}
|
|
24076
|
+
const profileFilePath = (0, import_node_path11.join)(projectDir, "core", "config", "organization-model", "profile.ts");
|
|
24077
|
+
try {
|
|
24078
|
+
await withSnapshotRollback([profileFilePath], async () => {
|
|
24079
|
+
await appendBeforeAnchor(profileFilePath, code, anchor);
|
|
24080
|
+
const validationError = runValidation3(projectDir);
|
|
24081
|
+
if (validationError !== null) {
|
|
24082
|
+
throw new Error(validationError);
|
|
24083
|
+
}
|
|
24084
|
+
});
|
|
24085
|
+
} catch (err) {
|
|
24086
|
+
const raw = err instanceof Error ? err.message : String(err);
|
|
24087
|
+
process.stderr.write(source_default.red(mapValidationError(raw)) + "\n");
|
|
24088
|
+
process.exit(1);
|
|
24089
|
+
}
|
|
24090
|
+
console.log(source_default.green(`Role \`${id}\` scaffolded in core/config/organization-model/profile.ts`));
|
|
24091
|
+
}
|
|
24092
|
+
var import_node_path11, import_node_child_process4;
|
|
24093
|
+
var init_scaffold_role = __esm({
|
|
24094
|
+
"src/cli/commands/om/scaffold-role.ts"() {
|
|
24095
|
+
"use strict";
|
|
24096
|
+
import_node_path11 = require("node:path");
|
|
24097
|
+
import_node_child_process4 = require("node:child_process");
|
|
24098
|
+
init_source();
|
|
24099
|
+
init_config();
|
|
24100
|
+
init_project_layout();
|
|
24101
|
+
init_prompt_helpers();
|
|
24102
|
+
init_error_map();
|
|
24103
|
+
init_emit_role();
|
|
24104
|
+
init_splice();
|
|
24105
|
+
}
|
|
24106
|
+
});
|
|
24107
|
+
|
|
24108
|
+
// src/cli/commands/om/emit-knowledge.ts
|
|
24109
|
+
function emitKnowledgeNode(opts) {
|
|
24110
|
+
const filePath = `core/config/knowledge/nodes/${opts.id}.mdx`;
|
|
24111
|
+
const systemLine = opts.systemPath !== void 0 ? `
|
|
24112
|
+
system: '${opts.systemPath}'` : "";
|
|
24113
|
+
const updatedAt = (/* @__PURE__ */ new Date()).toISOString().slice(0, 10);
|
|
24114
|
+
const content = `---
|
|
24115
|
+
id: '${opts.id}'
|
|
24116
|
+
kind: ${opts.kind}
|
|
24117
|
+
title: ''
|
|
24118
|
+
description: ''${systemLine}
|
|
24119
|
+
updatedAt: ${updatedAt}
|
|
24120
|
+
---
|
|
24121
|
+
|
|
24122
|
+
<!-- Add the content for this knowledge node below. -->
|
|
24123
|
+
`;
|
|
24124
|
+
return { filePath, content };
|
|
23381
24125
|
}
|
|
24126
|
+
var init_emit_knowledge = __esm({
|
|
24127
|
+
"src/cli/commands/om/emit-knowledge.ts"() {
|
|
24128
|
+
"use strict";
|
|
24129
|
+
}
|
|
24130
|
+
});
|
|
23382
24131
|
|
|
23383
|
-
//
|
|
23384
|
-
var
|
|
23385
|
-
|
|
23386
|
-
|
|
23387
|
-
|
|
23388
|
-
|
|
23389
|
-
|
|
23390
|
-
|
|
23391
|
-
|
|
23392
|
-
"
|
|
23393
|
-
|
|
23394
|
-
|
|
23395
|
-
|
|
23396
|
-
if (options.level && !(Number.isInteger(options.level) && options.level >= 0 && options.level <= 3)) {
|
|
23397
|
-
throw new Error("The `level` option should be an integer from 0 to 3");
|
|
24132
|
+
// src/cli/commands/om/scaffold-knowledge.ts
|
|
24133
|
+
var scaffold_knowledge_exports = {};
|
|
24134
|
+
__export(scaffold_knowledge_exports, {
|
|
24135
|
+
default: () => scaffoldKnowledge
|
|
24136
|
+
});
|
|
24137
|
+
async function scaffoldKnowledge(opts) {
|
|
24138
|
+
const projectDir = getProjectRoot();
|
|
24139
|
+
assertSplitLayout(projectDir);
|
|
24140
|
+
const options = opts;
|
|
24141
|
+
const id = await promptIfAbsent(options.id, "Knowledge node id (e.g. outreach-playbook)");
|
|
24142
|
+
if (!id) {
|
|
24143
|
+
process.stderr.write(source_default.red("Knowledge node id is required. Pass --id <id> or enter it at the prompt.\n"));
|
|
24144
|
+
process.exit(1);
|
|
23398
24145
|
}
|
|
23399
|
-
const
|
|
23400
|
-
|
|
23401
|
-
|
|
23402
|
-
|
|
23403
|
-
|
|
23404
|
-
|
|
23405
|
-
|
|
23406
|
-
|
|
23407
|
-
|
|
23408
|
-
|
|
23409
|
-
|
|
24146
|
+
const rawKind = await promptIfAbsent(
|
|
24147
|
+
options.kind,
|
|
24148
|
+
"Node kind (playbook / strategy / reference / policy)",
|
|
24149
|
+
{ default: "reference" }
|
|
24150
|
+
);
|
|
24151
|
+
const kind = rawKind || "reference";
|
|
24152
|
+
if (!VALID_KINDS.includes(kind)) {
|
|
24153
|
+
process.stderr.write(source_default.red(`Invalid kind \`${kind}\`. Must be one of: ${VALID_KINDS.join(", ")}.
|
|
24154
|
+
`));
|
|
24155
|
+
process.exit(1);
|
|
24156
|
+
}
|
|
24157
|
+
const rawSystemPath = await promptIfAbsent(
|
|
24158
|
+
options.systemPath,
|
|
24159
|
+
"Governing system path (leave blank for global)",
|
|
24160
|
+
{ default: "" }
|
|
24161
|
+
);
|
|
24162
|
+
const systemPath = rawSystemPath || void 0;
|
|
24163
|
+
const { filePath: relativeFilePath, content } = emitKnowledgeNode({ id, kind, systemPath });
|
|
24164
|
+
if (options.dryRun) {
|
|
24165
|
+
console.log(source_default.cyan("Dry-run mode \u2014 no files written.\n"));
|
|
24166
|
+
console.log(source_default.gray(`Proposed file: ${relativeFilePath}`));
|
|
24167
|
+
console.log(content);
|
|
24168
|
+
console.log(source_default.yellow("Run `elevasis-sdk om:generate` to register this node."));
|
|
24169
|
+
return;
|
|
24170
|
+
}
|
|
24171
|
+
const absoluteFilePath = (0, import_node_path12.join)(projectDir, relativeFilePath);
|
|
24172
|
+
if ((0, import_node_fs9.existsSync)(absoluteFilePath)) {
|
|
24173
|
+
process.stderr.write(
|
|
24174
|
+
source_default.red(`Knowledge node file already exists at \`${relativeFilePath}\`. Choose a different id.
|
|
24175
|
+
`)
|
|
24176
|
+
);
|
|
24177
|
+
process.exit(1);
|
|
24178
|
+
}
|
|
24179
|
+
(0, import_node_fs9.mkdirSync)((0, import_node_path12.join)(projectDir, "core", "config", "knowledge", "nodes"), { recursive: true });
|
|
24180
|
+
(0, import_node_fs9.writeFileSync)(absoluteFilePath, content, "utf8");
|
|
24181
|
+
console.log(source_default.green(`Knowledge node \`${id}\` written to \`${relativeFilePath}\``));
|
|
24182
|
+
console.log(source_default.yellow("Run `elevasis-sdk om:generate` to register this node."));
|
|
23410
24183
|
}
|
|
23411
|
-
|
|
23412
|
-
|
|
23413
|
-
|
|
23414
|
-
|
|
23415
|
-
|
|
23416
|
-
|
|
23417
|
-
|
|
23418
|
-
|
|
24184
|
+
var import_node_path12, import_node_fs9, VALID_KINDS;
|
|
24185
|
+
var init_scaffold_knowledge = __esm({
|
|
24186
|
+
"src/cli/commands/om/scaffold-knowledge.ts"() {
|
|
24187
|
+
"use strict";
|
|
24188
|
+
import_node_path12 = require("node:path");
|
|
24189
|
+
import_node_fs9 = require("node:fs");
|
|
24190
|
+
init_source();
|
|
24191
|
+
init_config();
|
|
24192
|
+
init_project_layout();
|
|
24193
|
+
init_prompt_helpers();
|
|
24194
|
+
init_emit_knowledge();
|
|
24195
|
+
VALID_KINDS = ["playbook", "strategy", "reference", "policy"];
|
|
24196
|
+
}
|
|
24197
|
+
});
|
|
24198
|
+
|
|
24199
|
+
// src/cli/commands/om/emit-api-interface.ts
|
|
24200
|
+
function toConstName(systemPath) {
|
|
24201
|
+
return systemPath.split(/[.-]/).map((segment, index) => index === 0 ? segment : segment.charAt(0).toUpperCase() + segment.slice(1)).join("") + "ApiInterface";
|
|
24202
|
+
}
|
|
24203
|
+
function emitApiInterfaceBlock(gap) {
|
|
24204
|
+
const constName = toConstName(gap.systemPath);
|
|
24205
|
+
const resourceIdsLiteral = gap.resourceIds.length === 0 ? "[]" : `[
|
|
24206
|
+
${gap.resourceIds.map((id) => `'${id}'`).join(",\n ")}
|
|
24207
|
+
]`;
|
|
24208
|
+
const constFileCode = `// Auto-generated by om:scaffold:fill \u2014 do not edit manually.
|
|
24209
|
+
// Regenerate by running: elevasis-sdk om:scaffold:fill --gaps <path>
|
|
24210
|
+
|
|
24211
|
+
export const ${constName} = {
|
|
24212
|
+
lifecycle: 'active' as const,
|
|
24213
|
+
readinessProfile: 'standard' as const,
|
|
24214
|
+
resourceIds: ${resourceIdsLiteral}
|
|
24215
|
+
}
|
|
24216
|
+
`;
|
|
24217
|
+
const importLine = `import { ${constName} } from './api-interfaces/${gap.systemPath}'`;
|
|
24218
|
+
const fieldLine = ` apiInterface: ${constName},`;
|
|
24219
|
+
const importAnchor = /^\/\/ -{75,}\n\/\/ Feature/m;
|
|
24220
|
+
const escapedId = gap.systemPath.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
24221
|
+
const fieldAnchor = new RegExp(`id:\\s*['"]${escapedId}['"]`);
|
|
24222
|
+
return {
|
|
24223
|
+
constFileCode,
|
|
24224
|
+
importLine,
|
|
24225
|
+
fieldLine,
|
|
24226
|
+
importAnchor,
|
|
24227
|
+
fieldAnchor
|
|
23419
24228
|
};
|
|
23420
24229
|
}
|
|
23421
|
-
|
|
23422
|
-
|
|
23423
|
-
|
|
23424
|
-
Object.defineProperty(this, "visible", { value: builder });
|
|
23425
|
-
return builder;
|
|
24230
|
+
var init_emit_api_interface = __esm({
|
|
24231
|
+
"src/cli/commands/om/emit-api-interface.ts"() {
|
|
24232
|
+
"use strict";
|
|
23426
24233
|
}
|
|
23427
|
-
};
|
|
23428
|
-
|
|
23429
|
-
|
|
23430
|
-
|
|
23431
|
-
|
|
23432
|
-
|
|
23433
|
-
|
|
23434
|
-
|
|
24234
|
+
});
|
|
24235
|
+
|
|
24236
|
+
// src/cli/commands/om/scaffold-fill.ts
|
|
24237
|
+
var scaffold_fill_exports = {};
|
|
24238
|
+
__export(scaffold_fill_exports, {
|
|
24239
|
+
conformanceGapTempPath: () => conformanceGapTempPath,
|
|
24240
|
+
default: () => scaffoldFill
|
|
24241
|
+
});
|
|
24242
|
+
function conformanceGapTempPath(orgName) {
|
|
24243
|
+
return (0, import_node_path13.join)(os2.tmpdir(), `elevasis-conformance-${orgName}-${Date.now()}.json`);
|
|
24244
|
+
}
|
|
24245
|
+
function runValidation4(projectDir) {
|
|
24246
|
+
for (const script of ["check-types", "check"]) {
|
|
24247
|
+
const result = (0, import_node_child_process5.spawnSync)("pnpm", ["-C", "operations", "run", script], {
|
|
24248
|
+
cwd: projectDir,
|
|
24249
|
+
encoding: "utf8",
|
|
24250
|
+
shell: true
|
|
24251
|
+
});
|
|
24252
|
+
if (result.status !== 0) {
|
|
24253
|
+
return (result.stderr ?? "") + (result.stdout ?? "");
|
|
23435
24254
|
}
|
|
23436
|
-
return ansi_styles_default[type].ansi(ansi_styles_default.rgbToAnsi(...arguments_));
|
|
23437
24255
|
}
|
|
23438
|
-
|
|
23439
|
-
return getModelAnsi("rgb", level, type, ...ansi_styles_default.hexToRgb(...arguments_));
|
|
23440
|
-
}
|
|
23441
|
-
return ansi_styles_default[type][model](...arguments_);
|
|
23442
|
-
};
|
|
23443
|
-
var usedModels = ["rgb", "hex", "ansi256"];
|
|
23444
|
-
for (const model of usedModels) {
|
|
23445
|
-
styles2[model] = {
|
|
23446
|
-
get() {
|
|
23447
|
-
const { level } = this;
|
|
23448
|
-
return function(...arguments_) {
|
|
23449
|
-
const styler = createStyler(getModelAnsi(model, levelMapping[level], "color", ...arguments_), ansi_styles_default.color.close, this[STYLER]);
|
|
23450
|
-
return createBuilder(this, styler, this[IS_EMPTY]);
|
|
23451
|
-
};
|
|
23452
|
-
}
|
|
23453
|
-
};
|
|
23454
|
-
const bgModel = "bg" + model[0].toUpperCase() + model.slice(1);
|
|
23455
|
-
styles2[bgModel] = {
|
|
23456
|
-
get() {
|
|
23457
|
-
const { level } = this;
|
|
23458
|
-
return function(...arguments_) {
|
|
23459
|
-
const styler = createStyler(getModelAnsi(model, levelMapping[level], "bgColor", ...arguments_), ansi_styles_default.bgColor.close, this[STYLER]);
|
|
23460
|
-
return createBuilder(this, styler, this[IS_EMPTY]);
|
|
23461
|
-
};
|
|
23462
|
-
}
|
|
23463
|
-
};
|
|
24256
|
+
return null;
|
|
23464
24257
|
}
|
|
23465
|
-
|
|
23466
|
-
|
|
23467
|
-
|
|
23468
|
-
|
|
23469
|
-
|
|
23470
|
-
|
|
23471
|
-
|
|
23472
|
-
},
|
|
23473
|
-
set(level) {
|
|
23474
|
-
this[GENERATOR].level = level;
|
|
23475
|
-
}
|
|
24258
|
+
async function scaffoldFill(opts) {
|
|
24259
|
+
const projectDir = getProjectRoot();
|
|
24260
|
+
assertSplitLayout(projectDir);
|
|
24261
|
+
const options = opts;
|
|
24262
|
+
if (!options.gaps) {
|
|
24263
|
+
process.stderr.write(source_default.red("Missing gaps file. Pass --gaps <path> pointing to a conformance gap JSON file.\n"));
|
|
24264
|
+
process.exit(1);
|
|
23476
24265
|
}
|
|
23477
|
-
|
|
23478
|
-
|
|
23479
|
-
|
|
23480
|
-
|
|
23481
|
-
|
|
23482
|
-
|
|
23483
|
-
|
|
23484
|
-
|
|
23485
|
-
|
|
23486
|
-
closeAll = close + parent.closeAll;
|
|
24266
|
+
if (!(0, import_node_fs10.existsSync)(options.gaps)) {
|
|
24267
|
+
process.stderr.write(
|
|
24268
|
+
source_default.red(
|
|
24269
|
+
`Missing gaps file. Pass --gaps <path> pointing to a conformance gap JSON file.
|
|
24270
|
+
(File not found: ${options.gaps})
|
|
24271
|
+
`
|
|
24272
|
+
)
|
|
24273
|
+
);
|
|
24274
|
+
process.exit(1);
|
|
23487
24275
|
}
|
|
23488
|
-
|
|
23489
|
-
|
|
23490
|
-
|
|
23491
|
-
|
|
23492
|
-
|
|
23493
|
-
|
|
23494
|
-
|
|
23495
|
-
|
|
23496
|
-
|
|
23497
|
-
|
|
23498
|
-
|
|
23499
|
-
|
|
23500
|
-
|
|
23501
|
-
builder[IS_EMPTY] = _isEmpty;
|
|
23502
|
-
return builder;
|
|
23503
|
-
};
|
|
23504
|
-
var applyStyle = (self2, string4) => {
|
|
23505
|
-
if (self2.level <= 0 || !string4) {
|
|
23506
|
-
return self2[IS_EMPTY] ? "" : string4;
|
|
24276
|
+
let payload;
|
|
24277
|
+
try {
|
|
24278
|
+
const raw = (0, import_node_fs10.readFileSync)(options.gaps, "utf8");
|
|
24279
|
+
payload = JSON.parse(raw);
|
|
24280
|
+
} catch {
|
|
24281
|
+
process.stderr.write(
|
|
24282
|
+
source_default.red(
|
|
24283
|
+
`Missing gaps file. Pass --gaps <path> pointing to a conformance gap JSON file.
|
|
24284
|
+
(File exists but could not be parsed as JSON: ${options.gaps})
|
|
24285
|
+
`
|
|
24286
|
+
)
|
|
24287
|
+
);
|
|
24288
|
+
process.exit(1);
|
|
23507
24289
|
}
|
|
23508
|
-
|
|
23509
|
-
|
|
23510
|
-
|
|
24290
|
+
if (!payload || typeof payload !== "object" || payload.version !== 1 || !Array.isArray(payload.gaps)) {
|
|
24291
|
+
process.stderr.write(
|
|
24292
|
+
source_default.red(
|
|
24293
|
+
`Missing gaps file. Pass --gaps <path> pointing to a conformance gap JSON file.
|
|
24294
|
+
(File does not match expected schema \u2014 must have version:1 and a gaps array)
|
|
24295
|
+
`
|
|
24296
|
+
)
|
|
24297
|
+
);
|
|
24298
|
+
process.exit(1);
|
|
23511
24299
|
}
|
|
23512
|
-
const
|
|
23513
|
-
|
|
23514
|
-
|
|
23515
|
-
|
|
23516
|
-
|
|
24300
|
+
const systemPath = payload.systemPath;
|
|
24301
|
+
const skippedGaps = [];
|
|
24302
|
+
const appliedGaps = [];
|
|
24303
|
+
const systemsFilePath = (0, import_node_path13.join)(projectDir, "core", "config", "organization-model", "systems.ts");
|
|
24304
|
+
const touchedFiles = [systemsFilePath];
|
|
24305
|
+
const emitResults = [];
|
|
24306
|
+
for (const gap of payload.gaps) {
|
|
24307
|
+
if (gap.field === "apiInterface") {
|
|
24308
|
+
const resourceIds = (
|
|
24309
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
24310
|
+
Array.isArray(gap.resourceIds) ? (
|
|
24311
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
24312
|
+
gap.resourceIds
|
|
24313
|
+
) : gap.resourceId ? [gap.resourceId] : []
|
|
24314
|
+
);
|
|
24315
|
+
const emitResult = emitApiInterfaceBlock({
|
|
24316
|
+
systemPath,
|
|
24317
|
+
resourceIds,
|
|
24318
|
+
message: gap.reason
|
|
24319
|
+
});
|
|
24320
|
+
const constFilePath = (0, import_node_path13.join)(
|
|
24321
|
+
projectDir,
|
|
24322
|
+
"core",
|
|
24323
|
+
"config",
|
|
24324
|
+
"organization-model",
|
|
24325
|
+
"api-interfaces",
|
|
24326
|
+
`${systemPath}.ts`
|
|
24327
|
+
);
|
|
24328
|
+
touchedFiles.push(constFilePath);
|
|
24329
|
+
emitResults.push(emitResult);
|
|
24330
|
+
appliedGaps.push(gap);
|
|
24331
|
+
} else {
|
|
24332
|
+
skippedGaps.push({
|
|
24333
|
+
field: gap.field,
|
|
24334
|
+
resourceId: gap.resourceId,
|
|
24335
|
+
reason: gap.reason
|
|
24336
|
+
});
|
|
24337
|
+
}
|
|
24338
|
+
}
|
|
24339
|
+
if (options.dryRun) {
|
|
24340
|
+
console.log(source_default.cyan("Dry-run mode \u2014 no files written.\n"));
|
|
24341
|
+
for (let i = 0; i < emitResults.length; i++) {
|
|
24342
|
+
const result = emitResults[i];
|
|
24343
|
+
const gap = appliedGaps[i];
|
|
24344
|
+
const constFilePath = `core/config/organization-model/api-interfaces/${systemPath}.ts`;
|
|
24345
|
+
console.log(source_default.gray(`Gap: ${gap.field} \u2014 would write ${constFilePath}`));
|
|
24346
|
+
console.log(result.constFileCode);
|
|
24347
|
+
console.log(source_default.gray(`Import line for systems.ts:`));
|
|
24348
|
+
console.log(result.importLine);
|
|
24349
|
+
console.log(source_default.gray(`Field line for systems.ts entry:`));
|
|
24350
|
+
console.log(result.fieldLine);
|
|
24351
|
+
console.log();
|
|
24352
|
+
}
|
|
24353
|
+
if (skippedGaps.length > 0) {
|
|
24354
|
+
console.log(source_default.yellow(`Would skip ${skippedGaps.length} gap(s) requiring manual input:`));
|
|
24355
|
+
for (const sg of skippedGaps) {
|
|
24356
|
+
console.log(
|
|
24357
|
+
source_default.yellow(` - ${sg.field}${sg.resourceId ? ` (resource: ${sg.resourceId})` : ""}: ${sg.reason}`)
|
|
24358
|
+
);
|
|
24359
|
+
}
|
|
24360
|
+
}
|
|
24361
|
+
return;
|
|
24362
|
+
}
|
|
24363
|
+
if (appliedGaps.length > 0) {
|
|
24364
|
+
try {
|
|
24365
|
+
await withSnapshotRollback(touchedFiles, async () => {
|
|
24366
|
+
for (let i = 0; i < emitResults.length; i++) {
|
|
24367
|
+
const result = emitResults[i];
|
|
24368
|
+
const constFilePath = (0, import_node_path13.join)(
|
|
24369
|
+
projectDir,
|
|
24370
|
+
"core",
|
|
24371
|
+
"config",
|
|
24372
|
+
"organization-model",
|
|
24373
|
+
"api-interfaces",
|
|
24374
|
+
`${systemPath}.ts`
|
|
24375
|
+
);
|
|
24376
|
+
await applyConstImport(
|
|
24377
|
+
systemsFilePath,
|
|
24378
|
+
result.importLine,
|
|
24379
|
+
result.fieldLine,
|
|
24380
|
+
result.importAnchor,
|
|
24381
|
+
result.fieldAnchor,
|
|
24382
|
+
constFilePath,
|
|
24383
|
+
result.constFileCode
|
|
24384
|
+
);
|
|
24385
|
+
}
|
|
24386
|
+
const validationError = runValidation4(projectDir);
|
|
24387
|
+
if (validationError !== null) {
|
|
24388
|
+
throw new Error(validationError);
|
|
24389
|
+
}
|
|
24390
|
+
});
|
|
24391
|
+
} catch (err) {
|
|
24392
|
+
const raw = err instanceof Error ? err.message : String(err);
|
|
24393
|
+
process.stderr.write(source_default.red(mapValidationError(raw)) + "\n");
|
|
24394
|
+
process.exit(1);
|
|
23517
24395
|
}
|
|
23518
24396
|
}
|
|
23519
|
-
|
|
23520
|
-
|
|
23521
|
-
|
|
24397
|
+
if (skippedGaps.length > 0) {
|
|
24398
|
+
const skippedPath = options.skipped ?? (0, import_node_path13.join)(os2.tmpdir(), `elevasis-fill-skipped-${systemPath}-${Date.now()}.json`);
|
|
24399
|
+
(0, import_node_fs10.writeFileSync)(skippedPath, JSON.stringify({ systemPath, skipped: skippedGaps }, null, 2), "utf8");
|
|
24400
|
+
console.log(
|
|
24401
|
+
source_default.yellow(
|
|
24402
|
+
`Partial fill: ${appliedGaps.length} gap(s) applied, ${skippedGaps.length} skipped \u2014 see \`${skippedPath}\` for fields requiring manual input.`
|
|
24403
|
+
)
|
|
24404
|
+
);
|
|
24405
|
+
process.exit(2);
|
|
23522
24406
|
}
|
|
23523
|
-
|
|
23524
|
-
|
|
23525
|
-
|
|
23526
|
-
|
|
23527
|
-
|
|
23528
|
-
|
|
24407
|
+
console.log(
|
|
24408
|
+
source_default.green(
|
|
24409
|
+
`Fill complete: ${appliedGaps.length} gap(s) resolved in \`core/config/organization-model/systems.ts\`.`
|
|
24410
|
+
)
|
|
24411
|
+
);
|
|
24412
|
+
}
|
|
24413
|
+
var import_node_path13, os2, import_node_fs10, import_node_child_process5;
|
|
24414
|
+
var init_scaffold_fill = __esm({
|
|
24415
|
+
"src/cli/commands/om/scaffold-fill.ts"() {
|
|
24416
|
+
"use strict";
|
|
24417
|
+
import_node_path13 = require("node:path");
|
|
24418
|
+
os2 = __toESM(require("node:os"), 1);
|
|
24419
|
+
import_node_fs10 = require("node:fs");
|
|
24420
|
+
import_node_child_process5 = require("node:child_process");
|
|
24421
|
+
init_source();
|
|
24422
|
+
init_config();
|
|
24423
|
+
init_project_layout();
|
|
24424
|
+
init_error_map();
|
|
24425
|
+
init_emit_api_interface();
|
|
24426
|
+
init_splice();
|
|
24427
|
+
}
|
|
24428
|
+
});
|
|
24429
|
+
|
|
24430
|
+
// src/cli/index.ts
|
|
24431
|
+
var index_exports = {};
|
|
24432
|
+
__export(index_exports, {
|
|
24433
|
+
getProjectRoot: () => getProjectRoot
|
|
24434
|
+
});
|
|
24435
|
+
module.exports = __toCommonJS(index_exports);
|
|
24436
|
+
var import_dotenv = __toESM(require_main(), 1);
|
|
24437
|
+
var import_fs4 = require("fs");
|
|
24438
|
+
var import_path4 = require("path");
|
|
24439
|
+
|
|
24440
|
+
// ../../node_modules/.pnpm/commander@11.1.0/node_modules/commander/esm.mjs
|
|
24441
|
+
var import_index = __toESM(require_commander(), 1);
|
|
24442
|
+
var {
|
|
24443
|
+
program,
|
|
24444
|
+
createCommand,
|
|
24445
|
+
createArgument,
|
|
24446
|
+
createOption,
|
|
24447
|
+
CommanderError,
|
|
24448
|
+
InvalidArgumentError,
|
|
24449
|
+
InvalidOptionArgumentError,
|
|
24450
|
+
// deprecated old name
|
|
24451
|
+
Command,
|
|
24452
|
+
Argument,
|
|
24453
|
+
Option,
|
|
24454
|
+
Help
|
|
24455
|
+
} = import_index.default;
|
|
24456
|
+
|
|
24457
|
+
// src/cli/index.ts
|
|
24458
|
+
init_source();
|
|
24459
|
+
|
|
24460
|
+
// src/cli/commands/check.ts
|
|
24461
|
+
init_source();
|
|
23529
24462
|
|
|
23530
24463
|
// ../../node_modules/.pnpm/ora@7.0.1/node_modules/ora/index.js
|
|
23531
24464
|
var import_node_process6 = __toESM(require("node:process"), 1);
|
|
24465
|
+
init_source();
|
|
23532
24466
|
|
|
23533
24467
|
// ../../node_modules/.pnpm/cli-cursor@4.0.0/node_modules/cli-cursor/index.js
|
|
23534
24468
|
var import_node_process3 = __toESM(require("node:process"), 1);
|
|
@@ -23577,6 +24511,9 @@ var cli_cursor_default = cliCursor;
|
|
|
23577
24511
|
// ../../node_modules/.pnpm/ora@7.0.1/node_modules/ora/index.js
|
|
23578
24512
|
var import_cli_spinners = __toESM(require_cli_spinners(), 1);
|
|
23579
24513
|
|
|
24514
|
+
// ../../node_modules/.pnpm/log-symbols@5.1.0/node_modules/log-symbols/index.js
|
|
24515
|
+
init_source();
|
|
24516
|
+
|
|
23580
24517
|
// ../../node_modules/.pnpm/is-unicode-supported@1.3.0/node_modules/is-unicode-supported/index.js
|
|
23581
24518
|
var import_node_process4 = __toESM(require("node:process"), 1);
|
|
23582
24519
|
function isUnicodeSupported() {
|
|
@@ -24040,6 +24977,7 @@ function ora(options) {
|
|
|
24040
24977
|
var import_path2 = require("path");
|
|
24041
24978
|
var import_promises = require("fs/promises");
|
|
24042
24979
|
var import_fs2 = require("fs");
|
|
24980
|
+
init_source();
|
|
24043
24981
|
|
|
24044
24982
|
// ../../node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/classic/external.js
|
|
24045
24983
|
var external_exports = {};
|
|
@@ -37105,6 +38043,7 @@ var ORGANIZATION_MODEL_ICON_TOKENS = [
|
|
|
37105
38043
|
"view",
|
|
37106
38044
|
"launch",
|
|
37107
38045
|
"message",
|
|
38046
|
+
"message-plus",
|
|
37108
38047
|
"escalate",
|
|
37109
38048
|
"promote",
|
|
37110
38049
|
"submit",
|
|
@@ -37291,9 +38230,22 @@ var SidebarNavigationSchema = external_exports.object({
|
|
|
37291
38230
|
primary: SidebarSectionSchema,
|
|
37292
38231
|
bottom: SidebarSectionSchema
|
|
37293
38232
|
}).default({ primary: {}, bottom: {} });
|
|
38233
|
+
var TopbarActionNodeSchema = external_exports.object({
|
|
38234
|
+
id: ModelIdSchema,
|
|
38235
|
+
label: LabelSchema,
|
|
38236
|
+
tooltip: DescriptionSchema.optional(),
|
|
38237
|
+
icon: IconNameSchema.optional(),
|
|
38238
|
+
order: external_exports.number().int().optional(),
|
|
38239
|
+
enabled: external_exports.boolean().default(true),
|
|
38240
|
+
devOnly: external_exports.boolean().optional(),
|
|
38241
|
+
requiresAdmin: external_exports.boolean().optional(),
|
|
38242
|
+
targets: SidebarSurfaceTargetsSchema.optional()
|
|
38243
|
+
});
|
|
38244
|
+
var TopbarSectionSchema = external_exports.record(external_exports.string(), TopbarActionNodeSchema).default({});
|
|
37294
38245
|
var OrganizationModelNavigationSchema = external_exports.object({
|
|
37295
|
-
sidebar: SidebarNavigationSchema
|
|
37296
|
-
|
|
38246
|
+
sidebar: SidebarNavigationSchema,
|
|
38247
|
+
topbar: TopbarSectionSchema
|
|
38248
|
+
}).default({ sidebar: { primary: {}, bottom: {} }, topbar: {} });
|
|
37297
38249
|
var NavigationGroupSchema = external_exports.object({
|
|
37298
38250
|
id: ModelIdSchema,
|
|
37299
38251
|
label: LabelSchema,
|
|
@@ -37596,10 +38548,27 @@ var SystemUiSchema = external_exports.object({
|
|
|
37596
38548
|
});
|
|
37597
38549
|
var SystemInterfaceKeySchema = ModelIdSchema;
|
|
37598
38550
|
var SystemInterfaceLifecycleSchema = external_exports.enum(["draft", "active", "disabled", "deprecated", "archived"]).meta({ label: "System interface lifecycle", color: "teal" });
|
|
37599
|
-
var
|
|
37600
|
-
|
|
37601
|
-
|
|
38551
|
+
var SYSTEM_INTERFACE_PROFILES = [
|
|
38552
|
+
{
|
|
38553
|
+
systemPath: "sales.lead-gen",
|
|
38554
|
+
interfaceKey: "api",
|
|
38555
|
+
readinessProfile: "sales.lead-gen.api"
|
|
38556
|
+
},
|
|
38557
|
+
{
|
|
38558
|
+
systemPath: "sales.crm",
|
|
38559
|
+
interfaceKey: "api",
|
|
38560
|
+
readinessProfile: "sales.crm.api"
|
|
38561
|
+
},
|
|
38562
|
+
{
|
|
38563
|
+
systemPath: "sales.lead-gen",
|
|
38564
|
+
interfaceKey: "crm-handoff",
|
|
38565
|
+
readinessProfile: "sales.lead-gen.crm-handoff"
|
|
38566
|
+
}
|
|
38567
|
+
];
|
|
38568
|
+
var SYSTEM_INTERFACE_READINESS_PROFILES = SYSTEM_INTERFACE_PROFILES.map(
|
|
38569
|
+
(profile) => profile.readinessProfile
|
|
37602
38570
|
);
|
|
38571
|
+
var SystemInterfaceReadinessProfileSchema = external_exports.enum(SYSTEM_INTERFACE_READINESS_PROFILES);
|
|
37603
38572
|
var SystemInterfaceResourceScopeSchema = external_exports.array(ModelIdSchema).default([]);
|
|
37604
38573
|
var SystemApiInterfaceSchema = external_exports.object({
|
|
37605
38574
|
lifecycle: SystemInterfaceLifecycleSchema.default("active"),
|
|
@@ -38829,7 +39798,8 @@ var DEFAULT_ORGANIZATION_MODEL_NAVIGATION = {
|
|
|
38829
39798
|
sidebar: {
|
|
38830
39799
|
primary: {},
|
|
38831
39800
|
bottom: {}
|
|
38832
|
-
}
|
|
39801
|
+
},
|
|
39802
|
+
topbar: {}
|
|
38833
39803
|
};
|
|
38834
39804
|
var DEFAULT_ORGANIZATION_MODEL = {
|
|
38835
39805
|
version: 1,
|
|
@@ -40271,21 +41241,9 @@ function validateModelConfig(config3) {
|
|
|
40271
41241
|
}
|
|
40272
41242
|
|
|
40273
41243
|
// ../core/src/business/acquisition/ontology-validation.ts
|
|
40274
|
-
var LEAD_GEN_API_INTERFACE =
|
|
40275
|
-
|
|
40276
|
-
|
|
40277
|
-
readinessProfile: "sales.lead-gen.api"
|
|
40278
|
-
};
|
|
40279
|
-
var CRM_API_INTERFACE = {
|
|
40280
|
-
systemPath: "sales.crm",
|
|
40281
|
-
interfaceKey: "api",
|
|
40282
|
-
readinessProfile: "sales.crm.api"
|
|
40283
|
-
};
|
|
40284
|
-
var LEAD_GEN_CRM_HANDOFF_INTERFACE = {
|
|
40285
|
-
systemPath: "sales.lead-gen",
|
|
40286
|
-
interfaceKey: "crm-handoff",
|
|
40287
|
-
readinessProfile: "sales.lead-gen.crm-handoff"
|
|
40288
|
-
};
|
|
41244
|
+
var LEAD_GEN_API_INTERFACE = SYSTEM_INTERFACE_PROFILES[0];
|
|
41245
|
+
var CRM_API_INTERFACE = SYSTEM_INTERFACE_PROFILES[1];
|
|
41246
|
+
var LEAD_GEN_CRM_HANDOFF_INTERFACE = SYSTEM_INTERFACE_PROFILES[2];
|
|
40289
41247
|
var LEAD_GEN_API_READINESS_LABEL = LEAD_GEN_API_INTERFACE.readinessProfile;
|
|
40290
41248
|
var CRM_API_READINESS_LABEL = CRM_API_INTERFACE.readinessProfile;
|
|
40291
41249
|
var LEAD_GEN_CRM_HANDOFF_READINESS_LABEL = LEAD_GEN_CRM_HANDOFF_INTERFACE.readinessProfile;
|
|
@@ -40366,6 +41324,9 @@ function profileForInterface(systemPath, interfaceKey, readinessProfile) {
|
|
|
40366
41324
|
function readinessMarkerPath(context) {
|
|
40367
41325
|
return context.interfaceKey === "api" ? `systems.${context.systemPath}.apiInterface` : `systems.${context.systemPath}.derivedCrmHandoffReadiness`;
|
|
40368
41326
|
}
|
|
41327
|
+
function formatSupportedReadinessProfiles() {
|
|
41328
|
+
return SYSTEM_INTERFACE_READINESS_PROFILES.map((profile) => `"${profile}"`).join(", ");
|
|
41329
|
+
}
|
|
40369
41330
|
function getActiveScopedResources(model, resourceIds, issues, context) {
|
|
40370
41331
|
const resources = [];
|
|
40371
41332
|
for (const [index, resourceId] of resourceIds.entries()) {
|
|
@@ -40645,18 +41606,13 @@ function computeInterfaceReadiness(model, request) {
|
|
|
40645
41606
|
{ path: `${readinessMarkerPath(request)}.lifecycle` }
|
|
40646
41607
|
);
|
|
40647
41608
|
}
|
|
40648
|
-
const
|
|
40649
|
-
LEAD_GEN_API_INTERFACE.readinessProfile,
|
|
40650
|
-
CRM_API_INTERFACE.readinessProfile,
|
|
40651
|
-
LEAD_GEN_CRM_HANDOFF_INTERFACE.readinessProfile
|
|
40652
|
-
];
|
|
40653
|
-
const supportedProfile = readinessProfile !== void 0 && supportedProfiles.some((profile) => profile === readinessProfile);
|
|
41609
|
+
const supportedProfile = readinessProfile !== void 0 && SYSTEM_INTERFACE_PROFILES.some((profile) => profile.readinessProfile === readinessProfile);
|
|
40654
41610
|
if (!supportedProfile) {
|
|
40655
41611
|
addReadinessIssue(
|
|
40656
41612
|
issues,
|
|
40657
41613
|
"SYSTEM_INTERFACE_INVALID",
|
|
40658
41614
|
"unknown-readiness-profile",
|
|
40659
|
-
`System Interface "${formatInterfaceIdentity(request.systemPath, request.interfaceKey)}" references unknown readiness profile "${readinessProfile}".`,
|
|
41615
|
+
`System Interface "${formatInterfaceIdentity(request.systemPath, request.interfaceKey)}" references unknown readiness profile "${readinessProfile}". Supported profiles: ${formatSupportedReadinessProfiles()}. Custom Systems should not declare apiInterface; route custom behavior through workflows/operations plus ontology, resources, and topology.`,
|
|
40660
41616
|
{ path: `${readinessMarkerPath(request)}.readinessProfile`, ref: readinessProfile }
|
|
40661
41617
|
);
|
|
40662
41618
|
return {
|
|
@@ -41071,6 +42027,37 @@ function addSystemInterfaceIssue(issues, orgName, systemPath, interfaceKey, issu
|
|
|
41071
42027
|
message: `[${orgName}] ${issue2.family}:${issue2.code}: ${issue2.message}`
|
|
41072
42028
|
});
|
|
41073
42029
|
}
|
|
42030
|
+
function detectMissingApiInterfaceDeclarations(orgName, organizationModel) {
|
|
42031
|
+
if (organizationModel === void 0) return [];
|
|
42032
|
+
const apiBoundResourcesBySystemPath = /* @__PURE__ */ new Map();
|
|
42033
|
+
for (const resource of Object.values(organizationModel.resources ?? {})) {
|
|
42034
|
+
const ontology = resource.ontology;
|
|
42035
|
+
if (ontology === void 0) continue;
|
|
42036
|
+
const hasOntologyBindings = ontology.actions !== void 0 && ontology.actions.length > 0 || ontology.writes !== void 0 && ontology.writes.length > 0;
|
|
42037
|
+
if (!hasOntologyBindings) continue;
|
|
42038
|
+
const existing = apiBoundResourcesBySystemPath.get(resource.systemPath);
|
|
42039
|
+
if (existing) {
|
|
42040
|
+
existing.push(resource.id);
|
|
42041
|
+
} else {
|
|
42042
|
+
apiBoundResourcesBySystemPath.set(resource.systemPath, [resource.id]);
|
|
42043
|
+
}
|
|
42044
|
+
}
|
|
42045
|
+
if (apiBoundResourcesBySystemPath.size === 0) return [];
|
|
42046
|
+
const catalogedSystemPaths = new Set(SYSTEM_INTERFACE_PROFILES.map((profile) => profile.systemPath));
|
|
42047
|
+
const gaps = [];
|
|
42048
|
+
for (const { path: path3, system } of listAllSystems(organizationModel)) {
|
|
42049
|
+
if (system.apiInterface !== void 0) continue;
|
|
42050
|
+
if (!catalogedSystemPaths.has(path3)) continue;
|
|
42051
|
+
const resourceIds = apiBoundResourcesBySystemPath.get(path3);
|
|
42052
|
+
if (!resourceIds || resourceIds.length === 0) continue;
|
|
42053
|
+
gaps.push({
|
|
42054
|
+
systemPath: path3,
|
|
42055
|
+
resourceIds,
|
|
42056
|
+
message: `[${orgName}] System '${path3}' has ${resourceIds.length} API-backed resource(s) (${resourceIds.join(", ")}) but no apiInterface declaration.`
|
|
42057
|
+
});
|
|
42058
|
+
}
|
|
42059
|
+
return gaps;
|
|
42060
|
+
}
|
|
41074
42061
|
function validateDeclaredSystemInterfaceReadiness(orgName, organizationModel) {
|
|
41075
42062
|
const issues = [];
|
|
41076
42063
|
if (organizationModel === void 0) return { valid: true, issues };
|
|
@@ -44518,105 +45505,11 @@ var ResourceRegistry = class {
|
|
|
44518
45505
|
// src/index.ts
|
|
44519
45506
|
var ListBuilderStageKeySchema = external_exports.string().min(1);
|
|
44520
45507
|
|
|
44521
|
-
// src/cli/
|
|
44522
|
-
|
|
44523
|
-
var import_path = require("path");
|
|
44524
|
-
var DEV_API_URL = "http://localhost:5170";
|
|
44525
|
-
var PROD_API_URL = "https://api.elevasis.io";
|
|
44526
|
-
function resolveApiUrl(cliOverride, prod) {
|
|
44527
|
-
if (cliOverride) return cliOverride;
|
|
44528
|
-
if (prod) return PROD_API_URL;
|
|
44529
|
-
if (process.env.ELEVASIS_API_URL) return process.env.ELEVASIS_API_URL;
|
|
44530
|
-
if (process.env.NODE_ENV === "development") return DEV_API_URL;
|
|
44531
|
-
return PROD_API_URL;
|
|
44532
|
-
}
|
|
44533
|
-
function resolveEnvironment(prod) {
|
|
44534
|
-
if (prod) return "production";
|
|
44535
|
-
return process.env.NODE_ENV === "development" ? "development" : "production";
|
|
44536
|
-
}
|
|
44537
|
-
function resolveApiKey(prod) {
|
|
44538
|
-
if (!prod && process.env.NODE_ENV === "development") {
|
|
44539
|
-
return process.env.ELEVASIS_PLATFORM_KEY_DEV ?? process.env.ELEVASIS_PLATFORM_KEY ?? "";
|
|
44540
|
-
}
|
|
44541
|
-
return process.env.ELEVASIS_PLATFORM_KEY ?? "";
|
|
44542
|
-
}
|
|
44543
|
-
function tryFindProjectRoot(startDir) {
|
|
44544
|
-
const raw = (0, import_path.resolve)(startDir);
|
|
44545
|
-
let dir;
|
|
44546
|
-
try {
|
|
44547
|
-
dir = (0, import_fs.realpathSync)(raw);
|
|
44548
|
-
} catch {
|
|
44549
|
-
dir = raw;
|
|
44550
|
-
}
|
|
44551
|
-
while (true) {
|
|
44552
|
-
if ((0, import_fs.existsSync)((0, import_path.join)(dir, ".elevasis"))) return dir;
|
|
44553
|
-
const parent = (0, import_path.dirname)(dir);
|
|
44554
|
-
if (parent === dir) break;
|
|
44555
|
-
dir = parent;
|
|
44556
|
-
}
|
|
44557
|
-
return null;
|
|
44558
|
-
}
|
|
44559
|
-
function findProjectRoot(startDir) {
|
|
44560
|
-
const root = tryFindProjectRoot(startDir);
|
|
44561
|
-
if (root !== null) return root;
|
|
44562
|
-
process.stderr.write(
|
|
44563
|
-
"Not inside an Elevasis project. Run this command from a project directory (an Elevasis project has a .elevasis file at its root).\n"
|
|
44564
|
-
);
|
|
44565
|
-
process.exit(1);
|
|
44566
|
-
}
|
|
44567
|
-
function isHelpOrVersionOnly() {
|
|
44568
|
-
const args = process.argv.slice(2);
|
|
44569
|
-
return args.length > 0 && args.every((a) => ["--help", "-h", "--version", "-V"].includes(a));
|
|
44570
|
-
}
|
|
44571
|
-
var _projectRoot;
|
|
44572
|
-
function getProjectRoot() {
|
|
44573
|
-
if (_projectRoot !== void 0) return _projectRoot;
|
|
44574
|
-
_projectRoot = isHelpOrVersionOnly() ? process.cwd() : findProjectRoot(process.cwd());
|
|
44575
|
-
return _projectRoot;
|
|
44576
|
-
}
|
|
44577
|
-
function resolveProjectRelative(relOrAbsPath) {
|
|
44578
|
-
if ((0, import_path.isAbsolute)(relOrAbsPath)) return relOrAbsPath;
|
|
44579
|
-
return (0, import_path.resolve)(getProjectRoot(), relOrAbsPath);
|
|
44580
|
-
}
|
|
44581
|
-
function findEnvFile(_startDir) {
|
|
44582
|
-
const projectRoot = tryFindProjectRoot(process.cwd());
|
|
44583
|
-
if (projectRoot === null) return void 0;
|
|
44584
|
-
const candidate = (0, import_path.join)(projectRoot, ".env");
|
|
44585
|
-
return (0, import_fs.existsSync)(candidate) ? candidate : void 0;
|
|
44586
|
-
}
|
|
44587
|
-
function findPackageRoot(startDir) {
|
|
44588
|
-
const raw = (0, import_path.resolve)(startDir);
|
|
44589
|
-
let dir;
|
|
44590
|
-
try {
|
|
44591
|
-
dir = (0, import_fs.realpathSync)(raw);
|
|
44592
|
-
} catch {
|
|
44593
|
-
dir = raw;
|
|
44594
|
-
}
|
|
44595
|
-
const projectRoot = tryFindProjectRoot(dir);
|
|
44596
|
-
while (true) {
|
|
44597
|
-
if ((0, import_fs.existsSync)((0, import_path.join)(dir, "package.json"))) return dir;
|
|
44598
|
-
const parent = (0, import_path.dirname)(dir);
|
|
44599
|
-
if (parent === dir) break;
|
|
44600
|
-
if (projectRoot !== null && dir === projectRoot) break;
|
|
44601
|
-
dir = parent;
|
|
44602
|
-
}
|
|
44603
|
-
process.stderr.write(
|
|
44604
|
-
"No package.json found between the current directory and the project root.\nRemediation: run this command from inside a package directory (one that contains package.json).\n"
|
|
44605
|
-
);
|
|
44606
|
-
process.exit(1);
|
|
44607
|
-
}
|
|
44608
|
-
var _packageRoot;
|
|
44609
|
-
function getPackageRoot() {
|
|
44610
|
-
if (_packageRoot !== void 0) return _packageRoot;
|
|
44611
|
-
_packageRoot = isHelpOrVersionOnly() ? process.cwd() : findPackageRoot(process.cwd());
|
|
44612
|
-
return _packageRoot;
|
|
44613
|
-
}
|
|
44614
|
-
function resolvePackageRelative(relOrAbsPath) {
|
|
44615
|
-
if ((0, import_path.isAbsolute)(relOrAbsPath)) return relOrAbsPath;
|
|
44616
|
-
return (0, import_path.resolve)(getPackageRoot(), relOrAbsPath);
|
|
44617
|
-
}
|
|
45508
|
+
// src/cli/commands/deploy.ts
|
|
45509
|
+
init_config();
|
|
44618
45510
|
|
|
44619
45511
|
// src/cli/api-client.ts
|
|
45512
|
+
init_config();
|
|
44620
45513
|
function getApiKey(apiUrl) {
|
|
44621
45514
|
const isProd = !apiUrl.includes("localhost");
|
|
44622
45515
|
const key = resolveApiKey(isProd);
|
|
@@ -44697,6 +45590,7 @@ async function apiDelete(endpoint, apiUrl = resolveApiUrl()) {
|
|
|
44697
45590
|
}
|
|
44698
45591
|
|
|
44699
45592
|
// src/cli/wrap-action.ts
|
|
45593
|
+
init_source();
|
|
44700
45594
|
function wrapAction(commandName, fn) {
|
|
44701
45595
|
return async (...args) => {
|
|
44702
45596
|
try {
|
|
@@ -44714,7 +45608,7 @@ function wrapAction(commandName, fn) {
|
|
|
44714
45608
|
// package.json
|
|
44715
45609
|
var package_default = {
|
|
44716
45610
|
name: "@elevasis/sdk",
|
|
44717
|
-
version: "1.
|
|
45611
|
+
version: "1.30.1",
|
|
44718
45612
|
description: "SDK for building Elevasis organization resources",
|
|
44719
45613
|
type: "module",
|
|
44720
45614
|
bin: {
|
|
@@ -44966,6 +45860,21 @@ function validateResourceGovernancePreflight(orgName, org, contractRegistry) {
|
|
|
44966
45860
|
if (org.organizationModel !== void 0) {
|
|
44967
45861
|
OrganizationModelSchema.parse(org.organizationModel);
|
|
44968
45862
|
}
|
|
45863
|
+
const conformanceGaps = detectMissingApiInterfaceDeclarations(
|
|
45864
|
+
orgName,
|
|
45865
|
+
org.organizationModel
|
|
45866
|
+
);
|
|
45867
|
+
if (conformanceGaps.length > 0) {
|
|
45868
|
+
const gapLines = conformanceGaps.map((gap) => ` ${gap.systemPath}: resources [${gap.resourceIds.join(", ")}] missing apiInterface`).join("\n");
|
|
45869
|
+
throw new RegistryValidationError(
|
|
45870
|
+
orgName,
|
|
45871
|
+
null,
|
|
45872
|
+
"organizationModel.apiInterface",
|
|
45873
|
+
`${conformanceGaps.length} system(s) have API-backed resources but no apiInterface declaration:
|
|
45874
|
+
${gapLines}
|
|
45875
|
+
Run \`pnpm exec elevasis-sdk om:scaffold:fill --gaps <path>\` to scaffold the missing apiInterface declarations.`
|
|
45876
|
+
);
|
|
45877
|
+
}
|
|
44969
45878
|
validateDeclaredSystemInterfaceReadiness(orgName, org.organizationModel);
|
|
44970
45879
|
if (process.env.ELEVASIS_RESOURCE_VALIDATOR === "warn-only") return;
|
|
44971
45880
|
validateResourceGovernance(orgName, org, org.organizationModel, { mode: "strict" });
|
|
@@ -45218,6 +46127,7 @@ import { startWorker } from '@elevasis/sdk/worker'
|
|
|
45218
46127
|
}
|
|
45219
46128
|
|
|
45220
46129
|
// src/cli/commands/check.ts
|
|
46130
|
+
init_config();
|
|
45221
46131
|
function registerCheckCommand(program3) {
|
|
45222
46132
|
program3.command("check").description(
|
|
45223
46133
|
"Validate project resources against the ResourceRegistry\n Example: elevasis-sdk check --entry ./src/index.ts"
|
|
@@ -45295,6 +46205,8 @@ function registerCheckCommand(program3) {
|
|
|
45295
46205
|
// src/cli/commands/exec.ts
|
|
45296
46206
|
var import_node_fs = require("node:fs");
|
|
45297
46207
|
var import_node_path = require("node:path");
|
|
46208
|
+
init_source();
|
|
46209
|
+
init_config();
|
|
45298
46210
|
var POLL_INTERVAL_MS = 3e3;
|
|
45299
46211
|
async function pollForCompletion(resourceId, executionId, apiUrl) {
|
|
45300
46212
|
const pollSpinner = ora("Waiting for completion...").start();
|
|
@@ -45446,6 +46358,8 @@ function registerExecCommand(program3) {
|
|
|
45446
46358
|
}
|
|
45447
46359
|
|
|
45448
46360
|
// src/cli/commands/resources.ts
|
|
46361
|
+
init_source();
|
|
46362
|
+
init_config();
|
|
45449
46363
|
function registerResourcesCommand(program3) {
|
|
45450
46364
|
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 (options) => {
|
|
45451
46365
|
const apiUrl = resolveApiUrl(options.apiUrl);
|
|
@@ -45491,6 +46405,8 @@ function registerResourcesCommand(program3) {
|
|
|
45491
46405
|
}
|
|
45492
46406
|
|
|
45493
46407
|
// src/cli/commands/executions.ts
|
|
46408
|
+
init_source();
|
|
46409
|
+
init_config();
|
|
45494
46410
|
function registerExecutionsCommand(program3) {
|
|
45495
46411
|
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, options) => {
|
|
45496
46412
|
const apiUrl = resolveApiUrl(options.apiUrl);
|
|
@@ -45549,6 +46465,8 @@ function registerExecutionsCommand(program3) {
|
|
|
45549
46465
|
}
|
|
45550
46466
|
|
|
45551
46467
|
// src/cli/commands/execution.ts
|
|
46468
|
+
init_source();
|
|
46469
|
+
init_config();
|
|
45552
46470
|
function registerExecutionCommand(program3) {
|
|
45553
46471
|
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, options) => {
|
|
45554
46472
|
const apiUrl = resolveApiUrl(options.apiUrl);
|
|
@@ -45651,6 +46569,8 @@ function displayLog(log) {
|
|
|
45651
46569
|
}
|
|
45652
46570
|
|
|
45653
46571
|
// src/cli/commands/deployments.ts
|
|
46572
|
+
init_source();
|
|
46573
|
+
init_config();
|
|
45654
46574
|
function registerDeploymentsCommand(program3) {
|
|
45655
46575
|
program3.command("deployments").description("List deployments for your organization").option("--api-url <url>", "API URL").option("--json", "Output as JSON").action(wrapAction("deployments", async (options) => {
|
|
45656
46576
|
const apiUrl = resolveApiUrl(options.apiUrl);
|
|
@@ -45711,6 +46631,8 @@ function registerDeploymentsCommand(program3) {
|
|
|
45711
46631
|
}
|
|
45712
46632
|
|
|
45713
46633
|
// src/cli/commands/describe.ts
|
|
46634
|
+
init_source();
|
|
46635
|
+
init_config();
|
|
45714
46636
|
function hasSchemaContent(schema) {
|
|
45715
46637
|
return Object.keys(schema).some((k) => k !== "$schema");
|
|
45716
46638
|
}
|
|
@@ -45783,7 +46705,11 @@ function registerDescribeCommand(program3) {
|
|
|
45783
46705
|
);
|
|
45784
46706
|
}
|
|
45785
46707
|
|
|
46708
|
+
// src/cli/commands/creds/creds.ts
|
|
46709
|
+
init_config();
|
|
46710
|
+
|
|
45786
46711
|
// src/cli/commands/creds/creds-list.ts
|
|
46712
|
+
init_source();
|
|
45787
46713
|
async function listCreds(apiUrl, json2) {
|
|
45788
46714
|
const spinner = ora("Fetching credentials...").start();
|
|
45789
46715
|
const data = await apiGet("/api/external/credentials", apiUrl);
|
|
@@ -45809,6 +46735,7 @@ Credentials (${data.credentials.length}):
|
|
|
45809
46735
|
}
|
|
45810
46736
|
|
|
45811
46737
|
// src/cli/commands/creds/creds-create.ts
|
|
46738
|
+
init_source();
|
|
45812
46739
|
var CREDENTIAL_NAME_REGEX = /^[a-z0-9]+(-[a-z0-9]+)*$/;
|
|
45813
46740
|
var VALID_TYPES = ["api-key", "webhook-secret"];
|
|
45814
46741
|
async function createCreds(apiUrl, name, type, valueJson) {
|
|
@@ -45863,6 +46790,7 @@ Credential created successfully!`));
|
|
|
45863
46790
|
}
|
|
45864
46791
|
|
|
45865
46792
|
// src/cli/commands/creds/creds-update.ts
|
|
46793
|
+
init_source();
|
|
45866
46794
|
async function updateCreds(apiUrl, name, valueJson) {
|
|
45867
46795
|
let value;
|
|
45868
46796
|
try {
|
|
@@ -45896,6 +46824,7 @@ Credential '${name}' updated successfully!`));
|
|
|
45896
46824
|
}
|
|
45897
46825
|
|
|
45898
46826
|
// src/cli/commands/creds/creds-rename.ts
|
|
46827
|
+
init_source();
|
|
45899
46828
|
var CREDENTIAL_NAME_REGEX2 = /^[a-z0-9]+(-[a-z0-9]+)*$/;
|
|
45900
46829
|
async function renameCreds(apiUrl, name, newName) {
|
|
45901
46830
|
if (!newName || newName.length < 1 || newName.length > 100) {
|
|
@@ -45929,6 +46858,7 @@ Credential renamed successfully!`));
|
|
|
45929
46858
|
}
|
|
45930
46859
|
|
|
45931
46860
|
// src/cli/commands/creds/creds-delete.ts
|
|
46861
|
+
init_source();
|
|
45932
46862
|
var import_readline = require("readline");
|
|
45933
46863
|
function confirm(message) {
|
|
45934
46864
|
const rl = (0, import_readline.createInterface)({ input: process.stdin, output: process.stdout });
|
|
@@ -45993,7 +46923,11 @@ function registerCredsCommand(program3) {
|
|
|
45993
46923
|
}));
|
|
45994
46924
|
}
|
|
45995
46925
|
|
|
46926
|
+
// src/cli/commands/error/error.ts
|
|
46927
|
+
init_config();
|
|
46928
|
+
|
|
45996
46929
|
// src/cli/commands/error/error-resolve.ts
|
|
46930
|
+
init_source();
|
|
45997
46931
|
async function resolveError(apiUrl, errorId) {
|
|
45998
46932
|
const spinner = ora("Resolving error...").start();
|
|
45999
46933
|
await apiPatch(`/api/external/observability/errors/${errorId}/resolve`, {}, apiUrl);
|
|
@@ -46029,6 +46963,8 @@ function registerErrorCommand(program3) {
|
|
|
46029
46963
|
}
|
|
46030
46964
|
|
|
46031
46965
|
// src/cli/commands/rename.ts
|
|
46966
|
+
init_source();
|
|
46967
|
+
init_config();
|
|
46032
46968
|
function registerRenameCommand(program3) {
|
|
46033
46969
|
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(
|
|
46034
46970
|
wrapAction("rename", async (oldResourceId, options) => {
|
|
@@ -46066,7 +47002,12 @@ function registerRenameCommand(program3) {
|
|
|
46066
47002
|
);
|
|
46067
47003
|
}
|
|
46068
47004
|
|
|
47005
|
+
// src/cli/commands/project/projects.ts
|
|
47006
|
+
init_source();
|
|
47007
|
+
init_config();
|
|
47008
|
+
|
|
46069
47009
|
// src/cli/commands/project/resolve-project.ts
|
|
47010
|
+
init_config();
|
|
46070
47011
|
function isUuid(value) {
|
|
46071
47012
|
return /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i.test(value);
|
|
46072
47013
|
}
|
|
@@ -46303,6 +47244,8 @@ function renderProjectWorkBrief(brief) {
|
|
|
46303
47244
|
}
|
|
46304
47245
|
|
|
46305
47246
|
// src/cli/commands/client/client.ts
|
|
47247
|
+
init_source();
|
|
47248
|
+
init_config();
|
|
46306
47249
|
function isUuid2(value) {
|
|
46307
47250
|
return /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i.test(value);
|
|
46308
47251
|
}
|
|
@@ -46676,6 +47619,8 @@ Project ${id} deleted.`));
|
|
|
46676
47619
|
}
|
|
46677
47620
|
|
|
46678
47621
|
// src/cli/commands/project/milestones.ts
|
|
47622
|
+
init_source();
|
|
47623
|
+
init_config();
|
|
46679
47624
|
function registerMilestoneList(program3) {
|
|
46680
47625
|
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(
|
|
46681
47626
|
wrapAction("project:milestone:list", async (options) => {
|
|
@@ -46795,6 +47740,8 @@ Milestone ${id} deleted.`));
|
|
|
46795
47740
|
}
|
|
46796
47741
|
|
|
46797
47742
|
// src/cli/commands/project/tasks.ts
|
|
47743
|
+
init_source();
|
|
47744
|
+
init_config();
|
|
46798
47745
|
function registerTaskList(program3) {
|
|
46799
47746
|
program3.command("project:task:list").description(
|
|
46800
47747
|
"List tasks for a project\n Example: elevasis-sdk project:task:list --project <uuid> --status in_progress"
|
|
@@ -47073,6 +48020,9 @@ Resume context saved for task ${id}`));
|
|
|
47073
48020
|
);
|
|
47074
48021
|
}
|
|
47075
48022
|
|
|
48023
|
+
// src/cli/commands/project/notes.ts
|
|
48024
|
+
init_source();
|
|
48025
|
+
|
|
47076
48026
|
// ../core/src/projects/api-schemas.ts
|
|
47077
48027
|
var ProjectKindSchema = external_exports.enum(["client_engagement", "internal", "research", "other"]);
|
|
47078
48028
|
var ProjectStatusSchema = external_exports.enum(["active", "on_track", "at_risk", "blocked", "completed", "paused"]);
|
|
@@ -47231,6 +48181,7 @@ var UpdateNoteRequestSchema = external_exports.object({
|
|
|
47231
48181
|
var NoteIdParamsSchema = external_exports.object({ id: UuidSchema });
|
|
47232
48182
|
|
|
47233
48183
|
// src/cli/commands/project/notes.ts
|
|
48184
|
+
init_config();
|
|
47234
48185
|
var NOTE_TYPE_HELP = NoteTypeSchema.options.join(" | ");
|
|
47235
48186
|
function registerNoteList(program3) {
|
|
47236
48187
|
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(
|
|
@@ -48090,6 +49041,9 @@ ${appliesLines.join("\n")}` : "";
|
|
|
48090
49041
|
return join3([header, effectSection, appliesSection]);
|
|
48091
49042
|
}
|
|
48092
49043
|
|
|
49044
|
+
// src/cli/commands/knowledge/ls.ts
|
|
49045
|
+
init_config();
|
|
49046
|
+
|
|
48093
49047
|
// src/cli/commands/knowledge/load-org-model.ts
|
|
48094
49048
|
var import_path3 = require("path");
|
|
48095
49049
|
var import_fs3 = require("fs");
|
|
@@ -48225,6 +49179,7 @@ function registerKnowledgeLs(program3) {
|
|
|
48225
49179
|
}
|
|
48226
49180
|
|
|
48227
49181
|
// src/cli/commands/knowledge/cat.ts
|
|
49182
|
+
init_config();
|
|
48228
49183
|
function registerKnowledgeCat(program3) {
|
|
48229
49184
|
program3.command("knowledge:cat <id>").alias("om:cat").description(
|
|
48230
49185
|
"Print the raw MDX body of a knowledge node\n Example: elevasis-sdk om:cat knowledge.outreach-playbook\n Use --json for structured output"
|
|
@@ -48248,6 +49203,7 @@ function registerKnowledgeCat(program3) {
|
|
|
48248
49203
|
}
|
|
48249
49204
|
|
|
48250
49205
|
// src/cli/commands/knowledge/graph.ts
|
|
49206
|
+
init_config();
|
|
48251
49207
|
function registerKnowledgeGraph(program3) {
|
|
48252
49208
|
program3.command("knowledge:graph <id>").alias("om:graph").description(
|
|
48253
49209
|
"Show outgoing and incoming edges for a knowledge node\n Example: elevasis-sdk om:graph knowledge.outreach-playbook\n Accepts bare OM node id or graph node id (knowledge:<id>)"
|
|
@@ -48307,6 +49263,7 @@ function registerKnowledgeGraph(program3) {
|
|
|
48307
49263
|
}
|
|
48308
49264
|
|
|
48309
49265
|
// src/cli/commands/knowledge/skills.ts
|
|
49266
|
+
init_config();
|
|
48310
49267
|
function normalizeKnowledgeId(id) {
|
|
48311
49268
|
return id.startsWith("knowledge:") ? id.slice("knowledge:".length) : id;
|
|
48312
49269
|
}
|
|
@@ -48783,6 +49740,7 @@ function generateKnowledgeNodes(options) {
|
|
|
48783
49740
|
}
|
|
48784
49741
|
|
|
48785
49742
|
// src/cli/commands/knowledge/generate.ts
|
|
49743
|
+
init_config();
|
|
48786
49744
|
function registerKnowledgeGenerate(program3) {
|
|
48787
49745
|
program3.command("knowledge:generate").alias("om:generate").description(
|
|
48788
49746
|
"Generate OrganizationModel knowledge nodes from MDX source files\n Example: elevasis-sdk om:generate"
|
|
@@ -48825,6 +49783,7 @@ function registerKnowledgeGenerate(program3) {
|
|
|
48825
49783
|
}
|
|
48826
49784
|
|
|
48827
49785
|
// src/cli/commands/knowledge/search.ts
|
|
49786
|
+
init_config();
|
|
48828
49787
|
var ALL_KINDS = ["system", "resource", "knowledge", "ontology", "role", "policy"];
|
|
48829
49788
|
function parseLimit(raw) {
|
|
48830
49789
|
if (raw === void 0) return 10;
|
|
@@ -48877,6 +49836,7 @@ function registerKnowledgeSearch(program3) {
|
|
|
48877
49836
|
}
|
|
48878
49837
|
|
|
48879
49838
|
// src/cli/commands/knowledge/describe.ts
|
|
49839
|
+
init_config();
|
|
48880
49840
|
function registerKnowledgeDescribe(program3) {
|
|
48881
49841
|
program3.command("knowledge:describe <nodeId>").alias("om:describe").description(
|
|
48882
49842
|
"Show a structured neighborhood view for any OM node id\n (system, resource, knowledge, ontology, role, policy \u2014 auto-detected from id shape)\n Example: elevasis-sdk om:describe sales.lead-gen\n Example: elevasis-sdk om:describe knowledge.outreach-playbook"
|
|
@@ -48915,6 +49875,8 @@ function registerKnowledgeCommands(program3) {
|
|
|
48915
49875
|
// src/cli/commands/request/request.ts
|
|
48916
49876
|
var import_node_fs4 = require("node:fs");
|
|
48917
49877
|
var import_node_path4 = require("node:path");
|
|
49878
|
+
init_source();
|
|
49879
|
+
init_config();
|
|
48918
49880
|
|
|
48919
49881
|
// ../core/src/requests/api-schemas.ts
|
|
48920
49882
|
var RequestSeverityEnum = external_exports.enum(["critical", "warning", "info"]);
|
|
@@ -49071,6 +50033,7 @@ ${rows.length} request${rows.length === 1 ? "" : "s"}`));
|
|
|
49071
50033
|
var import_node_child_process = require("node:child_process");
|
|
49072
50034
|
var import_node_fs5 = __toESM(require("node:fs"), 1);
|
|
49073
50035
|
var import_node_path5 = __toESM(require("node:path"), 1);
|
|
50036
|
+
init_config();
|
|
49074
50037
|
function run(command, args, cwd) {
|
|
49075
50038
|
(0, import_node_child_process.execFileSync)(command, args, {
|
|
49076
50039
|
cwd,
|
|
@@ -49212,6 +50175,8 @@ function registerUiCommands(program3) {
|
|
|
49212
50175
|
// src/cli/commands/doctor.ts
|
|
49213
50176
|
var import_node_fs6 = require("node:fs");
|
|
49214
50177
|
var import_node_path6 = __toESM(require("node:path"), 1);
|
|
50178
|
+
init_source();
|
|
50179
|
+
init_config();
|
|
49215
50180
|
function ok(label, detail) {
|
|
49216
50181
|
console.log(`${source_default.green("[OK]")} ${source_default.bold(label)}: ${detail}`);
|
|
49217
50182
|
}
|
|
@@ -49451,6 +50416,8 @@ function registerCliCatalogCommand(program3) {
|
|
|
49451
50416
|
}
|
|
49452
50417
|
|
|
49453
50418
|
// src/cli/commands/acquisition/deals.ts
|
|
50419
|
+
init_source();
|
|
50420
|
+
init_config();
|
|
49454
50421
|
function appendQuery2(params, key, value) {
|
|
49455
50422
|
if (value === void 0 || value === null || value === "") return;
|
|
49456
50423
|
params.set(key, String(value));
|
|
@@ -49560,6 +50527,8 @@ function registerAcquisitionDealStatus(program3) {
|
|
|
49560
50527
|
}
|
|
49561
50528
|
|
|
49562
50529
|
// src/cli/commands/acquisition/lists.ts
|
|
50530
|
+
init_source();
|
|
50531
|
+
init_config();
|
|
49563
50532
|
function appendQuery3(params, key, value) {
|
|
49564
50533
|
if (value === void 0 || value === null || value === "") return;
|
|
49565
50534
|
params.set(key, String(value));
|
|
@@ -49677,6 +50646,8 @@ function registerAcquisitionCommands(program3) {
|
|
|
49677
50646
|
}
|
|
49678
50647
|
|
|
49679
50648
|
// src/cli/commands/client/client-write.ts
|
|
50649
|
+
init_source();
|
|
50650
|
+
init_config();
|
|
49680
50651
|
function registerClientCreate(program3) {
|
|
49681
50652
|
program3.command("client:create").description('Create a new client\n Example: elevasis-sdk client:create --name "Acme Corp"').requiredOption("--name <name>", "Client name").option("--status <status>", "Client status: active | onboarding | paused | completed | churned").option("--source-deal-id <uuid>", "UUID of the source deal").option("--primary-company-id <uuid>", "UUID of the primary company").option("--primary-contact-id <uuid>", "UUID of the primary contact").option("--metadata <json>", "Arbitrary metadata (JSON string)").option("--api-url <url>", "API base URL").option("--pretty", "Render human-readable output instead of raw JSON").action(
|
|
49682
50653
|
wrapAction(
|
|
@@ -49808,6 +50779,8 @@ function registerClientCommands(program3) {
|
|
|
49808
50779
|
}
|
|
49809
50780
|
|
|
49810
50781
|
// src/cli/commands/queue/queue.ts
|
|
50782
|
+
init_source();
|
|
50783
|
+
init_config();
|
|
49811
50784
|
function printJson4(value) {
|
|
49812
50785
|
console.log(JSON.stringify(value, null, 2));
|
|
49813
50786
|
}
|
|
@@ -49993,6 +50966,8 @@ function registerQueueCommands(program3) {
|
|
|
49993
50966
|
}
|
|
49994
50967
|
|
|
49995
50968
|
// src/cli/commands/schedule/schedule.ts
|
|
50969
|
+
init_source();
|
|
50970
|
+
init_config();
|
|
49996
50971
|
function printJson5(value) {
|
|
49997
50972
|
console.log(JSON.stringify(value, null, 2));
|
|
49998
50973
|
}
|
|
@@ -50221,6 +51196,8 @@ function registerScheduleCommands(program3) {
|
|
|
50221
51196
|
}
|
|
50222
51197
|
|
|
50223
51198
|
// src/cli/commands/notes.ts
|
|
51199
|
+
init_source();
|
|
51200
|
+
init_config();
|
|
50224
51201
|
var PRIORITY_HELP = "low | normal | high | urgent";
|
|
50225
51202
|
function registerNoteCreate2(program3) {
|
|
50226
51203
|
program3.command("note:create").description(
|
|
@@ -50297,6 +51274,8 @@ function registerNoteCommands(program3) {
|
|
|
50297
51274
|
}
|
|
50298
51275
|
|
|
50299
51276
|
// src/cli/commands/agent/agent.ts
|
|
51277
|
+
init_source();
|
|
51278
|
+
init_config();
|
|
50300
51279
|
function printJson6(value) {
|
|
50301
51280
|
console.log(JSON.stringify(value, null, 2));
|
|
50302
51281
|
}
|
|
@@ -50358,6 +51337,8 @@ function registerAgentCommands(program3) {
|
|
|
50358
51337
|
}
|
|
50359
51338
|
|
|
50360
51339
|
// src/cli/commands/session/session.ts
|
|
51340
|
+
init_source();
|
|
51341
|
+
init_config();
|
|
50361
51342
|
function printJson7(value) {
|
|
50362
51343
|
console.log(JSON.stringify(value, null, 2));
|
|
50363
51344
|
}
|
|
@@ -50441,10 +51422,44 @@ function registerSessionCommands(program3) {
|
|
|
50441
51422
|
registerSessionEnd(program3);
|
|
50442
51423
|
}
|
|
50443
51424
|
|
|
51425
|
+
// src/cli/commands/om/index.ts
|
|
51426
|
+
function registerOmScaffoldCommands(program3) {
|
|
51427
|
+
program3.command("om:scaffold:system").description("Guide creation of a new system entry in core/config/organization-model/systems.ts").option("--id <path>", "dot-notated system path, e.g. sales.crm (prompted if absent)").option("--title <title>", "display title (prompted if absent)").option("--kind <kind>", "system kind: operational | analytical | support (prompted if absent)").option("--api-backed", "emit apiInterface block and remind to add resource IDs").option("--dry-run", "print proposed TypeScript block without writing").action(async (opts) => {
|
|
51428
|
+
const mod = await Promise.resolve().then(() => (init_scaffold_system(), scaffold_system_exports));
|
|
51429
|
+
await mod.default(opts);
|
|
51430
|
+
});
|
|
51431
|
+
program3.command("om:scaffold:resource").description("Add a new workflow resource descriptor to core/config/organization-model/systems.ts").option("--id <id>", "resource id, e.g. lead-discovery-workflow (prompted if absent)").option("--system-path <path>", "systemPath to attach to (prompted if absent)").option("--title <title>", "resource display title (prompted if absent)").option("--primary-action <action>", "ontology primary action id (prompted; can be skipped)").option("--dry-run", "print proposed TypeScript block without writing").action(async (opts) => {
|
|
51432
|
+
const mod = await Promise.resolve().then(() => (init_scaffold_resource(), scaffold_resource_exports));
|
|
51433
|
+
await mod.default(opts);
|
|
51434
|
+
});
|
|
51435
|
+
program3.command("om:scaffold:role").description("Add a new role to core/config/organization-model/profile.ts").option("--id <id>", "role id, e.g. ops-lead (prompted if absent)").option("--title <title>", "display label (prompted if absent)").option("--description <desc>", "short description (prompted if absent)").option("--dry-run", "print proposed TypeScript block without writing").action(async (opts) => {
|
|
51436
|
+
const mod = await Promise.resolve().then(() => (init_scaffold_role(), scaffold_role_exports));
|
|
51437
|
+
await mod.default(opts);
|
|
51438
|
+
});
|
|
51439
|
+
program3.command("om:scaffold:knowledge").description("Create a new MDX knowledge node file in core/config/knowledge/nodes/").option("--id <id>", "knowledge node id, e.g. outreach-playbook (prompted if absent)").option("--kind <kind>", "node kind: playbook | strategy | reference | policy (prompted if absent)").option("--system-path <path>", "governing system path for mount (prompted; can be blank for global)").option("--dry-run", "print proposed MDX without writing").action(async (opts) => {
|
|
51440
|
+
const mod = await Promise.resolve().then(() => (init_scaffold_knowledge(), scaffold_knowledge_exports));
|
|
51441
|
+
await mod.default(opts);
|
|
51442
|
+
});
|
|
51443
|
+
program3.command("om:scaffold:fill").description("Non-interactive fill-mode: apply conformance gap JSON written by Agent 2a conformance gate").option("--gaps <path>", "path to conformance gap JSON file (required)").option("--skipped <path>", "output path for gaps that require manual input").option("--dry-run", "print proposed changes without writing").action(async (opts) => {
|
|
51444
|
+
const mod = await Promise.resolve().then(() => (init_scaffold_fill(), scaffold_fill_exports));
|
|
51445
|
+
await mod.default(opts);
|
|
51446
|
+
});
|
|
51447
|
+
}
|
|
51448
|
+
|
|
50444
51449
|
// src/cli/index.ts
|
|
51450
|
+
init_config();
|
|
50445
51451
|
var PREFLIGHT_SKIP_FLAGS = /* @__PURE__ */ new Set(["--help", "-h", "--version", "-V"]);
|
|
50446
51452
|
var PREFLIGHT_SKIP_COMMANDS = /* @__PURE__ */ new Set(["cli"]);
|
|
50447
|
-
var LOCAL_PROJECT_COMMANDS = /* @__PURE__ */ new Set([
|
|
51453
|
+
var LOCAL_PROJECT_COMMANDS = /* @__PURE__ */ new Set([
|
|
51454
|
+
"ui:use-local",
|
|
51455
|
+
"ui:use-published",
|
|
51456
|
+
"knowledge:generate",
|
|
51457
|
+
"om:scaffold:system",
|
|
51458
|
+
"om:scaffold:resource",
|
|
51459
|
+
"om:scaffold:role",
|
|
51460
|
+
"om:scaffold:knowledge",
|
|
51461
|
+
"om:scaffold:fill"
|
|
51462
|
+
]);
|
|
50448
51463
|
function shouldSkipPreflight() {
|
|
50449
51464
|
const args = process.argv.slice(2);
|
|
50450
51465
|
if (args.length === 0) return true;
|
|
@@ -50563,6 +51578,7 @@ registerNoteCommands(program2);
|
|
|
50563
51578
|
registerUiCommands(program2);
|
|
50564
51579
|
registerDoctorCommand(program2);
|
|
50565
51580
|
registerCliCatalogCommand(program2);
|
|
51581
|
+
registerOmScaffoldCommands(program2);
|
|
50566
51582
|
program2.parse();
|
|
50567
51583
|
// Annotate the CommonJS export names for ESM import in node:
|
|
50568
51584
|
0 && (module.exports = {
|