@workflow/cli 4.0.1-beta.9 → 4.1.0-beta.52
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/bin/run.js +25 -0
- package/dist/commands/cancel.d.ts +3 -0
- package/dist/commands/cancel.d.ts.map +1 -1
- package/dist/commands/cancel.js +3 -0
- package/dist/commands/cancel.js.map +1 -1
- package/dist/commands/health.d.ts +24 -0
- package/dist/commands/health.d.ts.map +1 -0
- package/dist/commands/health.js +313 -0
- package/dist/commands/health.js.map +1 -0
- package/dist/commands/inspect.d.ts +3 -0
- package/dist/commands/inspect.d.ts.map +1 -1
- package/dist/commands/inspect.js +13 -5
- package/dist/commands/inspect.js.map +1 -1
- package/dist/commands/start.d.ts +3 -0
- package/dist/commands/start.d.ts.map +1 -1
- package/dist/commands/start.js +3 -0
- package/dist/commands/start.js.map +1 -1
- package/dist/commands/web.d.ts +3 -0
- package/dist/commands/web.d.ts.map +1 -1
- package/dist/commands/web.js +4 -2
- package/dist/commands/web.js.map +1 -1
- package/dist/lib/config/types.d.ts +1 -0
- package/dist/lib/config/types.d.ts.map +1 -1
- package/dist/lib/config/workflow-config.d.ts.map +1 -1
- package/dist/lib/config/workflow-config.js +11 -1
- package/dist/lib/config/workflow-config.js.map +1 -1
- package/dist/lib/inspect/env.d.ts +4 -2
- package/dist/lib/inspect/env.d.ts.map +1 -1
- package/dist/lib/inspect/env.js +75 -32
- package/dist/lib/inspect/env.js.map +1 -1
- package/dist/lib/inspect/flags.d.ts +3 -0
- package/dist/lib/inspect/flags.d.ts.map +1 -1
- package/dist/lib/inspect/flags.js +29 -4
- package/dist/lib/inspect/flags.js.map +1 -1
- package/dist/lib/inspect/output.d.ts +4 -18
- package/dist/lib/inspect/output.d.ts.map +1 -1
- package/dist/lib/inspect/output.js +55 -141
- package/dist/lib/inspect/output.js.map +1 -1
- package/dist/lib/inspect/pagination.d.ts +4 -0
- package/dist/lib/inspect/pagination.d.ts.map +1 -1
- package/dist/lib/inspect/pagination.js +11 -5
- package/dist/lib/inspect/pagination.js.map +1 -1
- package/dist/lib/inspect/run.d.ts +1 -1
- package/dist/lib/inspect/run.d.ts.map +1 -1
- package/dist/lib/inspect/run.js +5 -3
- package/dist/lib/inspect/run.js.map +1 -1
- package/dist/lib/inspect/setup.d.ts +7 -1
- package/dist/lib/inspect/setup.d.ts.map +1 -1
- package/dist/lib/inspect/setup.js +41 -7
- package/dist/lib/inspect/setup.js.map +1 -1
- package/dist/lib/inspect/stream.d.ts +2 -2
- package/dist/lib/inspect/stream.d.ts.map +1 -1
- package/dist/lib/inspect/stream.js +8 -5
- package/dist/lib/inspect/stream.js.map +1 -1
- package/dist/lib/inspect/terminal-utils.d.ts.map +1 -1
- package/dist/lib/inspect/terminal-utils.js +0 -1
- package/dist/lib/inspect/terminal-utils.js.map +1 -1
- package/dist/lib/inspect/web.d.ts +6 -4
- package/dist/lib/inspect/web.d.ts.map +1 -1
- package/dist/lib/inspect/web.js +50 -70
- package/dist/lib/inspect/web.js.map +1 -1
- package/dist/lib/update-check.d.ts +21 -0
- package/dist/lib/update-check.d.ts.map +1 -0
- package/dist/lib/update-check.js +229 -0
- package/dist/lib/update-check.js.map +1 -0
- package/package.json +26 -25
package/bin/run.js
CHANGED
|
@@ -1,5 +1,30 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
|
|
3
|
+
import { existsSync } from 'node:fs';
|
|
4
|
+
import { resolve } from 'node:path';
|
|
3
5
|
import { execute } from '@oclif/core';
|
|
6
|
+
import { config } from 'dotenv';
|
|
7
|
+
|
|
8
|
+
// Load .env file if it exists
|
|
9
|
+
const envPath = resolve(process.cwd(), '.env');
|
|
10
|
+
if (existsSync(envPath)) {
|
|
11
|
+
const envResult = config({ path: envPath });
|
|
12
|
+
if (envResult.error && envResult.error.code !== 'ENOENT') {
|
|
13
|
+
console.warn(
|
|
14
|
+
`Warning: Failed to load .env file: ${envResult.error.message}`
|
|
15
|
+
);
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
// Load .env.local file if it exists (overrides .env)
|
|
20
|
+
const envLocalPath = resolve(process.cwd(), '.env.local');
|
|
21
|
+
if (existsSync(envLocalPath)) {
|
|
22
|
+
const envLocalResult = config({ path: envLocalPath, override: true });
|
|
23
|
+
if (envLocalResult.error && envLocalResult.error.code !== 'ENOENT') {
|
|
24
|
+
console.warn(
|
|
25
|
+
`Warning: Failed to load .env.local file: ${envLocalResult.error.message}`
|
|
26
|
+
);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
4
29
|
|
|
5
30
|
await execute({ type: 'esm', development: false, dir: import.meta.url });
|
|
@@ -17,9 +17,12 @@ export default class Cancel extends BaseCommand {
|
|
|
17
17
|
team: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
18
18
|
env: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
19
19
|
web: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
20
|
+
webPort: import("@oclif/core/interfaces").OptionFlag<number, import("@oclif/core/interfaces").CustomOptions>;
|
|
20
21
|
noBrowser: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
22
|
+
localUi: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
21
23
|
sort: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
22
24
|
limit: import("@oclif/core/interfaces").OptionFlag<number, import("@oclif/core/interfaces").CustomOptions>;
|
|
25
|
+
interactive: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
23
26
|
};
|
|
24
27
|
run(): Promise<void>;
|
|
25
28
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cancel.d.ts","sourceRoot":"","sources":["../../src/commands/cancel.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAMzC,MAAM,CAAC,OAAO,OAAO,MAAO,SAAQ,WAAW;IAC7C,MAAM,CAAC,WAAW,SAAuB;IAEzC,MAAM,CAAC,OAAO,WAAS;IAEvB,MAAM,CAAC,QAAQ,WAA0D;IAEnE,KAAK,CAAC,KAAK,EAAE,GAAG;IAOtB,MAAM,CAAC,IAAI;;MAKA;IAEX,MAAM,CAAC,KAAK
|
|
1
|
+
{"version":3,"file":"cancel.d.ts","sourceRoot":"","sources":["../../src/commands/cancel.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAMzC,MAAM,CAAC,OAAO,OAAO,MAAO,SAAQ,WAAW;IAC7C,MAAM,CAAC,WAAW,SAAuB;IAEzC,MAAM,CAAC,OAAO,WAAS;IAEvB,MAAM,CAAC,QAAQ,WAA0D;IAEnE,KAAK,CAAC,KAAK,EAAE,GAAG;IAOtB,MAAM,CAAC,IAAI;;MAKA;IAEX,MAAM,CAAC,KAAK;;;;;;;;;;;;;;;;MAAY;IAEX,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAYlC"}
|
package/dist/commands/cancel.js
CHANGED
|
@@ -24,6 +24,9 @@ export default class Cancel extends BaseCommand {
|
|
|
24
24
|
async run() {
|
|
25
25
|
const { flags, args } = await this.parse(Cancel);
|
|
26
26
|
const world = await setupCliWorld(flags, this.config.version);
|
|
27
|
+
if (!world) {
|
|
28
|
+
throw new Error('Failed to connect to backend. Check your configuration.');
|
|
29
|
+
}
|
|
27
30
|
await cancelRun(world, args.runId);
|
|
28
31
|
}
|
|
29
32
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cancel.js","sourceRoot":"","sources":["../../src/commands/cancel.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AACnC,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAExD,MAAM,CAAC,OAAO,OAAO,MAAO,SAAQ,WAAW;IAC7C,MAAM,CAAC,WAAW,GAAG,mBAAmB,CAAC;IAEzC,MAAM,CAAC,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC;IAEvB,MAAM,CAAC,QAAQ,GAAG,CAAC,4BAA4B,EAAE,sBAAsB,CAAC,CAAC;IAEzE,KAAK,CAAC,KAAK,CAAC,KAAU;QACpB,IAAI,cAAc,CAAC,YAAY,EAAE,CAAC;YAChC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACvB,CAAC;QACD,MAAM,KAAK,CAAC;IACd,CAAC;IAED,MAAM,CAAC,IAAI,GAAG;QACZ,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC;YACjB,WAAW,EAAE,0BAA0B;YACvC,QAAQ,EAAE,IAAI;SACf,CAAC;KACM,CAAC;IAEX,MAAM,CAAC,KAAK,GAAG,QAAQ,CAAC;IAEjB,KAAK,CAAC,GAAG;QACd,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAEjD,MAAM,KAAK,GAAG,MAAM,aAAa,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"cancel.js","sourceRoot":"","sources":["../../src/commands/cancel.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AACnC,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAExD,MAAM,CAAC,OAAO,OAAO,MAAO,SAAQ,WAAW;IAC7C,MAAM,CAAC,WAAW,GAAG,mBAAmB,CAAC;IAEzC,MAAM,CAAC,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC;IAEvB,MAAM,CAAC,QAAQ,GAAG,CAAC,4BAA4B,EAAE,sBAAsB,CAAC,CAAC;IAEzE,KAAK,CAAC,KAAK,CAAC,KAAU;QACpB,IAAI,cAAc,CAAC,YAAY,EAAE,CAAC;YAChC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACvB,CAAC;QACD,MAAM,KAAK,CAAC;IACd,CAAC;IAED,MAAM,CAAC,IAAI,GAAG;QACZ,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC;YACjB,WAAW,EAAE,0BAA0B;YACvC,QAAQ,EAAE,IAAI;SACf,CAAC;KACM,CAAC;IAEX,MAAM,CAAC,KAAK,GAAG,QAAQ,CAAC;IAEjB,KAAK,CAAC,GAAG;QACd,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAEjD,MAAM,KAAK,GAAG,MAAM,aAAa,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAC9D,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,MAAM,IAAI,KAAK,CACb,yDAAyD,CAC1D,CAAC;QACJ,CAAC;QAED,MAAM,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;IACrC,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { BaseCommand } from '../base.js';
|
|
2
|
+
export default class Health extends BaseCommand {
|
|
3
|
+
static description: string;
|
|
4
|
+
static examples: string[];
|
|
5
|
+
static flags: {
|
|
6
|
+
readonly endpoint: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
7
|
+
readonly timeout: import("@oclif/core/interfaces").OptionFlag<number, import("@oclif/core/interfaces").CustomOptions>;
|
|
8
|
+
readonly port: import("@oclif/core/interfaces").OptionFlag<number | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
9
|
+
readonly verbose: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
10
|
+
readonly json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
11
|
+
readonly backend: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
12
|
+
readonly authToken: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
13
|
+
readonly project: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
14
|
+
readonly team: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
15
|
+
readonly env: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
16
|
+
};
|
|
17
|
+
catch(error: any): Promise<void>;
|
|
18
|
+
run(): Promise<void>;
|
|
19
|
+
private verifyLocalServer;
|
|
20
|
+
private checkEndpoints;
|
|
21
|
+
private checkSingleEndpoint;
|
|
22
|
+
private outputResults;
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=health.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"health.d.ts","sourceRoot":"","sources":["../../src/commands/health.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AA+MzC,MAAM,CAAC,OAAO,OAAO,MAAO,SAAQ,WAAW;IAC7C,MAAM,CAAC,WAAW,SAC2D;IAE7E,MAAM,CAAC,QAAQ,WAKb;IAEF,MAAM,CAAC,KAAK;;;;;;;;;;;MAkCD;IAEL,KAAK,CAAC,KAAK,EAAE,GAAG;IAIT,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;YA0DnB,iBAAiB;YAiCjB,cAAc;YA2Bd,mBAAmB;IAyCjC,OAAO,CAAC,aAAa;CAetB"}
|
|
@@ -0,0 +1,313 @@
|
|
|
1
|
+
import { Flags } from '@oclif/core';
|
|
2
|
+
import { VERCEL_403_ERROR_MESSAGE } from '@workflow/errors';
|
|
3
|
+
import { getWorkflowPort } from '@workflow/utils/get-port';
|
|
4
|
+
import chalk from 'chalk';
|
|
5
|
+
import { BaseCommand } from '../base.js';
|
|
6
|
+
import { LOGGING_CONFIG, logger } from '../lib/config/log.js';
|
|
7
|
+
import { cliFlags } from '../lib/inspect/flags.js';
|
|
8
|
+
import { setupCliWorld } from '../lib/inspect/setup.js';
|
|
9
|
+
function formatHealthyResult(endpoint, latencyMs) {
|
|
10
|
+
return (chalk.green(` ✓ ${endpoint} endpoint is healthy`) +
|
|
11
|
+
chalk.gray(` (${latencyMs}ms)`));
|
|
12
|
+
}
|
|
13
|
+
function formatUnhealthyResult(endpoint, error) {
|
|
14
|
+
const errorSuffix = error ? chalk.gray(` - ${error}`) : '';
|
|
15
|
+
return chalk.red(` ✗ ${endpoint} endpoint is unhealthy`) + errorSuffix;
|
|
16
|
+
}
|
|
17
|
+
function getEndpointsToCheck(endpointFlag) {
|
|
18
|
+
return endpointFlag === 'both'
|
|
19
|
+
? ['workflow', 'step']
|
|
20
|
+
: [endpointFlag];
|
|
21
|
+
}
|
|
22
|
+
function printSummary(results, backend) {
|
|
23
|
+
const allHealthy = results.every((r) => r.healthy);
|
|
24
|
+
logger.log('');
|
|
25
|
+
if (allHealthy) {
|
|
26
|
+
logger.log(chalk.green('All endpoints are healthy!'));
|
|
27
|
+
}
|
|
28
|
+
else {
|
|
29
|
+
const unhealthyCount = results.filter((r) => !r.healthy).length;
|
|
30
|
+
logger.log(chalk.red(`${unhealthyCount} of ${results.length} endpoint(s) unhealthy`));
|
|
31
|
+
// Provide helpful hints for common issues
|
|
32
|
+
if (backend === 'local' || backend === '@workflow/world-local') {
|
|
33
|
+
logger.log('');
|
|
34
|
+
logger.log(chalk.yellow('Hint: For local health checks, ensure:'));
|
|
35
|
+
logger.log(chalk.yellow(' 1. Your development server is running'));
|
|
36
|
+
logger.log(chalk.yellow(' 2. The server is accessible at the configured URL'));
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
function logPortDetectionDebug(explicitPort, detectedPort) {
|
|
41
|
+
logger.debug(`Explicit port flag: ${explicitPort || '(not set)'}`);
|
|
42
|
+
logger.debug(`PORT env: ${process.env.PORT || '(not set)'}`);
|
|
43
|
+
logger.debug(`WORKFLOW_LOCAL_BASE_URL env: ${process.env.WORKFLOW_LOCAL_BASE_URL || '(not set)'}`);
|
|
44
|
+
logger.debug(`Detected/resolved port: ${detectedPort || '(none)'}`);
|
|
45
|
+
}
|
|
46
|
+
// Default port for local development servers
|
|
47
|
+
const DEFAULT_LOCAL_PORT = 3000;
|
|
48
|
+
function resolveLocalBaseUrl(explicitPort, detectedPort) {
|
|
49
|
+
if (explicitPort) {
|
|
50
|
+
return `http://localhost:${explicitPort}`;
|
|
51
|
+
}
|
|
52
|
+
if (process.env.WORKFLOW_LOCAL_BASE_URL) {
|
|
53
|
+
return process.env.WORKFLOW_LOCAL_BASE_URL;
|
|
54
|
+
}
|
|
55
|
+
if (process.env.PORT) {
|
|
56
|
+
return `http://localhost:${process.env.PORT}`;
|
|
57
|
+
}
|
|
58
|
+
if (detectedPort) {
|
|
59
|
+
return `http://localhost:${detectedPort}`;
|
|
60
|
+
}
|
|
61
|
+
// Fall back to default port 3000 (common for Next.js, Nuxt, etc.)
|
|
62
|
+
return `http://localhost:${DEFAULT_LOCAL_PORT}`;
|
|
63
|
+
}
|
|
64
|
+
async function testHttpHealthEndpoint(baseUrl, endpoint, verbose) {
|
|
65
|
+
try {
|
|
66
|
+
const healthUrl = `${baseUrl}/.well-known/workflow/v1/${endpoint}?__health`;
|
|
67
|
+
if (verbose) {
|
|
68
|
+
logger.debug(`Testing HTTP health at: ${healthUrl}`);
|
|
69
|
+
}
|
|
70
|
+
const response = await fetch(healthUrl, {
|
|
71
|
+
method: 'POST',
|
|
72
|
+
signal: AbortSignal.timeout(5000),
|
|
73
|
+
});
|
|
74
|
+
if (response.ok) {
|
|
75
|
+
return { ok: true, status: response.status };
|
|
76
|
+
}
|
|
77
|
+
if (verbose) {
|
|
78
|
+
logger.debug(`HTTP health check returned status: ${response.status}`);
|
|
79
|
+
}
|
|
80
|
+
return { ok: false, status: response.status };
|
|
81
|
+
}
|
|
82
|
+
catch (err) {
|
|
83
|
+
const errorMessage = err instanceof Error ? err.message : String(err);
|
|
84
|
+
if (verbose) {
|
|
85
|
+
logger.debug(`HTTP health check failed: ${errorMessage}`);
|
|
86
|
+
}
|
|
87
|
+
return { ok: false, error: errorMessage };
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* For local backend, verify the server is accessible before attempting health check.
|
|
92
|
+
* Returns the base URL if accessible, or throws an error with a helpful message.
|
|
93
|
+
*/
|
|
94
|
+
async function verifyLocalServerAccessible(verbose, explicitPort) {
|
|
95
|
+
const detectedPort = explicitPort ?? (await getWorkflowPort());
|
|
96
|
+
if (verbose) {
|
|
97
|
+
logPortDetectionDebug(explicitPort, detectedPort);
|
|
98
|
+
}
|
|
99
|
+
const baseUrl = resolveLocalBaseUrl(explicitPort, detectedPort);
|
|
100
|
+
if (verbose) {
|
|
101
|
+
logger.debug(`Resolved base URL: ${baseUrl}`);
|
|
102
|
+
}
|
|
103
|
+
const result = await testHttpHealthEndpoint(baseUrl, 'flow', verbose);
|
|
104
|
+
if (result.ok) {
|
|
105
|
+
return baseUrl;
|
|
106
|
+
}
|
|
107
|
+
const portHint = baseUrl === `http://localhost:${DEFAULT_LOCAL_PORT}`
|
|
108
|
+
? 'If your server runs on a different port, use --port <port> or set WORKFLOW_LOCAL_BASE_URL'
|
|
109
|
+
: `Hint: Use --port <port> or set WORKFLOW_LOCAL_BASE_URL=http://localhost:<port>`;
|
|
110
|
+
throw new Error(`Cannot reach local server at ${baseUrl}. Make sure your development server is running.\n` +
|
|
111
|
+
portHint);
|
|
112
|
+
}
|
|
113
|
+
function isLocalBackend(backend) {
|
|
114
|
+
return backend === 'local' || backend === '@workflow/world-local';
|
|
115
|
+
}
|
|
116
|
+
function logWorldConfig() {
|
|
117
|
+
logger.debug(`Data directory: ${process.env.WORKFLOW_LOCAL_DATA_DIR || '(not set)'}`);
|
|
118
|
+
logger.debug(`Base URL: ${process.env.WORKFLOW_LOCAL_BASE_URL || '(not set)'}`);
|
|
119
|
+
logger.debug(`PORT: ${process.env.PORT || '(not set)'}`);
|
|
120
|
+
}
|
|
121
|
+
async function runHealthCheckWithLogging(healthCheck, world, endpoint, timeout, verbose) {
|
|
122
|
+
try {
|
|
123
|
+
if (verbose) {
|
|
124
|
+
logger.debug(`Starting health check for ${endpoint}...`);
|
|
125
|
+
}
|
|
126
|
+
const result = await healthCheck(world, endpoint, { timeout });
|
|
127
|
+
if (verbose) {
|
|
128
|
+
logger.debug(`Health check for ${endpoint} completed: ${JSON.stringify(result)}`);
|
|
129
|
+
}
|
|
130
|
+
return result;
|
|
131
|
+
}
|
|
132
|
+
catch (error) {
|
|
133
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
134
|
+
if (verbose) {
|
|
135
|
+
logger.debug(`Health check for ${endpoint} threw: ${errorMessage}`);
|
|
136
|
+
}
|
|
137
|
+
return {
|
|
138
|
+
healthy: false,
|
|
139
|
+
error: errorMessage || 'Unknown error during health check',
|
|
140
|
+
};
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
export default class Health extends BaseCommand {
|
|
144
|
+
static description = 'Check health of workflow and step endpoints via queue-based health check';
|
|
145
|
+
static examples = [
|
|
146
|
+
'$ workflow health',
|
|
147
|
+
'$ workflow health --endpoint workflow',
|
|
148
|
+
'$ workflow health --endpoint step --timeout 60000',
|
|
149
|
+
'$ workflow health --backend vercel --project my-project --team my-team',
|
|
150
|
+
];
|
|
151
|
+
static flags = {
|
|
152
|
+
endpoint: Flags.string({
|
|
153
|
+
char: 'e',
|
|
154
|
+
description: 'Which endpoint(s) to check',
|
|
155
|
+
options: ['workflow', 'step', 'both'],
|
|
156
|
+
default: 'both',
|
|
157
|
+
helpGroup: 'Health Check',
|
|
158
|
+
helpLabel: '-e, --endpoint',
|
|
159
|
+
helpValue: ['workflow', 'step', 'both'],
|
|
160
|
+
}),
|
|
161
|
+
timeout: Flags.integer({
|
|
162
|
+
char: 't',
|
|
163
|
+
description: 'Timeout in milliseconds for health check',
|
|
164
|
+
default: 30000,
|
|
165
|
+
helpGroup: 'Health Check',
|
|
166
|
+
helpLabel: '-t, --timeout',
|
|
167
|
+
helpValue: 'MS',
|
|
168
|
+
}),
|
|
169
|
+
port: Flags.integer({
|
|
170
|
+
char: 'p',
|
|
171
|
+
description: 'Local server port (for local backend)',
|
|
172
|
+
required: false,
|
|
173
|
+
helpGroup: 'Health Check',
|
|
174
|
+
helpLabel: '-p, --port',
|
|
175
|
+
helpValue: 'PORT',
|
|
176
|
+
}),
|
|
177
|
+
// Include relevant flags from cliFlags (excluding ones not relevant to health check)
|
|
178
|
+
verbose: cliFlags.verbose,
|
|
179
|
+
json: cliFlags.json,
|
|
180
|
+
backend: cliFlags.backend,
|
|
181
|
+
authToken: cliFlags.authToken,
|
|
182
|
+
project: cliFlags.project,
|
|
183
|
+
team: cliFlags.team,
|
|
184
|
+
env: cliFlags.env,
|
|
185
|
+
};
|
|
186
|
+
async catch(error) {
|
|
187
|
+
handleHealthCheckError(error);
|
|
188
|
+
}
|
|
189
|
+
async run() {
|
|
190
|
+
const { flags } = await this.parse(Health);
|
|
191
|
+
// For local backend, set up port configuration early
|
|
192
|
+
if (isLocalBackend(flags.backend)) {
|
|
193
|
+
// If user specifies a port, set the env var so the World uses it
|
|
194
|
+
if (flags.port) {
|
|
195
|
+
process.env.WORKFLOW_LOCAL_BASE_URL = `http://localhost:${flags.port}`;
|
|
196
|
+
}
|
|
197
|
+
// Set default WORKFLOW_LOCAL_BASE_URL if not already set
|
|
198
|
+
// We use WORKFLOW_LOCAL_BASE_URL instead of PORT to avoid conflicts
|
|
199
|
+
// with other tools (like Next.js) that also use the PORT env var
|
|
200
|
+
if (!process.env.WORKFLOW_LOCAL_BASE_URL && !process.env.PORT) {
|
|
201
|
+
process.env.WORKFLOW_LOCAL_BASE_URL = `http://localhost:${DEFAULT_LOCAL_PORT}`;
|
|
202
|
+
}
|
|
203
|
+
// Verify the server is accessible before proceeding
|
|
204
|
+
const accessible = await this.verifyLocalServer(flags.json, flags.verbose, flags.port);
|
|
205
|
+
if (!accessible) {
|
|
206
|
+
process.exit(1);
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
const world = await setupCliWorld(flags, this.config.version);
|
|
210
|
+
if (!world) {
|
|
211
|
+
throw new Error('Failed to connect to backend. Check your configuration.');
|
|
212
|
+
}
|
|
213
|
+
const { healthCheck } = await import('@workflow/core/runtime');
|
|
214
|
+
const endpoints = getEndpointsToCheck(flags.endpoint);
|
|
215
|
+
if (!flags.json) {
|
|
216
|
+
const backendName = flags.backend === 'local' ? 'local server' : flags.backend;
|
|
217
|
+
logger.log(chalk.gray(`Running queue-based health check against ${backendName}...`));
|
|
218
|
+
logger.log('');
|
|
219
|
+
}
|
|
220
|
+
const results = await this.checkEndpoints(endpoints, healthCheck, world, {
|
|
221
|
+
timeout: flags.timeout,
|
|
222
|
+
json: flags.json,
|
|
223
|
+
verbose: flags.verbose,
|
|
224
|
+
});
|
|
225
|
+
this.outputResults(results, flags.json, flags.backend);
|
|
226
|
+
const allHealthy = results.every((r) => r.healthy);
|
|
227
|
+
process.exit(allHealthy ? 0 : 1);
|
|
228
|
+
}
|
|
229
|
+
async verifyLocalServer(jsonMode, verbose, port) {
|
|
230
|
+
if (!jsonMode) {
|
|
231
|
+
logger.log(chalk.gray('Checking local server accessibility...'));
|
|
232
|
+
}
|
|
233
|
+
try {
|
|
234
|
+
const baseUrl = await verifyLocalServerAccessible(verbose, port);
|
|
235
|
+
if (!jsonMode) {
|
|
236
|
+
logger.log(chalk.green(` ✓ Local server accessible at ${baseUrl}`));
|
|
237
|
+
logger.log('');
|
|
238
|
+
}
|
|
239
|
+
return true;
|
|
240
|
+
}
|
|
241
|
+
catch (error) {
|
|
242
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
243
|
+
if (jsonMode) {
|
|
244
|
+
console.log(JSON.stringify({
|
|
245
|
+
results: [],
|
|
246
|
+
allHealthy: false,
|
|
247
|
+
error: errorMessage,
|
|
248
|
+
}));
|
|
249
|
+
}
|
|
250
|
+
else {
|
|
251
|
+
logger.error(errorMessage);
|
|
252
|
+
}
|
|
253
|
+
return false;
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
async checkEndpoints(endpoints, healthCheck, world, flags) {
|
|
257
|
+
if (flags.verbose) {
|
|
258
|
+
logWorldConfig();
|
|
259
|
+
}
|
|
260
|
+
const results = [];
|
|
261
|
+
for (const endpoint of endpoints) {
|
|
262
|
+
const result = await this.checkSingleEndpoint(endpoint, healthCheck, world, flags);
|
|
263
|
+
results.push(result);
|
|
264
|
+
}
|
|
265
|
+
return results;
|
|
266
|
+
}
|
|
267
|
+
async checkSingleEndpoint(endpoint, healthCheck, world, flags) {
|
|
268
|
+
const startTime = Date.now();
|
|
269
|
+
if (!flags.json) {
|
|
270
|
+
logger.log(`Checking ${endpoint} endpoint...`);
|
|
271
|
+
}
|
|
272
|
+
const result = await runHealthCheckWithLogging(healthCheck, world, endpoint, flags.timeout, flags.verbose);
|
|
273
|
+
const latencyMs = Date.now() - startTime;
|
|
274
|
+
if (!flags.json) {
|
|
275
|
+
const message = result.healthy
|
|
276
|
+
? formatHealthyResult(endpoint, latencyMs)
|
|
277
|
+
: formatUnhealthyResult(endpoint, result.error);
|
|
278
|
+
logger.log(message);
|
|
279
|
+
}
|
|
280
|
+
return {
|
|
281
|
+
endpoint,
|
|
282
|
+
healthy: result.healthy,
|
|
283
|
+
error: result.error,
|
|
284
|
+
latencyMs,
|
|
285
|
+
};
|
|
286
|
+
}
|
|
287
|
+
outputResults(results, jsonMode, backend) {
|
|
288
|
+
if (jsonMode) {
|
|
289
|
+
const jsonOutput = {
|
|
290
|
+
results,
|
|
291
|
+
allHealthy: results.every((r) => r.healthy),
|
|
292
|
+
};
|
|
293
|
+
console.log(JSON.stringify(jsonOutput, null, 2));
|
|
294
|
+
}
|
|
295
|
+
else {
|
|
296
|
+
printSummary(results, backend);
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
function handleHealthCheckError(error) {
|
|
301
|
+
if (error?.status === 403) {
|
|
302
|
+
logger.error(VERCEL_403_ERROR_MESSAGE);
|
|
303
|
+
}
|
|
304
|
+
else if (LOGGING_CONFIG.VERBOSE_MODE) {
|
|
305
|
+
logger.error(error);
|
|
306
|
+
}
|
|
307
|
+
else {
|
|
308
|
+
const errorMessage = error?.message || String(error) || 'Unknown error';
|
|
309
|
+
logger.error(`Error: ${errorMessage}`);
|
|
310
|
+
}
|
|
311
|
+
process.exit(1);
|
|
312
|
+
}
|
|
313
|
+
//# sourceMappingURL=health.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"health.js","sourceRoot":"","sources":["../../src/commands/health.ts"],"names":[],"mappings":"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"}
|
|
@@ -18,9 +18,12 @@ export default class Inspect extends BaseCommand {
|
|
|
18
18
|
readonly team: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
19
19
|
readonly env: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
20
20
|
readonly web: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
21
|
+
readonly webPort: import("@oclif/core/interfaces").OptionFlag<number, import("@oclif/core/interfaces").CustomOptions>;
|
|
21
22
|
readonly noBrowser: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
23
|
+
readonly localUi: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
22
24
|
readonly sort: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
23
25
|
readonly limit: import("@oclif/core/interfaces").OptionFlag<number, import("@oclif/core/interfaces").CustomOptions>;
|
|
26
|
+
readonly interactive: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
24
27
|
readonly runId: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
25
28
|
readonly stepId: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
26
29
|
readonly hookId: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"inspect.d.ts","sourceRoot":"","sources":["../../src/commands/inspect.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"inspect.d.ts","sourceRoot":"","sources":["../../src/commands/inspect.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAmBzC,MAAM,CAAC,OAAO,OAAO,OAAQ,SAAQ,WAAW;IAC9C,MAAM,CAAC,WAAW,SAA6C;IAE/D,MAAM,CAAC,OAAO,WAAS;IAEvB,MAAM,CAAC,QAAQ,WAOb;IAEI,KAAK,CAAC,KAAK,EAAE,GAAG;IActB,MAAM,CAAC,IAAI;;;MA+BA;IAEX,MAAM,CAAC,KAAK;;;;;;;;;;;;;;;;;;;;;MA6CD;IAEE,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CA4GlC"}
|
package/dist/commands/inspect.js
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { Args, Flags } from '@oclif/core';
|
|
2
|
+
import { VERCEL_403_ERROR_MESSAGE } from '@workflow/errors';
|
|
2
3
|
import { BaseCommand } from '../base.js';
|
|
3
4
|
import { LOGGING_CONFIG, logger } from '../lib/config/log.js';
|
|
4
5
|
import { cliFlags } from '../lib/inspect/flags.js';
|
|
5
|
-
import { listEvents, listHooks, listRuns, listSleeps, listSteps,
|
|
6
|
+
import { listEvents, listHooks, listRuns, listSleeps, listSteps, listStreamsByRunId, showHook, showRun, showStep, showStream, } from '../lib/inspect/output.js';
|
|
6
7
|
import { setupCliWorld } from '../lib/inspect/setup.js';
|
|
7
8
|
import { launchWebUI } from '../lib/inspect/web.js';
|
|
8
9
|
export default class Inspect extends BaseCommand {
|
|
@@ -19,7 +20,7 @@ export default class Inspect extends BaseCommand {
|
|
|
19
20
|
async catch(error) {
|
|
20
21
|
// Check if this is a 403 error from the Vercel backend
|
|
21
22
|
if (error?.status === 403) {
|
|
22
|
-
const message =
|
|
23
|
+
const message = VERCEL_403_ERROR_MESSAGE;
|
|
23
24
|
logger.error(message);
|
|
24
25
|
}
|
|
25
26
|
else if (LOGGING_CONFIG.VERBOSE_MODE) {
|
|
@@ -116,13 +117,19 @@ export default class Inspect extends BaseCommand {
|
|
|
116
117
|
process.exit(1);
|
|
117
118
|
}
|
|
118
119
|
const id = args.id;
|
|
119
|
-
|
|
120
|
+
// For web mode, allow config errors so we can open the web UI for configuration
|
|
121
|
+
const isWebMode = flags.web || resource === 'web';
|
|
122
|
+
const world = await setupCliWorld(flags, this.config.version, isWebMode);
|
|
120
123
|
// Handle web UI mode
|
|
121
|
-
if (
|
|
124
|
+
if (isWebMode) {
|
|
122
125
|
const actualResource = resource === 'web' ? 'run' : resource;
|
|
123
126
|
await launchWebUI(actualResource, id, flags, this.config.version);
|
|
124
127
|
process.exit(0);
|
|
125
128
|
}
|
|
129
|
+
// For non-web commands, we need a valid world
|
|
130
|
+
if (!world) {
|
|
131
|
+
throw new Error('Failed to connect to backend. Check your configuration.');
|
|
132
|
+
}
|
|
126
133
|
// Convert flags to InspectCLIOptions with proper typing
|
|
127
134
|
const options = toInspectOptions(flags);
|
|
128
135
|
if (resource === 'run') {
|
|
@@ -148,7 +155,7 @@ export default class Inspect extends BaseCommand {
|
|
|
148
155
|
await showStream(world, id, options);
|
|
149
156
|
}
|
|
150
157
|
else {
|
|
151
|
-
await
|
|
158
|
+
await listStreamsByRunId(world, options);
|
|
152
159
|
}
|
|
153
160
|
process.exit(0);
|
|
154
161
|
}
|
|
@@ -201,6 +208,7 @@ function toInspectOptions(flags) {
|
|
|
201
208
|
workflowName: flags.workflowName,
|
|
202
209
|
withData: flags.withData,
|
|
203
210
|
backend: flags.backend,
|
|
211
|
+
interactive: flags.interactive,
|
|
204
212
|
};
|
|
205
213
|
}
|
|
206
214
|
function normalizeResource(value) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"inspect.js","sourceRoot":"","sources":["../../src/commands/inspect.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAE9D,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACnD,OAAO,EACL,UAAU,EACV,SAAS,EACT,QAAQ,EACR,UAAU,EACV,SAAS,EACT,
|
|
1
|
+
{"version":3,"file":"inspect.js","sourceRoot":"","sources":["../../src/commands/inspect.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/start.d.ts
CHANGED
|
@@ -18,9 +18,12 @@ export default class Start extends BaseCommand {
|
|
|
18
18
|
team: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
19
19
|
env: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
20
20
|
web: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
21
|
+
webPort: import("@oclif/core/interfaces").OptionFlag<number, import("@oclif/core/interfaces").CustomOptions>;
|
|
21
22
|
noBrowser: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
23
|
+
localUi: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
22
24
|
sort: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
23
25
|
limit: import("@oclif/core/interfaces").OptionFlag<number, import("@oclif/core/interfaces").CustomOptions>;
|
|
26
|
+
interactive: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
24
27
|
};
|
|
25
28
|
run(): Promise<void>;
|
|
26
29
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"start.d.ts","sourceRoot":"","sources":["../../src/commands/start.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAMzC,MAAM,CAAC,OAAO,OAAO,KAAM,SAAQ,WAAW;IAC5C,MAAM,CAAC,WAAW,SAAsB;IAExC,MAAM,CAAC,OAAO,WAAS;IAEvB,MAAM,CAAC,QAAQ,WAGb;IAEI,KAAK,CAAC,KAAK,EAAE,GAAG;IAOtB,MAAM,CAAC,IAAI;;;MAaA;IAEX,MAAM,CAAC,KAAK
|
|
1
|
+
{"version":3,"file":"start.d.ts","sourceRoot":"","sources":["../../src/commands/start.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAMzC,MAAM,CAAC,OAAO,OAAO,KAAM,SAAQ,WAAW;IAC5C,MAAM,CAAC,WAAW,SAAsB;IAExC,MAAM,CAAC,OAAO,WAAS;IAEvB,MAAM,CAAC,QAAQ,WAGb;IAEI,KAAK,CAAC,KAAK,EAAE,GAAG;IAOtB,MAAM,CAAC,IAAI;;;MAaA;IAEX,MAAM,CAAC,KAAK;;;;;;;;;;;;;;;;MAAY;IAEX,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAgBlC"}
|
package/dist/commands/start.js
CHANGED
|
@@ -37,6 +37,9 @@ export default class Start extends BaseCommand {
|
|
|
37
37
|
const restArgs = fixedArgIndex !== -1 ? argv.slice(fixedArgIndex + 1) : [];
|
|
38
38
|
const stringArgs = restArgs.map((arg) => String(arg));
|
|
39
39
|
const world = await setupCliWorld(flags, this.config.version);
|
|
40
|
+
if (!world) {
|
|
41
|
+
throw new Error('Failed to connect to backend. Check your configuration.');
|
|
42
|
+
}
|
|
40
43
|
await startRun(world, args.workflowName, flags, stringArgs);
|
|
41
44
|
}
|
|
42
45
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"start.js","sourceRoot":"","sources":["../../src/commands/start.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AACnC,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACnD,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAExD,MAAM,CAAC,OAAO,OAAO,KAAM,SAAQ,WAAW;IAC5C,MAAM,CAAC,WAAW,GAAG,kBAAkB,CAAC;IAExC,MAAM,CAAC,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC;IAEvB,MAAM,CAAC,QAAQ,GAAG;QAChB,yCAAyC;QACzC,mCAAmC;KACpC,CAAC;IAEF,KAAK,CAAC,KAAK,CAAC,KAAU;QACpB,IAAI,cAAc,CAAC,YAAY,EAAE,CAAC;YAChC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACvB,CAAC;QACD,MAAM,KAAK,CAAC;IACd,CAAC;IAED,MAAM,CAAC,IAAI,GAAG;QACZ,YAAY,EAAE,IAAI,CAAC,MAAM,CAAC;YACxB,WAAW,EACT,yFAAyF;YAC3F,QAAQ,EAAE,IAAI;SACf,CAAC;QACF,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC;YAChB,WAAW,EAAE;gBACX,0EAA0E;gBAC1E,oJAAoJ;aACrJ,CAAC,IAAI,CAAC,IAAI,CAAC;YACZ,QAAQ,EAAE,KAAK;SAChB,CAAC;KACM,CAAC;IAEX,MAAM,CAAC,KAAK,GAAG,QAAQ,CAAC;IAEjB,KAAK,CAAC,GAAG;QACd,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAEtD,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QACtD,MAAM,QAAQ,GAAG,aAAa,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3E,MAAM,UAAU,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;QAEtD,MAAM,KAAK,GAAG,MAAM,aAAa,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"start.js","sourceRoot":"","sources":["../../src/commands/start.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AACnC,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACnD,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAExD,MAAM,CAAC,OAAO,OAAO,KAAM,SAAQ,WAAW;IAC5C,MAAM,CAAC,WAAW,GAAG,kBAAkB,CAAC;IAExC,MAAM,CAAC,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC;IAEvB,MAAM,CAAC,QAAQ,GAAG;QAChB,yCAAyC;QACzC,mCAAmC;KACpC,CAAC;IAEF,KAAK,CAAC,KAAK,CAAC,KAAU;QACpB,IAAI,cAAc,CAAC,YAAY,EAAE,CAAC;YAChC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACvB,CAAC;QACD,MAAM,KAAK,CAAC;IACd,CAAC;IAED,MAAM,CAAC,IAAI,GAAG;QACZ,YAAY,EAAE,IAAI,CAAC,MAAM,CAAC;YACxB,WAAW,EACT,yFAAyF;YAC3F,QAAQ,EAAE,IAAI;SACf,CAAC;QACF,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC;YAChB,WAAW,EAAE;gBACX,0EAA0E;gBAC1E,oJAAoJ;aACrJ,CAAC,IAAI,CAAC,IAAI,CAAC;YACZ,QAAQ,EAAE,KAAK;SAChB,CAAC;KACM,CAAC;IAEX,MAAM,CAAC,KAAK,GAAG,QAAQ,CAAC;IAEjB,KAAK,CAAC,GAAG;QACd,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAEtD,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QACtD,MAAM,QAAQ,GAAG,aAAa,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3E,MAAM,UAAU,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;QAEtD,MAAM,KAAK,GAAG,MAAM,aAAa,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAC9D,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,MAAM,IAAI,KAAK,CACb,yDAAyD,CAC1D,CAAC;QACJ,CAAC;QAED,MAAM,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC,YAAY,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC;IAC9D,CAAC"}
|
package/dist/commands/web.d.ts
CHANGED
|
@@ -17,9 +17,12 @@ export default class Web extends BaseCommand {
|
|
|
17
17
|
readonly team: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
18
18
|
readonly env: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
19
19
|
readonly web: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
20
|
+
readonly webPort: import("@oclif/core/interfaces").OptionFlag<number, import("@oclif/core/interfaces").CustomOptions>;
|
|
20
21
|
readonly noBrowser: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
22
|
+
readonly localUi: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
21
23
|
readonly sort: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
22
24
|
readonly limit: import("@oclif/core/interfaces").OptionFlag<number, import("@oclif/core/interfaces").CustomOptions>;
|
|
25
|
+
readonly interactive: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
23
26
|
};
|
|
24
27
|
run(): Promise<void>;
|
|
25
28
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"web.d.ts","sourceRoot":"","sources":["../../src/commands/web.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"web.d.ts","sourceRoot":"","sources":["../../src/commands/web.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAMzC,MAAM,CAAC,OAAO,OAAO,GAAI,SAAQ,WAAW;IAC1C,MAAM,CAAC,WAAW,SAA8C;IAEhE,MAAM,CAAC,OAAO,WAAS;IAEvB,MAAM,CAAC,QAAQ,WAIb;IAEI,KAAK,CAAC,KAAK,EAAE,GAAG;IActB,MAAM,CAAC,IAAI;;MAKA;IAEX,MAAM,CAAC,KAAK;;;;;;;;;;;;;;;;MAED;IAEE,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAkBlC"}
|
package/dist/commands/web.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { Args } from '@oclif/core';
|
|
2
|
+
import { VERCEL_403_ERROR_MESSAGE } from '@workflow/errors';
|
|
2
3
|
import { BaseCommand } from '../base.js';
|
|
3
4
|
import { LOGGING_CONFIG, logger } from '../lib/config/log.js';
|
|
4
5
|
import { cliFlags } from '../lib/inspect/flags.js';
|
|
@@ -15,7 +16,7 @@ export default class Web extends BaseCommand {
|
|
|
15
16
|
async catch(error) {
|
|
16
17
|
// Check if this is a 403 error from the Vercel backend
|
|
17
18
|
if (error?.status === 403) {
|
|
18
|
-
const message =
|
|
19
|
+
const message = VERCEL_403_ERROR_MESSAGE;
|
|
19
20
|
logger.error(message);
|
|
20
21
|
}
|
|
21
22
|
else if (LOGGING_CONFIG.VERBOSE_MODE) {
|
|
@@ -42,7 +43,8 @@ export default class Web extends BaseCommand {
|
|
|
42
43
|
const id = args.id;
|
|
43
44
|
// Setup the CLI world to write env vars from flags
|
|
44
45
|
// This ensures backend, authToken, team, project, etc. are properly set
|
|
45
|
-
|
|
46
|
+
// Don't throw on config errors - let the web UI handle them
|
|
47
|
+
await setupCliWorld(flags, this.config.version, true);
|
|
46
48
|
// Launch web UI with 'run' as the default resource
|
|
47
49
|
await launchWebUI('run', id, flags, this.config.version);
|
|
48
50
|
process.exit(0);
|