tabwright 1.0.1 → 2.0.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.
@@ -53,8 +53,11 @@ When the user asks to package, share, export, or install a saved capability, use
53
53
  tabwright capability pack <capability-id>
54
54
  tabwright capability install ./<capability-id>.tgz
55
55
  tabwright capability install https://example.com/<capability-id>.tgz
56
+ tabwright capability install 'git@example.com:team/capabilities.git#v1.0.0:capabilities/<capability-id>'
56
57
  ```
57
58
 
59
+ Git sources use `<remote>#<ref>:<capability-path>` and read only that directory with `git archive`, so private SSH repositories do not need to be cloned. Prefer a release tag over a moving branch.
60
+
58
61
  `capability pack` includes only the manifest, entry script, optional README, and optional agent skills. It excludes `secrets.json`, `runs.jsonl`, and `artifacts/`. Shared capabilities always install as `draft`. Do not trust one until its contract and script have been inspected and it has passed a `capability run --force` validation. Authentication must be refreshed from the recipient's own browser. Packaged agent skills are not installed unless the user explicitly passes `--with-agent-skill` or later runs `capability skill install <capability-id>`.
59
62
 
60
63
  ## Replay-to-Capability Handoff
package/dist/bippy.js CHANGED
@@ -1,5 +1,5 @@
1
1
  (() => {
2
- // ../node_modules/.pnpm/bippy@0.5.43_react@19.2.7/node_modules/bippy/dist/rdt-hook.js
2
+ // ../../playwriter/node_modules/.pnpm/bippy@0.5.43_react@19.2.7/node_modules/bippy/dist/rdt-hook.js
3
3
  var e = `0.5.43`;
4
4
  var t = `bippy-${e}`;
5
5
  var n = Object.defineProperty;
@@ -78,10 +78,10 @@
78
78
  } catch {}
79
79
  };
80
80
 
81
- // ../node_modules/.pnpm/bippy@0.5.43_react@19.2.7/node_modules/bippy/dist/install-hook-only.js
81
+ // ../../playwriter/node_modules/.pnpm/bippy@0.5.43_react@19.2.7/node_modules/bippy/dist/install-hook-only.js
82
82
  _();
83
83
 
84
- // ../node_modules/.pnpm/bippy@0.5.43_react@19.2.7/node_modules/bippy/dist/core.js
84
+ // ../../playwriter/node_modules/.pnpm/bippy@0.5.43_react@19.2.7/node_modules/bippy/dist/core.js
85
85
  var b = (e2) => {
86
86
  switch (e2.tag) {
87
87
  case 5:
@@ -199,7 +199,7 @@
199
199
  var Z = Error();
200
200
  var Q = new Set;
201
201
 
202
- // ../node_modules/.pnpm/bippy@0.5.43_react@19.2.7/node_modules/bippy/dist/source.js
202
+ // ../../playwriter/node_modules/.pnpm/bippy@0.5.43_react@19.2.7/node_modules/bippy/dist/source.js
203
203
  var i2 = /^[a-zA-Z][a-zA-Z\d+\-.]*:/;
204
204
  var a2 = [`rsc://`, `file:///`, `webpack-internal://`, `webpack://`, `node:`, `turbopack://`, `metro://`, `/app-pages-browser/`, `/(app-pages-browser)/`];
205
205
  var o2 = [`<anonymous>`, `eval`, ``];
@@ -879,7 +879,7 @@ ${e3.stack}` : ``;
879
879
  var gt = new Set([`Context`, `Context (use)`, `DebugValue`, `Promise`, `Unresolved`, `HostTransitionStatus`]);
880
880
  var kt = new Set([`Effect`, `LayoutEffect`, `InsertionEffect`, `ImperativeHandle`, `DebugValue`]);
881
881
 
882
- // dist/_bippy-entry-27735-1784093019578.js
882
+ // dist/_bippy-entry-53465-1784102736730.js
883
883
  globalThis.__bippy = {
884
884
  getFiberFromHostInstance: Pe,
885
885
  getDisplayName: Ee,
@@ -1,4 +1,5 @@
1
1
  import crypto from 'node:crypto';
2
+ import childProcess from 'node:child_process';
2
3
  import fs from 'node:fs';
3
4
  import path from 'node:path';
4
5
  import { Readable } from 'node:stream';
@@ -214,6 +215,10 @@ async function readPackageSource(options) {
214
215
  integrity: bufferIntegrity(archive),
215
216
  };
216
217
  }
218
+ const gitSource = parseGitCapabilitySource(options.source);
219
+ if (gitSource) {
220
+ return readGitCapabilitySource({ source: options.source, gitSource });
221
+ }
217
222
  if (!/^https?:\/\//.test(options.source)) {
218
223
  throw new Error(`Capability source not found: ${options.source}`);
219
224
  }
@@ -233,6 +238,47 @@ async function readPackageSource(options) {
233
238
  integrity: bufferIntegrity(archive),
234
239
  };
235
240
  }
241
+ function parseGitCapabilitySource(source) {
242
+ const fragmentIndex = source.indexOf('#');
243
+ if (fragmentIndex <= 0) {
244
+ return null;
245
+ }
246
+ const remote = source.slice(0, fragmentIndex);
247
+ const isSupportedRemote = /^[a-zA-Z0-9._-]+@[a-zA-Z0-9._-]+:.+/.test(remote) || remote.startsWith('ssh://') || remote.startsWith('file://');
248
+ if (!isSupportedRemote) {
249
+ return null;
250
+ }
251
+ const selector = source.slice(fragmentIndex + 1);
252
+ const pathSeparatorIndex = selector.indexOf(':');
253
+ if (pathSeparatorIndex <= 0 || pathSeparatorIndex === selector.length - 1) {
254
+ throw new Error('Git capability source must use <remote>#<ref>:<capability-path>');
255
+ }
256
+ const ref = selector.slice(0, pathSeparatorIndex);
257
+ if (!/^[a-zA-Z0-9][a-zA-Z0-9._/@-]*$/.test(ref)) {
258
+ throw new Error(`Git capability source has an invalid ref: ${ref}`);
259
+ }
260
+ const capabilityPath = normalizeRelativePath(selector.slice(pathSeparatorIndex + 1));
261
+ return { remote, ref, capabilityPath };
262
+ }
263
+ async function readGitCapabilitySource(options) {
264
+ const treeish = `${options.gitSource.ref}:${options.gitSource.capabilityPath}`;
265
+ const archive = await new Promise((resolve, reject) => {
266
+ childProcess.execFile('git', ['archive', '--format=tar.gz', '--prefix=package/', `--remote=${options.gitSource.remote}`, treeish], { encoding: 'buffer', maxBuffer: MAX_ARCHIVE_BYTES }, (error, stdout, stderr) => {
267
+ if (error) {
268
+ const detail = stderr.toString('utf-8').trim();
269
+ reject(new Error(detail || `Failed to read Git capability source: ${options.source}`, { cause: error }));
270
+ return;
271
+ }
272
+ resolve(stdout);
273
+ });
274
+ });
275
+ assertArchiveSize({ size: archive.length, label: options.source });
276
+ return {
277
+ label: options.source,
278
+ files: await extractArchiveFiles(archive),
279
+ integrity: bufferIntegrity(archive),
280
+ };
281
+ }
236
282
  async function readArchive(archive) {
237
283
  const extracted = await extractArchiveFiles(archive);
238
284
  const metadataFile = extracted.find((file) => {
@@ -249,12 +295,12 @@ async function extractArchiveFiles(archive) {
249
295
  let totalBytes = 0;
250
296
  const extraction = new Promise((resolve, reject) => {
251
297
  extractor.on('entry', (header, stream, next) => {
252
- const relativePath = normalizeArchiveEntryPath(header.name);
253
298
  if (header.type === 'directory') {
254
299
  stream.resume();
255
300
  next();
256
301
  return;
257
302
  }
303
+ const relativePath = normalizeArchiveEntryPath(header.name);
258
304
  if (header.type !== 'file' && header.type !== null && header.type !== undefined) {
259
305
  stream.resume();
260
306
  next(new Error(`Capability archives cannot contain ${header.type} entries: ${header.name}`));
package/dist/cli.js CHANGED
@@ -23,7 +23,6 @@ import { getTabwrightAgentSkillStatus, installTabwrightAgentSkill, } from './tab
23
23
  import { installCapabilityPackage, packCapability } from './capability-package.js';
24
24
  import { refreshCapabilityAuthWithExecutor } from './capability-auth.js';
25
25
  import { finalizeCapabilityRun, normalizeCapabilityExecutionText, prepareCapabilityRun, readCapabilityExecutionObservation, runNodeCapability, } from './capability-runner.js';
26
- import { installBuiltinCapabilitySuite, isBuiltinCapabilitySuite } from './builtin-capabilities.js';
27
26
  import { createReplayAiIndexFromRecording, saveReplayAiIndex } from './replay-ai-index.js';
28
27
  import { listSavedRrwebRecordings } from './rrweb-recording-relay.js';
29
28
  import { compileReplayWorkflow, UnsupportedReplayWorkflowError, } from './replay-workflow-compiler.js';
@@ -1216,65 +1215,13 @@ cli
1216
1215
  }
1217
1216
  });
1218
1217
  cli
1219
- .command('capability install <source>', 'Install a built-in suite, capability directory, local .tgz, or .tgz URL')
1218
+ .command('capability install <source>', 'Install a capability directory, Git source, local .tgz, or .tgz URL')
1220
1219
  .option('--project', 'Install under .tabwright/capabilities in the current project')
1221
1220
  .option('--force', 'Overwrite existing installed capabilities')
1222
- .option('--draft', 'Install a built-in suite as draft instead of trusted')
1223
- .option('--skip-agent-skills', 'Do not install bundled agent skills such as Codex skills')
1224
1221
  .option('--with-agent-skill', 'Install a shared package agent skill after reviewing the source')
1225
1222
  .option('--json', 'Print JSON')
1226
1223
  .action(async (source, options) => {
1227
1224
  try {
1228
- if (isBuiltinCapabilitySuite(source)) {
1229
- const installed = installBuiltinCapabilitySuite({
1230
- suite: source,
1231
- cwd: process.cwd(),
1232
- location: options.project ? 'project' : 'user',
1233
- overwrite: options.force,
1234
- trust: options.draft ? false : true,
1235
- installAgentSkills: options.skipAgentSkills ? false : true,
1236
- });
1237
- const summary = {
1238
- type: 'builtin',
1239
- suite: installed.suite,
1240
- capabilities: installed.capabilities.map((capability) => {
1241
- return toCapabilitySummary(capability);
1242
- }),
1243
- agentSkills: installed.agentSkills,
1244
- next: installed.capabilities.flatMap((capability) => {
1245
- if (capability.manifest.auth.refresh !== 'from-browser') {
1246
- return [];
1247
- }
1248
- return [`tabwright capability refresh-auth ${capability.manifest.id} --browser user --json`];
1249
- }),
1250
- };
1251
- if (options.json) {
1252
- console.log(JSON.stringify(summary, null, 2));
1253
- return;
1254
- }
1255
- console.log(`Installed ${installed.suite}:`);
1256
- installed.capabilities.map((capability) => {
1257
- console.log(`- ${capability.manifest.id} (${capability.location}, ${capability.manifest.status})`);
1258
- return capability.manifest.id;
1259
- });
1260
- if (installed.agentSkills.length > 0) {
1261
- console.log('');
1262
- console.log('Installed agent skills:');
1263
- installed.agentSkills.map((agentSkill) => {
1264
- console.log(`- ${agentSkill.target}:${agentSkill.name} at ${agentSkill.dir}`);
1265
- return agentSkill.name;
1266
- });
1267
- }
1268
- if (summary.next.length > 0) {
1269
- console.log('');
1270
- console.log('Refresh auth with:');
1271
- summary.next.map((command) => {
1272
- console.log(` ${command}`);
1273
- return command;
1274
- });
1275
- }
1276
- return;
1277
- }
1278
1225
  const installed = await installCapabilityPackage({
1279
1226
  source,
1280
1227
  cwd: process.cwd(),
@@ -1,4 +1,4 @@
1
- //#region ../node_modules/.pnpm/string-dedent@3.0.2/node_modules/string-dedent/dist/dedent.mjs
1
+ //#region ../../playwriter/node_modules/.pnpm/string-dedent@3.0.2/node_modules/string-dedent/dist/dedent.mjs
2
2
  var cache = /* @__PURE__ */ new WeakMap();
3
3
  var newline = /(\n|\r\n?|\u2028|\u2029)/g;
4
4
  var leadingWhitespace = /^\s*/;
@@ -167,7 +167,7 @@ function hexToInt(c) {
167
167
  return -1;
168
168
  }
169
169
  //#endregion
170
- //#region ../node_modules/.pnpm/zustand@5.0.14_@types+react@19.2.17_react@19.2.7/node_modules/zustand/esm/vanilla.mjs
170
+ //#region ../../playwriter/node_modules/.pnpm/zustand@5.0.14_@types+react@19.2.17_react@19.2.7/node_modules/zustand/esm/vanilla.mjs
171
171
  var createStoreImpl = (createState) => {
172
172
  let state;
173
173
  const listeners = /* @__PURE__ */ new Set();
@@ -1458,7 +1458,7 @@ var RELAY_FEATURE = {
1458
1458
  Object.values(RELAY_FEATURE);
1459
1459
  RELAY_FEATURE.capabilityOptions, RELAY_FEATURE.capabilityAuth, RELAY_FEATURE.capabilityAuthAutoTab, RELAY_FEATURE.rrwebRecording;
1460
1460
  //#endregion
1461
- //#region ../tabwright/src/ghost-browser.ts
1461
+ //#region ../../playwriter/tabwright/src/ghost-browser.ts
1462
1462
  /**
1463
1463
  * Handles ghost-browser commands in the extension.
1464
1464
  * Calls the appropriate chrome.* API and returns the result.
@@ -1563,7 +1563,7 @@ var ConnectionOwnership = class {
1563
1563
  var ghost_cursor_client_default = "(() => {\n var __defProp = Object.defineProperty;\n var __getOwnPropNames = Object.getOwnPropertyNames;\n var __getOwnPropDesc = Object.getOwnPropertyDescriptor;\n var __hasOwnProp = Object.prototype.hasOwnProperty;\n function __accessProp(key) {\n return this[key];\n }\n var __toCommonJS = (from) => {\n var entry = (__moduleCache ??= new WeakMap).get(from), desc;\n if (entry)\n return entry;\n entry = __defProp({}, \"__esModule\", { value: true });\n if (from && typeof from === \"object\" || typeof from === \"function\") {\n for (var key of __getOwnPropNames(from))\n if (!__hasOwnProp.call(entry, key))\n __defProp(entry, key, {\n get: __accessProp.bind(from, key),\n enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable\n });\n }\n __moduleCache.set(from, entry);\n return entry;\n };\n var __moduleCache;\n\n // src/ghost-cursor-client.ts\n var exports_ghost_cursor_client = {};\n\n // src/assets/cursors/screen-studio/pointer-macos-tahoe-data-url.ts\n var SCREENSTUDIO_POINTER_MACOS_TAHOE_DATA_URL = \"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNjE4IiBoZWlnaHQ9Ijk1OCIgdmlld0JveD0iMCAwIDYxOCA5NTgiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxnIGZpbHRlcj0idXJsKCNmaWx0ZXIwX2RfMzg0XzI3KSI+CjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNMTI3LjA2MiAzNy4wMzMxTDU0MC42OTYgNDUxLjU1NUM1OTIuNjUzIDUwMy42NiA1NTUuNzk0IDU5Mi41NzQgNDgyLjIyNiA1OTIuNTc0TDQyMS44MzEgNTkyLjU2OUw0ODEuODIxIDczNS4wNTRDNDkyLjMzMSA3NjAuMDIxIDQ5Mi40NzkgNzg3LjY1MiA0ODIuMjY1IDgxMi43NjdDNDcyLjAwMiA4MzcuOTMyIDQ1Mi41NjEgODU3LjU3IDQyNy40OTYgODY4LjA4QzQxNC44NjQgODczLjM1OSA0MDEuNjQgODc2LjAyNCAzODguMTIxIDg3Ni4wMjRDMzQ3LjExNyA4NzYuMDI0IDMxMC4zNTggODUxLjYgMjk0LjQ3IDgxMy44MDRMMjMxLjQyIDY2My45MThMMTkwLjM2OCA3MDAuMzM3QzEzNy4wMjkgNzQ3LjUwOCA1MyA3MDkuNjYzIDUzIDYzOC40MTNWNjcuNjc0NEM1MyAyOC45OTAzIDk5LjcyNjggOS42NDgyOCAxMjcuMDYyIDM3LjAzMzFaIiBmaWxsPSJ3aGl0ZSIvPgo8cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0iTTEwMi4zMTYgOTkuNjUyQzEwMi4zMTYgOTMuMTg4MiAxMTAuMTYyIDg5LjkzMTYgMTE0LjcwMSA5NC41MjA0TDUwNC44OTcgNDg1LjU1NUM1MjYuMTY0IDUwNi44NzEgNTExLjA2NSA1NDMuMjM2IDQ4MC45NjcgNTQzLjIzNkwzNDcuNTQ2IDU0My4xNjFMNDM2LjM0MiA3NTQuMTQzQzQ0Ny41NDIgNzgwLjc4OCA0MzUuMDA5IDgxMS40MjkgNDA4LjQxNCA4MjIuNTgxQzM4MS43MiA4MzMuNzgxIDM1MS4xMjggODIxLjI5OCAzMzkuOTc3IDc5NC43MDJMMjUwLjI5MyA1ODEuMzUyTDE1OC41MTcgNjYyLjY0NEMxMzcuOTkxIDY4MC44MDEgMTA2LjMxOSA2NjguMTQ1IDEwMi42NjQgNjQyLjMyM0wxMDIuMzE2IDYzNy4zMzFWOTkuNjUyWiIgZmlsbD0iYmxhY2siLz4KPC9nPgo8ZGVmcz4KPGZpbHRlciBpZD0iZmlsdGVyMF9kXzM4NF8yNyIgeD0iMC4zNCIgeT0iMC43OTkyMTkiIHdpZHRoPSI2MTcuMzIiIGhlaWdodD0iOTU3LjE0NCIgZmlsdGVyVW5pdHM9InVzZXJTcGFjZU9uVXNlIiBjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM9InNSR0IiPgo8ZmVGbG9vZCBmbG9vZC1vcGFjaXR5PSIwIiByZXN1bHQ9IkJhY2tncm91bmRJbWFnZUZpeCIvPgo8ZmVDb2xvck1hdHJpeCBpbj0iU291cmNlQWxwaGEiIHR5cGU9Im1hdHJpeCIgdmFsdWVzPSIwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAxMjcgMCIgcmVzdWx0PSJoYXJkQWxwaGEiLz4KPGZlT2Zmc2V0IGR5PSIyOS4yNiIvPgo8ZmVHYXVzc2lhbkJsdXIgc3RkRGV2aWF0aW9uPSIyNi4zMyIvPgo8ZmVDb21wb3NpdGUgaW4yPSJoYXJkQWxwaGEiIG9wZXJhdG9yPSJvdXQiLz4KPGZlQ29sb3JNYXRyaXggdHlwZT0ibWF0cml4IiB2YWx1ZXM9IjAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAuNjUgMCIvPgo8ZmVCbGVuZCBtb2RlPSJub3JtYWwiIGluMj0iQmFja2dyb3VuZEltYWdlRml4IiByZXN1bHQ9ImVmZmVjdDFfZHJvcFNoYWRvd18zODRfMjciLz4KPGZlQmxlbmQgbW9kZT0ibm9ybWFsIiBpbj0iU291cmNlR3JhcGhpYyIgaW4yPSJlZmZlY3QxX2Ryb3BTaGFkb3dfMzg0XzI3IiByZXN1bHQ9InNoYXBlIi8+CjwvZmlsdGVyPgo8L2RlZnM+Cjwvc3ZnPg==\";\n\n // src/ghost-cursor-client.ts\n var isTopFrame = (() => {\n try {\n return window === window.top;\n } catch {\n return false;\n }\n })();\n var CURSOR_ID = \"__playwriter_ghost_cursor__\";\n var SCREENSTUDIO_POINTER_ASPECT_RATIO = 618 / 958;\n var SCREENSTUDIO_HOTSPOT_X_RATIO = 0.14;\n var SCREENSTUDIO_HOTSPOT_Y_RATIO = 0.06;\n var MINIMAL_TRIANGLE_HOTSPOT_X_RATIO = 0.07;\n var MINIMAL_TRIANGLE_HOTSPOT_Y_RATIO = 0.06;\n var MOVE_EASING = \"cubic-bezier(0.65, 0, 0.35, 1)\";\n var PRESS_EASING = \"cubic-bezier(0.23, 1, 0.32, 1)\";\n var PRESS_DURATION_MS = 140;\n var IDLE_HIDE_DELAY_MS = 5000;\n var IDLE_FADE_OUT_MS = 600;\n var DEFAULT_OPTIONS = {\n style: \"minimal\",\n color: \"#111827\",\n size: 22,\n zIndex: 2147483647,\n easing: MOVE_EASING,\n minDurationMs: 220,\n maxDurationMs: 1500,\n speedPxPerMs: 1.2\n };\n var runtime = {\n outerElement: null,\n innerElement: null,\n options: DEFAULT_OPTIONS,\n x: 0,\n y: 0,\n scale: 1,\n hasPosition: false,\n enabled: false,\n idleHidden: false\n };\n var idleHideTimer = null;\n function clamp(options) {\n const { value, min, max } = options;\n return Math.min(max, Math.max(min, value));\n }\n function mergeOptions(options) {\n if (!options) {\n return DEFAULT_OPTIONS;\n }\n return {\n style: options.style ?? DEFAULT_OPTIONS.style,\n color: options.color ?? DEFAULT_OPTIONS.color,\n size: options.size ?? DEFAULT_OPTIONS.size,\n zIndex: options.zIndex ?? DEFAULT_OPTIONS.zIndex,\n easing: options.easing ?? DEFAULT_OPTIONS.easing,\n minDurationMs: options.minDurationMs ?? DEFAULT_OPTIONS.minDurationMs,\n maxDurationMs: options.maxDurationMs ?? DEFAULT_OPTIONS.maxDurationMs,\n speedPxPerMs: options.speedPxPerMs ?? DEFAULT_OPTIONS.speedPxPerMs\n };\n }\n function getCursorDimensions() {\n if (runtime.options.style === \"screenstudio\") {\n const height = runtime.options.size;\n const width = Math.max(10, Math.round(height * SCREENSTUDIO_POINTER_ASPECT_RATIO));\n return { width, height };\n }\n if (runtime.options.style === \"minimal\") {\n const size = Math.max(12, runtime.options.size);\n return { width: size, height: size };\n }\n return { width: runtime.options.size, height: runtime.options.size };\n }\n function getHotspotOffsetPx() {\n const dimensions = getCursorDimensions();\n if (runtime.options.style === \"screenstudio\") {\n return {\n x: Math.round(dimensions.width * SCREENSTUDIO_HOTSPOT_X_RATIO),\n y: Math.round(dimensions.height * SCREENSTUDIO_HOTSPOT_Y_RATIO)\n };\n }\n if (runtime.options.style === \"minimal\") {\n return {\n x: Math.round(dimensions.width * MINIMAL_TRIANGLE_HOTSPOT_X_RATIO),\n y: Math.round(dimensions.height * MINIMAL_TRIANGLE_HOTSPOT_Y_RATIO)\n };\n }\n return {\n x: Math.round(dimensions.width / 2),\n y: Math.round(dimensions.height / 2)\n };\n }\n function getBaseOpacity() {\n if (runtime.options.style === \"screenstudio\") {\n return \"0.95\";\n }\n if (runtime.options.style === \"minimal\") {\n return \"1\";\n }\n return \"0.72\";\n }\n function applyTranslate() {\n if (!runtime.outerElement) {\n return;\n }\n const hotspot = getHotspotOffsetPx();\n runtime.outerElement.style.transform = `translate3d(${runtime.x - hotspot.x}px, ${runtime.y - hotspot.y}px, 0)`;\n }\n function applyScale() {\n if (!runtime.innerElement) {\n return;\n }\n runtime.innerElement.style.transform = `scale(${runtime.scale})`;\n }\n function computeDurationMs(options) {\n if (!runtime.hasPosition) {\n return 0;\n }\n const dx = options.targetX - runtime.x;\n const dy = options.targetY - runtime.y;\n const distance = Math.hypot(dx, dy);\n const rawDurationMs = distance / runtime.options.speedPxPerMs;\n return clamp({\n value: rawDurationMs,\n min: runtime.options.minDurationMs,\n max: runtime.options.maxDurationMs\n });\n }\n function createCursorElement() {\n const outer = document.createElement(\"div\");\n outer.id = CURSOR_ID;\n outer.setAttribute(\"aria-hidden\", \"true\");\n outer.style.position = \"fixed\";\n outer.style.left = \"0\";\n outer.style.top = \"0\";\n outer.style.pointerEvents = \"none\";\n outer.style.zIndex = `${runtime.options.zIndex}`;\n outer.style.transitionProperty = \"transform\";\n outer.style.transitionTimingFunction = runtime.options.easing;\n outer.style.transitionDuration = \"0ms\";\n outer.style.willChange = \"transform\";\n const inner = document.createElement(\"div\");\n inner.style.transitionProperty = \"transform, opacity\";\n inner.style.transitionTimingFunction = PRESS_EASING;\n inner.style.transitionDuration = `${PRESS_DURATION_MS}ms`;\n inner.style.opacity = getBaseOpacity();\n outer.appendChild(inner);\n runtime.outerElement = outer;\n runtime.innerElement = inner;\n applyRuntimeVisualOptions();\n return outer;\n }\n function ensureCursorElement() {\n const existing = document.getElementById(CURSOR_ID);\n if (existing) {\n runtime.outerElement = existing;\n runtime.innerElement = existing.firstElementChild || null;\n return existing;\n }\n const outer = createCursorElement();\n const root = document.documentElement || document.body;\n root.appendChild(outer);\n return outer;\n }\n function applyRuntimeVisualOptions() {\n if (!runtime.innerElement) {\n return;\n }\n const dimensions = getCursorDimensions();\n runtime.innerElement.style.width = `${dimensions.width}px`;\n runtime.innerElement.style.height = `${dimensions.height}px`;\n if (runtime.outerElement) {\n runtime.outerElement.style.zIndex = `${runtime.options.zIndex}`;\n runtime.outerElement.style.transitionTimingFunction = runtime.options.easing;\n }\n const hotspot = getHotspotOffsetPx();\n runtime.innerElement.style.transformOrigin = `${hotspot.x}px ${hotspot.y}px`;\n if (runtime.options.style === \"screenstudio\") {\n runtime.innerElement.style.borderRadius = \"0\";\n runtime.innerElement.style.border = \"none\";\n runtime.innerElement.style.backgroundColor = \"transparent\";\n runtime.innerElement.style.backgroundImage = `url(\"${SCREENSTUDIO_POINTER_MACOS_TAHOE_DATA_URL}\")`;\n runtime.innerElement.style.backgroundRepeat = \"no-repeat\";\n runtime.innerElement.style.backgroundPosition = \"left top\";\n runtime.innerElement.style.backgroundSize = \"contain\";\n runtime.innerElement.style.backdropFilter = \"none\";\n runtime.innerElement.style.filter = \"none\";\n runtime.innerElement.style.boxShadow = \"none\";\n runtime.innerElement.style.opacity = getBaseOpacity();\n return;\n }\n if (runtime.options.style === \"minimal\") {\n const triangleSvg = `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"32\" height=\"32\" viewBox=\"-1 -1 26 26\"><path fill=\"white\" stroke=\"${runtime.options.color}\" stroke-width=\"1.5\" stroke-linejoin=\"round\" d=\"m23.284 19.124l-6.866-6.895a.4.4 0 0 1-.118-.296a.43.43 0 0 1 .163-.282l4.439-3.077a1.48 1.48 0 0 0 .621-1.48a1.48 1.48 0 0 0-1.036-1.198L1.623.302a1.14 1.14 0 0 0-1.11.282A1.13 1.13 0 0 0 .29 1.649L5.928 20.44a1.48 1.48 0 0 0 1.183 1.035a1.48 1.48 0 0 0 1.48-.621l3.078-4.44a.37.37 0 0 1 .31-.118a.43.43 0 0 1 .296.104l6.91 6.91a1.48 1.48 0 0 0 2.087 0l2.086-2.086a1.48 1.48 0 0 0-.074-2.101\"/></svg>`;\n const triangleDataUrl = `url(\"data:image/svg+xml,${encodeURIComponent(triangleSvg)}\")`;\n runtime.innerElement.style.borderRadius = \"0\";\n runtime.innerElement.style.border = \"none\";\n runtime.innerElement.style.backgroundColor = \"transparent\";\n runtime.innerElement.style.backgroundImage = triangleDataUrl;\n runtime.innerElement.style.backgroundRepeat = \"no-repeat\";\n runtime.innerElement.style.backgroundSize = \"contain\";\n runtime.innerElement.style.backgroundPosition = \"left top\";\n runtime.innerElement.style.backdropFilter = \"none\";\n runtime.innerElement.style.boxShadow = \"none\";\n runtime.innerElement.style.filter = \"drop-shadow(0 1px 2px rgba(0, 0, 0, 0.4))\";\n runtime.innerElement.style.opacity = getBaseOpacity();\n return;\n }\n runtime.innerElement.style.borderRadius = \"999px\";\n runtime.innerElement.style.border = \"none\";\n runtime.innerElement.style.backgroundColor = runtime.options.color;\n runtime.innerElement.style.backgroundImage = \"none\";\n runtime.innerElement.style.backdropFilter = \"none\";\n runtime.innerElement.style.filter = \"none\";\n runtime.innerElement.style.boxShadow = \"0 2px 10px rgba(0, 0, 0, 0.18), inset 0 0 0 2px rgba(255, 255, 255, 0.55)\";\n runtime.innerElement.style.opacity = getBaseOpacity();\n }\n function clearIdleHideTimer() {\n if (idleHideTimer !== null) {\n clearTimeout(idleHideTimer);\n idleHideTimer = null;\n }\n }\n function scheduleIdleHide() {\n clearIdleHideTimer();\n idleHideTimer = setTimeout(() => {\n idleHideTimer = null;\n if (!runtime.enabled || !runtime.innerElement) {\n return;\n }\n runtime.idleHidden = true;\n runtime.innerElement.style.transitionDuration = `${IDLE_FADE_OUT_MS}ms`;\n runtime.innerElement.style.transitionTimingFunction = PRESS_EASING;\n runtime.innerElement.style.opacity = \"0\";\n }, IDLE_HIDE_DELAY_MS);\n }\n function wakeFromIdle(options) {\n runtime.x = options.x;\n runtime.y = options.y;\n runtime.hasPosition = true;\n if (runtime.innerElement) {\n runtime.innerElement.style.transitionDuration = `${PRESS_DURATION_MS}ms`;\n runtime.innerElement.style.transitionTimingFunction = PRESS_EASING;\n runtime.innerElement.style.opacity = getBaseOpacity();\n }\n }\n function moveCursor(options) {\n if (!runtime.enabled) {\n return;\n }\n ensureCursorElement();\n const durationMs = computeDurationMs({ targetX: options.x, targetY: options.y });\n if (runtime.outerElement) {\n runtime.outerElement.style.transitionDuration = `${Math.round(durationMs)}ms`;\n runtime.outerElement.style.transitionTimingFunction = runtime.options.easing;\n }\n runtime.x = options.x;\n runtime.y = options.y;\n runtime.hasPosition = true;\n applyTranslate();\n }\n function setPressed(options) {\n if (!runtime.enabled || !runtime.innerElement) {\n return;\n }\n runtime.scale = options.pressed ? runtime.options.style === \"dot\" ? 0.92 : 0.95 : 1;\n runtime.innerElement.style.transitionDuration = `${PRESS_DURATION_MS}ms`;\n runtime.innerElement.style.transitionTimingFunction = PRESS_EASING;\n runtime.innerElement.style.opacity = options.pressed ? \"1\" : getBaseOpacity();\n applyScale();\n }\n function enable(options) {\n runtime.options = mergeOptions(options);\n runtime.enabled = true;\n ensureCursorElement();\n applyRuntimeVisualOptions();\n if (!runtime.hasPosition) {\n runtime.x = Math.round(window.innerWidth / 2);\n runtime.y = Math.round(window.innerHeight / 2);\n runtime.scale = 1;\n runtime.hasPosition = true;\n }\n runtime.idleHidden = false;\n if (runtime.innerElement) {\n runtime.innerElement.style.opacity = getBaseOpacity();\n }\n applyTranslate();\n applyScale();\n scheduleIdleHide();\n }\n function disable() {\n runtime.enabled = false;\n runtime.scale = 1;\n runtime.hasPosition = false;\n runtime.idleHidden = false;\n clearIdleHideTimer();\n if (runtime.outerElement) {\n runtime.outerElement.remove();\n runtime.outerElement = null;\n runtime.innerElement = null;\n }\n }\n function applyMouseAction(action) {\n if (!runtime.enabled) {\n return;\n }\n if (runtime.idleHidden) {\n runtime.idleHidden = false;\n wakeFromIdle({ x: action.x, y: action.y });\n }\n if (action.type === \"move\" || action.type === \"wheel\") {\n moveCursor({ x: action.x, y: action.y });\n } else if (action.type === \"down\") {\n moveCursor({ x: action.x, y: action.y });\n setPressed({ pressed: true });\n } else if (action.type === \"up\") {\n moveCursor({ x: action.x, y: action.y });\n setPressed({ pressed: false });\n }\n scheduleIdleHide();\n }\n var api = {\n enable,\n disable,\n applyMouseAction,\n isEnabled: () => {\n return runtime.enabled;\n }\n };\n if (isTopFrame) {\n globalThis.__playwriterGhostCursor = api;\n try {\n if (document.readyState === \"loading\") {\n document.addEventListener(\"DOMContentLoaded\", () => {\n try {\n api.enable();\n } catch {}\n }, { once: true });\n } else {\n api.enable();\n }\n } catch {}\n }\n})();\n";
1564
1564
  //#endregion
1565
1565
  //#region ../tabwright/dist/bippy.js?raw
1566
- var bippy_default = "(() => {\n // ../node_modules/.pnpm/bippy@0.5.43_react@19.2.7/node_modules/bippy/dist/rdt-hook.js\n var e = `0.5.43`;\n var t = `bippy-${e}`;\n var n = Object.defineProperty;\n var r = Object.prototype.hasOwnProperty;\n var i = () => {};\n var a = (e2) => {\n try {\n Function.prototype.toString.call(e2).indexOf(`^_^`) > -1 && setTimeout(() => {\n throw Error(`React is running in production mode, but dead code elimination has not been applied. Read how to correctly configure React for production: https://reactjs.org/link/perf-use-production-build`);\n });\n } catch {}\n };\n var o = (e2 = globalThis.__REACT_DEVTOOLS_GLOBAL_HOOK__) => !!(e2 && (`getFiberRoots` in e2));\n var s = false;\n var c;\n var l = (e2 = globalThis.__REACT_DEVTOOLS_GLOBAL_HOOK__) => s ? true : (e2 && typeof e2.inject == `function` && (c = e2.inject.toString()), !!c?.includes(`(injected)`));\n var u = new Set;\n var d = new Set;\n var f = (e2) => {\n let r2 = new Map, o2 = 0, s2 = { _instrumentationIsActive: false, _instrumentationSource: t, checkDCE: a, hasUnsupportedRendererAttached: false, inject(e3) {\n let t2 = ++o2;\n return r2.set(t2, e3), d.add(e3), s2._instrumentationIsActive || (s2._instrumentationIsActive = true, u.forEach((e4) => e4())), t2;\n }, on: i, onCommitFiberRoot: i, onCommitFiberUnmount: i, onPostCommitFiberRoot: i, renderers: r2, supportsFiber: true, supportsFlight: true };\n try {\n n(globalThis, `__REACT_DEVTOOLS_GLOBAL_HOOK__`, { configurable: true, enumerable: true, get() {\n return s2;\n }, set(t3) {\n if (t3 && typeof t3 == `object`) {\n let n2 = s2.renderers;\n s2 = t3, n2.size > 0 && (n2.forEach((e3, n3) => {\n d.add(e3), t3.renderers.set(n3, e3);\n }), p(e2));\n }\n } });\n let t2 = window.hasOwnProperty, r3 = false;\n n(window, `hasOwnProperty`, { configurable: true, value: function(...e3) {\n try {\n if (!r3 && e3[0] === `__REACT_DEVTOOLS_GLOBAL_HOOK__`)\n return globalThis.__REACT_DEVTOOLS_GLOBAL_HOOK__ = undefined, r3 = true, -0;\n } catch {}\n return t2.apply(this, e3);\n }, writable: true });\n } catch {\n p(e2);\n }\n return s2;\n };\n var p = (e2) => {\n e2 && u.add(e2);\n try {\n let n2 = globalThis.__REACT_DEVTOOLS_GLOBAL_HOOK__;\n if (!n2)\n return;\n if (!n2._instrumentationSource) {\n n2.checkDCE = a, n2.supportsFiber = true, n2.supportsFlight = true, n2.hasUnsupportedRendererAttached = false, n2._instrumentationSource = t, n2._instrumentationIsActive = false;\n let e3 = o(n2);\n if (e3 || (n2.on = i), n2.renderers.size) {\n n2._instrumentationIsActive = true, u.forEach((e4) => e4());\n return;\n }\n let r2 = n2.inject, c2 = l(n2);\n c2 && !e3 && (s = true, n2.inject({ scheduleRefresh() {} }) && (n2._instrumentationIsActive = true)), n2.inject = (e4) => {\n let t2 = r2(e4);\n return d.add(e4), c2 && n2.renderers.set(t2, e4), n2._instrumentationIsActive = true, u.forEach((e5) => e5()), t2;\n };\n }\n (n2.renderers.size || n2._instrumentationIsActive || l()) && e2?.();\n } catch {}\n };\n var m = () => r.call(globalThis, `__REACT_DEVTOOLS_GLOBAL_HOOK__`);\n var h = (e2) => m() ? (p(e2), globalThis.__REACT_DEVTOOLS_GLOBAL_HOOK__) : f(e2);\n var g = () => !!(typeof window < `u` && (window.document?.createElement || window.navigator?.product === `ReactNative`));\n var _ = () => {\n try {\n g() && h();\n } catch {}\n };\n\n // ../node_modules/.pnpm/bippy@0.5.43_react@19.2.7/node_modules/bippy/dist/install-hook-only.js\n _();\n\n // ../node_modules/.pnpm/bippy@0.5.43_react@19.2.7/node_modules/bippy/dist/core.js\n var b = (e2) => {\n switch (e2.tag) {\n case 5:\n case 26:\n case 27:\n return true;\n default:\n return typeof e2.type == `string`;\n }\n };\n var be = (e2) => {\n switch (e2.tag) {\n case 1:\n case 11:\n case 0:\n case 14:\n case 15:\n return true;\n default:\n return false;\n }\n };\n function A(e2, t2, n2 = false) {\n if (!e2)\n return null;\n let r2 = t2(e2);\n if (r2 instanceof Promise)\n return (async () => {\n if (await r2 === true)\n return e2;\n let i3 = n2 ? e2.return : e2.child;\n for (;i3; ) {\n let e3 = await M(i3, t2, n2);\n if (e3)\n return e3;\n i3 = n2 ? null : i3.sibling;\n }\n return null;\n })();\n if (r2 === true)\n return e2;\n let i2 = n2 ? e2.return : e2.child;\n for (;i2; ) {\n let e3 = j(i2, t2, n2);\n if (e3)\n return e3;\n i2 = n2 ? null : i2.sibling;\n }\n return null;\n }\n var j = (e2, t2, n2 = false) => {\n if (!e2)\n return null;\n if (t2(e2) === true)\n return e2;\n let r2 = n2 ? e2.return : e2.child;\n for (;r2; ) {\n let e3 = j(r2, t2, n2);\n if (e3)\n return e3;\n r2 = n2 ? null : r2.sibling;\n }\n return null;\n };\n var M = async (e2, t2, n2 = false) => {\n if (!e2)\n return null;\n if (await t2(e2) === true)\n return e2;\n let r2 = n2 ? e2.return : e2.child;\n for (;r2; ) {\n let e3 = await M(r2, t2, n2);\n if (e3)\n return e3;\n r2 = n2 ? null : r2.sibling;\n }\n return null;\n };\n var N = (e2) => {\n let t2 = e2;\n return typeof t2 == `function` ? t2 : typeof t2 == `object` && t2 ? N(t2.type || t2.render) : null;\n };\n var Ee = (e2) => {\n let t2 = e2;\n if (typeof t2 == `string`)\n return t2;\n if (typeof t2 != `function` && !(typeof t2 == `object` && t2))\n return null;\n let n2 = t2.displayName || t2.name || null;\n if (n2)\n return n2;\n let r2 = N(t2);\n return r2 && (r2.displayName || r2.name) || null;\n };\n var I = new WeakMap;\n var U = new WeakMap;\n var Pe = (e2) => {\n let t2 = globalThis.__REACT_DEVTOOLS_GLOBAL_HOOK__;\n if (t2?.renderers)\n for (let n2 of t2.renderers.values())\n try {\n let t3 = n2.findFiberByHostInstance?.(e2);\n if (t3)\n return t3;\n } catch {}\n if (typeof e2 == `object` && e2) {\n if (`_reactRootContainer` in e2)\n return e2._reactRootContainer?._internalRoot?.current?.child;\n for (let t3 in e2)\n if (t3.startsWith(`__reactContainer$`) || t3.startsWith(`__reactInternalInstance$`) || t3.startsWith(`__reactFiber`))\n return e2[t3] || null;\n }\n return null;\n };\n var Z = Error();\n var Q = new Set;\n\n // ../node_modules/.pnpm/bippy@0.5.43_react@19.2.7/node_modules/bippy/dist/source.js\n var i2 = /^[a-zA-Z][a-zA-Z\\d+\\-.]*:/;\n var a2 = [`rsc://`, `file:///`, `webpack-internal://`, `webpack://`, `node:`, `turbopack://`, `metro://`, `/app-pages-browser/`, `/(app-pages-browser)/`];\n var o2 = [`<anonymous>`, `eval`, ``];\n var s2 = /\\.(jsx|tsx|ts|js)$/;\n var c2 = /(\\.min|bundle|chunk|vendor|vendors|runtime|polyfill|polyfills)\\.(js|mjs|cjs)$|(chunk|bundle|vendor|vendors|runtime|polyfill|polyfills|framework|app|main|index)[-_.][A-Za-z0-9_-]{4,}\\.(js|mjs|cjs)$|[\\da-f]{8,}\\.(js|mjs|cjs)$|[-_.][\\da-f]{20,}\\.(js|mjs|cjs)$|\\/dist\\/|\\/build\\/|\\/.next\\/|\\/out\\/|\\/node_modules\\/|\\.webpack\\.|\\.vite\\.|\\.turbopack\\./i;\n var l2 = /^\\?[\\w~.-]+(?:=[^&#]*)?(?:&[\\w~.-]+(?:=[^&#]*)?)*$/;\n var u2 = /\\(at [^)]+\\)$/;\n var d3 = /(^|@)\\S+:\\d+/;\n var f3 = /^\\s*at .*(\\S+:\\d+|\\(native\\))/m;\n var ee2 = /^(eval@)?(\\[native code\\])?$/;\n var m3 = (e2, t2) => {\n if (t2?.includeInElement !== false) {\n let n2 = e2.split(`\n`), r2 = [];\n for (let e3 of n2)\n if (/^\\s*at\\s+/.test(e3)) {\n let t3 = _3(e3, undefined)[0];\n t3 && r2.push(t3);\n } else if (/^\\s*in\\s+/.test(e3)) {\n let t3 = e3.replace(/^\\s*in\\s+/, ``).replace(/\\s*\\(at .*\\)$/, ``);\n r2.push({ functionName: t3, source: e3 });\n } else if (e3.match(d3)) {\n let t3 = v2(e3, undefined)[0];\n t3 && r2.push(t3);\n }\n return g3(r2, t2);\n }\n return e2.match(f3) ? _3(e2, t2) : v2(e2, t2);\n };\n var h3 = (e2) => {\n if (!e2.includes(`:`))\n return [e2, undefined, undefined];\n let t2 = e2.startsWith(`(`) && /:\\d+\\)$/.test(e2) ? e2.slice(1, -1) : e2, n2 = /(.+?)(?::(\\d+))?(?::(\\d+))?$/.exec(t2);\n return n2 ? [n2[1], n2[2] || undefined, n2[3] || undefined] : [t2, undefined, undefined];\n };\n var g3 = (e2, t2) => t2 && t2.slice != null ? Array.isArray(t2.slice) ? e2.slice(t2.slice[0], t2.slice[1]) : e2.slice(0, t2.slice) : e2;\n var _3 = (e2, t2) => g3(e2.split(`\n`).filter((e3) => !!e3.match(f3)), t2).map((e3) => {\n let t3 = e3;\n t3.includes(`(eval `) && (t3 = t3.replace(/eval code/g, `eval`).replace(/(\\(eval at [^()]*)|(,.*$)/g, ``));\n let n2 = t3.replace(/^\\s+/, ``).replace(/\\(eval code/g, `(`).replace(/^.*?\\s+/, ``), r2 = n2.match(/ (\\(.+\\)$)/);\n n2 = r2 ? n2.replace(r2[0], ``) : n2;\n let i3 = h3(r2 ? r2[1] : n2);\n return { functionName: r2 && n2 || undefined, fileName: [`eval`, `<anonymous>`].includes(i3[0]) ? undefined : i3[0], lineNumber: i3[1] ? +i3[1] : undefined, columnNumber: i3[2] ? +i3[2] : undefined, source: t3 };\n });\n var v2 = (e2, t2) => g3(e2.split(`\n`).filter((e3) => !e3.match(ee2)), t2).map((e3) => {\n let t3 = e3;\n if (t3.includes(` > eval`) && (t3 = t3.replace(/ line (\\d+)(?: > eval line \\d+)* > eval:\\d+:\\d+/g, `:$1`)), !t3.includes(`@`) && !t3.includes(`:`))\n return { functionName: t3 };\n {\n let e4 = /(([^\\n\\r\"\\u2028\\u2029]*\".[^\\n\\r\"\\u2028\\u2029]*\"[^\\n\\r@\\u2028\\u2029]*(?:@[^\\n\\r\"\\u2028\\u2029]*\"[^\\n\\r@\\u2028\\u2029]*)*(?:[\\n\\r\\u2028\\u2029][^@]*)?)?[^@]*)@/, n2 = t3.match(e4), r2 = n2 && n2[1] ? n2[1] : undefined, i3 = h3(t3.replace(e4, ``));\n return { functionName: r2, fileName: i3[0], lineNumber: i3[1] ? +i3[1] : undefined, columnNumber: i3[2] ? +i3[2] : undefined, source: t3 };\n }\n });\n var se2 = 44;\n var y = `ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/`;\n var ce2 = new Uint8Array(64);\n var le2 = new Uint8Array(128);\n for (let e2 = 0;e2 < y.length; e2++) {\n let t2 = y.charCodeAt(e2);\n ce2[e2] = t2, le2[t2] = e2;\n }\n function b2(e2, t2) {\n let n2 = 0, r2 = 0, i3 = 0;\n do\n i3 = le2[e2.next()], n2 |= (i3 & 31) << r2, r2 += 5;\n while (i3 & 32);\n let a3 = n2 & 1;\n return n2 >>>= 1, a3 && (n2 = -2147483648 | -n2), t2 + n2;\n }\n function ue2(e2, t2) {\n return e2.pos >= t2 ? false : e2.peek() !== se2;\n }\n var de2 = class {\n constructor(e2) {\n this.pos = 0, this.buffer = e2;\n }\n next() {\n return this.buffer.charCodeAt(this.pos++);\n }\n peek() {\n return this.buffer.charCodeAt(this.pos);\n }\n indexOf(e2) {\n let { buffer: t2, pos: n2 } = this, r2 = t2.indexOf(e2, n2);\n return r2 === -1 ? t2.length : r2;\n }\n };\n function x2(e2) {\n let { length: t2 } = e2, n2 = new de2(e2), r2 = [], i3 = 0, a3 = 0, o3 = 0, s3 = 0, c3 = 0;\n do {\n let e3 = n2.indexOf(`;`), t3 = [], l3 = true, u3 = 0;\n for (i3 = 0;n2.pos < e3; ) {\n let r3;\n i3 = b2(n2, i3), i3 < u3 && (l3 = false), u3 = i3, ue2(n2, e3) ? (a3 = b2(n2, a3), o3 = b2(n2, o3), s3 = b2(n2, s3), ue2(n2, e3) ? (c3 = b2(n2, c3), r3 = [i3, a3, o3, s3, c3]) : r3 = [i3, a3, o3, s3]) : r3 = [i3], t3.push(r3), n2.pos++;\n }\n l3 || fe2(t3), r2.push(t3), n2.pos = e3 + 1;\n } while (n2.pos <= t2);\n return r2;\n }\n function fe2(e2) {\n e2.sort(pe2);\n }\n function pe2(e2, t2) {\n return e2[0] - t2[0];\n }\n var S2 = /^[a-zA-Z][a-zA-Z\\d+\\-.]*:/;\n var me2 = /^data:application\\/json[^,]+base64,/;\n var he2 = /(?:\\/\\/[@#][ \\t]+sourceMappingURL=([^\\s'\"]+?)[ \\t]*$)|(?:\\/\\*[@#][ \\t]+sourceMappingURL=([^*]+?)[ \\t]*(?:\\*\\/)[ \\t]*$)/;\n var C2 = new Map;\n var w2 = new Map;\n var T2 = (e2, t2, n2, r2) => {\n if (n2 < 0 || n2 >= e2.length)\n return null;\n let i3 = e2[n2];\n if (!i3 || i3.length === 0)\n return null;\n let a3 = null;\n for (let e3 of i3)\n if (e3[0] <= r2)\n a3 = e3;\n else\n break;\n if (!a3 || a3.length < 4)\n return null;\n let [, o3, s3, c3] = a3;\n if (o3 === undefined || s3 === undefined || c3 === undefined)\n return null;\n let l3 = t2[o3];\n return l3 ? { columnNumber: c3, fileName: l3, lineNumber: s3 + 1 } : null;\n };\n var E2 = (e2, t2, n2) => {\n if (e2.sections) {\n let r2 = null;\n for (let i4 of e2.sections)\n if (t2 > i4.offset.line || t2 === i4.offset.line && n2 >= i4.offset.column)\n r2 = i4;\n else\n break;\n if (!r2)\n return null;\n let i3 = t2 - r2.offset.line, a3 = t2 === r2.offset.line ? n2 - r2.offset.column : n2;\n return T2(r2.map.mappings, r2.map.sources, i3, a3);\n }\n return T2(e2.mappings, e2.sources, t2 - 1, n2);\n };\n var ge2 = (e2, t2) => {\n let n2 = t2.split(`\n`), r2;\n for (let e3 = n2.length - 1;e3 >= 0 && !r2; e3--) {\n let t3 = n2[e3].match(he2);\n t3 && (r2 = t3[1] || t3[2]);\n }\n if (!r2)\n return null;\n let i3 = S2.test(r2);\n if (!(me2.test(r2) || i3 || r2.startsWith(`/`))) {\n let t3 = e2.split(`/`);\n t3[t3.length - 1] = r2, r2 = t3.join(`/`);\n }\n return r2;\n };\n var _e2 = (e2) => ({ file: e2.file, mappings: x2(e2.mappings), names: e2.names, sourceRoot: e2.sourceRoot, sources: e2.sources, sourcesContent: e2.sourcesContent, version: 3 });\n var ve2 = (e2) => {\n let t2 = e2.sections.map(({ map: e3, offset: t3 }) => ({ map: { ...e3, mappings: x2(e3.mappings) }, offset: t3 })), n2 = new Set;\n for (let e3 of t2)\n for (let t3 of e3.map.sources)\n n2.add(t3);\n return { file: e2.file, mappings: [], names: [], sections: t2, sourceRoot: undefined, sources: Array.from(n2), sourcesContent: undefined, version: 3 };\n };\n var D2 = (e2) => {\n if (!e2)\n return false;\n let t2 = e2.trim();\n if (!t2)\n return false;\n let n2 = t2.match(S2);\n if (!n2)\n return true;\n let r2 = n2[0].toLowerCase();\n return r2 === `http:` || r2 === `https:`;\n };\n var ye2 = async (e2, t2 = fetch) => {\n if (!D2(e2))\n return null;\n let n2 = await t2(e2);\n if (!n2.ok)\n return null;\n let r2 = await n2.text();\n if (!r2)\n return null;\n let i3 = ge2(e2, r2);\n if (!i3 || !D2(i3))\n return null;\n let a3 = await t2(i3);\n if (!a3.ok)\n return null;\n try {\n let e3 = await a3.json();\n return `sections` in e3 ? ve2(e3) : _e2(e3);\n } catch {\n return null;\n }\n };\n var O2 = async (e2, t2 = true, n2) => {\n if (t2 && C2.has(e2))\n return C2.get(e2) ?? null;\n let r2 = t2 ? w2.get(e2) : undefined;\n if (r2)\n return (await r2).sourceMap;\n let i3 = ye2(e2, n2).then((e3) => ({ sourceMap: e3, isTransientFailure: false }), () => ({ sourceMap: null, isTransientFailure: true }));\n t2 && w2.set(e2, i3);\n let { sourceMap: a3, isTransientFailure: o3 } = await i3;\n return t2 && (w2.delete(e2), o3 || C2.set(e2, a3)), a3;\n };\n var be2 = async (e2, t2 = true, n2) => await Promise.all(e2.map(async (e3) => {\n if (!e3.fileName)\n return e3;\n let r2 = await O2(e3.fileName, t2, n2);\n if (!r2 || typeof e3.lineNumber != `number` || typeof e3.columnNumber != `number`)\n return e3;\n let i3 = E2(r2, e3.lineNumber, e3.columnNumber);\n return i3 ? { ...e3, source: i3.fileName && e3.source ? e3.source.replace(e3.fileName, i3.fileName) : e3.source, fileName: i3.fileName, lineNumber: i3.lineNumber, columnNumber: i3.columnNumber, isSymbolicated: true } : e3;\n }));\n var xe2 = (e2) => e2._debugStack instanceof Error && typeof e2._debugStack?.stack == `string`;\n var Se2 = () => {\n let n2 = h();\n for (let t2 of [...Array.from(d), ...Array.from(n2.renderers.values())]) {\n let e2 = t2.currentDispatcherRef;\n if (e2 && typeof e2 == `object`)\n return `H` in e2 ? e2.H : e2.current;\n }\n return null;\n };\n var Ce2 = (t2) => {\n for (let n2 of d) {\n let e2 = n2.currentDispatcherRef;\n e2 && typeof e2 == `object` && (`H` in e2 ? e2.H = t2 : e2.current = t2);\n }\n };\n var k2 = (e2) => `\n in ${e2}`;\n var we2 = (e2, t2) => {\n let n2 = k2(e2);\n return t2 && (n2 += ` (at ${t2})`), n2;\n };\n var A2 = false;\n var j2 = (e2, t2) => {\n if (!e2 || A2)\n return ``;\n let r2 = Error.prepareStackTrace;\n Error.prepareStackTrace = undefined, A2 = true;\n let i3 = Se2();\n Ce2(null);\n let { error: a3, warn: o3 } = console;\n console.error = () => {}, console.warn = () => {};\n try {\n let r3 = { DetermineComponentFrameRoot() {\n let n2;\n try {\n if (t2) {\n let t3 = function() {\n throw Error();\n };\n if (Object.defineProperty(t3.prototype, `props`, { set: function() {\n throw Error();\n } }), typeof Reflect == `object` && Reflect.construct) {\n try {\n Reflect.construct(t3, []);\n } catch (e3) {\n n2 = e3;\n }\n Reflect.construct(e2, [], t3);\n } else {\n try {\n t3.call();\n } catch (e3) {\n n2 = e3;\n }\n e2.call(t3.prototype);\n }\n } else {\n try {\n throw Error();\n } catch (e3) {\n n2 = e3;\n }\n let t3 = e2();\n t3 && typeof t3.catch == `function` && t3.catch(() => {});\n }\n } catch (e3) {\n if (e3 instanceof Error && n2 instanceof Error && typeof e3.stack == `string`)\n return [e3.stack, n2.stack];\n }\n return [null, null];\n } };\n r3.DetermineComponentFrameRoot.displayName = `DetermineComponentFrameRoot`, Object.getOwnPropertyDescriptor(r3.DetermineComponentFrameRoot, `name`)?.configurable && Object.defineProperty(r3.DetermineComponentFrameRoot, `name`, { value: `DetermineComponentFrameRoot` });\n let [i4, a4] = r3.DetermineComponentFrameRoot();\n if (i4 && a4) {\n let t3 = i4.split(`\n`), r4 = a4.split(`\n`), o4 = 0, s4 = 0;\n for (;o4 < t3.length && !t3[o4].includes(`DetermineComponentFrameRoot`); )\n o4++;\n for (;s4 < r4.length && !r4[s4].includes(`DetermineComponentFrameRoot`); )\n s4++;\n if (o4 === t3.length || s4 === r4.length)\n for (o4 = t3.length - 1, s4 = r4.length - 1;o4 >= 1 && s4 >= 0 && t3[o4] !== r4[s4]; )\n s4--;\n for (;o4 >= 1 && s4 >= 0; o4--, s4--)\n if (t3[o4] !== r4[s4]) {\n if (o4 !== 1 || s4 !== 1)\n do\n if (o4--, s4--, s4 < 0 || t3[o4] !== r4[s4]) {\n let r5 = `\n${t3[o4].replace(` at new `, ` at `)}`, i5 = Ee(e2);\n return i5 && r5.includes(`<anonymous>`) && (r5 = r5.replace(`<anonymous>`, i5)), r5;\n }\n while (o4 >= 1 && s4 >= 0);\n break;\n }\n }\n } finally {\n A2 = false, Error.prepareStackTrace = r2, Ce2(i3), console.error = a3, console.warn = o3;\n }\n let s3 = e2 ? Ee(e2) : ``;\n return s3 ? k2(s3) : ``;\n };\n var M2 = (e2, t2) => {\n let n2 = e2.tag, r2 = ``;\n switch (n2) {\n case 28:\n r2 = k2(`Activity`);\n break;\n case 1:\n r2 = j2(e2.type, true);\n break;\n case 11:\n r2 = j2(e2.type.render, false);\n break;\n case 0:\n case 15:\n r2 = j2(e2.type, false);\n break;\n case 5:\n case 26:\n case 27:\n r2 = k2(e2.type);\n break;\n case 16:\n r2 = k2(`Lazy`);\n break;\n case 13:\n r2 = e2.child !== t2 && t2 !== null ? k2(`Suspense Fallback`) : k2(`Suspense`);\n break;\n case 19:\n r2 = k2(`SuspenseList`);\n break;\n case 30:\n r2 = k2(`ViewTransition`);\n break;\n default:\n return ``;\n }\n return r2;\n };\n var N2 = (e2) => {\n try {\n let t2 = ``, n2 = e2, r2 = null;\n do {\n t2 += M2(n2, r2);\n let e3 = n2._debugInfo;\n if (e3 && Array.isArray(e3))\n for (let n3 = e3.length - 1;n3 >= 0; n3--) {\n let r3 = e3[n3];\n typeof r3.name == `string` && (t2 += we2(r3.name, r3.env));\n }\n r2 = n2, n2 = n2.return;\n } while (n2);\n return t2;\n } catch (e3) {\n return e3 instanceof Error ? `\nError generating stack: ${e3.message}\n${e3.stack}` : ``;\n }\n };\n var P2 = (e2) => {\n let t2 = Error.prepareStackTrace;\n Error.prepareStackTrace = undefined;\n let n2 = e2;\n if (!n2)\n return ``;\n Error.prepareStackTrace = t2, n2.startsWith(`Error: react-stack-top-frame\n`) && (n2 = n2.slice(29));\n let r2 = n2.indexOf(`\n`);\n if (r2 !== -1 && (n2 = n2.slice(r2 + 1)), r2 = Math.max(n2.indexOf(`react_stack_bottom_frame`), n2.indexOf(`react-stack-bottom-frame`)), r2 !== -1 && (r2 = n2.lastIndexOf(`\n`, r2)), r2 !== -1)\n n2 = n2.slice(0, r2);\n else\n return ``;\n return n2;\n };\n var Te2 = (e2) => !!(e2.functionName && e2.fileName && (e2.fileName.startsWith(`rsc://`) || e2.fileName.startsWith(`about://React/`)));\n var Ee2 = (e2, t2) => e2.fileName === t2.fileName && e2.lineNumber === t2.lineNumber && e2.columnNumber === t2.columnNumber;\n var De2 = (e2) => {\n let t2 = new Map;\n for (let n2 of e2)\n for (let e3 of n2.stackFrames) {\n if (!Te2(e3))\n continue;\n let n3 = e3.functionName, r2 = t2.get(n3) ?? [];\n r2.some((t3) => Ee2(t3, e3)) || (r2.push(e3), t2.set(n3, r2));\n }\n return t2;\n };\n var Oe2 = (e2, t2, n2) => {\n if (!e2.functionName)\n return { ...e2, isServer: true };\n let r2 = t2.get(e2.functionName);\n if (!r2 || r2.length === 0)\n return { ...e2, isServer: true };\n let i3 = n2.get(e2.functionName) ?? 0, a3 = r2[i3 % r2.length];\n return n2.set(e2.functionName, i3 + 1), { ...e2, isServer: true, fileName: a3.fileName, lineNumber: a3.lineNumber, columnNumber: a3.columnNumber, source: e2.source?.replace(`(at Server)`, `(${a3.fileName}:${a3.lineNumber}:${a3.columnNumber})`) };\n };\n var ke = (e2) => {\n let t2 = [];\n return A(e2, (e3) => {\n if (!xe2(e3))\n return;\n let r2 = typeof e3.type == `string` ? e3.type : Ee(e3.type) || `<anonymous>`;\n t2.push({ componentName: r2, stackFrames: m3(P2(e3._debugStack?.stack)) });\n }, true), t2;\n };\n var F = async (e2, t2 = true, n2) => {\n let r2 = ke(e2), i3 = m3(N2(e2)), a3 = De2(r2), o3 = new Map;\n return be2(i3.map((e3) => (e3.source?.includes(`(at Server)`) ?? false) || e3.source != null && u2.test(e3.source) ? Oe2(e3, a3, o3) : e3).filter((e3, t3, n3) => {\n if (t3 === 0)\n return true;\n let r3 = n3[t3 - 1];\n return e3.functionName !== r3.functionName;\n }), t2, n2);\n };\n var I2 = (e2) => {\n let t2 = e2._debugSource;\n return t2 ? typeof t2 == `object` && !!t2 && `fileName` in t2 && typeof t2.fileName == `string` && `lineNumber` in t2 && typeof t2.lineNumber == `number` : false;\n };\n var Ae2 = async (e2, t2 = true, n2) => {\n if (I2(e2))\n return e2._debugSource || null;\n let r2 = await F(e2, t2, n2);\n for (let e3 of r2)\n if (e3.fileName)\n return { fileName: e3.fileName, lineNumber: e3.lineNumber, columnNumber: e3.columnNumber, functionName: e3.functionName };\n return null;\n };\n var L2 = (e2) => e2.split(`/`).filter(Boolean).length;\n var je2 = (e2) => e2.split(`/`).filter(Boolean)[0] ?? null;\n var Me2 = (e2) => {\n let t2 = e2.indexOf(`/`, 1);\n if (t2 === -1 || L2(e2.slice(0, t2)) !== 1)\n return e2;\n let n2 = e2.slice(t2);\n if (!s2.test(n2) || L2(n2) < 2)\n return e2;\n let r2 = je2(n2);\n return !r2 || r2.startsWith(`@`) || r2.length > 4 ? e2 : n2;\n };\n var R2 = (e2) => {\n if (!e2 || o2.some((t3) => t3 === e2))\n return ``;\n let t2 = e2, n2 = t2.startsWith(`http://`) || t2.startsWith(`https://`);\n if (n2)\n try {\n t2 = new URL(t2).pathname;\n } catch {}\n if (n2 && (t2 = Me2(t2)), t2.startsWith(`about://React/`)) {\n let e3 = t2.slice(14), n3 = e3.indexOf(`/`), r3 = e3.indexOf(`:`);\n t2 = n3 !== -1 && (r3 === -1 || n3 < r3) ? e3.slice(n3 + 1) : e3;\n }\n let r2 = true;\n for (;r2; ) {\n r2 = false;\n for (let e3 of a2)\n if (t2.startsWith(e3)) {\n t2 = t2.slice(e3.length), e3 === `file:///` && (t2 = `/${t2.replace(/^\\/+/, ``)}`), r2 = true;\n break;\n }\n }\n if (i2.test(t2)) {\n let e3 = t2.match(i2);\n e3 && (t2 = t2.slice(e3[0].length));\n }\n if (t2.startsWith(`//`)) {\n let e3 = t2.indexOf(`/`, 2);\n t2 = e3 === -1 ? `` : t2.slice(e3);\n }\n let s3 = t2.indexOf(`?`);\n if (s3 !== -1) {\n let e3 = t2.slice(s3);\n l2.test(e3) && (t2 = t2.slice(0, s3));\n }\n return t2;\n };\n var Ne2 = (e2) => {\n let t2 = R2(e2);\n return !(!t2 || !s2.test(t2) || c2.test(t2));\n };\n var z2 = Symbol.for(`react.context`);\n var Ie2 = Symbol.for(`react.memo_cache_sentinel`);\n var B2 = [];\n var H2 = null;\n var U2 = null;\n var W = null;\n var G = 0;\n var K = null;\n var q2 = Error(\"Suspense Exception: This is not a real error! It's an implementation detail of `use` to interrupt the current render.\");\n var Y = () => {\n let e2 = U2;\n return e2 !== null && (U2 = e2.next), e2;\n };\n var X2 = (e2) => {\n if (H2 === null)\n return e2._currentValue;\n if (W === null)\n throw Error(`Context reads do not line up with context dependencies.`);\n if (Object.prototype.hasOwnProperty.call(W, `memoizedValue`)) {\n let e3 = W.memoizedValue;\n return W = W.next, e3;\n }\n return e2._currentValue;\n };\n var Z2 = (e2, t2, n2, r2 = null) => {\n B2.push({ displayName: r2, primitive: e2, stackError: Error(), value: t2, dispatcherHookName: n2 });\n };\n var Be = (e2) => {\n if (typeof e2 == `object` && e2) {\n let t2 = e2;\n if (typeof t2.then == `function`) {\n let e3 = K !== null && G < K.length ? K[G++] : t2;\n switch (e3.status) {\n case `fulfilled`:\n return Z2(`Promise`, e3.value, `Use`), e3.value;\n case `rejected`:\n throw e3.reason;\n }\n throw Z2(`Unresolved`, e3, `Use`), q2;\n }\n if (t2.$$typeof === z2 && `_currentValue` in t2) {\n let e3 = t2, n2 = X2(e3);\n return Z2(`Context (use)`, n2, `Use`, e3.displayName || `Context`), n2;\n }\n }\n throw Error(`An unsupported type was passed to use(): ` + String(e2));\n };\n var Ve = (e2) => {\n let t2 = X2(e2);\n return Z2(`Context`, t2, `Context`, e2.displayName || null), t2;\n };\n var He = (e2) => {\n let t2 = Y(), n2 = t2 === null ? typeof e2 == `function` ? e2() : e2 : t2.memoizedState;\n return Z2(`State`, n2, `State`), [n2, () => {}];\n };\n var Ue = (e2, t2, n2) => {\n let r2 = Y(), i3 = r2 === null ? n2 === undefined ? t2 : n2(t2) : r2.memoizedState;\n return Z2(`Reducer`, i3, `Reducer`), [i3, () => {}];\n };\n var We = (e2) => {\n let t2 = Y(), n2 = t2 === null ? { current: e2 } : t2.memoizedState;\n return Z2(`Ref`, n2.current, `Ref`), n2;\n };\n var Ge = () => {\n let e2 = Y();\n return Z2(`CacheRefresh`, e2 === null ? () => {} : e2.memoizedState, `CacheRefresh`), () => {};\n };\n var Ke = (e2) => {\n Y(), Z2(`LayoutEffect`, e2, `LayoutEffect`);\n };\n var qe = (e2) => {\n Y(), Z2(`InsertionEffect`, e2, `InsertionEffect`);\n };\n var Je = (e2) => {\n Y(), Z2(`Effect`, e2, `Effect`);\n };\n var Ye = (e2) => {\n Y();\n let t2;\n typeof e2 == `object` && e2 && `current` in e2 && (t2 = e2.current), Z2(`ImperativeHandle`, t2, `ImperativeHandle`);\n };\n var Xe = (e2, t2) => {\n Z2(`DebugValue`, typeof t2 == `function` ? t2(e2) : e2, `DebugValue`);\n };\n var Ze = (e2) => {\n let t2 = Y();\n return Z2(`Callback`, t2 === null ? e2 : t2.memoizedState[0], `Callback`), e2;\n };\n var Qe = (e2) => {\n let t2 = Y(), n2 = t2 === null ? e2() : t2.memoizedState[0];\n return Z2(`Memo`, n2, `Memo`), n2;\n };\n var $e = (e2, t2) => {\n let n2 = Y();\n Y();\n let r2 = n2 === null ? t2() : n2.memoizedState;\n return Z2(`SyncExternalStore`, r2, `SyncExternalStore`), r2;\n };\n var et = () => {\n let e2 = Y();\n Y();\n let t2 = e2 === null ? false : e2.memoizedState;\n return Z2(`Transition`, t2, `Transition`), [t2, () => {}];\n };\n var tt = (e2) => {\n let t2 = Y(), n2 = t2 === null ? e2 : t2.memoizedState;\n return Z2(`DeferredValue`, n2, `DeferredValue`), n2;\n };\n var nt = () => {\n let e2 = Y(), t2 = e2 === null ? `` : e2.memoizedState;\n return Z2(`Id`, t2, `Id`), t2;\n };\n var rt = (e2) => {\n let t2 = H2;\n if (t2 == null)\n return [];\n let n2 = t2.updateQueue?.memoCache;\n if (n2 == null)\n return [];\n let r2 = n2.data[n2.index];\n return r2 === undefined && (r2 = n2.data[n2.index] = Array.from({ length: e2 }, () => Ie2)), n2.index++, r2;\n };\n var it = (e2) => {\n let t2 = Y(), n2 = t2 === null ? e2 : t2.memoizedState;\n return Z2(`Optimistic`, n2, `Optimistic`), [n2, () => {}];\n };\n var at = (e2, t2) => {\n let n2, r2 = null;\n if (e2 !== null) {\n let t3 = e2.memoizedState;\n if (typeof t3 == `object` && t3 && `then` in t3 && typeof t3.then == `function`) {\n let e3 = t3;\n switch (e3.status) {\n case `fulfilled`:\n n2 = e3.value;\n break;\n case `rejected`:\n r2 = e3.reason;\n break;\n default:\n r2 = q2, n2 = e3;\n }\n } else\n n2 = t3;\n } else\n n2 = t2;\n return { value: n2, error: r2 };\n };\n var ot = (e2) => (t2, n2) => {\n let r2 = Y();\n Y(), Y();\n let i3 = Error(), { value: a3, error: o3 } = at(r2, n2);\n if (B2.push({ displayName: null, primitive: e2, stackError: i3, value: a3, dispatcherHookName: e2 }), o3 !== null)\n throw o3;\n return [a3, () => {}, false];\n };\n var st = ot(`ActionState`);\n var Q2 = { readContext: X2, use: Be, useCallback: Ze, useContext: Ve, useEffect: Je, useImperativeHandle: Ye, useLayoutEffect: Ke, useInsertionEffect: qe, useMemo: Qe, useReducer: Ue, useRef: We, useState: He, useDebugValue: Xe, useDeferredValue: tt, useTransition: et, useSyncExternalStore: $e, useId: nt, useHostTransitionStatus: () => {\n let e2 = X2({ _currentValue: null });\n return Z2(`HostTransitionStatus`, e2, `HostTransitionStatus`), e2;\n }, useFormState: ot(`FormState`), useActionState: st, useOptimistic: it, useMemoCache: rt, useCacheRefresh: Ge, useEffectEvent: (e2) => (Y(), Z2(`EffectEvent`, e2, `EffectEvent`), e2) };\n var ct = typeof Proxy > `u` ? Q2 : new Proxy(Q2, { get(e2, t2) {\n if (Object.prototype.hasOwnProperty.call(e2, t2))\n return e2[t2];\n let n2 = Error(`Missing method in Dispatcher: ` + t2);\n throw n2.name = `ReactDebugToolsUnsupportedHookError`, n2;\n } });\n var gt = new Set([`Context`, `Context (use)`, `DebugValue`, `Promise`, `Unresolved`, `HostTransitionStatus`]);\n var kt = new Set([`Effect`, `LayoutEffect`, `InsertionEffect`, `ImperativeHandle`, `DebugValue`]);\n\n // dist/_bippy-entry-27735-1784093019578.js\n globalThis.__bippy = {\n getFiberFromHostInstance: Pe,\n getDisplayName: Ee,\n traverseFiber: A,\n isCompositeFiber: be,\n isHostFiber: b,\n getSource: Ae2,\n getOwnerStack: F,\n normalizeFileName: R2,\n isSourceFile: Ne2\n };\n})();\n";
1566
+ var bippy_default = "(() => {\n // ../../playwriter/node_modules/.pnpm/bippy@0.5.43_react@19.2.7/node_modules/bippy/dist/rdt-hook.js\n var e = `0.5.43`;\n var t = `bippy-${e}`;\n var n = Object.defineProperty;\n var r = Object.prototype.hasOwnProperty;\n var i = () => {};\n var a = (e2) => {\n try {\n Function.prototype.toString.call(e2).indexOf(`^_^`) > -1 && setTimeout(() => {\n throw Error(`React is running in production mode, but dead code elimination has not been applied. Read how to correctly configure React for production: https://reactjs.org/link/perf-use-production-build`);\n });\n } catch {}\n };\n var o = (e2 = globalThis.__REACT_DEVTOOLS_GLOBAL_HOOK__) => !!(e2 && (`getFiberRoots` in e2));\n var s = false;\n var c;\n var l = (e2 = globalThis.__REACT_DEVTOOLS_GLOBAL_HOOK__) => s ? true : (e2 && typeof e2.inject == `function` && (c = e2.inject.toString()), !!c?.includes(`(injected)`));\n var u = new Set;\n var d = new Set;\n var f = (e2) => {\n let r2 = new Map, o2 = 0, s2 = { _instrumentationIsActive: false, _instrumentationSource: t, checkDCE: a, hasUnsupportedRendererAttached: false, inject(e3) {\n let t2 = ++o2;\n return r2.set(t2, e3), d.add(e3), s2._instrumentationIsActive || (s2._instrumentationIsActive = true, u.forEach((e4) => e4())), t2;\n }, on: i, onCommitFiberRoot: i, onCommitFiberUnmount: i, onPostCommitFiberRoot: i, renderers: r2, supportsFiber: true, supportsFlight: true };\n try {\n n(globalThis, `__REACT_DEVTOOLS_GLOBAL_HOOK__`, { configurable: true, enumerable: true, get() {\n return s2;\n }, set(t3) {\n if (t3 && typeof t3 == `object`) {\n let n2 = s2.renderers;\n s2 = t3, n2.size > 0 && (n2.forEach((e3, n3) => {\n d.add(e3), t3.renderers.set(n3, e3);\n }), p(e2));\n }\n } });\n let t2 = window.hasOwnProperty, r3 = false;\n n(window, `hasOwnProperty`, { configurable: true, value: function(...e3) {\n try {\n if (!r3 && e3[0] === `__REACT_DEVTOOLS_GLOBAL_HOOK__`)\n return globalThis.__REACT_DEVTOOLS_GLOBAL_HOOK__ = undefined, r3 = true, -0;\n } catch {}\n return t2.apply(this, e3);\n }, writable: true });\n } catch {\n p(e2);\n }\n return s2;\n };\n var p = (e2) => {\n e2 && u.add(e2);\n try {\n let n2 = globalThis.__REACT_DEVTOOLS_GLOBAL_HOOK__;\n if (!n2)\n return;\n if (!n2._instrumentationSource) {\n n2.checkDCE = a, n2.supportsFiber = true, n2.supportsFlight = true, n2.hasUnsupportedRendererAttached = false, n2._instrumentationSource = t, n2._instrumentationIsActive = false;\n let e3 = o(n2);\n if (e3 || (n2.on = i), n2.renderers.size) {\n n2._instrumentationIsActive = true, u.forEach((e4) => e4());\n return;\n }\n let r2 = n2.inject, c2 = l(n2);\n c2 && !e3 && (s = true, n2.inject({ scheduleRefresh() {} }) && (n2._instrumentationIsActive = true)), n2.inject = (e4) => {\n let t2 = r2(e4);\n return d.add(e4), c2 && n2.renderers.set(t2, e4), n2._instrumentationIsActive = true, u.forEach((e5) => e5()), t2;\n };\n }\n (n2.renderers.size || n2._instrumentationIsActive || l()) && e2?.();\n } catch {}\n };\n var m = () => r.call(globalThis, `__REACT_DEVTOOLS_GLOBAL_HOOK__`);\n var h = (e2) => m() ? (p(e2), globalThis.__REACT_DEVTOOLS_GLOBAL_HOOK__) : f(e2);\n var g = () => !!(typeof window < `u` && (window.document?.createElement || window.navigator?.product === `ReactNative`));\n var _ = () => {\n try {\n g() && h();\n } catch {}\n };\n\n // ../../playwriter/node_modules/.pnpm/bippy@0.5.43_react@19.2.7/node_modules/bippy/dist/install-hook-only.js\n _();\n\n // ../../playwriter/node_modules/.pnpm/bippy@0.5.43_react@19.2.7/node_modules/bippy/dist/core.js\n var b = (e2) => {\n switch (e2.tag) {\n case 5:\n case 26:\n case 27:\n return true;\n default:\n return typeof e2.type == `string`;\n }\n };\n var be = (e2) => {\n switch (e2.tag) {\n case 1:\n case 11:\n case 0:\n case 14:\n case 15:\n return true;\n default:\n return false;\n }\n };\n function A(e2, t2, n2 = false) {\n if (!e2)\n return null;\n let r2 = t2(e2);\n if (r2 instanceof Promise)\n return (async () => {\n if (await r2 === true)\n return e2;\n let i3 = n2 ? e2.return : e2.child;\n for (;i3; ) {\n let e3 = await M(i3, t2, n2);\n if (e3)\n return e3;\n i3 = n2 ? null : i3.sibling;\n }\n return null;\n })();\n if (r2 === true)\n return e2;\n let i2 = n2 ? e2.return : e2.child;\n for (;i2; ) {\n let e3 = j(i2, t2, n2);\n if (e3)\n return e3;\n i2 = n2 ? null : i2.sibling;\n }\n return null;\n }\n var j = (e2, t2, n2 = false) => {\n if (!e2)\n return null;\n if (t2(e2) === true)\n return e2;\n let r2 = n2 ? e2.return : e2.child;\n for (;r2; ) {\n let e3 = j(r2, t2, n2);\n if (e3)\n return e3;\n r2 = n2 ? null : r2.sibling;\n }\n return null;\n };\n var M = async (e2, t2, n2 = false) => {\n if (!e2)\n return null;\n if (await t2(e2) === true)\n return e2;\n let r2 = n2 ? e2.return : e2.child;\n for (;r2; ) {\n let e3 = await M(r2, t2, n2);\n if (e3)\n return e3;\n r2 = n2 ? null : r2.sibling;\n }\n return null;\n };\n var N = (e2) => {\n let t2 = e2;\n return typeof t2 == `function` ? t2 : typeof t2 == `object` && t2 ? N(t2.type || t2.render) : null;\n };\n var Ee = (e2) => {\n let t2 = e2;\n if (typeof t2 == `string`)\n return t2;\n if (typeof t2 != `function` && !(typeof t2 == `object` && t2))\n return null;\n let n2 = t2.displayName || t2.name || null;\n if (n2)\n return n2;\n let r2 = N(t2);\n return r2 && (r2.displayName || r2.name) || null;\n };\n var I = new WeakMap;\n var U = new WeakMap;\n var Pe = (e2) => {\n let t2 = globalThis.__REACT_DEVTOOLS_GLOBAL_HOOK__;\n if (t2?.renderers)\n for (let n2 of t2.renderers.values())\n try {\n let t3 = n2.findFiberByHostInstance?.(e2);\n if (t3)\n return t3;\n } catch {}\n if (typeof e2 == `object` && e2) {\n if (`_reactRootContainer` in e2)\n return e2._reactRootContainer?._internalRoot?.current?.child;\n for (let t3 in e2)\n if (t3.startsWith(`__reactContainer$`) || t3.startsWith(`__reactInternalInstance$`) || t3.startsWith(`__reactFiber`))\n return e2[t3] || null;\n }\n return null;\n };\n var Z = Error();\n var Q = new Set;\n\n // ../../playwriter/node_modules/.pnpm/bippy@0.5.43_react@19.2.7/node_modules/bippy/dist/source.js\n var i2 = /^[a-zA-Z][a-zA-Z\\d+\\-.]*:/;\n var a2 = [`rsc://`, `file:///`, `webpack-internal://`, `webpack://`, `node:`, `turbopack://`, `metro://`, `/app-pages-browser/`, `/(app-pages-browser)/`];\n var o2 = [`<anonymous>`, `eval`, ``];\n var s2 = /\\.(jsx|tsx|ts|js)$/;\n var c2 = /(\\.min|bundle|chunk|vendor|vendors|runtime|polyfill|polyfills)\\.(js|mjs|cjs)$|(chunk|bundle|vendor|vendors|runtime|polyfill|polyfills|framework|app|main|index)[-_.][A-Za-z0-9_-]{4,}\\.(js|mjs|cjs)$|[\\da-f]{8,}\\.(js|mjs|cjs)$|[-_.][\\da-f]{20,}\\.(js|mjs|cjs)$|\\/dist\\/|\\/build\\/|\\/.next\\/|\\/out\\/|\\/node_modules\\/|\\.webpack\\.|\\.vite\\.|\\.turbopack\\./i;\n var l2 = /^\\?[\\w~.-]+(?:=[^&#]*)?(?:&[\\w~.-]+(?:=[^&#]*)?)*$/;\n var u2 = /\\(at [^)]+\\)$/;\n var d3 = /(^|@)\\S+:\\d+/;\n var f3 = /^\\s*at .*(\\S+:\\d+|\\(native\\))/m;\n var ee2 = /^(eval@)?(\\[native code\\])?$/;\n var m3 = (e2, t2) => {\n if (t2?.includeInElement !== false) {\n let n2 = e2.split(`\n`), r2 = [];\n for (let e3 of n2)\n if (/^\\s*at\\s+/.test(e3)) {\n let t3 = _3(e3, undefined)[0];\n t3 && r2.push(t3);\n } else if (/^\\s*in\\s+/.test(e3)) {\n let t3 = e3.replace(/^\\s*in\\s+/, ``).replace(/\\s*\\(at .*\\)$/, ``);\n r2.push({ functionName: t3, source: e3 });\n } else if (e3.match(d3)) {\n let t3 = v2(e3, undefined)[0];\n t3 && r2.push(t3);\n }\n return g3(r2, t2);\n }\n return e2.match(f3) ? _3(e2, t2) : v2(e2, t2);\n };\n var h3 = (e2) => {\n if (!e2.includes(`:`))\n return [e2, undefined, undefined];\n let t2 = e2.startsWith(`(`) && /:\\d+\\)$/.test(e2) ? e2.slice(1, -1) : e2, n2 = /(.+?)(?::(\\d+))?(?::(\\d+))?$/.exec(t2);\n return n2 ? [n2[1], n2[2] || undefined, n2[3] || undefined] : [t2, undefined, undefined];\n };\n var g3 = (e2, t2) => t2 && t2.slice != null ? Array.isArray(t2.slice) ? e2.slice(t2.slice[0], t2.slice[1]) : e2.slice(0, t2.slice) : e2;\n var _3 = (e2, t2) => g3(e2.split(`\n`).filter((e3) => !!e3.match(f3)), t2).map((e3) => {\n let t3 = e3;\n t3.includes(`(eval `) && (t3 = t3.replace(/eval code/g, `eval`).replace(/(\\(eval at [^()]*)|(,.*$)/g, ``));\n let n2 = t3.replace(/^\\s+/, ``).replace(/\\(eval code/g, `(`).replace(/^.*?\\s+/, ``), r2 = n2.match(/ (\\(.+\\)$)/);\n n2 = r2 ? n2.replace(r2[0], ``) : n2;\n let i3 = h3(r2 ? r2[1] : n2);\n return { functionName: r2 && n2 || undefined, fileName: [`eval`, `<anonymous>`].includes(i3[0]) ? undefined : i3[0], lineNumber: i3[1] ? +i3[1] : undefined, columnNumber: i3[2] ? +i3[2] : undefined, source: t3 };\n });\n var v2 = (e2, t2) => g3(e2.split(`\n`).filter((e3) => !e3.match(ee2)), t2).map((e3) => {\n let t3 = e3;\n if (t3.includes(` > eval`) && (t3 = t3.replace(/ line (\\d+)(?: > eval line \\d+)* > eval:\\d+:\\d+/g, `:$1`)), !t3.includes(`@`) && !t3.includes(`:`))\n return { functionName: t3 };\n {\n let e4 = /(([^\\n\\r\"\\u2028\\u2029]*\".[^\\n\\r\"\\u2028\\u2029]*\"[^\\n\\r@\\u2028\\u2029]*(?:@[^\\n\\r\"\\u2028\\u2029]*\"[^\\n\\r@\\u2028\\u2029]*)*(?:[\\n\\r\\u2028\\u2029][^@]*)?)?[^@]*)@/, n2 = t3.match(e4), r2 = n2 && n2[1] ? n2[1] : undefined, i3 = h3(t3.replace(e4, ``));\n return { functionName: r2, fileName: i3[0], lineNumber: i3[1] ? +i3[1] : undefined, columnNumber: i3[2] ? +i3[2] : undefined, source: t3 };\n }\n });\n var se2 = 44;\n var y = `ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/`;\n var ce2 = new Uint8Array(64);\n var le2 = new Uint8Array(128);\n for (let e2 = 0;e2 < y.length; e2++) {\n let t2 = y.charCodeAt(e2);\n ce2[e2] = t2, le2[t2] = e2;\n }\n function b2(e2, t2) {\n let n2 = 0, r2 = 0, i3 = 0;\n do\n i3 = le2[e2.next()], n2 |= (i3 & 31) << r2, r2 += 5;\n while (i3 & 32);\n let a3 = n2 & 1;\n return n2 >>>= 1, a3 && (n2 = -2147483648 | -n2), t2 + n2;\n }\n function ue2(e2, t2) {\n return e2.pos >= t2 ? false : e2.peek() !== se2;\n }\n var de2 = class {\n constructor(e2) {\n this.pos = 0, this.buffer = e2;\n }\n next() {\n return this.buffer.charCodeAt(this.pos++);\n }\n peek() {\n return this.buffer.charCodeAt(this.pos);\n }\n indexOf(e2) {\n let { buffer: t2, pos: n2 } = this, r2 = t2.indexOf(e2, n2);\n return r2 === -1 ? t2.length : r2;\n }\n };\n function x2(e2) {\n let { length: t2 } = e2, n2 = new de2(e2), r2 = [], i3 = 0, a3 = 0, o3 = 0, s3 = 0, c3 = 0;\n do {\n let e3 = n2.indexOf(`;`), t3 = [], l3 = true, u3 = 0;\n for (i3 = 0;n2.pos < e3; ) {\n let r3;\n i3 = b2(n2, i3), i3 < u3 && (l3 = false), u3 = i3, ue2(n2, e3) ? (a3 = b2(n2, a3), o3 = b2(n2, o3), s3 = b2(n2, s3), ue2(n2, e3) ? (c3 = b2(n2, c3), r3 = [i3, a3, o3, s3, c3]) : r3 = [i3, a3, o3, s3]) : r3 = [i3], t3.push(r3), n2.pos++;\n }\n l3 || fe2(t3), r2.push(t3), n2.pos = e3 + 1;\n } while (n2.pos <= t2);\n return r2;\n }\n function fe2(e2) {\n e2.sort(pe2);\n }\n function pe2(e2, t2) {\n return e2[0] - t2[0];\n }\n var S2 = /^[a-zA-Z][a-zA-Z\\d+\\-.]*:/;\n var me2 = /^data:application\\/json[^,]+base64,/;\n var he2 = /(?:\\/\\/[@#][ \\t]+sourceMappingURL=([^\\s'\"]+?)[ \\t]*$)|(?:\\/\\*[@#][ \\t]+sourceMappingURL=([^*]+?)[ \\t]*(?:\\*\\/)[ \\t]*$)/;\n var C2 = new Map;\n var w2 = new Map;\n var T2 = (e2, t2, n2, r2) => {\n if (n2 < 0 || n2 >= e2.length)\n return null;\n let i3 = e2[n2];\n if (!i3 || i3.length === 0)\n return null;\n let a3 = null;\n for (let e3 of i3)\n if (e3[0] <= r2)\n a3 = e3;\n else\n break;\n if (!a3 || a3.length < 4)\n return null;\n let [, o3, s3, c3] = a3;\n if (o3 === undefined || s3 === undefined || c3 === undefined)\n return null;\n let l3 = t2[o3];\n return l3 ? { columnNumber: c3, fileName: l3, lineNumber: s3 + 1 } : null;\n };\n var E2 = (e2, t2, n2) => {\n if (e2.sections) {\n let r2 = null;\n for (let i4 of e2.sections)\n if (t2 > i4.offset.line || t2 === i4.offset.line && n2 >= i4.offset.column)\n r2 = i4;\n else\n break;\n if (!r2)\n return null;\n let i3 = t2 - r2.offset.line, a3 = t2 === r2.offset.line ? n2 - r2.offset.column : n2;\n return T2(r2.map.mappings, r2.map.sources, i3, a3);\n }\n return T2(e2.mappings, e2.sources, t2 - 1, n2);\n };\n var ge2 = (e2, t2) => {\n let n2 = t2.split(`\n`), r2;\n for (let e3 = n2.length - 1;e3 >= 0 && !r2; e3--) {\n let t3 = n2[e3].match(he2);\n t3 && (r2 = t3[1] || t3[2]);\n }\n if (!r2)\n return null;\n let i3 = S2.test(r2);\n if (!(me2.test(r2) || i3 || r2.startsWith(`/`))) {\n let t3 = e2.split(`/`);\n t3[t3.length - 1] = r2, r2 = t3.join(`/`);\n }\n return r2;\n };\n var _e2 = (e2) => ({ file: e2.file, mappings: x2(e2.mappings), names: e2.names, sourceRoot: e2.sourceRoot, sources: e2.sources, sourcesContent: e2.sourcesContent, version: 3 });\n var ve2 = (e2) => {\n let t2 = e2.sections.map(({ map: e3, offset: t3 }) => ({ map: { ...e3, mappings: x2(e3.mappings) }, offset: t3 })), n2 = new Set;\n for (let e3 of t2)\n for (let t3 of e3.map.sources)\n n2.add(t3);\n return { file: e2.file, mappings: [], names: [], sections: t2, sourceRoot: undefined, sources: Array.from(n2), sourcesContent: undefined, version: 3 };\n };\n var D2 = (e2) => {\n if (!e2)\n return false;\n let t2 = e2.trim();\n if (!t2)\n return false;\n let n2 = t2.match(S2);\n if (!n2)\n return true;\n let r2 = n2[0].toLowerCase();\n return r2 === `http:` || r2 === `https:`;\n };\n var ye2 = async (e2, t2 = fetch) => {\n if (!D2(e2))\n return null;\n let n2 = await t2(e2);\n if (!n2.ok)\n return null;\n let r2 = await n2.text();\n if (!r2)\n return null;\n let i3 = ge2(e2, r2);\n if (!i3 || !D2(i3))\n return null;\n let a3 = await t2(i3);\n if (!a3.ok)\n return null;\n try {\n let e3 = await a3.json();\n return `sections` in e3 ? ve2(e3) : _e2(e3);\n } catch {\n return null;\n }\n };\n var O2 = async (e2, t2 = true, n2) => {\n if (t2 && C2.has(e2))\n return C2.get(e2) ?? null;\n let r2 = t2 ? w2.get(e2) : undefined;\n if (r2)\n return (await r2).sourceMap;\n let i3 = ye2(e2, n2).then((e3) => ({ sourceMap: e3, isTransientFailure: false }), () => ({ sourceMap: null, isTransientFailure: true }));\n t2 && w2.set(e2, i3);\n let { sourceMap: a3, isTransientFailure: o3 } = await i3;\n return t2 && (w2.delete(e2), o3 || C2.set(e2, a3)), a3;\n };\n var be2 = async (e2, t2 = true, n2) => await Promise.all(e2.map(async (e3) => {\n if (!e3.fileName)\n return e3;\n let r2 = await O2(e3.fileName, t2, n2);\n if (!r2 || typeof e3.lineNumber != `number` || typeof e3.columnNumber != `number`)\n return e3;\n let i3 = E2(r2, e3.lineNumber, e3.columnNumber);\n return i3 ? { ...e3, source: i3.fileName && e3.source ? e3.source.replace(e3.fileName, i3.fileName) : e3.source, fileName: i3.fileName, lineNumber: i3.lineNumber, columnNumber: i3.columnNumber, isSymbolicated: true } : e3;\n }));\n var xe2 = (e2) => e2._debugStack instanceof Error && typeof e2._debugStack?.stack == `string`;\n var Se2 = () => {\n let n2 = h();\n for (let t2 of [...Array.from(d), ...Array.from(n2.renderers.values())]) {\n let e2 = t2.currentDispatcherRef;\n if (e2 && typeof e2 == `object`)\n return `H` in e2 ? e2.H : e2.current;\n }\n return null;\n };\n var Ce2 = (t2) => {\n for (let n2 of d) {\n let e2 = n2.currentDispatcherRef;\n e2 && typeof e2 == `object` && (`H` in e2 ? e2.H = t2 : e2.current = t2);\n }\n };\n var k2 = (e2) => `\n in ${e2}`;\n var we2 = (e2, t2) => {\n let n2 = k2(e2);\n return t2 && (n2 += ` (at ${t2})`), n2;\n };\n var A2 = false;\n var j2 = (e2, t2) => {\n if (!e2 || A2)\n return ``;\n let r2 = Error.prepareStackTrace;\n Error.prepareStackTrace = undefined, A2 = true;\n let i3 = Se2();\n Ce2(null);\n let { error: a3, warn: o3 } = console;\n console.error = () => {}, console.warn = () => {};\n try {\n let r3 = { DetermineComponentFrameRoot() {\n let n2;\n try {\n if (t2) {\n let t3 = function() {\n throw Error();\n };\n if (Object.defineProperty(t3.prototype, `props`, { set: function() {\n throw Error();\n } }), typeof Reflect == `object` && Reflect.construct) {\n try {\n Reflect.construct(t3, []);\n } catch (e3) {\n n2 = e3;\n }\n Reflect.construct(e2, [], t3);\n } else {\n try {\n t3.call();\n } catch (e3) {\n n2 = e3;\n }\n e2.call(t3.prototype);\n }\n } else {\n try {\n throw Error();\n } catch (e3) {\n n2 = e3;\n }\n let t3 = e2();\n t3 && typeof t3.catch == `function` && t3.catch(() => {});\n }\n } catch (e3) {\n if (e3 instanceof Error && n2 instanceof Error && typeof e3.stack == `string`)\n return [e3.stack, n2.stack];\n }\n return [null, null];\n } };\n r3.DetermineComponentFrameRoot.displayName = `DetermineComponentFrameRoot`, Object.getOwnPropertyDescriptor(r3.DetermineComponentFrameRoot, `name`)?.configurable && Object.defineProperty(r3.DetermineComponentFrameRoot, `name`, { value: `DetermineComponentFrameRoot` });\n let [i4, a4] = r3.DetermineComponentFrameRoot();\n if (i4 && a4) {\n let t3 = i4.split(`\n`), r4 = a4.split(`\n`), o4 = 0, s4 = 0;\n for (;o4 < t3.length && !t3[o4].includes(`DetermineComponentFrameRoot`); )\n o4++;\n for (;s4 < r4.length && !r4[s4].includes(`DetermineComponentFrameRoot`); )\n s4++;\n if (o4 === t3.length || s4 === r4.length)\n for (o4 = t3.length - 1, s4 = r4.length - 1;o4 >= 1 && s4 >= 0 && t3[o4] !== r4[s4]; )\n s4--;\n for (;o4 >= 1 && s4 >= 0; o4--, s4--)\n if (t3[o4] !== r4[s4]) {\n if (o4 !== 1 || s4 !== 1)\n do\n if (o4--, s4--, s4 < 0 || t3[o4] !== r4[s4]) {\n let r5 = `\n${t3[o4].replace(` at new `, ` at `)}`, i5 = Ee(e2);\n return i5 && r5.includes(`<anonymous>`) && (r5 = r5.replace(`<anonymous>`, i5)), r5;\n }\n while (o4 >= 1 && s4 >= 0);\n break;\n }\n }\n } finally {\n A2 = false, Error.prepareStackTrace = r2, Ce2(i3), console.error = a3, console.warn = o3;\n }\n let s3 = e2 ? Ee(e2) : ``;\n return s3 ? k2(s3) : ``;\n };\n var M2 = (e2, t2) => {\n let n2 = e2.tag, r2 = ``;\n switch (n2) {\n case 28:\n r2 = k2(`Activity`);\n break;\n case 1:\n r2 = j2(e2.type, true);\n break;\n case 11:\n r2 = j2(e2.type.render, false);\n break;\n case 0:\n case 15:\n r2 = j2(e2.type, false);\n break;\n case 5:\n case 26:\n case 27:\n r2 = k2(e2.type);\n break;\n case 16:\n r2 = k2(`Lazy`);\n break;\n case 13:\n r2 = e2.child !== t2 && t2 !== null ? k2(`Suspense Fallback`) : k2(`Suspense`);\n break;\n case 19:\n r2 = k2(`SuspenseList`);\n break;\n case 30:\n r2 = k2(`ViewTransition`);\n break;\n default:\n return ``;\n }\n return r2;\n };\n var N2 = (e2) => {\n try {\n let t2 = ``, n2 = e2, r2 = null;\n do {\n t2 += M2(n2, r2);\n let e3 = n2._debugInfo;\n if (e3 && Array.isArray(e3))\n for (let n3 = e3.length - 1;n3 >= 0; n3--) {\n let r3 = e3[n3];\n typeof r3.name == `string` && (t2 += we2(r3.name, r3.env));\n }\n r2 = n2, n2 = n2.return;\n } while (n2);\n return t2;\n } catch (e3) {\n return e3 instanceof Error ? `\nError generating stack: ${e3.message}\n${e3.stack}` : ``;\n }\n };\n var P2 = (e2) => {\n let t2 = Error.prepareStackTrace;\n Error.prepareStackTrace = undefined;\n let n2 = e2;\n if (!n2)\n return ``;\n Error.prepareStackTrace = t2, n2.startsWith(`Error: react-stack-top-frame\n`) && (n2 = n2.slice(29));\n let r2 = n2.indexOf(`\n`);\n if (r2 !== -1 && (n2 = n2.slice(r2 + 1)), r2 = Math.max(n2.indexOf(`react_stack_bottom_frame`), n2.indexOf(`react-stack-bottom-frame`)), r2 !== -1 && (r2 = n2.lastIndexOf(`\n`, r2)), r2 !== -1)\n n2 = n2.slice(0, r2);\n else\n return ``;\n return n2;\n };\n var Te2 = (e2) => !!(e2.functionName && e2.fileName && (e2.fileName.startsWith(`rsc://`) || e2.fileName.startsWith(`about://React/`)));\n var Ee2 = (e2, t2) => e2.fileName === t2.fileName && e2.lineNumber === t2.lineNumber && e2.columnNumber === t2.columnNumber;\n var De2 = (e2) => {\n let t2 = new Map;\n for (let n2 of e2)\n for (let e3 of n2.stackFrames) {\n if (!Te2(e3))\n continue;\n let n3 = e3.functionName, r2 = t2.get(n3) ?? [];\n r2.some((t3) => Ee2(t3, e3)) || (r2.push(e3), t2.set(n3, r2));\n }\n return t2;\n };\n var Oe2 = (e2, t2, n2) => {\n if (!e2.functionName)\n return { ...e2, isServer: true };\n let r2 = t2.get(e2.functionName);\n if (!r2 || r2.length === 0)\n return { ...e2, isServer: true };\n let i3 = n2.get(e2.functionName) ?? 0, a3 = r2[i3 % r2.length];\n return n2.set(e2.functionName, i3 + 1), { ...e2, isServer: true, fileName: a3.fileName, lineNumber: a3.lineNumber, columnNumber: a3.columnNumber, source: e2.source?.replace(`(at Server)`, `(${a3.fileName}:${a3.lineNumber}:${a3.columnNumber})`) };\n };\n var ke = (e2) => {\n let t2 = [];\n return A(e2, (e3) => {\n if (!xe2(e3))\n return;\n let r2 = typeof e3.type == `string` ? e3.type : Ee(e3.type) || `<anonymous>`;\n t2.push({ componentName: r2, stackFrames: m3(P2(e3._debugStack?.stack)) });\n }, true), t2;\n };\n var F = async (e2, t2 = true, n2) => {\n let r2 = ke(e2), i3 = m3(N2(e2)), a3 = De2(r2), o3 = new Map;\n return be2(i3.map((e3) => (e3.source?.includes(`(at Server)`) ?? false) || e3.source != null && u2.test(e3.source) ? Oe2(e3, a3, o3) : e3).filter((e3, t3, n3) => {\n if (t3 === 0)\n return true;\n let r3 = n3[t3 - 1];\n return e3.functionName !== r3.functionName;\n }), t2, n2);\n };\n var I2 = (e2) => {\n let t2 = e2._debugSource;\n return t2 ? typeof t2 == `object` && !!t2 && `fileName` in t2 && typeof t2.fileName == `string` && `lineNumber` in t2 && typeof t2.lineNumber == `number` : false;\n };\n var Ae2 = async (e2, t2 = true, n2) => {\n if (I2(e2))\n return e2._debugSource || null;\n let r2 = await F(e2, t2, n2);\n for (let e3 of r2)\n if (e3.fileName)\n return { fileName: e3.fileName, lineNumber: e3.lineNumber, columnNumber: e3.columnNumber, functionName: e3.functionName };\n return null;\n };\n var L2 = (e2) => e2.split(`/`).filter(Boolean).length;\n var je2 = (e2) => e2.split(`/`).filter(Boolean)[0] ?? null;\n var Me2 = (e2) => {\n let t2 = e2.indexOf(`/`, 1);\n if (t2 === -1 || L2(e2.slice(0, t2)) !== 1)\n return e2;\n let n2 = e2.slice(t2);\n if (!s2.test(n2) || L2(n2) < 2)\n return e2;\n let r2 = je2(n2);\n return !r2 || r2.startsWith(`@`) || r2.length > 4 ? e2 : n2;\n };\n var R2 = (e2) => {\n if (!e2 || o2.some((t3) => t3 === e2))\n return ``;\n let t2 = e2, n2 = t2.startsWith(`http://`) || t2.startsWith(`https://`);\n if (n2)\n try {\n t2 = new URL(t2).pathname;\n } catch {}\n if (n2 && (t2 = Me2(t2)), t2.startsWith(`about://React/`)) {\n let e3 = t2.slice(14), n3 = e3.indexOf(`/`), r3 = e3.indexOf(`:`);\n t2 = n3 !== -1 && (r3 === -1 || n3 < r3) ? e3.slice(n3 + 1) : e3;\n }\n let r2 = true;\n for (;r2; ) {\n r2 = false;\n for (let e3 of a2)\n if (t2.startsWith(e3)) {\n t2 = t2.slice(e3.length), e3 === `file:///` && (t2 = `/${t2.replace(/^\\/+/, ``)}`), r2 = true;\n break;\n }\n }\n if (i2.test(t2)) {\n let e3 = t2.match(i2);\n e3 && (t2 = t2.slice(e3[0].length));\n }\n if (t2.startsWith(`//`)) {\n let e3 = t2.indexOf(`/`, 2);\n t2 = e3 === -1 ? `` : t2.slice(e3);\n }\n let s3 = t2.indexOf(`?`);\n if (s3 !== -1) {\n let e3 = t2.slice(s3);\n l2.test(e3) && (t2 = t2.slice(0, s3));\n }\n return t2;\n };\n var Ne2 = (e2) => {\n let t2 = R2(e2);\n return !(!t2 || !s2.test(t2) || c2.test(t2));\n };\n var z2 = Symbol.for(`react.context`);\n var Ie2 = Symbol.for(`react.memo_cache_sentinel`);\n var B2 = [];\n var H2 = null;\n var U2 = null;\n var W = null;\n var G = 0;\n var K = null;\n var q2 = Error(\"Suspense Exception: This is not a real error! It's an implementation detail of `use` to interrupt the current render.\");\n var Y = () => {\n let e2 = U2;\n return e2 !== null && (U2 = e2.next), e2;\n };\n var X2 = (e2) => {\n if (H2 === null)\n return e2._currentValue;\n if (W === null)\n throw Error(`Context reads do not line up with context dependencies.`);\n if (Object.prototype.hasOwnProperty.call(W, `memoizedValue`)) {\n let e3 = W.memoizedValue;\n return W = W.next, e3;\n }\n return e2._currentValue;\n };\n var Z2 = (e2, t2, n2, r2 = null) => {\n B2.push({ displayName: r2, primitive: e2, stackError: Error(), value: t2, dispatcherHookName: n2 });\n };\n var Be = (e2) => {\n if (typeof e2 == `object` && e2) {\n let t2 = e2;\n if (typeof t2.then == `function`) {\n let e3 = K !== null && G < K.length ? K[G++] : t2;\n switch (e3.status) {\n case `fulfilled`:\n return Z2(`Promise`, e3.value, `Use`), e3.value;\n case `rejected`:\n throw e3.reason;\n }\n throw Z2(`Unresolved`, e3, `Use`), q2;\n }\n if (t2.$$typeof === z2 && `_currentValue` in t2) {\n let e3 = t2, n2 = X2(e3);\n return Z2(`Context (use)`, n2, `Use`, e3.displayName || `Context`), n2;\n }\n }\n throw Error(`An unsupported type was passed to use(): ` + String(e2));\n };\n var Ve = (e2) => {\n let t2 = X2(e2);\n return Z2(`Context`, t2, `Context`, e2.displayName || null), t2;\n };\n var He = (e2) => {\n let t2 = Y(), n2 = t2 === null ? typeof e2 == `function` ? e2() : e2 : t2.memoizedState;\n return Z2(`State`, n2, `State`), [n2, () => {}];\n };\n var Ue = (e2, t2, n2) => {\n let r2 = Y(), i3 = r2 === null ? n2 === undefined ? t2 : n2(t2) : r2.memoizedState;\n return Z2(`Reducer`, i3, `Reducer`), [i3, () => {}];\n };\n var We = (e2) => {\n let t2 = Y(), n2 = t2 === null ? { current: e2 } : t2.memoizedState;\n return Z2(`Ref`, n2.current, `Ref`), n2;\n };\n var Ge = () => {\n let e2 = Y();\n return Z2(`CacheRefresh`, e2 === null ? () => {} : e2.memoizedState, `CacheRefresh`), () => {};\n };\n var Ke = (e2) => {\n Y(), Z2(`LayoutEffect`, e2, `LayoutEffect`);\n };\n var qe = (e2) => {\n Y(), Z2(`InsertionEffect`, e2, `InsertionEffect`);\n };\n var Je = (e2) => {\n Y(), Z2(`Effect`, e2, `Effect`);\n };\n var Ye = (e2) => {\n Y();\n let t2;\n typeof e2 == `object` && e2 && `current` in e2 && (t2 = e2.current), Z2(`ImperativeHandle`, t2, `ImperativeHandle`);\n };\n var Xe = (e2, t2) => {\n Z2(`DebugValue`, typeof t2 == `function` ? t2(e2) : e2, `DebugValue`);\n };\n var Ze = (e2) => {\n let t2 = Y();\n return Z2(`Callback`, t2 === null ? e2 : t2.memoizedState[0], `Callback`), e2;\n };\n var Qe = (e2) => {\n let t2 = Y(), n2 = t2 === null ? e2() : t2.memoizedState[0];\n return Z2(`Memo`, n2, `Memo`), n2;\n };\n var $e = (e2, t2) => {\n let n2 = Y();\n Y();\n let r2 = n2 === null ? t2() : n2.memoizedState;\n return Z2(`SyncExternalStore`, r2, `SyncExternalStore`), r2;\n };\n var et = () => {\n let e2 = Y();\n Y();\n let t2 = e2 === null ? false : e2.memoizedState;\n return Z2(`Transition`, t2, `Transition`), [t2, () => {}];\n };\n var tt = (e2) => {\n let t2 = Y(), n2 = t2 === null ? e2 : t2.memoizedState;\n return Z2(`DeferredValue`, n2, `DeferredValue`), n2;\n };\n var nt = () => {\n let e2 = Y(), t2 = e2 === null ? `` : e2.memoizedState;\n return Z2(`Id`, t2, `Id`), t2;\n };\n var rt = (e2) => {\n let t2 = H2;\n if (t2 == null)\n return [];\n let n2 = t2.updateQueue?.memoCache;\n if (n2 == null)\n return [];\n let r2 = n2.data[n2.index];\n return r2 === undefined && (r2 = n2.data[n2.index] = Array.from({ length: e2 }, () => Ie2)), n2.index++, r2;\n };\n var it = (e2) => {\n let t2 = Y(), n2 = t2 === null ? e2 : t2.memoizedState;\n return Z2(`Optimistic`, n2, `Optimistic`), [n2, () => {}];\n };\n var at = (e2, t2) => {\n let n2, r2 = null;\n if (e2 !== null) {\n let t3 = e2.memoizedState;\n if (typeof t3 == `object` && t3 && `then` in t3 && typeof t3.then == `function`) {\n let e3 = t3;\n switch (e3.status) {\n case `fulfilled`:\n n2 = e3.value;\n break;\n case `rejected`:\n r2 = e3.reason;\n break;\n default:\n r2 = q2, n2 = e3;\n }\n } else\n n2 = t3;\n } else\n n2 = t2;\n return { value: n2, error: r2 };\n };\n var ot = (e2) => (t2, n2) => {\n let r2 = Y();\n Y(), Y();\n let i3 = Error(), { value: a3, error: o3 } = at(r2, n2);\n if (B2.push({ displayName: null, primitive: e2, stackError: i3, value: a3, dispatcherHookName: e2 }), o3 !== null)\n throw o3;\n return [a3, () => {}, false];\n };\n var st = ot(`ActionState`);\n var Q2 = { readContext: X2, use: Be, useCallback: Ze, useContext: Ve, useEffect: Je, useImperativeHandle: Ye, useLayoutEffect: Ke, useInsertionEffect: qe, useMemo: Qe, useReducer: Ue, useRef: We, useState: He, useDebugValue: Xe, useDeferredValue: tt, useTransition: et, useSyncExternalStore: $e, useId: nt, useHostTransitionStatus: () => {\n let e2 = X2({ _currentValue: null });\n return Z2(`HostTransitionStatus`, e2, `HostTransitionStatus`), e2;\n }, useFormState: ot(`FormState`), useActionState: st, useOptimistic: it, useMemoCache: rt, useCacheRefresh: Ge, useEffectEvent: (e2) => (Y(), Z2(`EffectEvent`, e2, `EffectEvent`), e2) };\n var ct = typeof Proxy > `u` ? Q2 : new Proxy(Q2, { get(e2, t2) {\n if (Object.prototype.hasOwnProperty.call(e2, t2))\n return e2[t2];\n let n2 = Error(`Missing method in Dispatcher: ` + t2);\n throw n2.name = `ReactDebugToolsUnsupportedHookError`, n2;\n } });\n var gt = new Set([`Context`, `Context (use)`, `DebugValue`, `Promise`, `Unresolved`, `HostTransitionStatus`]);\n var kt = new Set([`Effect`, `LayoutEffect`, `InsertionEffect`, `ImperativeHandle`, `DebugValue`]);\n\n // dist/_bippy-entry-53465-1784102736730.js\n globalThis.__bippy = {\n getFiberFromHostInstance: Pe,\n getDisplayName: Ee,\n traverseFiber: A,\n isCompositeFiber: be,\n isHostFiber: b,\n getSource: Ae2,\n getOwnerStack: F,\n normalizeFileName: R2,\n isSourceFile: Ne2\n };\n})();\n";
1567
1567
  //#endregion
1568
1568
  //#region src/rrweb-recording.ts
1569
1569
  var activeRrwebRecordings = /* @__PURE__ */ new Map();
@@ -2270,7 +2270,7 @@ var ConnectionManager = class {
2270
2270
  if (identity.email) relayUrl.searchParams.set("email", identity.email);
2271
2271
  if (identity.id) relayUrl.searchParams.set("id", identity.id);
2272
2272
  if (identity.installId) relayUrl.searchParams.set("installId", identity.installId);
2273
- relayUrl.searchParams.set("v", "1.0.1");
2273
+ relayUrl.searchParams.set("v", "2.0.0");
2274
2274
  relayUrl.searchParams.set("protocolVersion", String(1));
2275
2275
  relayUrl.searchParams.set("features", CURRENT_EXTENSION_FEATURES.join(","));
2276
2276
  logger.debug("Creating WebSocket connection to:", relayUrl);
@@ -29,7 +29,7 @@
29
29
  }
30
30
  })();
31
31
  //#endregion
32
- //#region ../node_modules/.pnpm/rrweb@2.1.0/node_modules/rrweb/dist/rrweb.js
32
+ //#region ../../playwriter/node_modules/.pnpm/rrweb@2.1.0/node_modules/rrweb/dist/rrweb.js
33
33
  var __defProp = Object.defineProperty;
34
34
  var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, {
35
35
  enumerable: true,
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  var TabwrightRrwebRecorder = (() => {
3
- // ../node_modules/.pnpm/rrweb@2.1.0/node_modules/rrweb/dist/rrweb.js
3
+ // ../../playwriter/node_modules/.pnpm/rrweb@2.1.0/node_modules/rrweb/dist/rrweb.js
4
4
  var __defProp = Object.defineProperty;
5
5
  var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
6
6
  var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
@@ -31,7 +31,7 @@
31
31
  };
32
32
  var __commonJS = (cb, mod) => () => (mod || cb((mod = { exports: {} }).exports, mod), mod.exports);
33
33
 
34
- // ../node_modules/.pnpm/@mozilla+readability@0.6.0/node_modules/@mozilla/readability/Readability.js
34
+ // ../../playwriter/node_modules/.pnpm/@mozilla+readability@0.6.0/node_modules/@mozilla/readability/Readability.js
35
35
  var require_Readability = __commonJS((exports, module) => {
36
36
  function Readability(doc, options) {
37
37
  if (options && options.documentElement) {
@@ -1602,7 +1602,7 @@
1602
1602
  }
1603
1603
  });
1604
1604
 
1605
- // ../node_modules/.pnpm/@mozilla+readability@0.6.0/node_modules/@mozilla/readability/Readability-readerable.js
1605
+ // ../../playwriter/node_modules/.pnpm/@mozilla+readability@0.6.0/node_modules/@mozilla/readability/Readability-readerable.js
1606
1606
  var require_Readability_readerable = __commonJS((exports, module) => {
1607
1607
  var REGEXPS = {
1608
1608
  unlikelyCandidates: /-ad-|ai2html|banner|breadcrumbs|combx|comment|community|cover-wrap|disqus|extra|footer|gdpr|header|legends|menu|related|remark|replies|rss|shoutbox|sidebar|skyscraper|social|sponsor|supplemental|ad-break|agegate|pagination|pager|popup|yom-remote/i,
@@ -1658,7 +1658,7 @@
1658
1658
  }
1659
1659
  });
1660
1660
 
1661
- // ../node_modules/.pnpm/@mozilla+readability@0.6.0/node_modules/@mozilla/readability/index.js
1661
+ // ../../playwriter/node_modules/.pnpm/@mozilla+readability@0.6.0/node_modules/@mozilla/readability/index.js
1662
1662
  var require_readability = __commonJS((exports, module) => {
1663
1663
  var Readability = require_Readability();
1664
1664
  var isProbablyReaderable = require_Readability_readerable();
@@ -1668,7 +1668,7 @@
1668
1668
  };
1669
1669
  });
1670
1670
 
1671
- // dist/_readability-entry-27735-1784093019578.js
1671
+ // dist/_readability-entry-53465-1784102736730.js
1672
1672
  var import_readability = __toESM(require_readability(), 1);
1673
1673
  globalThis.__readability = { Readability: import_readability.Readability, isProbablyReaderable: import_readability.isProbablyReaderable };
1674
1674
  })();
@@ -1,5 +1,5 @@
1
1
  (() => {
2
- // ../node_modules/.pnpm/@mizchi+selector-generator@1.50.0-next/node_modules/@mizchi/selector-generator/dist/index.js
2
+ // ../../playwriter/node_modules/.pnpm/@mizchi+selector-generator@1.50.0-next/node_modules/@mizchi/selector-generator/dist/index.js
3
3
  var __create = Object.create;
4
4
  var __defProp = Object.defineProperty;
5
5
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
@@ -7373,6 +7373,6 @@ x-locator-editor.does-not-match {
7373
7373
  return asLocator2(lang, selector);
7374
7374
  }
7375
7375
 
7376
- // dist/_selector-generator-entry-27735-1784093019577.js
7376
+ // dist/_selector-generator-entry-53465-1784102736728.js
7377
7377
  globalThis.__selectorGenerator = { createSelectorGenerator, toLocator };
7378
7378
  })();
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "tabwright",
3
3
  "description": "Let AI agents control your existing Chrome through a local CLI and MCP server.",
4
- "version": "1.0.1",
4
+ "version": "2.0.0",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
7
7
  "types": "dist/index.d.ts",
@@ -12,7 +12,6 @@
12
12
  },
13
13
  "files": [
14
14
  "dist",
15
- "src/agent-skills",
16
15
  "src/skill.md",
17
16
  "bin.js",
18
17
  "readme.md"
package/readme.md CHANGED
@@ -32,4 +32,12 @@ Use the published package without installing it globally:
32
32
  npx tabwright@latest session new
33
33
  ```
34
34
 
35
+ Install one capability directly from a tagged private Git repository without cloning it:
36
+
37
+ ```bash
38
+ tabwright capability install 'git@example.com:team/capabilities.git#v1.0.0:capabilities/query-user'
39
+ ```
40
+
41
+ Git and access to the repository are required. Add `--with-agent-skill` only after reviewing a packaged agent skill.
42
+
35
43
  Run `tabwright skill` for the complete CLI and browser automation reference. See the [GitHub repository](https://github.com/Yuyang-Hou/tabwright) for architecture, development, remote access, and release documentation.
package/src/skill.md CHANGED
@@ -304,16 +304,19 @@ tabwright capability update bilibili-current-user --contract-file contract.json
304
304
  tabwright capability trust query-user
305
305
  ```
306
306
 
307
- Share a user-authored capability as a sanitized `.tgz`, or install it directly from a directory or HTTPS `.tgz` URL:
307
+ Share a user-authored capability as a sanitized `.tgz`, or install it directly from a directory, HTTPS `.tgz` URL, or one directory in a Git repository:
308
308
 
309
309
  ```bash
310
310
  tabwright capability pack query-user
311
311
  tabwright capability install ./query-user.tgz
312
312
  tabwright capability install ../shared-capabilities/query-user --project
313
313
  tabwright capability install https://example.com/query-user.tgz
314
+ tabwright capability install 'git@example.com:team/capabilities.git#v1.0.0:capabilities/query-user'
314
315
  ```
315
316
 
316
- Capability packages contain only `capability.json`, the configured entry script, optional `README.md`, and optional `agent-skills/`. The pack command excludes `secrets.json`, `runs.jsonl`, and `artifacts/`. A shared capability always installs as `draft`, even if its author trusted it locally. Inspect its contract and script, refresh auth with the recipient's own browser session when needed, validate it with `capability run --force`, and only then trust it. Packaged agent skills are not installed by default because they influence agent behavior; review one and run `capability skill install <id>`, or explicitly pass `--with-agent-skill`. Bundled suites such as `conan-config` remain installable by name and may be trusted by the publisher; use `--skip-agent-skills` for built-in suites.
317
+ Git sources use `<remote>#<ref>:<capability-path>`. Tabwright runs `git archive` against that ref and reads only the selected capability directory, so private SSH repositories can be installed in one command without cloning. Pin a release tag instead of a moving branch for reproducible installs.
318
+
319
+ Capability packages contain only `capability.json`, the configured entry script, optional `README.md`, and optional `agent-skills/`. The pack command excludes `secrets.json`, `runs.jsonl`, and `artifacts/`. A shared capability always installs as `draft`, even if its author trusted it locally. Inspect its contract and script, refresh auth with the recipient's own browser session when needed, validate it with `capability run --force`, and only then trust it. Packaged agent skills are not installed by default because they influence agent behavior; review one and run `capability skill install <id>`, or explicitly pass `--with-agent-skill`.
317
320
 
318
321
  When an AI is turning a user workflow into a durable capability, keep these responsibilities separate:
319
322
 
@@ -1,27 +0,0 @@
1
- import { type CapabilityLocation, type CapabilityRecord } from './capability-registry.js';
2
- export interface InstallBuiltinCapabilitySuiteOptions {
3
- suite: string;
4
- cwd?: string;
5
- location?: CapabilityLocation;
6
- overwrite?: boolean;
7
- trust?: boolean;
8
- installAgentSkills?: boolean;
9
- codexHome?: string;
10
- }
11
- export interface InstalledBuiltinCapabilitySuite {
12
- suite: string;
13
- capabilities: CapabilityRecord[];
14
- agentSkills: InstalledBuiltinAgentSkill[];
15
- }
16
- export declare function isBuiltinCapabilitySuite(suite: string): suite is 'conan-config';
17
- export interface InstalledBuiltinAgentSkillFile {
18
- path: string;
19
- status: 'created' | 'updated' | 'unchanged';
20
- }
21
- export interface InstalledBuiltinAgentSkill {
22
- target: 'codex';
23
- name: string;
24
- dir: string;
25
- files: InstalledBuiltinAgentSkillFile[];
26
- }
27
- export declare function installBuiltinCapabilitySuite(options: InstallBuiltinCapabilitySuiteOptions): InstalledBuiltinCapabilitySuite;