@onlook/storybook-plugin 0.4.0-beta.14 → 0.4.0-beta.15

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/index.js CHANGED
@@ -63,6 +63,9 @@ var execFileAsync = promisify(execFile);
63
63
  var require2 = createRequire$1(import.meta.url);
64
64
  var browserPromise = null;
65
65
  var installPromise = null;
66
+ var ChromiumUnavailableError = class extends Error {
67
+ code = "CHROMIUM_UNAVAILABLE";
68
+ };
66
69
  var isMissingExecutableError = (err) => {
67
70
  const msg = err instanceof Error ? err.message : String(err);
68
71
  return msg.includes("Executable doesn't exist") || msg.includes("Please run the following command to download new browsers") || // Older playwright revisions phrase the version-mismatch case differently.
@@ -95,7 +98,9 @@ async function installChromium() {
95
98
  } catch (err) {
96
99
  const detail = err instanceof Error ? err.message : String(err);
97
100
  console.error(`[STORYBOOK_PLUGIN] chromium install FAILED: ${detail}`);
98
- throw new Error(`Playwright chromium install failed: ${detail}`);
101
+ throw new ChromiumUnavailableError(
102
+ `Playwright chromium install failed: ${detail}`
103
+ );
99
104
  } finally {
100
105
  installPromise = null;
101
106
  }
@@ -117,7 +122,7 @@ async function launchWithSelfHeal() {
117
122
  console.error(
118
123
  `[STORYBOOK_PLUGIN] launch still failing after install \u2014 likely path or libs issue: ${detail}`
119
124
  );
120
- throw new Error(
125
+ throw new ChromiumUnavailableError(
121
126
  `Playwright chromium is unavailable in this sandbox (install ran but launch still failed): ${detail}`
122
127
  );
123
128
  }
package/dist/index.js CHANGED
@@ -440,6 +440,9 @@ var execFileAsync = promisify(execFile);
440
440
  var require2 = createRequire$1(import.meta.url);
441
441
  var browserPromise = null;
442
442
  var installPromise = null;
443
+ var ChromiumUnavailableError = class extends Error {
444
+ code = "CHROMIUM_UNAVAILABLE";
445
+ };
443
446
  var isMissingExecutableError = (err) => {
444
447
  const msg = err instanceof Error ? err.message : String(err);
445
448
  return msg.includes("Executable doesn't exist") || msg.includes("Please run the following command to download new browsers") || // Older playwright revisions phrase the version-mismatch case differently.
@@ -472,7 +475,9 @@ async function installChromium() {
472
475
  } catch (err) {
473
476
  const detail = err instanceof Error ? err.message : String(err);
474
477
  console.error(`[STORYBOOK_PLUGIN] chromium install FAILED: ${detail}`);
475
- throw new Error(`Playwright chromium install failed: ${detail}`);
478
+ throw new ChromiumUnavailableError(
479
+ `Playwright chromium install failed: ${detail}`
480
+ );
476
481
  } finally {
477
482
  installPromise = null;
478
483
  }
@@ -494,7 +499,7 @@ async function launchWithSelfHeal() {
494
499
  console.error(
495
500
  `[STORYBOOK_PLUGIN] launch still failing after install \u2014 likely path or libs issue: ${detail}`
496
501
  );
497
- throw new Error(
502
+ throw new ChromiumUnavailableError(
498
503
  `Playwright chromium is unavailable in this sandbox (install ran but launch still failed): ${detail}`
499
504
  );
500
505
  }
@@ -1101,6 +1106,12 @@ function findGitRoot(startPath) {
1101
1106
  }
1102
1107
 
1103
1108
  // src/storybook-onlook-plugin.ts
1109
+ function errorCode(error) {
1110
+ if (error && typeof error === "object" && "code" in error && typeof error.code === "string") {
1111
+ return error.code;
1112
+ }
1113
+ return void 0;
1114
+ }
1104
1115
  var __dirname$1 = dirname(fileURLToPath(import.meta.url));
1105
1116
  var storybookDir = join(__dirname$1, "..");
1106
1117
  var gitRoot = findGitRoot(storybookDir);
@@ -1246,11 +1257,13 @@ var serveMetadataAndScreenshots = (req, res, next) => {
1246
1257
  res.end(buffer);
1247
1258
  }).catch((error) => {
1248
1259
  console.error("Screenshot capture error:", error);
1260
+ const code = errorCode(error);
1249
1261
  res.statusCode = 500;
1250
1262
  res.setHeader("Content-Type", "application/json");
1251
1263
  res.end(
1252
1264
  JSON.stringify({
1253
1265
  error: "Failed to capture screenshot",
1266
+ ...code ? { code } : {},
1254
1267
  details: String(error)
1255
1268
  })
1256
1269
  );
@@ -1280,11 +1293,13 @@ var serveMetadataAndScreenshots = (req, res, next) => {
1280
1293
  res.end(JSON.stringify(result));
1281
1294
  }).catch((error) => {
1282
1295
  console.error("Console log capture error:", error);
1296
+ const code = errorCode(error);
1283
1297
  res.statusCode = 500;
1284
1298
  res.setHeader("Content-Type", "application/json");
1285
1299
  res.end(
1286
1300
  JSON.stringify({
1287
1301
  error: "Failed to capture console logs",
1302
+ ...code ? { code } : {},
1288
1303
  details: String(error)
1289
1304
  })
1290
1305
  );
@@ -1332,6 +1347,7 @@ var serveMetadataAndScreenshots = (req, res, next) => {
1332
1347
  `[STORYBOOK_PLUGIN] Failed to generate screenshot: ${storyId}/${theme}`,
1333
1348
  error
1334
1349
  );
1350
+ const code = errorCode(error);
1335
1351
  res.statusCode = 500;
1336
1352
  res.setHeader("Content-Type", "application/json");
1337
1353
  res.setHeader("Access-Control-Allow-Origin", "*");
@@ -1339,6 +1355,7 @@ var serveMetadataAndScreenshots = (req, res, next) => {
1339
1355
  res.end(
1340
1356
  JSON.stringify({
1341
1357
  error: "Failed to generate screenshot",
1358
+ ...code ? { code } : {},
1342
1359
  details: String(error)
1343
1360
  })
1344
1361
  );
@@ -320,6 +320,9 @@ var execFileAsync = promisify(execFile);
320
320
  var require2 = createRequire$1(import.meta.url);
321
321
  var browserPromise = null;
322
322
  var installPromise = null;
323
+ var ChromiumUnavailableError = class extends Error {
324
+ code = "CHROMIUM_UNAVAILABLE";
325
+ };
323
326
  var isMissingExecutableError = (err) => {
324
327
  const msg = err instanceof Error ? err.message : String(err);
325
328
  return msg.includes("Executable doesn't exist") || msg.includes("Please run the following command to download new browsers") || // Older playwright revisions phrase the version-mismatch case differently.
@@ -352,7 +355,9 @@ async function installChromium() {
352
355
  } catch (err) {
353
356
  const detail = err instanceof Error ? err.message : String(err);
354
357
  console.error(`[STORYBOOK_PLUGIN] chromium install FAILED: ${detail}`);
355
- throw new Error(`Playwright chromium install failed: ${detail}`);
358
+ throw new ChromiumUnavailableError(
359
+ `Playwright chromium install failed: ${detail}`
360
+ );
356
361
  } finally {
357
362
  installPromise = null;
358
363
  }
@@ -374,7 +379,7 @@ async function launchWithSelfHeal() {
374
379
  console.error(
375
380
  `[STORYBOOK_PLUGIN] launch still failing after install \u2014 likely path or libs issue: ${detail}`
376
381
  );
377
- throw new Error(
382
+ throw new ChromiumUnavailableError(
378
383
  `Playwright chromium is unavailable in this sandbox (install ran but launch still failed): ${detail}`
379
384
  );
380
385
  }
@@ -1097,6 +1102,12 @@ function findGitRoot(startPath) {
1097
1102
  }
1098
1103
 
1099
1104
  // src/storybook-onlook-plugin.ts
1105
+ function errorCode(error) {
1106
+ if (error && typeof error === "object" && "code" in error && typeof error.code === "string") {
1107
+ return error.code;
1108
+ }
1109
+ return void 0;
1110
+ }
1100
1111
  var __dirname$1 = dirname(fileURLToPath(import.meta.url));
1101
1112
  var storybookDir = join(__dirname$1, "..");
1102
1113
  var gitRoot = findGitRoot(storybookDir);
@@ -1242,11 +1253,13 @@ var serveMetadataAndScreenshots = (req, res, next) => {
1242
1253
  res.end(buffer);
1243
1254
  }).catch((error) => {
1244
1255
  console.error("Screenshot capture error:", error);
1256
+ const code = errorCode(error);
1245
1257
  res.statusCode = 500;
1246
1258
  res.setHeader("Content-Type", "application/json");
1247
1259
  res.end(
1248
1260
  JSON.stringify({
1249
1261
  error: "Failed to capture screenshot",
1262
+ ...code ? { code } : {},
1250
1263
  details: String(error)
1251
1264
  })
1252
1265
  );
@@ -1276,11 +1289,13 @@ var serveMetadataAndScreenshots = (req, res, next) => {
1276
1289
  res.end(JSON.stringify(result));
1277
1290
  }).catch((error) => {
1278
1291
  console.error("Console log capture error:", error);
1292
+ const code = errorCode(error);
1279
1293
  res.statusCode = 500;
1280
1294
  res.setHeader("Content-Type", "application/json");
1281
1295
  res.end(
1282
1296
  JSON.stringify({
1283
1297
  error: "Failed to capture console logs",
1298
+ ...code ? { code } : {},
1284
1299
  details: String(error)
1285
1300
  })
1286
1301
  );
@@ -1328,6 +1343,7 @@ var serveMetadataAndScreenshots = (req, res, next) => {
1328
1343
  `[STORYBOOK_PLUGIN] Failed to generate screenshot: ${storyId}/${theme}`,
1329
1344
  error
1330
1345
  );
1346
+ const code = errorCode(error);
1331
1347
  res.statusCode = 500;
1332
1348
  res.setHeader("Content-Type", "application/json");
1333
1349
  res.setHeader("Access-Control-Allow-Origin", "*");
@@ -1335,6 +1351,7 @@ var serveMetadataAndScreenshots = (req, res, next) => {
1335
1351
  res.end(
1336
1352
  JSON.stringify({
1337
1353
  error: "Failed to generate screenshot",
1354
+ ...code ? { code } : {},
1338
1355
  details: String(error)
1339
1356
  })
1340
1357
  );
@@ -61,6 +61,9 @@ var execFileAsync = promisify(execFile);
61
61
  var require2 = createRequire$1(import.meta.url);
62
62
  var browserPromise = null;
63
63
  var installPromise = null;
64
+ var ChromiumUnavailableError = class extends Error {
65
+ code = "CHROMIUM_UNAVAILABLE";
66
+ };
64
67
  var isMissingExecutableError = (err) => {
65
68
  const msg = err instanceof Error ? err.message : String(err);
66
69
  return msg.includes("Executable doesn't exist") || msg.includes("Please run the following command to download new browsers") || // Older playwright revisions phrase the version-mismatch case differently.
@@ -93,7 +96,9 @@ async function installChromium() {
93
96
  } catch (err) {
94
97
  const detail = err instanceof Error ? err.message : String(err);
95
98
  console.error(`[STORYBOOK_PLUGIN] chromium install FAILED: ${detail}`);
96
- throw new Error(`Playwright chromium install failed: ${detail}`);
99
+ throw new ChromiumUnavailableError(
100
+ `Playwright chromium install failed: ${detail}`
101
+ );
97
102
  } finally {
98
103
  installPromise = null;
99
104
  }
@@ -115,7 +120,7 @@ async function launchWithSelfHeal() {
115
120
  console.error(
116
121
  `[STORYBOOK_PLUGIN] launch still failing after install \u2014 likely path or libs issue: ${detail}`
117
122
  );
118
- throw new Error(
123
+ throw new ChromiumUnavailableError(
119
124
  `Playwright chromium is unavailable in this sandbox (install ran but launch still failed): ${detail}`
120
125
  );
121
126
  }
@@ -1,6 +1,17 @@
1
1
  import { Browser } from 'playwright';
2
2
 
3
+ /**
4
+ * Terminal "this sandbox cannot launch chromium" failure (ONL-1429/ONL-1602).
5
+ * The `code` property rides the plugin's HTTP 5xx JSON error bodies
6
+ * (storybook-onlook-plugin.ts) so consumers — the agent runner's canvas
7
+ * tools — can classify the failure as tool_unavailable via a contract WE own,
8
+ * instead of regex-parsing Playwright's error prose (which reworded across
9
+ * versions and broke the detection twice: ONL-1085 → ONL-1364).
10
+ */
11
+ declare class ChromiumUnavailableError extends Error {
12
+ readonly code = "CHROMIUM_UNAVAILABLE";
13
+ }
3
14
  declare function getBrowser(): Promise<Browser>;
4
15
  declare function closeBrowser(): Promise<void>;
5
16
 
6
- export { closeBrowser, getBrowser };
17
+ export { ChromiumUnavailableError, closeBrowser, getBrowser };
@@ -10,6 +10,9 @@ var execFileAsync = promisify(execFile);
10
10
  var require2 = createRequire$1(import.meta.url);
11
11
  var browserPromise = null;
12
12
  var installPromise = null;
13
+ var ChromiumUnavailableError = class extends Error {
14
+ code = "CHROMIUM_UNAVAILABLE";
15
+ };
13
16
  var isMissingExecutableError = (err) => {
14
17
  const msg = err instanceof Error ? err.message : String(err);
15
18
  return msg.includes("Executable doesn't exist") || msg.includes("Please run the following command to download new browsers") || // Older playwright revisions phrase the version-mismatch case differently.
@@ -42,7 +45,9 @@ async function installChromium() {
42
45
  } catch (err) {
43
46
  const detail = err instanceof Error ? err.message : String(err);
44
47
  console.error(`[STORYBOOK_PLUGIN] chromium install FAILED: ${detail}`);
45
- throw new Error(`Playwright chromium install failed: ${detail}`);
48
+ throw new ChromiumUnavailableError(
49
+ `Playwright chromium install failed: ${detail}`
50
+ );
46
51
  } finally {
47
52
  installPromise = null;
48
53
  }
@@ -64,7 +69,7 @@ async function launchWithSelfHeal() {
64
69
  console.error(
65
70
  `[STORYBOOK_PLUGIN] launch still failing after install \u2014 likely path or libs issue: ${detail}`
66
71
  );
67
- throw new Error(
72
+ throw new ChromiumUnavailableError(
68
73
  `Playwright chromium is unavailable in this sandbox (install ran but launch still failed): ${detail}`
69
74
  );
70
75
  }
@@ -91,4 +96,4 @@ async function closeBrowser() {
91
96
  }
92
97
  }
93
98
 
94
- export { closeBrowser, getBrowser };
99
+ export { ChromiumUnavailableError, closeBrowser, getBrowser };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@onlook/storybook-plugin",
3
- "version": "0.4.0-beta.14",
3
+ "version": "0.4.0-beta.15",
4
4
  "type": "module",
5
5
  "bin": {
6
6
  "onlook-storybook": "./dist/cli/index.js"
@@ -47,8 +47,8 @@
47
47
  "@babel/traverse": "^7.26.9",
48
48
  "@babel/types": "^7.29.0",
49
49
  "@drizzle-team/brocli": "^0.11.0",
50
- "playwright": "^1.52.0",
51
- "playwright-core": "^1.52.0",
50
+ "playwright": "1.57.0",
51
+ "playwright-core": "1.57.0",
52
52
  "storybook": "^10.1.11"
53
53
  },
54
54
  "devDependencies": {