humanish 0.15.2 → 0.16.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.
Files changed (59) hide show
  1. package/README.md +15 -7
  2. package/dist/actor-contract.d.ts +2 -3
  3. package/dist/actor-contract.js +6 -7
  4. package/dist/actor-contract.js.map +1 -1
  5. package/dist/actor-registry.d.ts +4 -4
  6. package/dist/actor-registry.js +8 -7
  7. package/dist/actor-registry.js.map +1 -1
  8. package/dist/artifact-reference.js +1 -1
  9. package/dist/artifact-reference.js.map +1 -1
  10. package/dist/concurrent-shared-world-lab.js +24 -11
  11. package/dist/concurrent-shared-world-lab.js.map +1 -1
  12. package/dist/cua-actor-lab.d.ts +101 -4
  13. package/dist/cua-actor-lab.js +456 -77
  14. package/dist/cua-actor-lab.js.map +1 -1
  15. package/dist/device-presets.d.ts +4 -4
  16. package/dist/device-presets.js +5 -5
  17. package/dist/device-presets.js.map +1 -1
  18. package/dist/e2b-terminal-lab.d.ts +18 -20
  19. package/dist/e2b-terminal-lab.js +28 -28
  20. package/dist/e2b-terminal-lab.js.map +1 -1
  21. package/dist/index.d.ts +1 -1
  22. package/dist/index.js.map +1 -1
  23. package/dist/lab-config.d.ts +27 -28
  24. package/dist/lab-config.js +6 -6
  25. package/dist/lab-config.js.map +1 -1
  26. package/dist/lab-engine.d.ts +1 -1
  27. package/dist/lab-engine.js +8 -10
  28. package/dist/lab-engine.js.map +1 -1
  29. package/dist/observer-assets.js +92 -15
  30. package/dist/observer-assets.js.map +1 -1
  31. package/dist/oss-meta-lab.js +2 -4
  32. package/dist/oss-meta-lab.js.map +1 -1
  33. package/dist/program.js +1 -1
  34. package/dist/program.js.map +1 -1
  35. package/dist/run.d.ts +38 -0
  36. package/dist/run.js +71 -1
  37. package/dist/run.js.map +1 -1
  38. package/dist/shared-world-lab.d.ts +20 -1
  39. package/dist/shared-world-lab.js +197 -23
  40. package/dist/shared-world-lab.js.map +1 -1
  41. package/dist/terminal-agent-actor.d.ts +12 -7
  42. package/dist/terminal-agent-actor.js +18 -16
  43. package/dist/terminal-agent-actor.js.map +1 -1
  44. package/docs/architecture/actor-contract.md +32 -21
  45. package/docs/architecture/observer.md +15 -9
  46. package/docs/architecture/state-driven-executor.md +3 -3
  47. package/docs/architecture/terminal-product-lane.md +29 -25
  48. package/docs/assets/humanish-drawdb-hero.png +0 -0
  49. package/docs/contracts/adapter-fixtures.md +4 -2
  50. package/docs/contracts/core.md +9 -4
  51. package/docs/contracts/feedback.md +4 -2
  52. package/docs/contracts/policy.md +5 -3
  53. package/docs/contracts/run-bundle.md +24 -3
  54. package/docs/contracts/schemas.md +34 -23
  55. package/docs/goals/current.md +69 -20
  56. package/docs/ramp/README.md +32 -13
  57. package/docs/release/open-source-readiness.md +5 -4
  58. package/docs/release/public-readiness-standard.md +6 -1
  59. package/package.json +1 -1
@@ -335,7 +335,7 @@ a { color: inherit; text-decoration: none; }
335
335
  display: grid;
336
336
  gap: 14px;
337
337
  grid-template-columns: repeat(auto-fill, minmax(min(var(--tile-min), 100%), 1fr));
338
- align-content: start;
338
+ align-content: start; align-items: start;
339
339
  }
340
340
 
341
341
  .tile {
@@ -354,12 +354,12 @@ a { color: inherit; text-decoration: none; }
354
354
 
355
355
  .tile-head {
356
356
  display: flex; align-items: center; gap: 8px;
357
- padding: 0 10px; height: 32px; flex: none;
357
+ padding: 0 10px; height: 38px; flex: none;
358
358
  border-bottom: 1px solid var(--line);
359
359
  background: var(--surface-1);
360
360
  }
361
- .tile-idx { font-family: var(--mono); font-size: 10px; color: var(--text-4); flex: none; }
362
- .tile-name { font-size: 12px; font-weight: 520; color: var(--text-1); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; flex: 1; min-width: 0; }
361
+ .tile-idx { font-family: var(--mono); font-size: 11px; color: var(--text-4); flex: none; }
362
+ .tile-name { font-size: 15px; font-weight: 520; color: var(--text-1); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; flex: 1; min-width: 0; }
363
363
  .kind-badge {
364
364
  font-family: var(--mono); font-size: 9px; letter-spacing: .08em; text-transform: uppercase;
365
365
  padding: 2px 6px; border-radius: 5px; flex: none;
@@ -400,10 +400,10 @@ a { color: inherit; text-decoration: none; }
400
400
  }
401
401
  .tile-foot {
402
402
  display: flex; align-items: center; gap: 8px;
403
- padding: 0 10px; height: 30px; flex: none;
403
+ padding: 0 10px; height: 36px; flex: none;
404
404
  border-top: 1px solid var(--line); background: var(--surface-1);
405
405
  }
406
- .tile-foot-text { font-size: 11px; color: var(--text-2); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; flex: 1; min-width: 0; }
406
+ .tile-foot-text { font-size: 14px; color: var(--text-2); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; flex: 1; min-width: 0; }
407
407
  .tile-foot-text .now-dot { color: var(--accent); margin-right: 6px; }
408
408
  .mini-prog { width: 46px; height: 3px; border-radius: 2px; background: var(--line); overflow: hidden; flex: none; }
409
409
  .mini-prog > span { display: block; height: 100%; background: var(--accent); transition: width .6s var(--ease-out); }
@@ -416,6 +416,7 @@ a { color: inherit; text-decoration: none; }
416
416
 
417
417
  /* ============================================================ STREAM SURFACES */
418
418
  .surface-fill { position: absolute; inset: 0; width: 100%; height: 100%; }
419
+ .surface-screenshot { object-fit: contain; object-position: top center; }
419
420
  .live-stream-mount { position: absolute; inset: 0; overflow: hidden; background: #000; }
420
421
  .live-stream-overlay { position: absolute; overflow: hidden; pointer-events: none; z-index: 2; }
421
422
  .live-stream-overlay[data-focus="true"] .bw-lab-dock { max-height: 86px; }
@@ -657,6 +658,15 @@ a.cx-artifact:hover { border-color: var(--line-3); color: var(--text-1); }
657
658
  max-width: 100%; max-height: 100%;
658
659
  width: auto; height: 100%;
659
660
  }
661
+ .focus-geometry {
662
+ position: absolute; z-index: 4; left: 50%; bottom: 3px; transform: translateX(-50%);
663
+ display: inline-flex; align-items: center; gap: 7px; max-width: calc(100% - 44px);
664
+ height: 19px; padding: 0 8px; border: 1px solid var(--line-2); border-radius: var(--radius-pill);
665
+ background: var(--surface-0); box-shadow: var(--shadow-1); color: var(--text-3);
666
+ font-family: var(--mono); font-size: 8.5px; letter-spacing: .04em; white-space: nowrap;
667
+ }
668
+ .focus-geometry strong { color: var(--text-2); font-weight: 500; }
669
+ .focus-geometry-sep { color: var(--text-4); }
660
670
  @supports not (aspect-ratio: 1) { .focus-frame { height: 100%; width: 100%; } }
661
671
 
662
672
  /* side panel */
@@ -846,6 +856,10 @@ html[data-theme="light"] .scrim { background: rgba(20,28,40,.32); }
846
856
  width: 100%; height: auto; max-height: none;
847
857
  min-height: 280px;
848
858
  }
859
+ .focus-geometry {
860
+ position: relative; left: auto; bottom: auto; transform: none;
861
+ width: max-content; max-width: 100%; margin: 8px auto 0; overflow-x: auto;
862
+ }
849
863
  .focus-side {
850
864
  position: relative; left: auto; right: auto; bottom: auto; top: auto; z-index: auto;
851
865
  min-height: 360px; max-height: none; border-left: none; border-top: 1px solid var(--line-2);
@@ -1024,6 +1038,7 @@ html[data-motion="reduced"] *, html[data-motion="reduced"] *::before, html[data-
1024
1038
  .sb-counts { display: inline-flex; align-items: center; gap: 8px; flex: none; }
1025
1039
  .sb-count { display: inline-flex; align-items: center; gap: 5px; color: var(--text-2); }
1026
1040
  .sb-count .si-dot { width: 7px; height: 7px; border-radius: 50%; }
1041
+ .sb-count-number, .sb-count-label { white-space: nowrap; }
1027
1042
  .sb-run { color: var(--text-4); font-size: 10.5px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
1028
1043
 
1029
1044
  .sb-console {
@@ -1046,6 +1061,12 @@ html[data-motion="reduced"] *, html[data-motion="reduced"] *::before, html[data-
1046
1061
  /* when docked above the bar, drop the console's bottom rounding/shadow seam */
1047
1062
  .console + .statusbar { border-top-color: var(--line); }
1048
1063
 
1064
+ @media (max-width: 1024px) {
1065
+ .sb-count-label { display: none; }
1066
+ }
1067
+ @media (max-width: 900px) {
1068
+ .sb-console-peek { display: none; }
1069
+ }
1049
1070
  @media (max-width: 720px) {
1050
1071
  .sb-counts, .sb-run, .sb-prog { display: none; }
1051
1072
  .sb-console-label { display: none; }
@@ -1200,17 +1221,71 @@ export function observerClientJs() {
1200
1221
  function laneEvents(s) { return s.timeline || []; }
1201
1222
  function laneArtifacts(s) { return s.artifacts || []; }
1202
1223
 
1224
+ function geometrySize(value) {
1225
+ var width = value && Number(value.width);
1226
+ var height = value && Number(value.height);
1227
+ return width > 0 && height > 0 ? { width: width, height: height } : null;
1228
+ }
1229
+ function screenSizeFor(s) {
1230
+ var screen = s.desktopGeometry && s.desktopGeometry.screen;
1231
+ return geometrySize(screen && screen.verified) || geometrySize(screen && screen.requested);
1232
+ }
1233
+ function geometrySource(value) {
1234
+ if (value === "cdp") return "CDP";
1235
+ return String(value || "runtime");
1236
+ }
1237
+ function geometryDetailFor(s) {
1238
+ var geometry = s.desktopGeometry;
1239
+ if (!geometry) return "";
1240
+ var screen = geometry.screen || {};
1241
+ var requested = geometrySize(screen.requested);
1242
+ var verified = geometrySize(screen.verified);
1243
+ var browserWindow = geometrySize(geometry.browserWindow);
1244
+ var viewport = geometrySize(geometry.viewport);
1245
+ var bits = [];
1246
+ if (verified) {
1247
+ bits.push("Screen " + verified.width + TIMES + verified.height + " (verified via " + geometrySource(screen.verified && screen.verified.source) + (requested ? "; requested " + requested.width + TIMES + requested.height : "") + ")");
1248
+ } else if (requested) {
1249
+ bits.push("Screen " + requested.width + TIMES + requested.height + " (requested; runtime verification unavailable)");
1250
+ }
1251
+ if (browserWindow) {
1252
+ var x = Number(geometry.browserWindow.x);
1253
+ var y = Number(geometry.browserWindow.y);
1254
+ var origin = isFinite(x) && isFinite(y) ? " at " + x + "," + y : "";
1255
+ bits.push("Browser window " + browserWindow.width + TIMES + browserWindow.height + origin + " (" + geometrySource(geometry.browserWindow.source) + ")");
1256
+ }
1257
+ if (viewport) {
1258
+ var dpr = Number(geometry.viewport.deviceScaleFactor);
1259
+ bits.push("CSS viewport " + viewport.width + TIMES + viewport.height + (dpr > 0 ? ", DPR " + dpr : "") + " (" + geometrySource(geometry.viewport.source) + ")");
1260
+ }
1261
+ return bits.join(" · ");
1262
+ }
1263
+ function focusGeometry(s) {
1264
+ var screen = screenSizeFor(s);
1265
+ var viewport = geometrySize(s.desktopGeometry && s.desktopGeometry.viewport);
1266
+ if (!screen && !viewport) return "";
1267
+ var parts = [];
1268
+ if (screen) parts.push('<span>SCREEN <strong>' + screen.width + TIMES + screen.height + '</strong></span>');
1269
+ if (viewport) {
1270
+ var dpr = Number(s.desktopGeometry.viewport.deviceScaleFactor);
1271
+ parts.push('<span>VIEWPORT <strong>' + viewport.width + TIMES + viewport.height + '</strong>' + (dpr > 0 ? ' · DPR <strong>' + esc(dpr) + '</strong>' : '') + '</span>');
1272
+ }
1273
+ var detail = geometryDetailFor(s);
1274
+ return '<div class="focus-geometry" title="' + esc(detail) + '" aria-label="' + esc(detail) + '">' + parts.join('<span class="focus-geometry-sep">·</span>') + '</div>';
1275
+ }
1203
1276
  function aspectFor(s) {
1204
1277
  if (s.kind === "terminal" || s.kind === "tui") return "16 / 10";
1205
- var vp = s.viewport;
1206
- if (vp && vp.height > vp.width) return vp.width + " / " + vp.height;
1278
+ var frame = screenSizeFor(s) || geometrySize(s.viewport);
1279
+ if (frame) return frame.width + " / " + frame.height;
1207
1280
  return "16 / 9";
1208
1281
  }
1209
1282
  function dimsFor(s) {
1210
1283
  if (s.kind === "terminal") return "CLI";
1211
1284
  if (s.kind === "tui") return "TUI";
1212
1285
  if (s.kind === "codex-ui") return "CODEX";
1213
- var vp = s.viewport;
1286
+ var screen = screenSizeFor(s);
1287
+ if (screen) return screen.width + TIMES + screen.height;
1288
+ var vp = geometrySize(s.viewport);
1214
1289
  if (vp) return vp.width > vp.height ? (vp.width + TIMES + vp.height) : "MOB";
1215
1290
  return "SIM";
1216
1291
  }
@@ -1514,7 +1589,7 @@ export function observerClientJs() {
1514
1589
  var dock = focus ? browserLabDock(s, shot) : "";
1515
1590
  var body;
1516
1591
  if (liveUrl && S.media === "live") body = liveStreamMount(s, liveUrl);
1517
- else if (shot) body = '<img class="surface-fill" style="object-fit:cover;object-position:top" src="' + esc(shot) + '" alt="viewport screenshot"/>';
1592
+ else if (shot) body = '<img class="surface-fill surface-screenshot" src="' + esc(shot) + '" alt="' + (s.desktopGeometry ? "desktop screenshot" : "browser screenshot") + '"/>';
1518
1593
  else body = '<div class="bw-app-wait"><div class="wait-spinner" style="width:24px;height:24px"></div>'
1519
1594
  + '<div class="mono" style="font-size:9px">' + esc(route) + '</div>'
1520
1595
  + '<div style="font-size:10px">' + esc(laneStep(s)) + '</div></div>';
@@ -1917,11 +1992,13 @@ export function observerClientJs() {
1917
1992
  var TILE_MIN = { comfortable: "440px", compact: "330px", dense: "240px" };
1918
1993
  function buildTile(s, i) {
1919
1994
  var live = tone(s.status) === "running";
1920
- return '<article class="tile" data-selected="' + (s.id === S.focusedId ? "true" : "false") + '" tabindex="0" role="button" data-action="open:' + esc(s.id) + '" aria-label="Open lane ' + pad2(i + 1) + ': ' + esc(laneName(s)) + '">'
1995
+ var geometryDetail = geometryDetailFor(s);
1996
+ var accessibleLabel = "Open lane " + pad2(i + 1) + ": " + laneName(s) + (geometryDetail ? ". " + geometryDetail : "");
1997
+ return '<article class="tile" data-selected="' + (s.id === S.focusedId ? "true" : "false") + '" tabindex="0" role="button" data-action="open:' + esc(s.id) + '" aria-label="' + esc(accessibleLabel) + '">'
1921
1998
  + '<header class="tile-head"><span class="tile-idx mono">' + pad2(i + 1) + '</span>' + pip(s.status, live)
1922
1999
  + '<span class="tile-name" title="' + esc(laneName(s)) + '">' + esc(laneName(s)) + '</span>'
1923
2000
  + '<span class="kind-badge" data-kind="' + esc(s.kind) + '">' + esc(s.kindLabel || s.kind) + '</span>'
1924
- + '<span class="tile-dims mono">' + esc(dimsFor(s)) + '</span>'
2001
+ + '<span class="tile-dims mono"' + (geometryDetail ? ' title="' + esc(geometryDetail) + '"' : '') + '>' + esc(dimsFor(s)) + '</span>'
1925
2002
  + '<span class="tile-open">' + icon("expand", 13) + '</span></header>'
1926
2003
  + '<div class="tile-surface" style="--aspect:' + aspectFor(s) + '">' + streamSurface(s, false) + '</div>'
1927
2004
  + '<footer class="tile-foot" data-status="' + esc(s.status) + '"><span class="tile-foot-text">' + (live ? '<span class="now-dot">▸</span>' : '') + esc(laneStep(s)) + '</span>'
@@ -2104,7 +2181,7 @@ export function observerClientJs() {
2104
2181
  + '<span class="rail-meta"><span class="rail-name">' + esc(laneName(r)) + '</span><span class="rail-sub">' + pip(r.status, tone(r.status) === "running") + ' ' + esc(r.kindLabel || r.kind) + '</span></span></button>';
2105
2182
  }).join("") + '</div></aside>';
2106
2183
 
2107
- var stage = '<section class="focus-stage"><div class="focus-stage-area"><div class="focus-frame" style="--aspect:' + aspectFor(s) + '">' + streamSurface(s, true) + '</div></div></section>';
2184
+ var stage = '<section class="focus-stage"><div class="focus-stage-area"><div class="focus-frame" style="--aspect:' + aspectFor(s) + '">' + streamSurface(s, true) + '</div>' + focusGeometry(s) + '</div></section>';
2108
2185
 
2109
2186
  var side = '<aside class="focus-side" aria-hidden="' + (S.sideCollapsed ? "true" : "false") + '" data-sheet="' + (S.sheetOpen ? "open" : "closed") + '">'
2110
2187
  + '<button class="sheet-grip" data-action="toggle-sheet" aria-label="Toggle details"></button>'
@@ -2150,8 +2227,8 @@ export function observerClientJs() {
2150
2227
  return '<footer class="statusbar">'
2151
2228
  + '<span class="sb-status" data-tone="' + tone(overall) + '">' + pip(overall, tone(overall) === "running") + '<span class="sb-status-label mono">' + statusLabel(overall) + '</span><span class="sb-pct mono">' + pct + '%</span></span>'
2152
2229
  + '<span class="sb-prog"><span style="width:' + pct + '%" data-tone="' + tone(overall) + '"></span></span>'
2153
- + '<span class="sb-counts">' + counts.map(function (c) { return '<span class="sb-count" title="' + c.count + ' ' + c.label + '"><span class="si-dot" style="background:' + c.color + '"></span><span class="mono">' + c.count + '</span></span>'; }).join("") + '</span>'
2154
- + '<span class="sb-run mono">' + esc((run.mode || "") + " · " + (run.runId || "")) + '</span>'
2230
+ + '<span class="sb-counts">' + counts.map(function (c) { return '<span class="sb-count" title="' + c.count + ' ' + c.label + '"><span class="si-dot" style="background:' + c.color + '"></span><span class="mono sb-count-number">' + c.count + '</span><span class="mono sb-count-label">' + c.label + '</span></span>'; }).join("") + '</span>'
2231
+ + '<span class="sb-run mono">' + esc("mode: " + (run.mode || "unknown") + " · " + (run.runId || "")) + '</span>'
2155
2232
  + '<div class="tb-spacer"></div>'
2156
2233
  + '<button class="sb-console" aria-expanded="' + (S.consoleOpen ? "true" : "false") + '" data-action="toggle-console" title="Run console (backtick)">' + icon("terminal", 14)
2157
2234
  + '<span class="sb-console-label">Run console</span>' + peek
@@ -1 +1 @@
1
- {"version":3,"file":"observer-assets.js","sourceRoot":"","sources":["../src/observer-assets.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"observer-assets.js","sourceRoot":"","sources":["../src/observer-assets.ts"],"names":[],"mappings":"AAAA,uDAAuD;AACvD,EAAE;AACF,6EAA6E;AAC7E,2EAA2E;AAC3E,gFAAgF;AAChF,+EAA+E;AAC/E,iEAAiE;AACjE,EAAE;AACF,8EAA8E;AAC9E,8EAA8E;AAC9E,4EAA4E;AAC5E,+CAA+C;AAE/C,MAAM,UAAU,WAAW;IACzB,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAwiCR,CAAC;AACF,CAAC;AAED,MAAM,UAAU,gBAAgB;IAC9B,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAylDR,CAAC;AACF,CAAC"}
@@ -1119,10 +1119,8 @@ function buildMetaBundle(args) {
1119
1119
  ...(screenshot ? { url: screenshot.observerUrl } : {}),
1120
1120
  title: `E2B desktop ${assignment.index}`
1121
1121
  },
1122
- viewport: {
1123
- width: 1440,
1124
- height: 960,
1125
- deviceScaleFactor: 1
1122
+ desktopGeometry: {
1123
+ screen: { requested: { width: 1440, height: 960 } }
1126
1124
  },
1127
1125
  terminal: {
1128
1126
  title: `${appServerMode ? "Codex app-server" : "Codex"} bootstrap - ${repoLabel}`,