@oml/cli 0.12.0 → 0.13.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -0
- package/out/cli.js +44 -2
- package/out/cli.js.map +1 -1
- package/out/platform.js +28 -0
- package/out/platform.js.map +1 -1
- package/package.json +4 -4
- package/src/cli.ts +48 -2
- package/src/platform.ts +30 -0
package/README.md
CHANGED
|
@@ -71,6 +71,7 @@ node ./packages/cli/bin/cli.js render -w . -md src/md -web build/web -owl build/
|
|
|
71
71
|
|
|
72
72
|
### Notes
|
|
73
73
|
|
|
74
|
+
- Pass `--debug` with any command (for example `oml login --debug`) to print stack traces and nested error causes.
|
|
74
75
|
- The CLI uses `OML_PLATFORM_API_KEY` when it is set. Otherwise, operational commands use the token from `oml login` for platform authorization.
|
|
75
76
|
- OAuth login refresh uses built-in Supabase defaults. Set `OML_SUPABASE_URL` or `OML_SUPABASE_ANON_KEY` to override them.
|
|
76
77
|
- GitHub device-flow login requires `OML_AUTH_GITHUB_CLIENT_ID`, unless you embed `DEFAULT_GITHUB_CLIENT_ID` in [`src/auth.ts`](./src/auth.ts).
|
package/out/cli.js
CHANGED
|
@@ -13,13 +13,19 @@ import { validateAction } from './commands/validate.js';
|
|
|
13
13
|
import { CliExitError } from './cli-error.js';
|
|
14
14
|
import { initializePlatform, disposePlatform, trackCommand } from './platform.js';
|
|
15
15
|
const __dirname = url.fileURLToPath(new URL('.', import.meta.url));
|
|
16
|
+
let debugEnabled = false;
|
|
16
17
|
export async function runCli(argv = process.argv) {
|
|
18
|
+
debugEnabled = hasDebugFlag(argv);
|
|
19
|
+
if (debugEnabled) {
|
|
20
|
+
process.env.OML_PLATFORM_DEBUG = '1';
|
|
21
|
+
}
|
|
17
22
|
const packagePath = path.resolve(__dirname, '..', 'package.json');
|
|
18
23
|
const packageContent = await fs.readFile(packagePath, 'utf-8');
|
|
19
24
|
const packageJson = JSON.parse(packageContent);
|
|
20
25
|
const updateCheck = notifyIfCliUpdateAvailable(packageJson.version);
|
|
21
26
|
const program = new Command();
|
|
22
27
|
program.version(packageJson.version);
|
|
28
|
+
program.option('--debug', 'print detailed error diagnostics (stack traces and nested causes)');
|
|
23
29
|
const authService = new OmlCliAuthService();
|
|
24
30
|
program
|
|
25
31
|
.command('login')
|
|
@@ -169,7 +175,9 @@ export async function runCli(argv = process.argv) {
|
|
|
169
175
|
}
|
|
170
176
|
export function reportCliError(error) {
|
|
171
177
|
const exitCode = error instanceof CliExitError ? error.exitCode : 1;
|
|
172
|
-
const message =
|
|
178
|
+
const message = debugEnabled
|
|
179
|
+
? formatDetailedError(error)
|
|
180
|
+
: (error instanceof Error ? error.message : String(error));
|
|
173
181
|
if (message) {
|
|
174
182
|
console.error(message);
|
|
175
183
|
}
|
|
@@ -189,8 +197,42 @@ function parseBooleanOption(value) {
|
|
|
189
197
|
throw new Error(`Expected a boolean value, received '${value}'.`);
|
|
190
198
|
}
|
|
191
199
|
process.on('unhandledRejection', (error) => {
|
|
192
|
-
const message =
|
|
200
|
+
const message = debugEnabled
|
|
201
|
+
? formatDetailedError(error)
|
|
202
|
+
: (error instanceof Error ? error.message : String(error));
|
|
193
203
|
console.error(chalk.red(message));
|
|
194
204
|
process.exitCode = 1;
|
|
195
205
|
});
|
|
206
|
+
function hasDebugFlag(argv) {
|
|
207
|
+
return argv.includes('--debug');
|
|
208
|
+
}
|
|
209
|
+
function formatDetailedError(error) {
|
|
210
|
+
if (!(error instanceof Error)) {
|
|
211
|
+
return String(error);
|
|
212
|
+
}
|
|
213
|
+
const lines = [];
|
|
214
|
+
let current = error;
|
|
215
|
+
let depth = 0;
|
|
216
|
+
while (current instanceof Error && depth < 8) {
|
|
217
|
+
const prefix = depth === 0 ? 'Error' : `Caused by (${depth})`;
|
|
218
|
+
const code = getErrorCode(current);
|
|
219
|
+
lines.push(`${prefix}: ${code ? `[${code}] ` : ''}${current.name}: ${current.message}`);
|
|
220
|
+
if (current.stack) {
|
|
221
|
+
lines.push(current.stack);
|
|
222
|
+
}
|
|
223
|
+
current = getErrorCause(current);
|
|
224
|
+
depth += 1;
|
|
225
|
+
}
|
|
226
|
+
if (current !== undefined && current !== null) {
|
|
227
|
+
lines.push(`Caused by (${depth}): ${String(current)}`);
|
|
228
|
+
}
|
|
229
|
+
return lines.join('\n');
|
|
230
|
+
}
|
|
231
|
+
function getErrorCode(error) {
|
|
232
|
+
const code = error.code;
|
|
233
|
+
return typeof code === 'string' ? code : undefined;
|
|
234
|
+
}
|
|
235
|
+
function getErrorCause(error) {
|
|
236
|
+
return error.cause;
|
|
237
|
+
}
|
|
196
238
|
//# sourceMappingURL=cli.js.map
|
package/out/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAAA,qDAAqD;AAErD,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACvC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,GAAG,MAAM,UAAU,CAAC;AAChC,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,0BAA0B,EAAE,MAAM,aAAa,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAElF,MAAM,SAAS,GAAG,GAAG,CAAC,aAAa,CAAC,IAAI,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAAA,qDAAqD;AAErD,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACvC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,GAAG,MAAM,UAAU,CAAC;AAChC,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,0BAA0B,EAAE,MAAM,aAAa,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAElF,MAAM,SAAS,GAAG,GAAG,CAAC,aAAa,CAAC,IAAI,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AACnE,IAAI,YAAY,GAAG,KAAK,CAAC;AAEzB,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,OAAiB,OAAO,CAAC,IAAI;IACtD,YAAY,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;IAClC,IAAI,YAAY,EAAE,CAAC;QACf,OAAO,CAAC,GAAG,CAAC,kBAAkB,GAAG,GAAG,CAAC;IACzC,CAAC;IACD,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,EAAE,cAAc,CAAC,CAAC;IAClE,MAAM,cAAc,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IAC/D,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAwB,CAAC;IACtE,MAAM,WAAW,GAAG,0BAA0B,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;IAEpE,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;IAC9B,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;IACrC,OAAO,CAAC,MAAM,CAAC,SAAS,EAAE,mEAAmE,CAAC,CAAC;IAC/F,MAAM,WAAW,GAAG,IAAI,iBAAiB,EAAE,CAAC;IAE5C,OAAO;SACF,OAAO,CAAC,OAAO,CAAC;SAChB,WAAW,CAAC,2CAA2C,CAAC;SACxD,MAAM,CAAC,KAAK,IAAI,EAAE;QACf,MAAM,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAChC,CAAC,CAAC,CAAC;IAEP,OAAO;SACF,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,kCAAkC,CAAC;SAC/C,MAAM,CAAC,KAAK,IAAI,EAAE;QACf,MAAM,WAAW,CAAC,MAAM,EAAE,CAAC;IAC/B,CAAC,CAAC,CAAC;IAEP,OAAO;SACF,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,mCAAmC,CAAC;SAChD,MAAM,CAAC,KAAK,IAAI,EAAE;QACf,MAAM,WAAW,CAAC,MAAM,EAAE,CAAC;IAC/B,CAAC,CAAC,CAAC;IAEP,OAAO;SACF,OAAO,CAAC,MAAM,CAAC;SACf,MAAM,CAAC,uBAAuB,EAAE,sDAAsD,EAAE,GAAG,CAAC;SAC5F,WAAW,CAAC,4DAA4D,CAAC;SACzE,MAAM,CAAC,KAAK,EAAE,GAAG,IAAe,EAAE,EAAE;QACjC,MAAM,IAAI,GAAG,YAAY,CAAC,UAAU,CAAC,CAAC;QACtC,IAAI,CAAC;YACD,MAAM,UAAU,CAAC,GAAG,IAAqC,CAAC,CAAC;YAC3D,IAAI,EAAE,CAAC;QACX,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACX,IAAI,CAAC,GAAG,CAAC,CAAC;YACV,MAAM,GAAG,CAAC;QACd,CAAC;IACL,CAAC,CAAC,CAAC;IAEP,OAAO;SACF,OAAO,CAAC,QAAQ,CAAC;SACjB,MAAM,CAAC,oCAAoC,EAAE,+EAA+E,CAAC;SAC7H,cAAc,CAAC,0BAA0B,EAAE,4CAA4C,CAAC;SACxF,cAAc,CAAC,6BAA6B,EAAE,qDAAqD,CAAC;SACpG,MAAM,CAAC,mBAAmB,EAAE,4DAA4D,CAAC;SACzF,MAAM,CAAC,oBAAoB,EAAE,0EAA0E,EAAE,KAAK,CAAC;SAC/G,MAAM,CAAC,2BAA2B,EAAE,mHAAmH,CAAC;SACxJ,MAAM,CAAC,SAAS,EAAE,yCAAyC,CAAC;SAC5D,MAAM,CAAC,QAAQ,EAAE,yEAAyE,CAAC;SAC3F,MAAM,CAAC,UAAU,EAAE,2EAA2E,CAAC;SAC/F,MAAM,CAAC,uCAAuC,EAAE,+CAA+C,EAAE,kBAAkB,EAAE,IAAI,CAAC;SAC1H,MAAM,CAAC,4BAA4B,EAAE,8CAA8C,EAAE,kBAAkB,EAAE,IAAI,CAAC;SAC9G,MAAM,CAAC,uBAAuB,EAAE,8CAA8C,EAAE,kBAAkB,EAAE,KAAK,CAAC;SAC1G,WAAW,CAAC,4IAA4I,CAAC;SACzJ,MAAM,CAAC,KAAK,EAAE,GAAG,IAAe,EAAE,EAAE;QACjC,MAAM,IAAI,GAAG,YAAY,CAAC,YAAY,CAAC,CAAC;QACxC,IAAI,CAAC;YACD,MAAM,YAAY,CAAC,GAAG,IAAuC,CAAC,CAAC;YAC/D,IAAI,EAAE,CAAC;QACX,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACX,IAAI,CAAC,GAAG,CAAC,CAAC;YACV,MAAM,GAAG,CAAC;QACd,CAAC;IACL,CAAC,CAAC,CAAC;IAEP,OAAO;SACF,OAAO,CAAC,SAAS,CAAC;SAClB,MAAM,CAAC,uBAAuB,EAAE,sDAAsD,EAAE,GAAG,CAAC;SAC5F,MAAM,CAAC,mBAAmB,EAAE,6CAA6C,CAAC;SAC1E,MAAM,CAAC,oBAAoB,EAAE,gDAAgD,EAAE,KAAK,CAAC;SACrF,MAAM,CAAC,SAAS,EAAE,uCAAuC,CAAC;SAC1D,MAAM,CAAC,QAAQ,EAAE,wDAAwD,CAAC;SAC1E,MAAM,CAAC,UAAU,EAAE,2EAA2E,CAAC;SAC/F,WAAW,CAAC,6DAA6D,CAAC;SAC1E,MAAM,CAAC,KAAK,EAAE,GAAG,IAAe,EAAE,EAAE;QACjC,MAAM,IAAI,GAAG,YAAY,CAAC,aAAa,CAAC,CAAC;QACzC,IAAI,CAAC;YACD,MAAM,aAAa,CAAC,GAAG,IAAwC,CAAC,CAAC;YACjE,IAAI,EAAE,CAAC;QACX,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACX,IAAI,CAAC,GAAG,CAAC,CAAC;YACV,MAAM,GAAG,CAAC;QACd,CAAC;IACL,CAAC,CAAC,CAAC;IAEP,OAAO;SACF,OAAO,CAAC,QAAQ,CAAC;SACjB,MAAM,CAAC,uBAAuB,EAAE,sDAAsD,EAAE,GAAG,CAAC;SAC5F,MAAM,CAAC,mBAAmB,EAAE,4DAA4D,CAAC;SACzF,MAAM,CAAC,oBAAoB,EAAE,mEAAmE,EAAE,KAAK,CAAC;SACxG,MAAM,CAAC,SAAS,EAAE,uCAAuC,CAAC;SAC1D,MAAM,CAAC,QAAQ,EAAE,kEAAkE,CAAC;SACpF,MAAM,CAAC,UAAU,EAAE,2EAA2E,CAAC;SAC/F,MAAM,CAAC,kBAAkB,EAAE,yEAAyE,CAAC;SACrG,MAAM,CAAC,uCAAuC,EAAE,+CAA+C,EAAE,kBAAkB,EAAE,IAAI,CAAC;SAC1H,MAAM,CAAC,4BAA4B,EAAE,8CAA8C,EAAE,kBAAkB,EAAE,IAAI,CAAC;SAC9G,MAAM,CAAC,uBAAuB,EAAE,8CAA8C,EAAE,kBAAkB,EAAE,KAAK,CAAC;SAC1G,WAAW,CAAC,yFAAyF,CAAC;SACtG,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;QACnB,MAAM,IAAI,GAAG,YAAY,CAAC,YAAY,CAAC,CAAC;QACxC,IAAI,CAAC;YACD,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,MAAM,CAAC,sBAAsB,CAAC,CAAC;YAC9D,MAAM,YAAY,CAAC,IAAI,CAAC,CAAC;YACzB,IAAI,EAAE,CAAC;QACX,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACX,IAAI,CAAC,GAAG,CAAC,CAAC;YACV,MAAM,GAAG,CAAC;QACd,CAAC;IACL,CAAC,CAAC,CAAC;IAEP,OAAO;SACF,OAAO,CAAC,UAAU,CAAC;SACnB,cAAc,CAAC,0BAA0B,EAAE,0DAA0D,CAAC;SACtG,MAAM,CAAC,uBAAuB,EAAE,sDAAsD,EAAE,GAAG,CAAC;SAC5F,MAAM,CAAC,mBAAmB,EAAE,4DAA4D,CAAC;SACzF,MAAM,CAAC,oBAAoB,EAAE,mEAAmE,EAAE,KAAK,CAAC;SACxG,MAAM,CAAC,SAAS,EAAE,uCAAuC,CAAC;SAC1D,MAAM,CAAC,QAAQ,EAAE,kEAAkE,CAAC;SACpF,MAAM,CAAC,UAAU,EAAE,2EAA2E,CAAC;SAC/F,MAAM,CAAC,uCAAuC,EAAE,+CAA+C,EAAE,kBAAkB,EAAE,IAAI,CAAC;SAC1H,MAAM,CAAC,4BAA4B,EAAE,8CAA8C,EAAE,kBAAkB,EAAE,IAAI,CAAC;SAC9G,MAAM,CAAC,uBAAuB,EAAE,8CAA8C,EAAE,kBAAkB,EAAE,KAAK,CAAC;SAC1G,WAAW,CAAC,wHAAwH,CAAC;SACrI,MAAM,CAAC,KAAK,EAAE,GAAG,IAAe,EAAE,EAAE;QACjC,MAAM,IAAI,GAAG,YAAY,CAAC,cAAc,CAAC,CAAC;QAC1C,IAAI,CAAC;YACD,MAAM,cAAc,CAAC,GAAG,IAAyC,CAAC,CAAC;YACnE,IAAI,EAAE,CAAC;QACX,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACX,IAAI,CAAC,GAAG,CAAC,CAAC;YACV,MAAM,GAAG,CAAC;QACd,CAAC;IACL,CAAC,CAAC,CAAC;IAEP,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,EAAE;QAC5D,IAAI,aAAa,CAAC,IAAI,EAAE,KAAK,OAAO,IAAI,aAAa,CAAC,IAAI,EAAE,KAAK,QAAQ,IAAI,aAAa,CAAC,IAAI,EAAE,KAAK,QAAQ,EAAE,CAAC;YAC7G,OAAO;QACX,CAAC;QACD,kEAAkE;QAClE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,oBAAoB,EAAE,CAAC;YACpC,MAAM,WAAW,CAAC,mBAAmB,CAAC,SAAS,CAAC,CAAC;QACrD,CAAC;QACD,MAAM,kBAAkB,CAAC,WAAW,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC;QACD,MAAM,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IACnC,CAAC;YAAS,CAAC;QACP,MAAM,eAAe,EAAE,CAAC;IAC5B,CAAC;IACD,MAAM,WAAW,CAAC;AACtB,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,KAAc;IACzC,MAAM,QAAQ,GAAG,KAAK,YAAY,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;IACpE,MAAM,OAAO,GAAG,YAAY;QACxB,CAAC,CAAC,mBAAmB,CAAC,KAAK,CAAC;QAC5B,CAAC,CAAC,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;IAC/D,IAAI,OAAO,EAAE,CAAC;QACV,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC3B,CAAC;IACD,OAAO,QAAQ,CAAC;AACpB,CAAC;AAED,SAAS,kBAAkB,CAAC,KAAuB;IAC/C,IAAI,OAAO,KAAK,KAAK,SAAS,EAAE,CAAC;QAC7B,OAAO,KAAK,CAAC;IACjB,CAAC;IACD,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC9C,IAAI,UAAU,KAAK,MAAM,EAAE,CAAC;QACxB,OAAO,IAAI,CAAC;IAChB,CAAC;IACD,IAAI,UAAU,KAAK,OAAO,EAAE,CAAC;QACzB,OAAO,KAAK,CAAC;IACjB,CAAC;IACD,MAAM,IAAI,KAAK,CAAC,uCAAuC,KAAK,IAAI,CAAC,CAAC;AACtE,CAAC;AAED,OAAO,CAAC,EAAE,CAAC,oBAAoB,EAAE,CAAC,KAAK,EAAE,EAAE;IACvC,MAAM,OAAO,GAAG,YAAY;QACxB,CAAC,CAAC,mBAAmB,CAAC,KAAK,CAAC;QAC5B,CAAC,CAAC,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;IAC/D,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;IAClC,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;AACzB,CAAC,CAAC,CAAC;AAEH,SAAS,YAAY,CAAC,IAAc;IAChC,OAAO,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;AACpC,CAAC;AAED,SAAS,mBAAmB,CAAC,KAAc;IACvC,IAAI,CAAC,CAAC,KAAK,YAAY,KAAK,CAAC,EAAE,CAAC;QAC5B,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;IACzB,CAAC;IACD,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,IAAI,OAAO,GAAY,KAAK,CAAC;IAC7B,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,OAAO,OAAO,YAAY,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;QAC3C,MAAM,MAAM,GAAG,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,cAAc,KAAK,GAAG,CAAC;QAC9D,MAAM,IAAI,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;QACnC,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,OAAO,CAAC,IAAI,KAAK,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;QACxF,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;YAChB,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAC9B,CAAC;QACD,OAAO,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC;QACjC,KAAK,IAAI,CAAC,CAAC;IACf,CAAC;IACD,IAAI,OAAO,KAAK,SAAS,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;QAC5C,KAAK,CAAC,IAAI,CAAC,cAAc,KAAK,MAAM,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAC3D,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC5B,CAAC;AAED,SAAS,YAAY,CAAC,KAAY;IAC9B,MAAM,IAAI,GAAI,KAAoC,CAAC,IAAI,CAAC;IACxD,OAAO,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;AACvD,CAAC;AAED,SAAS,aAAa,CAAC,KAAY;IAC/B,OAAQ,KAAqC,CAAC,KAAK,CAAC;AACxD,CAAC"}
|
package/out/platform.js
CHANGED
|
@@ -10,6 +10,7 @@ import { OmlClient, FileStorageAdapter, installNodeShutdownHandlers } from '@oml
|
|
|
10
10
|
import chalk from 'chalk';
|
|
11
11
|
import { DEFAULT_API_BASE_URL } from './platform-constants.js';
|
|
12
12
|
const API_BASE_URL_ENV = 'OML_PLATFORM_API_URL';
|
|
13
|
+
const PLATFORM_DEBUG_ENV = 'OML_PLATFORM_DEBUG';
|
|
13
14
|
let client = null;
|
|
14
15
|
let shutdownHandle = null;
|
|
15
16
|
/**
|
|
@@ -81,8 +82,35 @@ export function trackCommand(featureId, metadata) {
|
|
|
81
82
|
function toGenericPlatformErrorMessage(error) {
|
|
82
83
|
const message = error instanceof Error ? error.message.trim() : String(error).trim();
|
|
83
84
|
if (!message || message === 'fetch failed') {
|
|
85
|
+
if (isDebugEnabled()) {
|
|
86
|
+
const detailed = formatErrorChain(error);
|
|
87
|
+
if (detailed) {
|
|
88
|
+
return detailed;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
84
91
|
return 'Check your network connection or sign in again with \'oml login\'.';
|
|
85
92
|
}
|
|
86
93
|
return message;
|
|
87
94
|
}
|
|
95
|
+
function isDebugEnabled() {
|
|
96
|
+
return process.env[PLATFORM_DEBUG_ENV] === '1';
|
|
97
|
+
}
|
|
98
|
+
function formatErrorChain(error) {
|
|
99
|
+
if (!(error instanceof Error)) {
|
|
100
|
+
return String(error);
|
|
101
|
+
}
|
|
102
|
+
const parts = [];
|
|
103
|
+
let current = error;
|
|
104
|
+
let depth = 0;
|
|
105
|
+
while (current instanceof Error && depth < 8) {
|
|
106
|
+
const code = current.code;
|
|
107
|
+
parts.push(code ? `${current.name}[${String(code)}]: ${current.message}` : `${current.name}: ${current.message}`);
|
|
108
|
+
current = current.cause;
|
|
109
|
+
depth += 1;
|
|
110
|
+
}
|
|
111
|
+
if (current !== undefined && current !== null) {
|
|
112
|
+
parts.push(String(current));
|
|
113
|
+
}
|
|
114
|
+
return parts.join(' | ');
|
|
115
|
+
}
|
|
88
116
|
//# sourceMappingURL=platform.js.map
|
package/out/platform.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"platform.js","sourceRoot":"","sources":["../src/platform.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"platform.js","sourceRoot":"","sources":["../src/platform.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@oml/cli",
|
|
3
3
|
"description": "The cli specific package",
|
|
4
|
-
"version": "0.
|
|
4
|
+
"version": "0.13.0",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"engines": {
|
|
7
7
|
"node": ">=20.10.0",
|
|
@@ -21,9 +21,9 @@
|
|
|
21
21
|
"build:clean": "npm run clean && npm run build"
|
|
22
22
|
},
|
|
23
23
|
"dependencies": {
|
|
24
|
-
"@oml/language": "0.
|
|
25
|
-
"@oml/markdown": "0.
|
|
26
|
-
"@oml/owl": "0.
|
|
24
|
+
"@oml/language": "0.13.0",
|
|
25
|
+
"@oml/markdown": "0.13.0",
|
|
26
|
+
"@oml/owl": "0.13.0",
|
|
27
27
|
"@oml/platform": "^0.4.0",
|
|
28
28
|
"@oml/reasoner": "^0.3.0",
|
|
29
29
|
"chalk": "~5.3.0",
|
package/src/cli.ts
CHANGED
|
@@ -15,8 +15,13 @@ import { CliExitError } from './cli-error.js';
|
|
|
15
15
|
import { initializePlatform, disposePlatform, trackCommand } from './platform.js';
|
|
16
16
|
|
|
17
17
|
const __dirname = url.fileURLToPath(new URL('.', import.meta.url));
|
|
18
|
+
let debugEnabled = false;
|
|
18
19
|
|
|
19
20
|
export async function runCli(argv: string[] = process.argv): Promise<void> {
|
|
21
|
+
debugEnabled = hasDebugFlag(argv);
|
|
22
|
+
if (debugEnabled) {
|
|
23
|
+
process.env.OML_PLATFORM_DEBUG = '1';
|
|
24
|
+
}
|
|
20
25
|
const packagePath = path.resolve(__dirname, '..', 'package.json');
|
|
21
26
|
const packageContent = await fs.readFile(packagePath, 'utf-8');
|
|
22
27
|
const packageJson = JSON.parse(packageContent) as { version: string };
|
|
@@ -24,6 +29,7 @@ export async function runCli(argv: string[] = process.argv): Promise<void> {
|
|
|
24
29
|
|
|
25
30
|
const program = new Command();
|
|
26
31
|
program.version(packageJson.version);
|
|
32
|
+
program.option('--debug', 'print detailed error diagnostics (stack traces and nested causes)');
|
|
27
33
|
const authService = new OmlCliAuthService();
|
|
28
34
|
|
|
29
35
|
program
|
|
@@ -178,7 +184,9 @@ export async function runCli(argv: string[] = process.argv): Promise<void> {
|
|
|
178
184
|
|
|
179
185
|
export function reportCliError(error: unknown): number {
|
|
180
186
|
const exitCode = error instanceof CliExitError ? error.exitCode : 1;
|
|
181
|
-
const message =
|
|
187
|
+
const message = debugEnabled
|
|
188
|
+
? formatDetailedError(error)
|
|
189
|
+
: (error instanceof Error ? error.message : String(error));
|
|
182
190
|
if (message) {
|
|
183
191
|
console.error(message);
|
|
184
192
|
}
|
|
@@ -200,7 +208,45 @@ function parseBooleanOption(value: string | boolean): boolean {
|
|
|
200
208
|
}
|
|
201
209
|
|
|
202
210
|
process.on('unhandledRejection', (error) => {
|
|
203
|
-
const message =
|
|
211
|
+
const message = debugEnabled
|
|
212
|
+
? formatDetailedError(error)
|
|
213
|
+
: (error instanceof Error ? error.message : String(error));
|
|
204
214
|
console.error(chalk.red(message));
|
|
205
215
|
process.exitCode = 1;
|
|
206
216
|
});
|
|
217
|
+
|
|
218
|
+
function hasDebugFlag(argv: string[]): boolean {
|
|
219
|
+
return argv.includes('--debug');
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
function formatDetailedError(error: unknown): string {
|
|
223
|
+
if (!(error instanceof Error)) {
|
|
224
|
+
return String(error);
|
|
225
|
+
}
|
|
226
|
+
const lines: string[] = [];
|
|
227
|
+
let current: unknown = error;
|
|
228
|
+
let depth = 0;
|
|
229
|
+
while (current instanceof Error && depth < 8) {
|
|
230
|
+
const prefix = depth === 0 ? 'Error' : `Caused by (${depth})`;
|
|
231
|
+
const code = getErrorCode(current);
|
|
232
|
+
lines.push(`${prefix}: ${code ? `[${code}] ` : ''}${current.name}: ${current.message}`);
|
|
233
|
+
if (current.stack) {
|
|
234
|
+
lines.push(current.stack);
|
|
235
|
+
}
|
|
236
|
+
current = getErrorCause(current);
|
|
237
|
+
depth += 1;
|
|
238
|
+
}
|
|
239
|
+
if (current !== undefined && current !== null) {
|
|
240
|
+
lines.push(`Caused by (${depth}): ${String(current)}`);
|
|
241
|
+
}
|
|
242
|
+
return lines.join('\n');
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
function getErrorCode(error: Error): string | undefined {
|
|
246
|
+
const code = (error as Error & { code?: unknown }).code;
|
|
247
|
+
return typeof code === 'string' ? code : undefined;
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
function getErrorCause(error: Error): unknown {
|
|
251
|
+
return (error as Error & { cause?: unknown }).cause;
|
|
252
|
+
}
|
package/src/platform.ts
CHANGED
|
@@ -15,6 +15,7 @@ import chalk from 'chalk';
|
|
|
15
15
|
import { DEFAULT_API_BASE_URL } from './platform-constants.js';
|
|
16
16
|
import { OmlCliAuthService } from './auth.js';
|
|
17
17
|
const API_BASE_URL_ENV = 'OML_PLATFORM_API_URL';
|
|
18
|
+
const PLATFORM_DEBUG_ENV = 'OML_PLATFORM_DEBUG';
|
|
18
19
|
|
|
19
20
|
let client: OmlClient | null = null;
|
|
20
21
|
let shutdownHandle: NodeShutdownHandle | null = null;
|
|
@@ -105,7 +106,36 @@ export function trackCommand(
|
|
|
105
106
|
function toGenericPlatformErrorMessage(error: unknown): string {
|
|
106
107
|
const message = error instanceof Error ? error.message.trim() : String(error).trim();
|
|
107
108
|
if (!message || message === 'fetch failed') {
|
|
109
|
+
if (isDebugEnabled()) {
|
|
110
|
+
const detailed = formatErrorChain(error);
|
|
111
|
+
if (detailed) {
|
|
112
|
+
return detailed;
|
|
113
|
+
}
|
|
114
|
+
}
|
|
108
115
|
return 'Check your network connection or sign in again with \'oml login\'.';
|
|
109
116
|
}
|
|
110
117
|
return message;
|
|
111
118
|
}
|
|
119
|
+
|
|
120
|
+
function isDebugEnabled(): boolean {
|
|
121
|
+
return process.env[PLATFORM_DEBUG_ENV] === '1';
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
function formatErrorChain(error: unknown): string {
|
|
125
|
+
if (!(error instanceof Error)) {
|
|
126
|
+
return String(error);
|
|
127
|
+
}
|
|
128
|
+
const parts: string[] = [];
|
|
129
|
+
let current: unknown = error;
|
|
130
|
+
let depth = 0;
|
|
131
|
+
while (current instanceof Error && depth < 8) {
|
|
132
|
+
const code = (current as Error & { code?: unknown }).code;
|
|
133
|
+
parts.push(code ? `${current.name}[${String(code)}]: ${current.message}` : `${current.name}: ${current.message}`);
|
|
134
|
+
current = (current as Error & { cause?: unknown }).cause;
|
|
135
|
+
depth += 1;
|
|
136
|
+
}
|
|
137
|
+
if (current !== undefined && current !== null) {
|
|
138
|
+
parts.push(String(current));
|
|
139
|
+
}
|
|
140
|
+
return parts.join(' | ');
|
|
141
|
+
}
|