opensteer 0.9.6 → 0.9.8

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 (35) hide show
  1. package/README.md +2 -2
  2. package/dist/{chunk-3I3A5OLB.js → chunk-BPGXP3RF.js} +257 -24
  3. package/dist/chunk-BPGXP3RF.js.map +1 -0
  4. package/dist/{chunk-3XBQRZZC.js → chunk-EXXRLPLI.js} +158 -46
  5. package/dist/chunk-EXXRLPLI.js.map +1 -0
  6. package/dist/{chunk-T5P2QGZ3.js → chunk-GKYBP3KD.js} +154 -13
  7. package/dist/chunk-GKYBP3KD.js.map +1 -0
  8. package/dist/{chunk-BVRIPCWA.js → chunk-LFWP5RXF.js} +500 -513
  9. package/dist/chunk-LFWP5RXF.js.map +1 -0
  10. package/dist/{chunk-L4NF74KI.js → chunk-SOJEWKSW.js} +5 -5
  11. package/dist/{chunk-L4NF74KI.js.map → chunk-SOJEWKSW.js.map} +1 -1
  12. package/dist/cli/bin.cjs +1230 -660
  13. package/dist/cli/bin.cjs.map +1 -1
  14. package/dist/cli/bin.js +166 -72
  15. package/dist/cli/bin.js.map +1 -1
  16. package/dist/index.cjs +793 -565
  17. package/dist/index.cjs.map +1 -1
  18. package/dist/index.d.cts +36 -51
  19. package/dist/index.d.ts +36 -51
  20. package/dist/index.js +4 -4
  21. package/dist/local-view/public/assets/app.js +10 -1
  22. package/dist/local-view/serve-entry.cjs +1022 -591
  23. package/dist/local-view/serve-entry.cjs.map +1 -1
  24. package/dist/local-view/serve-entry.js +2 -2
  25. package/dist/opensteer-XLPY343Y.js +6 -0
  26. package/dist/{opensteer-UGA6YBRN.js.map → opensteer-XLPY343Y.js.map} +1 -1
  27. package/dist/{session-control-U3L5H2ZI.js → session-control-FVKKD45R.js} +4 -4
  28. package/dist/{session-control-U3L5H2ZI.js.map → session-control-FVKKD45R.js.map} +1 -1
  29. package/package.json +5 -5
  30. package/skills/recorder/SKILL.md +2 -2
  31. package/dist/chunk-3I3A5OLB.js.map +0 -1
  32. package/dist/chunk-3XBQRZZC.js.map +0 -1
  33. package/dist/chunk-BVRIPCWA.js.map +0 -1
  34. package/dist/chunk-T5P2QGZ3.js.map +0 -1
  35. package/dist/opensteer-UGA6YBRN.js +0 -6
package/dist/cli/bin.js CHANGED
@@ -1,8 +1,8 @@
1
1
  #!/usr/bin/env node
2
- import { runLocalViewService } from '../chunk-3I3A5OLB.js';
3
- import { createOpensteerSemanticRuntime, dispatchSemanticOperation, isBrowserCoreError, loadEnvironment, normalizeOpensteerProviderMode, resolveOpensteerRuntimeConfig, assertProviderSupportsEngine, resolveOpensteerProvider, requireCloudAppBaseUrl, CloudSessionProxy, FlowRecorderCollector, generateReplayScript, OpensteerCloudClient } from '../chunk-BVRIPCWA.js';
4
- import { isOpensteerProtocolError, OpensteerBrowserManager, stopLocalViewService, setLocalViewMode, ensureLocalViewServiceRunning, buildLocalViewSessionUrl, resolveOpensteerEngineName, resolveFilesystemWorkspacePath } from '../chunk-3XBQRZZC.js';
5
- import { discoverLocalCdpBrowsers, inspectCdpEndpoint, readPersistedLocalBrowserSessionRecord, isProcessRunning, buildLocalViewSessionId, pathExists, readPersistedCloudSessionRecord } from '../chunk-T5P2QGZ3.js';
2
+ import { runLocalViewService } from '../chunk-BPGXP3RF.js';
3
+ import { createOpensteerSemanticRuntime, dispatchSemanticOperation, isBrowserCoreError, loadEnvironment, normalizeOpensteerProviderMode, resolveOpensteerRuntimeConfig, assertProviderSupportsEngine, resolveOpensteerProvider, requireCloudAppBaseUrl, CloudSessionProxy, FlowRecorderCollector, generateReplayScript, OpensteerCloudClient } from '../chunk-LFWP5RXF.js';
4
+ import { isOpensteerProtocolError, OpensteerBrowserManager, stopLocalViewService, setLocalViewMode, ensureLocalViewServiceRunning, buildLocalViewSessionUrl, resolveOpensteerEngineName, resolveFilesystemWorkspacePath } from '../chunk-EXXRLPLI.js';
5
+ import { discoverLocalCdpBrowsers, inspectCdpEndpoint, readPersistedLocalBrowserSessionRecord, getPersistedLocalBrowserSessionOwnership, isAttachedLocalBrowserSessionReachable, isProcessRunning, buildLocalViewSessionIdForRecord, pathExists, readPersistedCloudSessionRecord } from '../chunk-GKYBP3KD.js';
6
6
  import process4 from 'process';
7
7
  import { mkdir, writeFile } from 'fs/promises';
8
8
  import path2 from 'path';
@@ -14,7 +14,7 @@ import { fileURLToPath } from 'url';
14
14
 
15
15
  // package.json
16
16
  var package_default = {
17
- version: "0.9.6"};
17
+ version: "0.9.8"};
18
18
 
19
19
  // src/cli/env-loader.ts
20
20
  async function loadCliEnvironment(cwd) {
@@ -656,14 +656,22 @@ async function buildOperationInput(operation, parsed, runtime) {
656
656
  return parsed.rest[0] === void 0 ? {} : { mode: parsed.rest[0] };
657
657
  case "page.evaluate":
658
658
  if (parsed.rest[0] === void 0) {
659
- throw new CliError("missing_arguments", "evaluate requires a script.", CLI_USAGE_HINTS[operation]);
659
+ throw new CliError(
660
+ "missing_arguments",
661
+ "evaluate requires a script.",
662
+ CLI_USAGE_HINTS[operation]
663
+ );
660
664
  }
661
665
  return {
662
666
  script: joinRest(parsed.rest, 0)
663
667
  };
664
668
  case "page.add-init-script":
665
669
  if (parsed.rest[0] === void 0) {
666
- throw new CliError("missing_arguments", "init-script requires a script.", CLI_USAGE_HINTS[operation]);
670
+ throw new CliError(
671
+ "missing_arguments",
672
+ "init-script requires a script.",
673
+ CLI_USAGE_HINTS[operation]
674
+ );
667
675
  }
668
676
  return {
669
677
  script: joinRest(parsed.rest, 0)
@@ -679,7 +687,11 @@ async function buildOperationInput(operation, parsed, runtime) {
679
687
  return buildElementTargetInput(parsed, "hover");
680
688
  case "dom.input": {
681
689
  if (parsed.rest[1] === void 0) {
682
- throw new CliError("missing_arguments", "input requires an element number and text.", CLI_USAGE_HINTS[operation]);
690
+ throw new CliError(
691
+ "missing_arguments",
692
+ "input requires an element number and text.",
693
+ CLI_USAGE_HINTS[operation]
694
+ );
683
695
  }
684
696
  const pressEnter = readOptionalBoolean(parsed.rawOptions, "press-enter");
685
697
  return {
@@ -710,7 +722,11 @@ async function buildOperationInput(operation, parsed, runtime) {
710
722
  }
711
723
  case "dom.extract": {
712
724
  if (parsed.rest[0] === void 0) {
713
- throw new CliError("missing_arguments", "extract requires a template.", CLI_USAGE_HINTS[operation]);
725
+ throw new CliError(
726
+ "missing_arguments",
727
+ "extract requires a template.",
728
+ CLI_USAGE_HINTS[operation]
729
+ );
714
730
  }
715
731
  const persist = readPersistKey(parsed, "extract");
716
732
  return {
@@ -746,7 +762,11 @@ async function buildOperationInput(operation, parsed, runtime) {
746
762
  }
747
763
  case "network.detail": {
748
764
  if (parsed.rest[0] === void 0) {
749
- throw new CliError("missing_arguments", "network detail requires a record id.", CLI_USAGE_HINTS[operation]);
765
+ throw new CliError(
766
+ "missing_arguments",
767
+ "network detail requires a record id.",
768
+ CLI_USAGE_HINTS[operation]
769
+ );
750
770
  }
751
771
  const probeFlag = readOptionalBoolean(parsed.rawOptions, "probe");
752
772
  return {
@@ -757,7 +777,11 @@ async function buildOperationInput(operation, parsed, runtime) {
757
777
  case "session.fetch": {
758
778
  const url = parsed.rest[0];
759
779
  if (url === void 0) {
760
- throw new CliError("missing_arguments", "fetch requires a URL.", CLI_USAGE_HINTS[operation]);
780
+ throw new CliError(
781
+ "missing_arguments",
782
+ "fetch requires a URL.",
783
+ CLI_USAGE_HINTS[operation]
784
+ );
761
785
  }
762
786
  const bodyJson = readJsonValue(parsed.rawOptions, "body");
763
787
  const bodyText = readSingle(parsed.rawOptions, "body-text");
@@ -796,7 +820,11 @@ async function buildOperationInput(operation, parsed, runtime) {
796
820
  const siteKey = readSingle(parsed.rawOptions, "site-key");
797
821
  const pageUrl = readSingle(parsed.rawOptions, "page-url");
798
822
  if (provider === void 0 || apiKey === void 0) {
799
- throw new CliError("missing_arguments", 'captcha solve requires "--provider" and "--api-key".', CLI_USAGE_HINTS[operation]);
823
+ throw new CliError(
824
+ "missing_arguments",
825
+ 'captcha solve requires "--provider" and "--api-key".',
826
+ CLI_USAGE_HINTS[operation]
827
+ );
800
828
  }
801
829
  return {
802
830
  provider: readCaptchaProvider(provider),
@@ -826,7 +854,11 @@ async function buildOperationInput(operation, parsed, runtime) {
826
854
  case "scripts.beautify":
827
855
  case "scripts.deobfuscate": {
828
856
  if (parsed.rest[0] === void 0) {
829
- throw new CliError("missing_arguments", `${parsed.command.join(" ")} requires an artifact id.`, CLI_USAGE_HINTS[operation]);
857
+ throw new CliError(
858
+ "missing_arguments",
859
+ `${parsed.command.join(" ")} requires an artifact id.`,
860
+ CLI_USAGE_HINTS[operation]
861
+ );
830
862
  }
831
863
  const persist = readOptionalBoolean(parsed.rawOptions, "persist");
832
864
  return {
@@ -836,7 +868,11 @@ async function buildOperationInput(operation, parsed, runtime) {
836
868
  }
837
869
  case "scripts.sandbox":
838
870
  if (parsed.rest[0] === void 0) {
839
- throw new CliError("missing_arguments", "scripts sandbox requires an artifact id.", CLI_USAGE_HINTS[operation]);
871
+ throw new CliError(
872
+ "missing_arguments",
873
+ "scripts sandbox requires an artifact id.",
874
+ CLI_USAGE_HINTS[operation]
875
+ );
840
876
  }
841
877
  {
842
878
  const fidelity = readSingle(parsed.rawOptions, "fidelity");
@@ -885,14 +921,22 @@ async function buildOperationInput(operation, parsed, runtime) {
885
921
  case "interaction.get":
886
922
  case "interaction.replay":
887
923
  if (parsed.rest[0] === void 0) {
888
- throw new CliError("missing_arguments", `${parsed.command.join(" ")} requires a trace id.`, CLI_USAGE_HINTS[operation]);
924
+ throw new CliError(
925
+ "missing_arguments",
926
+ `${parsed.command.join(" ")} requires a trace id.`,
927
+ CLI_USAGE_HINTS[operation]
928
+ );
889
929
  }
890
930
  return {
891
931
  traceId: parsed.rest[0]
892
932
  };
893
933
  case "interaction.diff":
894
934
  if (parsed.rest[0] === void 0 || parsed.rest[1] === void 0) {
895
- throw new CliError("missing_arguments", "interaction diff requires two trace ids.", CLI_USAGE_HINTS[operation]);
935
+ throw new CliError(
936
+ "missing_arguments",
937
+ "interaction diff requires two trace ids.",
938
+ CLI_USAGE_HINTS[operation]
939
+ );
896
940
  }
897
941
  return {
898
942
  leftTraceId: parsed.rest[0],
@@ -900,7 +944,11 @@ async function buildOperationInput(operation, parsed, runtime) {
900
944
  };
901
945
  case "artifact.read":
902
946
  if (parsed.rest[0] === void 0) {
903
- throw new CliError("missing_arguments", "artifact read requires an artifact id.", CLI_USAGE_HINTS[operation]);
947
+ throw new CliError(
948
+ "missing_arguments",
949
+ "artifact read requires an artifact id.",
950
+ CLI_USAGE_HINTS[operation]
951
+ );
904
952
  }
905
953
  return {
906
954
  artifactId: parsed.rest[0]
@@ -1038,7 +1086,10 @@ function buildComputerExecuteInput(parsed) {
1038
1086
  }
1039
1087
  };
1040
1088
  default:
1041
- throw new CliError("unknown_command", `Unknown computer command: ${parsed.command.join(" ")}`);
1089
+ throw new CliError(
1090
+ "unknown_command",
1091
+ `Unknown computer command: ${parsed.command.join(" ")}`
1092
+ );
1042
1093
  }
1043
1094
  }
1044
1095
  async function resolvePageRefByIndex(runtime, index) {
@@ -1068,7 +1119,10 @@ function readRequiredNumber(value, message) {
1068
1119
  }
1069
1120
  function readSingleDirection(value) {
1070
1121
  if (value === void 0 || !SCROLL_DIRECTIONS.has(value)) {
1071
- throw new CliError("missing_arguments", "scroll requires a direction: up, down, left, or right.");
1122
+ throw new CliError(
1123
+ "missing_arguments",
1124
+ "scroll requires a direction: up, down, left, or right."
1125
+ );
1072
1126
  }
1073
1127
  return value;
1074
1128
  }
@@ -1095,13 +1149,19 @@ function readCaptchaProvider(value) {
1095
1149
  }
1096
1150
  function readCaptchaType(value) {
1097
1151
  if (value === void 0 || !CAPTCHA_TYPES.has(value)) {
1098
- throw new CliError("invalid_value", 'Expected "--type" to be one of: recaptcha-v2, hcaptcha, turnstile.');
1152
+ throw new CliError(
1153
+ "invalid_value",
1154
+ 'Expected "--type" to be one of: recaptcha-v2, hcaptcha, turnstile.'
1155
+ );
1099
1156
  }
1100
1157
  return value;
1101
1158
  }
1102
1159
  function readSandboxFidelity(value) {
1103
1160
  if (value === void 0 || !SANDBOX_FIDELITIES.has(value)) {
1104
- throw new CliError("invalid_value", 'Expected "--fidelity" to be one of: minimal, standard, full.');
1161
+ throw new CliError(
1162
+ "invalid_value",
1163
+ 'Expected "--fidelity" to be one of: minimal, standard, full.'
1164
+ );
1105
1165
  }
1106
1166
  return value;
1107
1167
  }
@@ -1124,7 +1184,10 @@ function readKeyModifiers(value) {
1124
1184
  }
1125
1185
  for (const modifier of modifiers) {
1126
1186
  if (!KEY_MODIFIERS.has(modifier)) {
1127
- throw new CliError("invalid_value", 'Expected "--modifiers" to contain only: Shift, Control, Alt, Meta.');
1187
+ throw new CliError(
1188
+ "invalid_value",
1189
+ 'Expected "--modifiers" to contain only: Shift, Control, Alt, Meta.'
1190
+ );
1128
1191
  }
1129
1192
  }
1130
1193
  return [...new Set(modifiers)];
@@ -1159,6 +1222,7 @@ function joinRest(rest, startIndex) {
1159
1222
  function renderOperationOutput(operation, result, input) {
1160
1223
  switch (operation) {
1161
1224
  case "session.open":
1225
+ case "page.activate":
1162
1226
  case "page.goto":
1163
1227
  return renderJson(formatNavigationOutput(result));
1164
1228
  case "page.snapshot":
@@ -1167,14 +1231,14 @@ function renderOperationOutput(operation, result, input) {
1167
1231
  case "dom.hover":
1168
1232
  case "dom.input":
1169
1233
  case "dom.scroll":
1170
- return renderJson(formatActionOutput(result, input));
1234
+ return renderJson(formatActionOutput(result));
1171
1235
  case "dom.extract":
1172
1236
  return renderJson(formatExtractOutput(result));
1173
1237
  case "page.list":
1174
- case "page.new":
1175
- case "page.activate":
1176
1238
  case "page.close":
1177
1239
  return formatTabOutput(result);
1240
+ case "page.new":
1241
+ return renderJson(formatCreatedPageOutput(result));
1178
1242
  case "network.query":
1179
1243
  return formatNetworkQueryOutput(result, input);
1180
1244
  case "network.detail":
@@ -1212,6 +1276,12 @@ function formatNavigationOutput(result) {
1212
1276
  ...readStringField(result, "title") === void 0 ? {} : { title: readStringField(result, "title") }
1213
1277
  };
1214
1278
  }
1279
+ function formatCreatedPageOutput(result) {
1280
+ return {
1281
+ ...readStringField(result, "pageRef") === void 0 ? {} : { pageRef: readStringField(result, "pageRef") },
1282
+ ...formatNavigationOutput(result)
1283
+ };
1284
+ }
1215
1285
  function formatSnapshotOutput(result) {
1216
1286
  if (result !== null && typeof result === "object" && typeof result.html === "string") {
1217
1287
  return `${result.html}
@@ -1219,36 +1289,11 @@ function formatSnapshotOutput(result) {
1219
1289
  }
1220
1290
  return renderJson(result);
1221
1291
  }
1222
- function formatActionOutput(result, input) {
1223
- const target = readObjectField(result, "target");
1224
- const output = {
1225
- ...readStringField(target, "tagName") === void 0 ? {} : { tagName: readStringField(target, "tagName") },
1226
- ...readStringField(target, "pathHint") === void 0 ? {} : { pathHint: readStringField(target, "pathHint") }
1292
+ function formatActionOutput(result) {
1293
+ return {
1294
+ ...readStringField(result, "tagName") === void 0 ? {} : { tagName: readStringField(result, "tagName") },
1295
+ ...readStringField(result, "persist") === void 0 ? {} : { persist: readStringField(result, "persist") }
1227
1296
  };
1228
- const point = readObjectField(result, "point");
1229
- if (point !== void 0) {
1230
- output.point = {
1231
- ...readNumberField(point, "x") === void 0 ? {} : { x: readNumberField(point, "x") },
1232
- ...readNumberField(point, "y") === void 0 ? {} : { y: readNumberField(point, "y") }
1233
- };
1234
- }
1235
- const persist = readStringField(target, "persist");
1236
- if (persist !== void 0) {
1237
- output.persist = persist;
1238
- }
1239
- const text = readStringField(input, "text");
1240
- if (text !== void 0) {
1241
- output.text = text;
1242
- }
1243
- const direction = readStringField(input, "direction");
1244
- if (direction !== void 0) {
1245
- output.direction = direction;
1246
- }
1247
- const amount = readNumberField(input, "amount");
1248
- if (amount !== void 0) {
1249
- output.amount = amount;
1250
- }
1251
- return output;
1252
1297
  }
1253
1298
  function formatExtractOutput(result) {
1254
1299
  const data = readUnknownField(result, "data");
@@ -1480,20 +1525,18 @@ function formatStateOutput(result) {
1480
1525
  `;
1481
1526
  }
1482
1527
  function formatComputerOutput(result) {
1483
- const action = readObjectField(result, "action");
1484
1528
  const screenshot = readObjectField(result, "screenshot");
1485
1529
  const payload = readObjectField(screenshot, "payload");
1486
- const timing = readObjectField(result, "timing");
1487
1530
  return {
1488
- ...action === void 0 ? {} : { action },
1531
+ ...readStringField(result, "url") === void 0 ? {} : { url: readStringField(result, "url") },
1532
+ ...readStringField(result, "title") === void 0 ? {} : { title: readStringField(result, "title") },
1489
1533
  ...payload === void 0 ? {} : {
1490
1534
  screenshot: {
1491
1535
  ...readStringField(payload, "uri") === void 0 ? {} : { uri: readStringField(payload, "uri") },
1492
1536
  ...readStringField(screenshot, "format") === void 0 ? {} : { format: readStringField(screenshot, "format") },
1493
1537
  ...readObjectField(screenshot, "size") === void 0 ? {} : { size: readObjectField(screenshot, "size") }
1494
1538
  }
1495
- },
1496
- ...timing === void 0 ? {} : { timingMs: timing }
1539
+ }
1497
1540
  };
1498
1541
  }
1499
1542
  function formatScriptsCaptureOutput(result) {
@@ -2141,7 +2184,7 @@ async function collectOpensteerStatus(input) {
2141
2184
  ...output,
2142
2185
  rootPath,
2143
2186
  lanes: {
2144
- local: describeLocalLane(localRecord, input.provider.mode === "local"),
2187
+ local: await describeLocalLane(localRecord, input.provider.mode === "local"),
2145
2188
  cloud: await describeCloudLane({
2146
2189
  record: cloudRecord,
2147
2190
  current: input.provider.mode === "cloud",
@@ -2193,8 +2236,38 @@ async function readWorkspaceCloudRecord(rootPath) {
2193
2236
  }
2194
2237
  return readPersistedCloudSessionRecord(rootPath);
2195
2238
  }
2196
- function describeLocalLane(record, current) {
2197
- if (record === void 0 || !isProcessRunning(record.pid)) {
2239
+ async function describeLocalLane(record, current) {
2240
+ if (record === void 0) {
2241
+ return {
2242
+ provider: "local",
2243
+ status: "idle",
2244
+ current,
2245
+ summary: "none"
2246
+ };
2247
+ }
2248
+ if (getPersistedLocalBrowserSessionOwnership(record) === "attached") {
2249
+ if (!await isAttachedLocalBrowserSessionReachable(record)) {
2250
+ return {
2251
+ provider: "local",
2252
+ status: "stale",
2253
+ current,
2254
+ summary: "attached browser unavailable",
2255
+ detail: record.engine,
2256
+ engine: record.engine
2257
+ };
2258
+ }
2259
+ const browser2 = record.executablePath ? path2.basename(record.executablePath).replace(/\.[A-Za-z0-9]+$/u, "") : void 0;
2260
+ return {
2261
+ provider: "local",
2262
+ status: "active",
2263
+ current,
2264
+ summary: "attached browser",
2265
+ detail: browser2 ?? record.engine,
2266
+ engine: record.engine,
2267
+ ...browser2 === void 0 ? {} : { browser: browser2 }
2268
+ };
2269
+ }
2270
+ if (!isProcessRunning(record.pid)) {
2198
2271
  return {
2199
2272
  provider: "local",
2200
2273
  status: "idle",
@@ -2340,13 +2413,19 @@ async function resolveWorkspaceSessionId(input) {
2340
2413
  workspace: input.workspace
2341
2414
  });
2342
2415
  const live = await readPersistedLocalBrowserSessionRecord(rootPath);
2343
- if (!live || !isProcessRunning(live.pid)) {
2416
+ if (!live) {
2344
2417
  return void 0;
2345
2418
  }
2346
- return buildLocalViewSessionId({
2419
+ if (getPersistedLocalBrowserSessionOwnership(live) === "attached") {
2420
+ if (!await isAttachedLocalBrowserSessionReachable(live)) {
2421
+ return void 0;
2422
+ }
2423
+ } else if (!isProcessRunning(live.pid)) {
2424
+ return void 0;
2425
+ }
2426
+ return buildLocalViewSessionIdForRecord({
2347
2427
  rootPath,
2348
- pid: live.pid,
2349
- startedAt: live.startedAt
2428
+ live
2350
2429
  });
2351
2430
  }
2352
2431
  function assertNoViewPreferenceFlag(parsed) {
@@ -2442,7 +2521,10 @@ async function main() {
2442
2521
  throw new CliError("unknown_command", `Unknown command: ${parsed.command.join(" ")}`);
2443
2522
  }
2444
2523
  if (parsed.options.workspace === void 0) {
2445
- throw new CliError("missing_workspace", 'Stateful commands require "--workspace <id>" or OPENSTEER_WORKSPACE.');
2524
+ throw new CliError(
2525
+ "missing_workspace",
2526
+ 'Stateful commands require "--workspace <id>" or OPENSTEER_WORKSPACE.'
2527
+ );
2446
2528
  }
2447
2529
  const { engineName, provider, runtimeProvider } = resolveCliRuntimeSelection(parsed);
2448
2530
  if (operation === "session.close") {
@@ -2489,7 +2571,10 @@ async function main() {
2489
2571
  }
2490
2572
  async function handleExecCommand(parsed) {
2491
2573
  if (parsed.options.workspace === void 0) {
2492
- throw new CliError("missing_workspace", 'exec requires "--workspace <id>" or OPENSTEER_WORKSPACE.');
2574
+ throw new CliError(
2575
+ "missing_workspace",
2576
+ 'exec requires "--workspace <id>" or OPENSTEER_WORKSPACE.'
2577
+ );
2493
2578
  }
2494
2579
  const expression = parsed.rest.join(" ");
2495
2580
  if (!expression) {
@@ -2500,7 +2585,7 @@ async function handleExecCommand(parsed) {
2500
2585
  );
2501
2586
  }
2502
2587
  const { engineName, runtimeProvider } = resolveCliRuntimeSelection(parsed);
2503
- const { Opensteer } = await import('../opensteer-UGA6YBRN.js');
2588
+ const { Opensteer } = await import('../opensteer-XLPY343Y.js');
2504
2589
  const opensteer = new Opensteer({
2505
2590
  workspace: parsed.options.workspace,
2506
2591
  rootDir: process4.cwd(),
@@ -2632,7 +2717,10 @@ async function handleCloseCommand(parsed, engineName, providerMode, runtimeProvi
2632
2717
  }
2633
2718
  async function handleRecordCommandEntry(parsed) {
2634
2719
  if (parsed.options.workspace === void 0) {
2635
- throw new CliError("missing_workspace", 'record requires "--workspace <id>" or OPENSTEER_WORKSPACE.');
2720
+ throw new CliError(
2721
+ "missing_workspace",
2722
+ 'record requires "--workspace <id>" or OPENSTEER_WORKSPACE.'
2723
+ );
2636
2724
  }
2637
2725
  const url = parsed.options.url ?? parsed.rest[0];
2638
2726
  if (url === void 0) {
@@ -2672,7 +2760,10 @@ async function handleRecordCommandEntry(parsed) {
2672
2760
  return;
2673
2761
  }
2674
2762
  if (parsed.options.launch?.headless === true) {
2675
- throw new CliError("config_conflict", 'record requires a headed browser. Remove "--headless true".');
2763
+ throw new CliError(
2764
+ "config_conflict",
2765
+ 'record requires a headed browser. Remove "--headless true".'
2766
+ );
2676
2767
  }
2677
2768
  if (typeof recordBrowser === "object") {
2678
2769
  throw new CliError("config_conflict", 'record does not support browser.mode="attach".');
@@ -2744,7 +2835,10 @@ function resolveCliBootstrapAction(argv) {
2744
2835
  }
2745
2836
  function buildCliBrowserProfile(parsed) {
2746
2837
  if (parsed.options.cloudProfileReuseIfActive === true && parsed.options.cloudProfileId === void 0) {
2747
- throw new CliError("invalid_option", '"--cloud-profile-reuse-if-active" requires "--cloud-profile-id <id>".');
2838
+ throw new CliError(
2839
+ "invalid_option",
2840
+ '"--cloud-profile-reuse-if-active" requires "--cloud-profile-id <id>".'
2841
+ );
2748
2842
  }
2749
2843
  return parsed.options.cloudProfileId === void 0 ? void 0 : {
2750
2844
  profileId: parsed.options.cloudProfileId,