lua-cli 3.48.0 → 3.49.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.
@@ -993,6 +993,79 @@ function isPlatformInvocationCaller(v) {
993
993
  function supervisionSubjectId(agentId2) {
994
994
  return `agent:${agentId2}`;
995
995
  }
996
+ function isModelCallCategory(category) {
997
+ return category.startsWith("llm:") || category.startsWith("voice:") || category === "embedding" || category === "workflow:job" || category === "decision:ask" || category.startsWith("tool:image-");
998
+ }
999
+ function deriveUsageSurface(row) {
1000
+ const { category, channel } = row;
1001
+ const data = row.data;
1002
+ if (!isModelCallCategory(category)) return void 0;
1003
+ if (category === "workflow:job") return "workflow-job";
1004
+ if (category === "llm:sandbox") return "tool-code";
1005
+ if (category === "llm:builder") return "builder";
1006
+ if (category === "llm:website") return "website";
1007
+ if (category.startsWith("voice:") || category === "llm:voice") return "voice";
1008
+ if (category.startsWith("llm:tool:") || AGENT_TOOL_CATEGORIES.has(category)) return "agent-tool";
1009
+ if (!TURN_CATEGORIES.has(category)) return "background";
1010
+ if (channel === "workflow") return "workflow-step";
1011
+ if (data?.gateway === "livekit-inference") return "voice";
1012
+ if (channel === "dev") return "dev";
1013
+ if (channel && VOICE_CHANNELS.has(channel)) return "voice";
1014
+ if (channel && MESSAGING_CHANNELS.has(channel)) return "channel";
1015
+ return "chat";
1016
+ }
1017
+ function fromRaw(raw, id2, model) {
1018
+ const fiveMin = count(raw.cache_creation?.ephemeral_5m_input_tokens);
1019
+ const oneHour = count(raw.cache_creation?.ephemeral_1h_input_tokens);
1020
+ const split = !!(fiveMin || oneHour);
1021
+ const flatWrite = count(raw.cache_creation_input_tokens);
1022
+ const read = count(raw.cache_read_input_tokens);
1023
+ return {
1024
+ ...typeof id2 === "string" && id2 ? {
1025
+ id: id2
1026
+ } : {},
1027
+ ...typeof model === "string" && model ? {
1028
+ model
1029
+ } : {},
1030
+ inputTokens: count(raw.input_tokens) ?? 0,
1031
+ outputTokens: count(raw.output_tokens) ?? 0,
1032
+ ...read ? {
1033
+ cacheReadTokens: read
1034
+ } : {},
1035
+ ...split ? {
1036
+ ...fiveMin ? {
1037
+ cacheCreationTokens5m: fiveMin
1038
+ } : {},
1039
+ ...oneHour ? {
1040
+ cacheCreationTokens1h: oneHour
1041
+ } : {}
1042
+ } : flatWrite ? {
1043
+ cacheCreationTokens: flatWrite
1044
+ } : {},
1045
+ ...typeof raw.service_tier === "string" && raw.service_tier && raw.service_tier !== "standard" ? {
1046
+ serviceTier: raw.service_tier
1047
+ } : {}
1048
+ };
1049
+ }
1050
+ function anthropicMessageUsage(message) {
1051
+ if (!message || typeof message !== "object") return void 0;
1052
+ const m = message;
1053
+ if (!m.usage || typeof m.usage !== "object") return void 0;
1054
+ return fromRaw(m.usage, m.id, m.model);
1055
+ }
1056
+ function parseAnthropicReplyUsage(body) {
1057
+ const start = body.trimStart();
1058
+ if (start.startsWith("{")) {
1059
+ try {
1060
+ return anthropicMessageUsage(JSON.parse(start));
1061
+ } catch {
1062
+ return void 0;
1063
+ }
1064
+ }
1065
+ const reader = new AnthropicSseUsageReader();
1066
+ reader.push(body);
1067
+ return reader.result();
1068
+ }
996
1069
  function isSupervisionOp(op) {
997
1070
  return typeof op === "string" && Object.prototype.hasOwnProperty.call(SUPERVISION_OPS, op);
998
1071
  }
@@ -2164,24 +2237,24 @@ function addresses(text2) {
2164
2237
  function recordFacts(value3) {
2165
2238
  const senders = [];
2166
2239
  const labels = [];
2167
- let isRecord22 = false;
2240
+ let isRecord32 = false;
2168
2241
  if (isPlainObject(value3.author_member)) {
2169
- isRecord22 = true;
2242
+ isRecord32 = true;
2170
2243
  const email = lower(value3.author_member.email);
2171
2244
  if (email) senders.push(email);
2172
2245
  const userId = lower(value3.author_member.user_id);
2173
2246
  if (userId) senders.push(userId);
2174
2247
  }
2175
2248
  if (typeof value3.channel_id === "string") {
2176
- isRecord22 = true;
2249
+ isRecord32 = true;
2177
2250
  labels.push(...idOrName(value3.channel_id));
2178
2251
  }
2179
2252
  if (Array.isArray(value3.channel_ids)) {
2180
- isRecord22 = true;
2253
+ isRecord32 = true;
2181
2254
  for (const id2 of value3.channel_ids) labels.push(...idOrName(id2));
2182
2255
  }
2183
2256
  if (Array.isArray(value3.channels) && (value3.author_member || value3.message !== void 0)) {
2184
- isRecord22 = true;
2257
+ isRecord32 = true;
2185
2258
  for (const channel of value3.channels) labels.push(...idOrName(channel));
2186
2259
  }
2187
2260
  for (const key of [
@@ -2190,11 +2263,11 @@ function recordFacts(value3) {
2190
2263
  ]) {
2191
2264
  const field = value3[key];
2192
2265
  if (isPlainObject(field) && isPlainObject(field.emailAddress)) {
2193
- isRecord22 = true;
2266
+ isRecord32 = true;
2194
2267
  const address = lower(field.emailAddress.address);
2195
2268
  if (address) senders.push(address);
2196
2269
  } else if (key === "from" && typeof field === "string" && field.includes("@")) {
2197
- isRecord22 = true;
2270
+ isRecord32 = true;
2198
2271
  senders.push(...addresses(field));
2199
2272
  }
2200
2273
  }
@@ -2202,12 +2275,12 @@ function recordFacts(value3) {
2202
2275
  const organizer = value3.organizer;
2203
2276
  const address = isPlainObject(organizer.emailAddress) ? lower(organizer.emailAddress.address) : lower(organizer.email);
2204
2277
  if (address) {
2205
- isRecord22 = true;
2278
+ isRecord32 = true;
2206
2279
  senders.push(address);
2207
2280
  }
2208
2281
  }
2209
2282
  if (Array.isArray(value3.categories)) {
2210
- isRecord22 = true;
2283
+ isRecord32 = true;
2211
2284
  for (const category of value3.categories) labels.push(...idOrName(category));
2212
2285
  }
2213
2286
  if (isPlainObject(value3.from)) {
@@ -2218,13 +2291,13 @@ function recordFacts(value3) {
2218
2291
  ]) {
2219
2292
  const identity = value3.from[key];
2220
2293
  if (!isPlainObject(identity)) continue;
2221
- isRecord22 = true;
2294
+ isRecord32 = true;
2222
2295
  const id2 = lower(identity.id);
2223
2296
  if (id2) senders.push(id2);
2224
2297
  }
2225
2298
  }
2226
2299
  if (isPlainObject(value3.channelIdentity)) {
2227
- isRecord22 = true;
2300
+ isRecord32 = true;
2228
2301
  for (const key of [
2229
2302
  "channelId",
2230
2303
  "teamId"
@@ -2234,21 +2307,21 @@ function recordFacts(value3) {
2234
2307
  }
2235
2308
  }
2236
2309
  if (typeof value3.chatId === "string") {
2237
- isRecord22 = true;
2310
+ isRecord32 = true;
2238
2311
  labels.push(...idOrName(value3.chatId));
2239
2312
  }
2240
2313
  if (typeof value3.parentFolderId === "string") {
2241
- isRecord22 = true;
2314
+ isRecord32 = true;
2242
2315
  labels.push(...idOrName(value3.parentFolderId));
2243
2316
  }
2244
2317
  let gmailSenderUnknown = false;
2245
2318
  const gmailMessage = typeof value3.threadId === "string" && (Array.isArray(value3.labelIds) || "payload" in value3 || "raw" in value3) || isPlainObject(value3.payload) && Array.isArray(value3.payload.headers);
2246
2319
  if (Array.isArray(value3.labelIds)) {
2247
- isRecord22 = true;
2320
+ isRecord32 = true;
2248
2321
  for (const id2 of value3.labelIds) labels.push(...idOrName(id2));
2249
2322
  }
2250
2323
  if (gmailMessage) {
2251
- isRecord22 = true;
2324
+ isRecord32 = true;
2252
2325
  const headers = isPlainObject(value3.payload) && Array.isArray(value3.payload.headers) ? value3.payload.headers : [];
2253
2326
  const from = headers.find((header) => isPlainObject(header) && lower(header.name) === "from");
2254
2327
  const fromAddresses = addresses(from?.value);
@@ -2256,11 +2329,11 @@ function recordFacts(value3) {
2256
2329
  else gmailSenderUnknown = true;
2257
2330
  }
2258
2331
  if (Array.isArray(value3.labels)) {
2259
- isRecord22 = true;
2332
+ isRecord32 = true;
2260
2333
  for (const label of value3.labels) labels.push(...idOrName(label));
2261
2334
  }
2262
2335
  if (typeof value3.ts === "string" && (typeof value3.user === "string" || typeof value3.bot_id === "string")) {
2263
- isRecord22 = true;
2336
+ isRecord32 = true;
2264
2337
  for (const id2 of [
2265
2338
  value3.user,
2266
2339
  value3.bot_id,
@@ -2276,7 +2349,7 @@ function recordFacts(value3) {
2276
2349
  labels.push(...idOrName(value3.channel));
2277
2350
  }
2278
2351
  return {
2279
- isRecord: isRecord22,
2352
+ isRecord: isRecord32,
2280
2353
  senders,
2281
2354
  labels,
2282
2355
  gmailSenderUnknown
@@ -3764,13 +3837,13 @@ function channelSettingsGroups(channel, config) {
3764
3837
  const groups = [];
3765
3838
  for (const def of channelSettingDefinitions(channel, config)) {
3766
3839
  const { tunableDefault: _tunable, ...shown } = def;
3767
- const unavailable2 = channelSettingUnavailable(channel, def);
3840
+ const unavailable3 = channelSettingUnavailable(channel, def);
3768
3841
  const view = {
3769
3842
  ...shown,
3770
3843
  ...effectiveChannelSetting(channel, def),
3771
3844
  resettable: channelSettingResettable(def),
3772
- ...unavailable2 && {
3773
- unavailable: unavailable2
3845
+ ...unavailable3 && {
3846
+ unavailable: unavailable3
3774
3847
  }
3775
3848
  };
3776
3849
  const group = groups.find((candidate) => candidate.key === def.group);
@@ -4164,6 +4237,36 @@ function mutationWithoutWorkItems(mutation) {
4164
4237
  } : {}
4165
4238
  };
4166
4239
  }
4240
+ function isServerTriggeredBrowserSource(logSource) {
4241
+ return SERVER_TRIGGERED_BROWSER_SOURCES.includes(logSource);
4242
+ }
4243
+ function resolveBrowserFallback(raw) {
4244
+ return BROWSER_FALLBACKS.includes(raw) ? raw : DEFAULT_BROWSER_FALLBACK;
4245
+ }
4246
+ function resolveBrowserProxyCountry(raw) {
4247
+ if (typeof raw !== "string") return void 0;
4248
+ const code = raw.trim().toLowerCase();
4249
+ return PROXY_COUNTRY_CODE.test(code) ? code : void 0;
4250
+ }
4251
+ function resolveBrowserLogOptions(raw) {
4252
+ const logContent = BROWSER_LOG_CONTENT_MODES.includes(raw.logContent) ? raw.logContent : DEFAULT_BROWSER_LOG_CONTENT;
4253
+ const screenshots = BROWSER_SCREENSHOT_POLICIES.includes(raw.screenshots) ? raw.screenshots : DEFAULT_BROWSER_SCREENSHOT_POLICY;
4254
+ return {
4255
+ logContent,
4256
+ screenshots
4257
+ };
4258
+ }
4259
+ function browserProfileNotFoundMessage(name) {
4260
+ return `No browser named '${name}' is attached to this agent. Add it to the agent's \`browsers\` list and push again.`;
4261
+ }
4262
+ function resolveBrowserLimits(pick) {
4263
+ const limits = {};
4264
+ for (const key of BROWSER_LIMIT_KEYS) {
4265
+ const value3 = pick(key);
4266
+ if (typeof value3 === "number" && Number.isInteger(value3) && value3 > 0) limits[key] = value3;
4267
+ }
4268
+ return limits;
4269
+ }
4167
4270
  function utf8WidthAt(value3, index) {
4168
4271
  const code = value3.charCodeAt(index);
4169
4272
  if (code < 128) return {
@@ -4319,6 +4422,338 @@ function isDesktopFileCommandName(value3) {
4319
4422
  function isDesktopFileSessionId(value3) {
4320
4423
  return typeof value3 === "string" && /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i.test(value3);
4321
4424
  }
4425
+ function browserError(code, message, status) {
4426
+ return Object.assign(new Error(message), {
4427
+ name: BROWSER_ERROR_NAME,
4428
+ code,
4429
+ ...typeof status === "number" ? {
4430
+ status
4431
+ } : {}
4432
+ });
4433
+ }
4434
+ function isRecord(value3) {
4435
+ return typeof value3 === "object" && value3 !== null && !Array.isArray(value3);
4436
+ }
4437
+ function optionalString(raw, field) {
4438
+ const value3 = raw[field];
4439
+ if (value3 === void 0 || value3 === null || value3 === "") return void 0;
4440
+ if (typeof value3 !== "string") throw new TypeError(`${field} must be a string`);
4441
+ if (value3.startsWith("-")) throw new TypeError(`${field} may not start with '-'`);
4442
+ if (value3.includes("\0")) throw new TypeError(`${field} may not contain NUL`);
4443
+ return value3;
4444
+ }
4445
+ function readUrl(value3) {
4446
+ if (typeof value3 !== "string" || !/^https?:\/\//i.test(value3.trim()) || value3.includes("\0")) {
4447
+ throw new TypeError("url must be an absolute http(s) URL");
4448
+ }
4449
+ return value3.trim();
4450
+ }
4451
+ function readFormat(value3) {
4452
+ if (value3 === void 0 || value3 === null || value3 === "") return "text";
4453
+ if (!BROWSER_READ_FORMATS.includes(value3)) {
4454
+ throw new TypeError(`format must be one of: ${BROWSER_READ_FORMATS.join(", ")}`);
4455
+ }
4456
+ return value3;
4457
+ }
4458
+ function readTimeout(value3) {
4459
+ if (value3 === void 0 || value3 === null) return BROWSER_READ_DEFAULT_TIMEOUT_MS;
4460
+ if (typeof value3 !== "number" || !Number.isFinite(value3)) throw new TypeError("timeoutMs must be a number");
4461
+ return Math.min(BROWSER_READ_MAX_TIMEOUT_MS, Math.max(BROWSER_READ_MIN_TIMEOUT_MS, Math.round(value3)));
4462
+ }
4463
+ function parseBrowserReadPayload(raw) {
4464
+ try {
4465
+ const input = isRecord(raw) ? raw : {};
4466
+ const waitFor = optionalString(input, "waitFor");
4467
+ return {
4468
+ payload: {
4469
+ url: readUrl(input.url),
4470
+ ...waitFor ? {
4471
+ waitFor
4472
+ } : {},
4473
+ selector: optionalString(input, "selector") ?? BROWSER_READ_DEFAULT_SELECTOR,
4474
+ format: readFormat(input.format),
4475
+ timeoutMs: readTimeout(input.timeoutMs)
4476
+ }
4477
+ };
4478
+ } catch (error) {
4479
+ return {
4480
+ error: {
4481
+ code: "invalid_argument",
4482
+ message: `read: ${error.message}`
4483
+ }
4484
+ };
4485
+ }
4486
+ }
4487
+ function clampBrowserReadContent(content, maxChars = BROWSER_READ_MAX_CONTENT_CHARS) {
4488
+ if (content.length <= maxChars) return {
4489
+ content,
4490
+ truncated: false
4491
+ };
4492
+ return {
4493
+ content: content.slice(0, maxChars),
4494
+ truncated: true
4495
+ };
4496
+ }
4497
+ function joinBrowserReadMatches(parts, maxChars = BROWSER_READ_MAX_CONTENT_CHARS) {
4498
+ const kept = parts.map((part) => part.trim()).filter((part) => part.length > 0);
4499
+ return clampBrowserReadContent(kept.join(BROWSER_READ_MATCH_SEPARATOR), maxChars);
4500
+ }
4501
+ function isBrowserReadHttpFailure(message) {
4502
+ return HTTP_STATUS_FAILURE.test(message ?? "");
4503
+ }
4504
+ function browserReadHttpErrorMessage(url, status) {
4505
+ const answered = status === void 0 ? "an HTTP error status" : `HTTP ${status}`;
4506
+ return `read: ${url} answered ${answered} with no page to read`;
4507
+ }
4508
+ function urlOf(value3) {
4509
+ if (!value3) return void 0;
4510
+ try {
4511
+ return new URL(value3);
4512
+ } catch {
4513
+ return void 0;
4514
+ }
4515
+ }
4516
+ function answeredDocuments(requests) {
4517
+ if (!Array.isArray(requests)) return [];
4518
+ const answered = [];
4519
+ for (const entry of requests) {
4520
+ if (!isRecord(entry) || typeof entry.status !== "number" || typeof entry.url !== "string") continue;
4521
+ const url = urlOf(entry.url);
4522
+ if (url) answered.unshift({
4523
+ url,
4524
+ status: entry.status
4525
+ });
4526
+ }
4527
+ return answered;
4528
+ }
4529
+ function documentStatusOf(requests, requestedUrl, finalUrl) {
4530
+ const latestFirst = answeredDocuments(requests);
4531
+ const final = urlOf(finalUrl);
4532
+ const requested = urlOf(requestedUrl);
4533
+ const match = latestFirst.find((doc) => doc.url.href === final?.href) ?? latestFirst.find((doc) => doc.url.href === requested?.href) ?? latestFirst.find((doc) => doc.url.host === final?.host);
4534
+ return match?.status;
4535
+ }
4536
+ function isLoginUrl(url) {
4537
+ const segments = url.pathname.toLowerCase().split("/");
4538
+ return segments.some((segment) => LOGIN_PATH_SEGMENTS.has(segment)) || LOGIN_HOST_LABELS.has(url.hostname.split(".")[0]);
4539
+ }
4540
+ function isLoginRedirect(requestedUrl, finalUrl) {
4541
+ const requested = urlOf(requestedUrl);
4542
+ const final = urlOf(finalUrl);
4543
+ return Boolean(requested && final && !isLoginUrl(requested) && isLoginUrl(final));
4544
+ }
4545
+ function browserReadLoginBlock() {
4546
+ return {
4547
+ blocked: true,
4548
+ blocker: BROWSER_READ_LOGIN_BLOCKER,
4549
+ blockerKind: "login",
4550
+ blockerGuidance: "This URL redirected to a sign-in page, so the content is the sign-in form, not the page you asked for. The page needs a signed-in session: read it on the desktop browser where the user is signed in, or use a public URL."
4551
+ };
4552
+ }
4553
+ function utf8Bytes(value3) {
4554
+ let bytes = 0;
4555
+ for (let i = 0; i < value3.length; ) {
4556
+ const code = value3.charCodeAt(i);
4557
+ if (code < 128) {
4558
+ bytes += 1;
4559
+ i += 1;
4560
+ } else if (code < 2048) {
4561
+ bytes += 2;
4562
+ i += 1;
4563
+ } else if (code >= 55296 && code <= 56319) {
4564
+ const next = value3.charCodeAt(i + 1);
4565
+ if (next >= 56320 && next <= 57343) {
4566
+ bytes += 4;
4567
+ i += 2;
4568
+ } else {
4569
+ bytes += 3;
4570
+ i += 1;
4571
+ }
4572
+ } else {
4573
+ bytes += 3;
4574
+ i += 1;
4575
+ }
4576
+ }
4577
+ return bytes;
4578
+ }
4579
+ function isPlainFieldKey(key) {
4580
+ if (!LOG_FIELD_KEY_PATTERN.test(key)) return false;
4581
+ if (key === LOG_FIELDS_CLAMPED_KEY) return false;
4582
+ return !LOG_FIELD_SECRET_SHAPED_KEY_PATTERNS.some((pattern) => pattern.test(key));
4583
+ }
4584
+ function describeAgentLogFieldsViolation(value3) {
4585
+ if (typeof value3 !== "object" || value3 === null || Array.isArray(value3)) {
4586
+ return "fields must be an object";
4587
+ }
4588
+ const entries = Object.entries(value3);
4589
+ let userKeys = 0;
4590
+ for (const [key, entry] of entries) {
4591
+ if (key === LOG_FIELDS_CLAMPED_KEY) {
4592
+ if (entry !== true) return `fields.${key} must be true`;
4593
+ continue;
4594
+ }
4595
+ userKeys += 1;
4596
+ if (key.endsWith(LOG_FIELD_ARRAY_COUNT_SUFFIX)) {
4597
+ const base = key.slice(0, -LOG_FIELD_ARRAY_COUNT_SUFFIX.length);
4598
+ if (!isPlainFieldKey(base)) return `fields key \`${key}\` is not a legal field key`;
4599
+ if (typeof entry !== "number" || !Number.isFinite(entry)) {
4600
+ return `fields.${key} must be a finite number`;
4601
+ }
4602
+ continue;
4603
+ }
4604
+ if (!isPlainFieldKey(key)) return `fields key \`${key}\` is not a legal field key`;
4605
+ if (typeof entry === "string") {
4606
+ if (utf8Bytes(entry) > LOG_FIELD_MAX_VALUE_BYTES) {
4607
+ return `fields.${key} exceeds ${LOG_FIELD_MAX_VALUE_BYTES} bytes`;
4608
+ }
4609
+ continue;
4610
+ }
4611
+ if (typeof entry === "boolean") continue;
4612
+ if (typeof entry === "number") {
4613
+ if (!Number.isFinite(entry)) return `fields.${key} must be a finite number`;
4614
+ continue;
4615
+ }
4616
+ return `fields.${key} must be a string, number or boolean`;
4617
+ }
4618
+ if (userKeys > LOG_FIELDS_MAX_KEYS) {
4619
+ return `fields has ${userKeys} keys, over the cap of ${LOG_FIELDS_MAX_KEYS}`;
4620
+ }
4621
+ if (utf8Bytes(JSON.stringify(value3)) > LOG_FIELDS_MAX_BYTES) {
4622
+ return `fields exceeds ${LOG_FIELDS_MAX_BYTES} bytes`;
4623
+ }
4624
+ return void 0;
4625
+ }
4626
+ function isAgentLogFields(value3) {
4627
+ return describeAgentLogFieldsViolation(value3) === void 0;
4628
+ }
4629
+ function describeBaseViolation(event) {
4630
+ if (!BROWSER_LOG_EVENT_KINDS.includes(event.event)) return "event is not a known kind";
4631
+ if (typeof event.sessionId !== "string" || event.sessionId.length === 0) return "sessionId must be a string";
4632
+ if (event.sessionId.length > BROWSER_LOG_ID_MAX_CHARS) return "sessionId is too long";
4633
+ if (!BROWSER_LOG_ENGINES.includes(event.engine)) return "engine is not a known engine";
4634
+ if (typeof event.at !== "string" || Number.isNaN(Date.parse(event.at))) return "at must be an ISO timestamp";
4635
+ return void 0;
4636
+ }
4637
+ function describeFieldViolation(key, value3, check) {
4638
+ if (!check) return `${key} is not a field of this event`;
4639
+ if (!check(value3)) return `${key} has the wrong type`;
4640
+ if (typeof value3 === "string" && value3.length > BROWSER_LOG_TEXT_MAX_CHARS) return `${key} is too long`;
4641
+ return void 0;
4642
+ }
4643
+ function describeBrowserLogEventViolation(value3) {
4644
+ if (!isPlainObject2(value3)) return "event must be an object";
4645
+ const event = value3;
4646
+ const base = describeBaseViolation(event);
4647
+ if (base) return base;
4648
+ const shape = EVENT_SHAPES[event.event];
4649
+ for (const key of Object.keys(shape.required)) {
4650
+ if (event[key] === void 0) return `${key} is required`;
4651
+ }
4652
+ for (const [key, entry] of Object.entries(event)) {
4653
+ if (BASE_KEYS.has(key) || entry === void 0) continue;
4654
+ const violation = describeFieldViolation(key, entry, shape.required[key] ?? shape.optional[key]);
4655
+ if (violation) return violation;
4656
+ }
4657
+ return void 0;
4658
+ }
4659
+ function isBrowserLogEvent(value3) {
4660
+ return describeBrowserLogEventViolation(value3) === void 0;
4661
+ }
4662
+ function describeBrowserLogContextViolation(value3) {
4663
+ if (value3 === void 0) return void 0;
4664
+ if (!isPlainObject2(value3)) return "logContext must be an object";
4665
+ for (const [key, entry] of Object.entries(value3)) {
4666
+ if (!BROWSER_LOG_CONTEXT_KEYS.includes(key)) return `logContext.${key} is not allowed`;
4667
+ if (entry === void 0) continue;
4668
+ if (typeof entry !== "string") return `logContext.${key} must be a string`;
4669
+ if (entry.length > BROWSER_LOG_ID_MAX_CHARS) return `logContext.${key} is too long`;
4670
+ if (key === "environment" && !AGENT_LOG_ENVIRONMENTS.includes(entry)) {
4671
+ return "logContext.environment is not a known environment";
4672
+ }
4673
+ }
4674
+ return void 0;
4675
+ }
4676
+ function browserWorkerSessionId(ref) {
4677
+ return [
4678
+ ref.agentId,
4679
+ ref.userId,
4680
+ ref.sessionKey
4681
+ ].join(BROWSER_WORKER_SESSION_ID_SEPARATOR);
4682
+ }
4683
+ function browserLogContextOfWorkerContext(context) {
4684
+ const out = {};
4685
+ if (context?.runId) out.runId = context.runId;
4686
+ if (context?.primitiveId) out.primitiveId = context.primitiveId;
4687
+ if (context?.primitiveName) out.primitiveName = context.primitiveName;
4688
+ if (context?.channel) out.channel = context.channel;
4689
+ return out;
4690
+ }
4691
+ function browserLogEventOfWorkerEvent(event, mapping = {}) {
4692
+ const base = {
4693
+ sessionId: mapping.sessionId ?? event.sessionId,
4694
+ engine: "agent-browser",
4695
+ at: event.at
4696
+ };
4697
+ switch (event.event) {
4698
+ case "session.opened":
4699
+ return {
4700
+ ...base,
4701
+ event: "session.opened",
4702
+ reason: mapping.reason ?? "stepwise-cloud",
4703
+ limits: {
4704
+ ...event.limits
4705
+ }
4706
+ };
4707
+ case "session.closed":
4708
+ return {
4709
+ ...base,
4710
+ event: "session.closed",
4711
+ reason: event.reason,
4712
+ durationMs: event.durationMs,
4713
+ pagesVisited: event.pagesVisited,
4714
+ bytes: event.bytes
4715
+ };
4716
+ case "command":
4717
+ return {
4718
+ ...base,
4719
+ event: "command",
4720
+ name: event.name,
4721
+ ok: event.ok,
4722
+ durationMs: event.durationMs,
4723
+ resultBytes: event.resultBytes,
4724
+ urlAfter: event.urlAfter,
4725
+ title: event.title,
4726
+ errorCode: event.errorCode,
4727
+ errorMessage: event.errorMessage
4728
+ };
4729
+ case "navigation":
4730
+ if (!event.ok) return void 0;
4731
+ return {
4732
+ ...base,
4733
+ event: "navigation",
4734
+ url: event.url,
4735
+ finalUrl: event.finalUrl
4736
+ };
4737
+ case "blocked":
4738
+ return {
4739
+ ...base,
4740
+ event: "blocked",
4741
+ kind: event.kind,
4742
+ rule: event.rule,
4743
+ target: event.target,
4744
+ command: event.command,
4745
+ reason: event.detail ? event.detail.slice(0, BROWSER_WORKER_BLOCK_REASON_MAX_CHARS) : void 0
4746
+ };
4747
+ case "wall":
4748
+ return {
4749
+ ...base,
4750
+ event: "wall",
4751
+ kind: event.kind,
4752
+ url: event.url,
4753
+ nextAction: event.nextAction
4754
+ };
4755
+ }
4756
+ }
4322
4757
  function workflowRetryMaxAttemptsMessage(got) {
4323
4758
  const tail = got === void 0 ? "" : ` (got ${JSON.stringify(got)})`;
4324
4759
  return `\`retry.maxAttempts\` must be an integer ${WORKFLOW_RETRY_MIN_ATTEMPTS}..${WORKFLOW_RETRY_MAX_ATTEMPTS}${tail}`;
@@ -4532,82 +4967,6 @@ function buildDefaultPersona(agentName) {
4532
4967
  function buildPersonalSpaceStartingPersona(agentName) {
4533
4968
  return PERSONAL_SPACE_STARTING_PERSONA.replace(new RegExp(AGENT_NAME_TOKEN.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"), "g"), () => agentName || "Your assistant");
4534
4969
  }
4535
- function utf8Bytes(value3) {
4536
- let bytes = 0;
4537
- for (let i = 0; i < value3.length; ) {
4538
- const code = value3.charCodeAt(i);
4539
- if (code < 128) {
4540
- bytes += 1;
4541
- i += 1;
4542
- } else if (code < 2048) {
4543
- bytes += 2;
4544
- i += 1;
4545
- } else if (code >= 55296 && code <= 56319) {
4546
- const next = value3.charCodeAt(i + 1);
4547
- if (next >= 56320 && next <= 57343) {
4548
- bytes += 4;
4549
- i += 2;
4550
- } else {
4551
- bytes += 3;
4552
- i += 1;
4553
- }
4554
- } else {
4555
- bytes += 3;
4556
- i += 1;
4557
- }
4558
- }
4559
- return bytes;
4560
- }
4561
- function isPlainFieldKey(key) {
4562
- if (!LOG_FIELD_KEY_PATTERN.test(key)) return false;
4563
- if (key === LOG_FIELDS_CLAMPED_KEY) return false;
4564
- return !LOG_FIELD_SECRET_SHAPED_KEY_PATTERNS.some((pattern) => pattern.test(key));
4565
- }
4566
- function describeAgentLogFieldsViolation(value3) {
4567
- if (typeof value3 !== "object" || value3 === null || Array.isArray(value3)) {
4568
- return "fields must be an object";
4569
- }
4570
- const entries = Object.entries(value3);
4571
- let userKeys = 0;
4572
- for (const [key, entry] of entries) {
4573
- if (key === LOG_FIELDS_CLAMPED_KEY) {
4574
- if (entry !== true) return `fields.${key} must be true`;
4575
- continue;
4576
- }
4577
- userKeys += 1;
4578
- if (key.endsWith(LOG_FIELD_ARRAY_COUNT_SUFFIX)) {
4579
- const base = key.slice(0, -LOG_FIELD_ARRAY_COUNT_SUFFIX.length);
4580
- if (!isPlainFieldKey(base)) return `fields key \`${key}\` is not a legal field key`;
4581
- if (typeof entry !== "number" || !Number.isFinite(entry)) {
4582
- return `fields.${key} must be a finite number`;
4583
- }
4584
- continue;
4585
- }
4586
- if (!isPlainFieldKey(key)) return `fields key \`${key}\` is not a legal field key`;
4587
- if (typeof entry === "string") {
4588
- if (utf8Bytes(entry) > LOG_FIELD_MAX_VALUE_BYTES) {
4589
- return `fields.${key} exceeds ${LOG_FIELD_MAX_VALUE_BYTES} bytes`;
4590
- }
4591
- continue;
4592
- }
4593
- if (typeof entry === "boolean") continue;
4594
- if (typeof entry === "number") {
4595
- if (!Number.isFinite(entry)) return `fields.${key} must be a finite number`;
4596
- continue;
4597
- }
4598
- return `fields.${key} must be a string, number or boolean`;
4599
- }
4600
- if (userKeys > LOG_FIELDS_MAX_KEYS) {
4601
- return `fields has ${userKeys} keys, over the cap of ${LOG_FIELDS_MAX_KEYS}`;
4602
- }
4603
- if (utf8Bytes(JSON.stringify(value3)) > LOG_FIELDS_MAX_BYTES) {
4604
- return `fields exceeds ${LOG_FIELDS_MAX_BYTES} bytes`;
4605
- }
4606
- return void 0;
4607
- }
4608
- function isAgentLogFields(value3) {
4609
- return describeAgentLogFieldsViolation(value3) === void 0;
4610
- }
4611
4970
  function maxDrainsForTier(tier) {
4612
4971
  return tier === "enterprise" ? LOG_DRAIN_MAX_PER_ORG_ENTERPRISE : LOG_DRAIN_MAX_PER_ORG;
4613
4972
  }
@@ -5103,11 +5462,11 @@ function parseLogTimeBound(raw, now = /* @__PURE__ */ new Date()) {
5103
5462
  const at = Date.parse(value3);
5104
5463
  return Number.isNaN(at) ? null : new Date(at);
5105
5464
  }
5106
- function isRecord(value3) {
5465
+ function isRecord2(value3) {
5107
5466
  return typeof value3 === "object" && value3 !== null;
5108
5467
  }
5109
5468
  function isCoreDrainingErrorResponse(value3) {
5110
- if (!isRecord(value3) || !isRecord(value3.error)) return false;
5469
+ if (!isRecord2(value3) || !isRecord2(value3.error)) return false;
5111
5470
  return value3.error.code === CORE_DRAINING_CODE && typeof value3.error.message === "string" && value3.error.retryable === true;
5112
5471
  }
5113
5472
  function coreDrainingRetryDelayMs(retryAfter, nowMs = Date.now()) {
@@ -6304,11 +6663,11 @@ function recentRefs(lists) {
6304
6663
  function confidenceOf(n2) {
6305
6664
  return n2 < EVIDENCE_LOW_CONFIDENCE_N ? "low" : "ok";
6306
6665
  }
6307
- function rateOf(count, conversations) {
6666
+ function rateOf(count2, conversations) {
6308
6667
  return {
6309
- count,
6310
- rate: conversations > 0 ? count / conversations : null,
6311
- confidence: confidenceOf(count)
6668
+ count: count2,
6669
+ rate: conversations > 0 ? count2 / conversations : null,
6670
+ confidence: confidenceOf(count2)
6312
6671
  };
6313
6672
  }
6314
6673
  function evidenceDays(from, to) {
@@ -7130,7 +7489,7 @@ function maskMcpServerHeaders(server) {
7130
7489
  headersSet: headerNames.length > 0
7131
7490
  };
7132
7491
  }
7133
- var __defProp4, __name4, PLUMBING_THREAD_CHANNELS, CHANNEL_CONVERSATION_CHANNELS, HIDDEN_THREAD_CHANNELS, CHOICE_PERSON_TURN_CHANNELS, CHOICE_REPLAY_CLIENT_CAPABILITIES, CHOICE_REPLAY_CLIENT_SURFACES, DECISION_PROVIDERS, DECISION_QUESTION_TYPES, DECISION_NAME_PATTERN, DECISION_LIMITS, DECISION_ERROR_CODES, MAX_NAME_CHARS, InstructionsSchema, NameSchema, OddsQuestionSchema, ChoiceQuestionSchema, ScoreQuestionSchema, DecisionQuestionSchema, DecisionOptionsSchema, DecisionQuestionsSchema, DecisionDefinitionSchema, INTEGRATION_PASSTHROUGH_READ_METHODS, URL_REINTERPRETED_PATH_CHARACTERS, PERCENT_ENCODED_DOT, PERCENT_ESCAPE, DECODED_PATH_SEPARATORS, DECODED_LEADING_SEPARATOR, MAX_PERCENT_DECODE_ROUNDS, URL_RESOLUTION_PROBE_BASE, PLATFORM_INVOCATION_CALLERS, SUPERVISION_OPS, SUPERVISION_OPS_WAVE2, SUPERVISION_WATCHDOG_OPS, SUPERVISION_WATCHDOG_ERRORS, SUPERVISION_ROLLBACK_REFUSAL_CODES, SUPERVISION_ROLLBACK_LINEAGE_MAX, SUPERVISION_UNTARGETED_OPS, SUPERVISED_WORKFLOW_VERSIONS_MAX, SUPERVISION_EVENT_KINDS, AGENT_PROVISIONING_LIMITS, AGENT_PROVISIONING_APPROVAL_PAYLOAD_KEY, AGENT_PROVISIONING_ERRORS, PROVISIONED_SUPERVISION_ACTIONS, isNonEmptyString, uniqueStrings, sameSet, AGENT_PROVISIONING_APPROVAL_CARD_MAX_CHARS, APPROVAL_PAYLOAD_MEMBERS, AGENT_CONNECTION_POLICIES, AGENT_CONNECTION_POLICY_DEFAULT, AGENT_CONNECTION_MOUNT_MODES, AGENT_CONNECTION_GOVERNANCE_ERRORS, AGENT_CONNECTION_OPERATION_RULES_MAX, AGENT_CONNECTION_OPERATION_PATTERN_MAX_LENGTH, OPERATION_RULE_METHODS, PATH_SEPARATOR, PATH_SINGLE_SEGMENT_WILDCARD, PATH_REST_WILDCARD, METHOD_OVERRIDE_HEADER_NAMES, METHOD_OVERRIDE_QUERY_NAMES, ODATA_BATCH_SEGMENT, GOOGLE_BATCH_FIRST_SEGMENT, CONNECTION_CHECK_RESULTS, CONNECTION_CHECK_CATALOGUE_V1, CONNECTION_CHECK_NAME_PATTERN, CONNECTION_CHECK_NAME_MAX, CONNECT_OUTCOME_STATUSES, SECRET_TEST_RESULTS, SECRET_DATADOG_REGIONS, SECRET_PROVIDER_CATALOGUE_V1, SECRET_TEST_MAX_RESPONSE_BYTES, SECRET_ENV_KEY_PATTERN, SECRET_REQUEST_ERRORS, SECRET_OUTCOME_STATUSES, CLIENT_OUTCOME_TURNS_MAX, SHORT_TEXT_MAX, SLUG_MAX, shortText, optionalShortText, CONNECTION_REQUEST_TERMINAL_STATES, CONNECTION_USE_ORIGINS, AGENT_CONNECTION_OPERATION_LIMITS_BOUNDS, CURRENCY_CODE, LIMITS_KEYS, CAPS_KEYS, EXCLUSIONS_KEYS, EMAIL_IN_TEXT, MAX_EXCLUSION_DEPTH, PROJECTION_PARAMETER_KEYS, CHANNEL_PARAMETER_KEYS, GMAIL_SYSTEM_LABEL_IDS, ZERO_DECIMAL_CURRENCIES, THREE_DECIMAL_CURRENCIES, DECIMAL_AMOUNT, REDACTED_PLACEHOLDER, PROVIDER_MESSAGE_MAX_CHARS, ERROR_MESSAGE_MAX_CHARS, SECRET_LITERAL_PATTERNS, SECRET_NAME, SECRET_PAIR_PATTERNS, GROUP_COUNT, WORKFLOW_SECRET_KEY_RE, WORKFLOW_RESERVED_SECRET_KEYS, SCRUB_INPUT_MAX_CHARS, SCRUB_CUT_BACKOFF_CHARS, TEST_SESSION_ID_PATTERN, TEST_SESSION_COLLECTION_PREFIX, TEST_EFFECT_BODY_MAX_BYTES, TEST_EFFECT_DROPPED_HEADERS, EVAL_CREDITS_PER_1K_TOKENS, EVAL_RESERVED_TOOL_ID_PREFIXES, CONNECTION_HANDOVER_APPROVAL_PAYLOAD_KEY, CONNECTION_HANDOVER_APPROVAL_CARD_MAX_CHARS, CONNECTION_HANDOVER_LIMITS, MEMBERS, FORMAT_CHARS, oneLine, boundedString, AGENT_METRIC_NAME_PATTERN, AGENT_METRIC_LIMITS, AGENT_OBJECTIVE_ERRORS, CHANGE_LEASE_TTL_MINUTES_MIN, CHANGE_LEASE_TTL_MINUTES_MAX, CHANGE_LEASE_REASON_MAX, CHANGE_LEASE_ERRORS, AGENT_CONFIG_SET_LIMITS, SECRET_ENV_KEY_SUFFIXES, DEFAULT_OWNER_DEPARTURE_POLICY, AGENT_LIFECYCLE_ERRORS, USER_COST_COUNTER_TTL_SECONDS, USER_COST_ATTRIBUTION_CHANNELS, CALLER_DEDUPE_KEY_MAX, FOLLOW_UP_IDEMPOTENCY_TTL_SECONDS, THREAD_FOLLOW_UP_LIMITS, THREAD_FOLLOW_UP_ERRORS, PROGRESS_UPDATE_LIMITS, PAUSABLE_CAPABILITY_KINDS, UNIFIED_CATCH_UP_MAX_WINDOW_HOURS, UNIFIED_CATCH_UP_EVENTS, UNIFIED_CATCH_UP_FILTERABLE_OBJECT_TYPES, AGENT_NEVER_RULES_MAX, AGENT_NEVER_RULE_FIELD_MAX, AGENT_NEVER_RULE_INPUT_MATCH_MAX, NEVER_RULE_ID_PATTERN, NEVER_RULE_HTTP_METHODS, TEMPLATE_DISTRIBUTION_MODES, CHANNEL_SEND_CHANNELS, TAKEOVER_MAX_IDLE_MINUTES, MINUTES_PER_DAY, DEFAULT_IDLE_RELEASE_MINUTES, FALLBACK_IDLE_RELEASE_MINUTES, VARIATION_SELECTORS, SLACK_EMOJI_NAMES, SLACK_SHORTCODE, PLAIN_EMAIL_ADDRESS, DOMAIN, UNSAFE_TEXT, SLACK_CONVERSATION_ID, CHANNEL_SETTING_GROUPS, THREAD_SCOPING_NOUN, TAKEOVER_CHANNEL_TYPES, EMAIL_SETTINGS, SLACK_SETTING_DEFAULTS, SLACK_REACTION_MAX, SLACK_INTRO_MAX, SLACK_EXAMPLE_PROMPTS_MAX, SLACK_EXAMPLE_PROMPT_MAX, SLACK_SUPPORT_CONTACT_MAX, SLACK_SETTINGS, CHANNEL_SETTINGS, REVIEWABLE_ACTION_EXECUTE_TOOL_ALLOWLIST, REVIEWABLE_STANDING_START_TOOLS, REVIEWABLE_MCP_SEND_TOOL_SUFFIX, MCP_TOOL_READ_VERB_RE, MCP_DRAFT_CREATE_VERBS, NON_INTERACTIVE_CHANNELS, RICH_PARTS_MESSAGE_ID_PREFIX, SCREENSHOT_MESSAGE_ID_PREFIX, WORK_ITEMS_KEY, MAX_WORK_ITEMS, LIMITS, BROWSER_COMMANDS, BROWSER_COMMAND_NAMES, LOG_FIELDS_MAX_KEYS, LOG_FIELD_MAX_VALUE_BYTES, LOG_FIELDS_MAX_BYTES, LOG_FIELD_KEY_PATTERN, LOG_FIELD_SECRET_SHAPED_KEY_PATTERNS, LOG_FIELDS_CLAMPED_KEY, LOG_FIELD_ARRAY_COUNT_SUFFIX, LuaLogFieldsError, DESKTOP_FILE_COMMANDS, DESKTOP_FILE_COMMAND_SET, WORKFLOW_RETRY_BACKOFFS, WORKFLOW_RETRY_MIN_ATTEMPTS, WORKFLOW_RETRY_POLICY_KEYS, WORKFLOW_RETRY_MAX_ATTEMPTS, WORKFLOW_RETRY_ENGINE_KEYS, WORKFLOW_JOB_RESOURCES, WORKFLOW_SIDE_EFFECTS, WORKFLOW_MODEL_CLASSES, WORKFLOW_DEFAULT_TASK_CLASS_MAP, WORKFLOW_MODELS_MAX_CLASS_DEFAULT, WORKFLOW_AUTONOMY_NUMERIC_KEYS, WORKFLOW_AUTONOMY_ENVELOPE_KEYS, WORKFLOW_AUTONOMY_DEFAULTS, WORKFLOW_AUTONOMY_CEILINGS, WORKFLOW_AUTONOMY_MAX_RUNS_PER_HOUR_ENV, WORKFLOW_AUTONOMY_MAX_RUNS_PER_HOUR_CEILING, WORKFLOW_AUTONOMY_FORMS_DEFAULT, WORKFLOW_AUTONOMY_MIN_VALUE, WORKFLOW_JOB_RANGES, WORKFLOW_JOB_RANGE_MEMBERS, WORKFLOW_SINGLE_STEP_TYPES, WORKFLOW_HITL_ENTRY_TYPES, WORKFLOW_ARM_ENTRY_TYPES, WORKFLOW_HITL_ARM_CONTAINERS, WORKFLOW_GRAPH_ENTRY_STEP_KINDS, WORKFLOW_ARM_ENTRY_STEP_KINDS, WORKFLOW_BUDGET_MAX_DURATION_SECONDS, MODEL_ID_BYOK_PROVIDERS, MODEL_CLASS_REF_PREFIX, MODEL_SNAPSHOT_SUFFIX, REASONING_EFFORT_VALUES, IMPLICIT_MODEL_SELECTION_SOURCES, PLATFORM_FALLBACK_MODEL_SOURCE, AGENT_NAME_TOKEN, DEFAULT_PERSONA_GUIDE, PERSONAL_SPACE_STARTING_PERSONA, AGENT_LOG_SOURCES, AGENT_LOG_FIELDS_MAX_WIRE_KEYS, LOG_DRAIN_TYPES_PHASE1, LOG_DRAIN_TYPES_PHASE2, LOG_DRAIN_TYPES_IMPLEMENTED, LOG_DRAIN_SOURCES, LOG_DRAIN_MAX_PER_ORG, LOG_DRAIN_MAX_PER_ORG_ENTERPRISE, LOG_DRAIN_DATADOG_SITES, LOG_DRAIN_NEWRELIC_SITES, LOG_DRAIN_ENDPOINT_TEMPLATES, LOG_DRAIN_PRESET_SITES, LOG_DRAIN_BUCKET_NAME_PATTERN, LOG_DRAIN_BUCKET_HOST_PATTERNS, LOG_DRAIN_PRESET_HOST_SUFFIXES, DRAIN_CONTENT_ACK_ERROR_CODE, DRAIN_CONTENT_ACK_FIELD, DrainContentAckRequiredError, LOG_DRAIN_PRESET_PATHS, PRESET_SEGMENT_RE, LOG_DRAIN_QUOTAS, LOG_DRAIN_QUOTA_WARN_RATIO, LOG_DRAIN_QUOTA_DROP_DEBUG_RATIO, LOG_DRAIN_QUOTA_DROP_INFO_RATIO, LOG_DRAIN_QUOTA_PAUSE_RATIO, LOG_EXPORT_SOURCES, LOG_EXPORT_MAX_WINDOW_DAYS, LOG_EXPORT_MAX_WINDOW_MS, LOG_EXPORT_URL_TTL_SECONDS, LOG_EXPORT_FILE_RETENTION_DAYS, LOG_EXPORT_FILE_RETENTION_MS, LOG_EXPORT_PART_MAX_BYTES, LOG_DRAIN_NOTICE_RATE_LIMIT_MS, LOG_DRAIN_VERIFICATION_STALE_MS, LOG_DRAIN_DIGEST_INTERVAL_MS, LOG_DRAIN_DIGEST_MAX_ENTRIES, LOG_DRAIN_NOTICE_ERROR_MAX_CHARS, LOG_DRAIN_USAGE_LINE_ITEM, LOG_DRAIN_BYTES_PER_GIB, DEFAULT_LOG_DRAIN_PLAN_CONFIG, TIERS, LOG_CURSOR_MAX_LENGTH, LOG_CURSOR_MAX_ID_LENGTH, LOG_RELATIVE_TIME_PATTERN, LOG_ISO_TIME_PATTERN, RELATIVE_UNIT_MS, CORE_DRAINING_CODE, CORE_DRAINING_DEFAULT_RETRY_MS, CORE_DRAINING_MAX_RETRY_MS, VoiceNameSchema, PluginProviderSchema, RealtimeProviderSchema, PluginClassSchema, ModelDescriptorSchema, InferenceModelSchema, PluginModelSchema, RealtimeModelSchema, LuaVoiceModelSchema, TurnDetectionSchema, InterruptionSchema, BuiltinAudioClipSchema, AudioConfigSchema, BackgroundAudioEntrySchema, BackgroundAudioSchema, LuaVoiceConfigInnerSchema, LuaVoiceConfigSchema, LuaVoiceRefSchema, LUA_JOB_DEFAULT_TIMEOUT_SECONDS, LUA_JOB_MIN_TIMEOUT_SECONDS, LUA_JOB_MAX_TIMEOUT_SECONDS, KEYS, MAX_BODY_BYTES, MAX_ID_LENGTH, UTC_ISO, TEMPLATE_TRIGGER_URL_ENV_PREFIX, TEMPLATE_INSTALL_POLICY_PER_WORKSPACE_VALUES, SUBJECT_TYPES, SubjectTypeSchema, CREDENTIAL_TYPES, CredentialTypeSchema, DEVICE_OPERATIONS, DeviceOperationSchema, DEVICE_SCOPE_BY_OPERATION, DeviceBindingSchema, IdSchema, SESSION_AUTH_TIME_MAX_S, PrincipalDescriptorSchema, ActorDescriptorSchema, PrincipalOwnerSchema, CredentialLifecycleSchema, GeneralCredentialDescriptorSchema, DeviceCredentialDescriptorSchema, GeneralPrincipalContextSchema, DeviceCredentialPrincipalContextSchema, RawPrincipalContextSchema, PrincipalContextSchema, DeviceCredentialClaimSchema, LUA_CLIENT_HEADER, LUA_CLIENT_APPS, SEMVER_PATTERN, WEB_RELEASE_PATTERN, CLIENT_HEADER_PATTERN, LUA_SESSION_ID_CLAIM, SESSION_REVOKED_CODE, AUTHZ_PROJECTION_VERSION, ProjectedScopeSchema, DisplayRoleSchema, AuthorizationPrincipalSchema, CredentialContextSchema, ProjectionAnomalySchema, ProjectedOrgSchema, ProjectedResourceSchema, CapabilityProfilesSchema, RoleCatalogSchema, EffectiveAuthorizationSchema, ResourcePageSchema, SYSTEM_USER_PREFIX, WORKFLOW_RUN_IN_FLIGHT, WORKFLOW_RUN_IDLE, WORKFLOW_RUN_TERMINAL, WORKFLOW_RUN_STATUSES, WORKFLOW_RUN_GATE_KINDS, WORKFLOW_STEP_STATUSES, WORKFLOW_STEP_IN_FLIGHT, WORKFLOW_SIGNAL_EVENT_SITES, ARCHIVE_WINDOW_MARGIN_DAYS, WORKFLOW_ORG_PURGING_TTL_S, WORKFLOW_ORG_PURGE_FORCE_AFTER_MS, IDEMPOTENCY_HOLDING_STATUSES, WORKFLOW_SCHEDULED_RUN_ID_PREFIX, CLOUD_TASK_RUN_ID_PREFIX, WORKFLOW_SCHEDULE_KEY_MAX, WORKFLOW_SCHEDULE_IDEMPOTENCY_KEY_PREFIX, WORKFLOW_OPERATION_ID_PREFIX, WORKFLOW_CONNECTION_KEY_RE, WORKFLOW_AGENT_APP_CONNECTION_PREFIX, WORKFLOW_JOB_MODEL_SOURCE_LABELS, WORKFLOW_SUSPEND_KINDS, WORKFLOW_RUN_NOTIFICATION_SUSPENDED_KINDS, WORKFLOW_SIGNAL_PAYLOAD_MAX_BYTES, WORKFLOW_SIGNAL_NAME_RE, WORKFLOW_SUSPEND_DEFAULT_TIMEOUT_HOURS, WORKFLOW_RESOLVE_OUTPUT_MAX_BYTES, SCHEDULE_HEALTH_NOTIFY_CHANNELS, SCHEDULE_HEALTH_DEFAULT_NOTIFY, SCHEDULE_HEALTH_LIMITS, KNOWN_KEYS, WORKFLOW_GOAL_JUDGE_SELF, APPROVAL_ARGS_MAX_CHARS, APPROVAL_ARG_STRING_MAX_CHARS, APPROVAL_ARGS_SUMMARY_MAX_CHARS, MAX_DEPTH, MAX_KEYS, MAX_ITEMS, MAX_NODES, MAX_KEY_CHARS, KEY_SCRUB_INPUT_MAX_CHARS, STRING_SCRUB_INPUT_MAX_CHARS, ELLIPSIS, SKIP, SCRUB_SECRETS_BEFORE_PERSIST_ENV, PERSIST_SCRUB_MAX_CHARS, PERSIST_SCRUB_REF_MAX_CHARS, WORKFLOW_AUDIT_EVENTS, WORKFLOW_AUDIT_METADATA_MAX_BYTES, INDENT, WRAP_WIDTH, NOUNS, GET_TOOL_NAMES, PREAMBLE, WORKFLOW_APPROVAL_OUTPUT_DECISIONS, WORKFLOW_APPROVAL_OUTPUT_SCHEMA, JSON_FENCE_RE, DEFAULT_ON_AGENT_FEATURES, SUBAGENT_PER_KEY_FLAG_ENV, PER_KEY_FLAG_VALUES, ONBOARDING_FLOW_KEY, ONBOARDING_SCHEMA_VERSION, id, copy, onboardingHeadingSchema, onboardingRichTextInlineSchema, onboardingRichTextSchema, onboardingDestinationSchema, onboardingArtworkSchema, onboardingAnswerSchema, onboardingQuestionSchema, onboardingTemplateSectionSchema, onboardingInstallScreenSchema, onboardingResultScreenSchema, onboardingConnectScreenSchema, onboardingTemplateContentSchema, onboardingUnavailableOutcomeSchema, onboardingFlowSchema, onboardingActorSchema, onboardingEditorSchema, onboardingPublicationSummarySchema, onboardingValidationIssueSchema, onboardingValidationResponseSchema, onboardingAssetSchema, onboardingPublicAssetSchema, getOnboardingConfigResponseSchema, saveOnboardingDraftRequestSchema, validateOnboardingRequestSchema, publishOnboardingRequestSchema, rollbackOnboardingRequestSchema, onboardingTemplateCatalogItemSchema, getPublishedOnboardingResponseSchema, WEB_ROUTE_PROTOCOL_VERSION, WEB_ROUTE_METHODS, WEB_ROUTE_REQUEST_HEADER_ALLOWLIST, WEB_ROUTE_RESPONSE_HEADER_ALLOWLIST, WEB_ROUTE_MAX_REQUEST_BODY_BYTES, WEB_ROUTE_MAX_RESPONSE_BYTES, WEB_APP_NAME_PATTERN, WEB_APP_ENTRY_HTML_MAX_CHARS, WEB_APP_MAX_ASSET_BYTES, EVIDENCE_SESSION_IDLE_MS, EVIDENCE_MIN_CONVERSATIONS, EVIDENCE_LOW_CONFIDENCE_N, EVIDENCE_SNIPPET_MAX_CHARS, EVIDENCE_EXAMPLES_PER_ITEM, EVIDENCE_SHOWN_ITEMS, EVIDENCE_LATENCY_BOUNDS_MS, EVIDENCE_WORD_BOUNDS, BAD_CONVERSATION_REASONS, ATTACHMENT_LINES, REVIEW_VERDICT_REASON_ORDER, ENV_TEMPLATE_SECRET_KEY_RE, CONNECTION_SEND_NOT_ALLOWED, CONNECTION_RECIPIENT_NOT_ALLOWED, NOT_SEND, PLAIN_ADDRESS, RecipientSet, MCP_MESSAGING_CREATE, MCP_CALENDAR_EVENT_WRITE, REPLY_KEYS, DEDICATED_MAIL_SLUGS, FULL_SUITE_SLUGS, WELL_KNOWN_MAIL_FOLDERS, MEMBER_KEYS, CANONICAL_ORIGIN, CANONICAL_PREFIX, STRICT_BASE64, GMAIL_PREFIX, GMAIL_MESSAGES_SEND, GMAIL_DRAFTS_SEND, GOOGLE_BATCH, GRAPH_VERSION, GRAPH_PRINCIPAL, GRAPH_SEND_MAIL, GRAPH_MESSAGE_ACTION, GRAPH_OWNER, GRAPH_EVENTS, GRAPH_EVENT_COLLECTION, GRAPH_EVENT_ID, GRAPH_EVENT_ITEM, GRAPH_EVENT_ACTION, GRAPH_BATCH, GRAPH_TEAMS_MESSAGE, GRAPH_ACTIVITY_NOTIFICATION, GRAPH_GROUP_CONVERSATION, GCAL_EVENTS, GRAPH_READ_KEYS, MALFORMED_POLICY, BILLING_REJECTION_TEXT_CREDITS, BILLING_REJECTION_TEXT_SEAT, BILLING_REJECTION_TEXT_USER_QUOTA, CUSTOM_MCP_CONNECTION_ID_PREFIX, CUSTOM_MCP_SOURCE, CUSTOM_MCP_TRANSPORT, CUSTOM_MCP_CONNECTION_ID_PATTERN, customMcpConnectionIdSchema, CONNECTION_BACKED_MCP_SOURCES, CUSTOM_MCP_REFERENCE_ID_PATTERN, customMcpReferenceIdSchema, CUSTOM_MCP_AUTH_KINDS, customMcpAuthKindSchema, CUSTOM_MCP_OAUTH_REGISTRATIONS, customMcpOAuthRegistrationSchema, CUSTOM_MCP_HEALTH_STATES, customMcpHealthStateSchema, CUSTOM_MCP_FAILURE_STEPS, customMcpFailureStepSchema, CUSTOM_MCP_CONNECT_STEPS, customMcpConnectStepSchema, customMcpFailureCodeSchema, WORKFLOW_KEY_MAX_LENGTH, CUSTOM_MCP_URL_MAX_LENGTH, CUSTOM_MCP_DISPLAY_NAME_MAX_LENGTH, CUSTOM_MCP_MAX_HEADERS, CUSTOM_MCP_HEADER_NAME_MAX_LENGTH, CUSTOM_MCP_HEADER_VALUE_MAX_LENGTH, CUSTOM_MCP_MAX_TOOLS, CUSTOM_MCP_TOOL_NAME_MAX_LENGTH, CUSTOM_MCP_TOOL_TEXT_MAX_LENGTH, CUSTOM_MCP_MIN_TIMEOUT_MS, CUSTOM_MCP_MAX_TIMEOUT_MS, CUSTOM_MCP_OAUTH_PENDING_TTL_MS, isoDateTime, agentId, nonNegativeInt, customMcpUrlInputSchema, customMcpDisplayNameSchema, customMcpTimeoutSchema, CUSTOM_MCP_RESERVED_HEADER_NAMES, HEADER_NAME, HEADER_VALUE_FORBIDDEN, customMcpHeaderNameSchema, headerValue, customMcpHeadersSchema, customMcpHeadersPatchSchema, customMcpToolNameSchema, customMcpToolSchema, customMcpServerInfoSchema, customMcpToolSelectionSchema, customMcpToolsResponseSchema, customMcpFailureSchema, customMcpHealthSchema, customMcpErrorBodySchema, customMcpConnectionBlockSchema, customMcpConnectionViewSchema, customMcpConnectionResponseSchema, customMcpProbeBodySchema, customMcpOAuthDiscoverySchema, customMcpProbeResponseSchema, createFields, mountAgentField, customMcpCreateAgentBodySchema, customMcpCreateUserBodySchema, customMcpOAuthClientSchema, startFields, customMcpOAuthStartAgentBodySchema, customMcpOAuthStartUserBodySchema, customMcpOAuthStartResponseSchema, nonce, customMcpOAuthSuccessRedirectQuerySchema, CUSTOM_MCP_OAUTH_CALLBACK_ERRORS, customMcpOAuthFailureRedirectQuerySchema, customMcpOAuthFinalizeBodySchema, customMcpCimdDocumentSchema, customMcpPatchBodySchema, customMcpCredentialRequestSchema, customMcpCredentialAuthSchema, customMcpCredentialResponseSchema, CUSTOM_MCP_CREDENTIAL_ERRORS, customMcpCredentialErrorBodySchema, customMcpHealthReportSchema, customMcpProbeRequestSchema, customMcpProbeResultSchema, customMcpOriginUrlSchema, customMcpServerProjectionSchema, customMcpMountUpsertBodySchema;
7492
+ var __defProp4, __name4, PLUMBING_THREAD_CHANNELS, CHANNEL_CONVERSATION_CHANNELS, HIDDEN_THREAD_CHANNELS, CHOICE_PERSON_TURN_CHANNELS, CHOICE_REPLAY_CLIENT_CAPABILITIES, CHOICE_REPLAY_CLIENT_SURFACES, DECISION_PROVIDERS, DECISION_QUESTION_TYPES, DECISION_NAME_PATTERN, DECISION_LIMITS, DECISION_ERROR_CODES, MAX_NAME_CHARS, InstructionsSchema, NameSchema, OddsQuestionSchema, ChoiceQuestionSchema, ScoreQuestionSchema, DecisionQuestionSchema, DecisionOptionsSchema, DecisionQuestionsSchema, DecisionDefinitionSchema, INTEGRATION_PASSTHROUGH_READ_METHODS, URL_REINTERPRETED_PATH_CHARACTERS, PERCENT_ENCODED_DOT, PERCENT_ESCAPE, DECODED_PATH_SEPARATORS, DECODED_LEADING_SEPARATOR, MAX_PERCENT_DECODE_ROUNDS, URL_RESOLUTION_PROBE_BASE, PLATFORM_INVOCATION_CALLERS, MESSAGING_CHANNELS, VOICE_CHANNELS, TURN_CATEGORIES, AGENT_TOOL_CATEGORIES, count, AnthropicSseUsageReader, SUPERVISION_OPS, SUPERVISION_OPS_WAVE2, SUPERVISION_WATCHDOG_OPS, SUPERVISION_WATCHDOG_ERRORS, SUPERVISION_ROLLBACK_REFUSAL_CODES, SUPERVISION_ROLLBACK_LINEAGE_MAX, SUPERVISION_UNTARGETED_OPS, SUPERVISED_WORKFLOW_VERSIONS_MAX, SUPERVISION_EVENT_KINDS, AGENT_PROVISIONING_LIMITS, AGENT_PROVISIONING_APPROVAL_PAYLOAD_KEY, AGENT_PROVISIONING_ERRORS, PROVISIONED_SUPERVISION_ACTIONS, isNonEmptyString, uniqueStrings, sameSet, AGENT_PROVISIONING_APPROVAL_CARD_MAX_CHARS, APPROVAL_PAYLOAD_MEMBERS, AGENT_CONNECTION_POLICIES, AGENT_CONNECTION_POLICY_DEFAULT, AGENT_CONNECTION_MOUNT_MODES, AGENT_CONNECTION_GOVERNANCE_ERRORS, AGENT_CONNECTION_OPERATION_RULES_MAX, AGENT_CONNECTION_OPERATION_PATTERN_MAX_LENGTH, OPERATION_RULE_METHODS, PATH_SEPARATOR, PATH_SINGLE_SEGMENT_WILDCARD, PATH_REST_WILDCARD, METHOD_OVERRIDE_HEADER_NAMES, METHOD_OVERRIDE_QUERY_NAMES, ODATA_BATCH_SEGMENT, GOOGLE_BATCH_FIRST_SEGMENT, CONNECTION_CHECK_RESULTS, CONNECTION_CHECK_CATALOGUE_V1, CONNECTION_CHECK_NAME_PATTERN, CONNECTION_CHECK_NAME_MAX, CONNECT_OUTCOME_STATUSES, SECRET_TEST_RESULTS, SECRET_DATADOG_REGIONS, SECRET_PROVIDER_CATALOGUE_V1, SECRET_TEST_MAX_RESPONSE_BYTES, SECRET_ENV_KEY_PATTERN, SECRET_REQUEST_ERRORS, SECRET_OUTCOME_STATUSES, CLIENT_OUTCOME_TURNS_MAX, SHORT_TEXT_MAX, SLUG_MAX, shortText, optionalShortText, CONNECTION_REQUEST_TERMINAL_STATES, CONNECTION_USE_ORIGINS, AGENT_CONNECTION_OPERATION_LIMITS_BOUNDS, CURRENCY_CODE, LIMITS_KEYS, CAPS_KEYS, EXCLUSIONS_KEYS, EMAIL_IN_TEXT, MAX_EXCLUSION_DEPTH, PROJECTION_PARAMETER_KEYS, CHANNEL_PARAMETER_KEYS, GMAIL_SYSTEM_LABEL_IDS, ZERO_DECIMAL_CURRENCIES, THREE_DECIMAL_CURRENCIES, DECIMAL_AMOUNT, REDACTED_PLACEHOLDER, PROVIDER_MESSAGE_MAX_CHARS, ERROR_MESSAGE_MAX_CHARS, SECRET_LITERAL_PATTERNS, SECRET_NAME, SECRET_PAIR_PATTERNS, GROUP_COUNT, WORKFLOW_SECRET_KEY_RE, WORKFLOW_RESERVED_SECRET_KEYS, SCRUB_INPUT_MAX_CHARS, SCRUB_CUT_BACKOFF_CHARS, TEST_SESSION_ID_PATTERN, TEST_SESSION_COLLECTION_PREFIX, TEST_EFFECT_BODY_MAX_BYTES, TEST_EFFECT_DROPPED_HEADERS, EVAL_CREDITS_PER_1K_TOKENS, EVAL_RESERVED_TOOL_ID_PREFIXES, CONNECTION_HANDOVER_APPROVAL_PAYLOAD_KEY, CONNECTION_HANDOVER_APPROVAL_CARD_MAX_CHARS, CONNECTION_HANDOVER_LIMITS, MEMBERS, FORMAT_CHARS, oneLine, boundedString, AGENT_METRIC_NAME_PATTERN, AGENT_METRIC_LIMITS, AGENT_OBJECTIVE_ERRORS, CHANGE_LEASE_TTL_MINUTES_MIN, CHANGE_LEASE_TTL_MINUTES_MAX, CHANGE_LEASE_REASON_MAX, CHANGE_LEASE_ERRORS, AGENT_CONFIG_SET_LIMITS, SECRET_ENV_KEY_SUFFIXES, DEFAULT_OWNER_DEPARTURE_POLICY, AGENT_LIFECYCLE_ERRORS, USER_COST_COUNTER_TTL_SECONDS, USER_COST_ATTRIBUTION_CHANNELS, CALLER_DEDUPE_KEY_MAX, FOLLOW_UP_IDEMPOTENCY_TTL_SECONDS, THREAD_FOLLOW_UP_LIMITS, THREAD_FOLLOW_UP_ERRORS, PROGRESS_UPDATE_LIMITS, PAUSABLE_CAPABILITY_KINDS, UNIFIED_CATCH_UP_MAX_WINDOW_HOURS, UNIFIED_CATCH_UP_EVENTS, UNIFIED_CATCH_UP_FILTERABLE_OBJECT_TYPES, AGENT_NEVER_RULES_MAX, AGENT_NEVER_RULE_FIELD_MAX, AGENT_NEVER_RULE_INPUT_MATCH_MAX, NEVER_RULE_ID_PATTERN, NEVER_RULE_HTTP_METHODS, TEMPLATE_DISTRIBUTION_MODES, CHANNEL_SEND_CHANNELS, TAKEOVER_MAX_IDLE_MINUTES, MINUTES_PER_DAY, DEFAULT_IDLE_RELEASE_MINUTES, FALLBACK_IDLE_RELEASE_MINUTES, VARIATION_SELECTORS, SLACK_EMOJI_NAMES, SLACK_SHORTCODE, PLAIN_EMAIL_ADDRESS, DOMAIN, UNSAFE_TEXT, SLACK_CONVERSATION_ID, CHANNEL_SETTING_GROUPS, THREAD_SCOPING_NOUN, TAKEOVER_CHANNEL_TYPES, EMAIL_SETTINGS, SLACK_SETTING_DEFAULTS, SLACK_REACTION_MAX, SLACK_INTRO_MAX, SLACK_EXAMPLE_PROMPTS_MAX, SLACK_EXAMPLE_PROMPT_MAX, SLACK_SUPPORT_CONTACT_MAX, SLACK_SETTINGS, CHANNEL_SETTINGS, REVIEWABLE_ACTION_EXECUTE_TOOL_ALLOWLIST, REVIEWABLE_STANDING_START_TOOLS, REVIEWABLE_MCP_SEND_TOOL_SUFFIX, MCP_TOOL_READ_VERB_RE, MCP_DRAFT_CREATE_VERBS, NON_INTERACTIVE_CHANNELS, RICH_PARTS_MESSAGE_ID_PREFIX, SCREENSHOT_MESSAGE_ID_PREFIX, WORK_ITEMS_KEY, MAX_WORK_ITEMS, LIMITS, BROWSER_COMMANDS, BROWSER_COMMAND_NAMES, SERVER_TRIGGERED_BROWSER_SOURCES, BROWSER_FALLBACKS, DEFAULT_BROWSER_FALLBACK, PROXY_COUNTRY_CODE, BROWSER_LOG_CONTENT_MODES, DEFAULT_BROWSER_LOG_CONTENT, BROWSER_SCREENSHOT_POLICIES, DEFAULT_BROWSER_SCREENSHOT_POLICY, BROWSER_PROFILE_NAME_PATTERN, BROWSER_LIMIT_KEYS, BROWSER_LIMIT_MAX, BROWSER_EXECUTE_METHOD, BROWSER_GLOBAL_METHODS, BROWSER_EXECUTE_DEFAULT_TIMEOUT_MS, BROWSER_EXECUTE_MAX_TIMEOUT_MS, LOG_FIELDS_MAX_KEYS, LOG_FIELD_MAX_VALUE_BYTES, LOG_FIELDS_MAX_BYTES, LOG_FIELD_KEY_PATTERN, LOG_FIELD_SECRET_SHAPED_KEY_PATTERNS, LOG_FIELDS_CLAMPED_KEY, LOG_FIELD_ARRAY_COUNT_SUFFIX, LuaLogFieldsError, DESKTOP_FILE_COMMANDS, DESKTOP_FILE_COMMAND_SET, BROWSER_READ_FORMATS, BROWSER_READ_DEFAULT_TIMEOUT_MS, BROWSER_READ_MIN_TIMEOUT_MS, BROWSER_READ_MAX_TIMEOUT_MS, BROWSER_READ_MAX_CONTENT_CHARS, BROWSER_READ_DEFAULT_SELECTOR, BROWSER_READ_MATCH_SEPARATOR, BROWSER_READ_LOGIN_BLOCKER, BROWSER_ERROR_NAME, HTTP_STATUS_FAILURE, LOGIN_PATH_SEGMENTS, LOGIN_HOST_LABELS, AGENT_LOG_SOURCES, AGENT_LOG_ENVIRONMENTS, AGENT_LOG_FIELDS_MAX_WIRE_KEYS, BROWSER_LOG_EVENT_KINDS, BROWSER_LOG_ENGINES, BROWSER_SESSION_OPEN_REASONS, BROWSER_BLOCK_KINDS, BROWSER_WALL_KINDS, BROWSER_WALL_NEXT_ACTIONS, BROWSER_CONFIRM_DECISIONS, BROWSER_SESSION_CLOSE_REASONS, BROWSER_LOG_CONTEXT_KEYS, BROWSER_LOG_ID_MAX_CHARS, BROWSER_LOG_TEXT_MAX_CHARS, isString, isBoolean, isCount, isPlainObject2, oneOf, isLimits, EVENT_SHAPES, BASE_KEYS, BROWSER_WORKER_SESSION_ID_SEPARATOR, BROWSER_WORKER_BLOCK_REASON_MAX_CHARS, WORKFLOW_RETRY_BACKOFFS, WORKFLOW_RETRY_MIN_ATTEMPTS, WORKFLOW_RETRY_POLICY_KEYS, WORKFLOW_RETRY_MAX_ATTEMPTS, WORKFLOW_RETRY_ENGINE_KEYS, WORKFLOW_JOB_RESOURCES, WORKFLOW_SIDE_EFFECTS, WORKFLOW_MODEL_CLASSES, WORKFLOW_DEFAULT_TASK_CLASS_MAP, WORKFLOW_MODELS_MAX_CLASS_DEFAULT, WORKFLOW_AUTONOMY_NUMERIC_KEYS, WORKFLOW_AUTONOMY_ENVELOPE_KEYS, WORKFLOW_AUTONOMY_DEFAULTS, WORKFLOW_AUTONOMY_CEILINGS, WORKFLOW_AUTONOMY_MAX_RUNS_PER_HOUR_ENV, WORKFLOW_AUTONOMY_MAX_RUNS_PER_HOUR_CEILING, WORKFLOW_AUTONOMY_FORMS_DEFAULT, WORKFLOW_AUTONOMY_MIN_VALUE, WORKFLOW_JOB_RANGES, WORKFLOW_JOB_RANGE_MEMBERS, WORKFLOW_SINGLE_STEP_TYPES, WORKFLOW_HITL_ENTRY_TYPES, WORKFLOW_ARM_ENTRY_TYPES, WORKFLOW_HITL_ARM_CONTAINERS, WORKFLOW_GRAPH_ENTRY_STEP_KINDS, WORKFLOW_ARM_ENTRY_STEP_KINDS, WORKFLOW_BUDGET_MAX_DURATION_SECONDS, MODEL_ID_BYOK_PROVIDERS, MODEL_CLASS_REF_PREFIX, MODEL_SNAPSHOT_SUFFIX, REASONING_EFFORT_VALUES, IMPLICIT_MODEL_SELECTION_SOURCES, PLATFORM_FALLBACK_MODEL_SOURCE, AGENT_NAME_TOKEN, DEFAULT_PERSONA_GUIDE, PERSONAL_SPACE_STARTING_PERSONA, LOG_DRAIN_TYPES_PHASE1, LOG_DRAIN_TYPES_PHASE2, LOG_DRAIN_TYPES_IMPLEMENTED, LOG_DRAIN_SOURCES, LOG_DRAIN_MAX_PER_ORG, LOG_DRAIN_MAX_PER_ORG_ENTERPRISE, LOG_DRAIN_DATADOG_SITES, LOG_DRAIN_NEWRELIC_SITES, LOG_DRAIN_ENDPOINT_TEMPLATES, LOG_DRAIN_PRESET_SITES, LOG_DRAIN_BUCKET_NAME_PATTERN, LOG_DRAIN_BUCKET_HOST_PATTERNS, LOG_DRAIN_PRESET_HOST_SUFFIXES, DRAIN_CONTENT_ACK_ERROR_CODE, DRAIN_CONTENT_ACK_FIELD, DrainContentAckRequiredError, LOG_DRAIN_PRESET_PATHS, PRESET_SEGMENT_RE, LOG_DRAIN_QUOTAS, LOG_DRAIN_QUOTA_WARN_RATIO, LOG_DRAIN_QUOTA_DROP_DEBUG_RATIO, LOG_DRAIN_QUOTA_DROP_INFO_RATIO, LOG_DRAIN_QUOTA_PAUSE_RATIO, LOG_EXPORT_SOURCES, LOG_EXPORT_MAX_WINDOW_DAYS, LOG_EXPORT_MAX_WINDOW_MS, LOG_EXPORT_URL_TTL_SECONDS, LOG_EXPORT_FILE_RETENTION_DAYS, LOG_EXPORT_FILE_RETENTION_MS, LOG_EXPORT_PART_MAX_BYTES, LOG_DRAIN_NOTICE_RATE_LIMIT_MS, LOG_DRAIN_VERIFICATION_STALE_MS, LOG_DRAIN_DIGEST_INTERVAL_MS, LOG_DRAIN_DIGEST_MAX_ENTRIES, LOG_DRAIN_NOTICE_ERROR_MAX_CHARS, LOG_DRAIN_USAGE_LINE_ITEM, LOG_DRAIN_BYTES_PER_GIB, DEFAULT_LOG_DRAIN_PLAN_CONFIG, TIERS, LOG_CURSOR_MAX_LENGTH, LOG_CURSOR_MAX_ID_LENGTH, LOG_RELATIVE_TIME_PATTERN, LOG_ISO_TIME_PATTERN, RELATIVE_UNIT_MS, CORE_DRAINING_CODE, CORE_DRAINING_DEFAULT_RETRY_MS, CORE_DRAINING_MAX_RETRY_MS, VoiceNameSchema, PluginProviderSchema, RealtimeProviderSchema, PluginClassSchema, ModelDescriptorSchema, InferenceModelSchema, PluginModelSchema, RealtimeModelSchema, LuaVoiceModelSchema, TurnDetectionSchema, InterruptionSchema, BuiltinAudioClipSchema, AudioConfigSchema, BackgroundAudioEntrySchema, BackgroundAudioSchema, LuaVoiceConfigInnerSchema, LuaVoiceConfigSchema, LuaVoiceRefSchema, LUA_JOB_DEFAULT_TIMEOUT_SECONDS, LUA_JOB_MIN_TIMEOUT_SECONDS, LUA_JOB_MAX_TIMEOUT_SECONDS, KEYS, MAX_BODY_BYTES, MAX_ID_LENGTH, UTC_ISO, TEMPLATE_TRIGGER_URL_ENV_PREFIX, TEMPLATE_INSTALL_POLICY_PER_WORKSPACE_VALUES, SUBJECT_TYPES, SubjectTypeSchema, CREDENTIAL_TYPES, CredentialTypeSchema, DEVICE_OPERATIONS, DeviceOperationSchema, DEVICE_SCOPE_BY_OPERATION, DeviceBindingSchema, IdSchema, SESSION_AUTH_TIME_MAX_S, PrincipalDescriptorSchema, ActorDescriptorSchema, PrincipalOwnerSchema, CredentialLifecycleSchema, GeneralCredentialDescriptorSchema, DeviceCredentialDescriptorSchema, GeneralPrincipalContextSchema, DeviceCredentialPrincipalContextSchema, RawPrincipalContextSchema, PrincipalContextSchema, DeviceCredentialClaimSchema, LUA_CLIENT_HEADER, LUA_CLIENT_APPS, SEMVER_PATTERN, WEB_RELEASE_PATTERN, CLIENT_HEADER_PATTERN, LUA_SESSION_ID_CLAIM, SESSION_REVOKED_CODE, AUTHZ_PROJECTION_VERSION, ProjectedScopeSchema, DisplayRoleSchema, AuthorizationPrincipalSchema, CredentialContextSchema, ProjectionAnomalySchema, ProjectedOrgSchema, ProjectedResourceSchema, CapabilityProfilesSchema, RoleCatalogSchema, EffectiveAuthorizationSchema, ResourcePageSchema, SYSTEM_USER_PREFIX, WORKFLOW_RUN_IN_FLIGHT, WORKFLOW_RUN_IDLE, WORKFLOW_RUN_TERMINAL, WORKFLOW_RUN_STATUSES, WORKFLOW_RUN_GATE_KINDS, WORKFLOW_STEP_STATUSES, WORKFLOW_STEP_IN_FLIGHT, WORKFLOW_SIGNAL_EVENT_SITES, ARCHIVE_WINDOW_MARGIN_DAYS, WORKFLOW_ORG_PURGING_TTL_S, WORKFLOW_ORG_PURGE_FORCE_AFTER_MS, IDEMPOTENCY_HOLDING_STATUSES, WORKFLOW_SCHEDULED_RUN_ID_PREFIX, CLOUD_TASK_RUN_ID_PREFIX, WORKFLOW_SCHEDULE_KEY_MAX, WORKFLOW_SCHEDULE_IDEMPOTENCY_KEY_PREFIX, WORKFLOW_OPERATION_ID_PREFIX, WORKFLOW_CONNECTION_KEY_RE, WORKFLOW_AGENT_APP_CONNECTION_PREFIX, WORKFLOW_JOB_MODEL_SOURCE_LABELS, WORKFLOW_SUSPEND_KINDS, WORKFLOW_RUN_NOTIFICATION_SUSPENDED_KINDS, WORKFLOW_SIGNAL_PAYLOAD_MAX_BYTES, WORKFLOW_SIGNAL_NAME_RE, WORKFLOW_SUSPEND_DEFAULT_TIMEOUT_HOURS, WORKFLOW_RESOLVE_OUTPUT_MAX_BYTES, SCHEDULE_HEALTH_NOTIFY_CHANNELS, SCHEDULE_HEALTH_DEFAULT_NOTIFY, SCHEDULE_HEALTH_LIMITS, KNOWN_KEYS, WORKFLOW_GOAL_JUDGE_SELF, APPROVAL_ARGS_MAX_CHARS, APPROVAL_ARG_STRING_MAX_CHARS, APPROVAL_ARGS_SUMMARY_MAX_CHARS, MAX_DEPTH, MAX_KEYS, MAX_ITEMS, MAX_NODES, MAX_KEY_CHARS, KEY_SCRUB_INPUT_MAX_CHARS, STRING_SCRUB_INPUT_MAX_CHARS, ELLIPSIS, SKIP, SCRUB_SECRETS_BEFORE_PERSIST_ENV, PERSIST_SCRUB_MAX_CHARS, PERSIST_SCRUB_REF_MAX_CHARS, WORKFLOW_AUDIT_EVENTS, WORKFLOW_AUDIT_METADATA_MAX_BYTES, INDENT, WRAP_WIDTH, NOUNS, GET_TOOL_NAMES, PREAMBLE, WORKFLOW_APPROVAL_OUTPUT_DECISIONS, WORKFLOW_APPROVAL_OUTPUT_SCHEMA, JSON_FENCE_RE, DEFAULT_ON_AGENT_FEATURES, SUBAGENT_PER_KEY_FLAG_ENV, PER_KEY_FLAG_VALUES, ONBOARDING_FLOW_KEY, ONBOARDING_SCHEMA_VERSION, id, copy, onboardingHeadingSchema, onboardingRichTextInlineSchema, onboardingRichTextSchema, onboardingDestinationSchema, onboardingArtworkSchema, onboardingAnswerSchema, onboardingQuestionSchema, onboardingTemplateSectionSchema, onboardingInstallScreenSchema, onboardingResultScreenSchema, onboardingConnectScreenSchema, onboardingTemplateContentSchema, onboardingUnavailableOutcomeSchema, onboardingFlowSchema, onboardingActorSchema, onboardingEditorSchema, onboardingPublicationSummarySchema, onboardingValidationIssueSchema, onboardingValidationResponseSchema, onboardingAssetSchema, onboardingPublicAssetSchema, getOnboardingConfigResponseSchema, saveOnboardingDraftRequestSchema, validateOnboardingRequestSchema, publishOnboardingRequestSchema, rollbackOnboardingRequestSchema, onboardingTemplateCatalogItemSchema, getPublishedOnboardingResponseSchema, WEB_ROUTE_PROTOCOL_VERSION, WEB_ROUTE_METHODS, WEB_ROUTE_REQUEST_HEADER_ALLOWLIST, WEB_ROUTE_RESPONSE_HEADER_ALLOWLIST, WEB_ROUTE_MAX_REQUEST_BODY_BYTES, WEB_ROUTE_MAX_RESPONSE_BYTES, WEB_APP_NAME_PATTERN, WEB_APP_ENTRY_HTML_MAX_CHARS, WEB_APP_MAX_ASSET_BYTES, EVIDENCE_SESSION_IDLE_MS, EVIDENCE_MIN_CONVERSATIONS, EVIDENCE_LOW_CONFIDENCE_N, EVIDENCE_SNIPPET_MAX_CHARS, EVIDENCE_EXAMPLES_PER_ITEM, EVIDENCE_SHOWN_ITEMS, EVIDENCE_LATENCY_BOUNDS_MS, EVIDENCE_WORD_BOUNDS, BAD_CONVERSATION_REASONS, ATTACHMENT_LINES, REVIEW_VERDICT_REASON_ORDER, ENV_TEMPLATE_SECRET_KEY_RE, CONNECTION_SEND_NOT_ALLOWED, CONNECTION_RECIPIENT_NOT_ALLOWED, NOT_SEND, PLAIN_ADDRESS, RecipientSet, MCP_MESSAGING_CREATE, MCP_CALENDAR_EVENT_WRITE, REPLY_KEYS, DEDICATED_MAIL_SLUGS, FULL_SUITE_SLUGS, WELL_KNOWN_MAIL_FOLDERS, MEMBER_KEYS, CANONICAL_ORIGIN, CANONICAL_PREFIX, STRICT_BASE64, GMAIL_PREFIX, GMAIL_MESSAGES_SEND, GMAIL_DRAFTS_SEND, GOOGLE_BATCH, GRAPH_VERSION, GRAPH_PRINCIPAL, GRAPH_SEND_MAIL, GRAPH_MESSAGE_ACTION, GRAPH_OWNER, GRAPH_EVENTS, GRAPH_EVENT_COLLECTION, GRAPH_EVENT_ID, GRAPH_EVENT_ITEM, GRAPH_EVENT_ACTION, GRAPH_BATCH, GRAPH_TEAMS_MESSAGE, GRAPH_ACTIVITY_NOTIFICATION, GRAPH_GROUP_CONVERSATION, GCAL_EVENTS, GRAPH_READ_KEYS, MALFORMED_POLICY, BILLING_REJECTION_TEXT_CREDITS, BILLING_REJECTION_TEXT_SEAT, BILLING_REJECTION_TEXT_USER_QUOTA, CUSTOM_MCP_CONNECTION_ID_PREFIX, CUSTOM_MCP_SOURCE, CUSTOM_MCP_TRANSPORT, CUSTOM_MCP_CONNECTION_ID_PATTERN, customMcpConnectionIdSchema, CONNECTION_BACKED_MCP_SOURCES, CUSTOM_MCP_REFERENCE_ID_PATTERN, customMcpReferenceIdSchema, CUSTOM_MCP_AUTH_KINDS, customMcpAuthKindSchema, CUSTOM_MCP_OAUTH_REGISTRATIONS, customMcpOAuthRegistrationSchema, CUSTOM_MCP_HEALTH_STATES, customMcpHealthStateSchema, CUSTOM_MCP_FAILURE_STEPS, customMcpFailureStepSchema, CUSTOM_MCP_CONNECT_STEPS, customMcpConnectStepSchema, customMcpFailureCodeSchema, WORKFLOW_KEY_MAX_LENGTH, CUSTOM_MCP_URL_MAX_LENGTH, CUSTOM_MCP_DISPLAY_NAME_MAX_LENGTH, CUSTOM_MCP_MAX_HEADERS, CUSTOM_MCP_HEADER_NAME_MAX_LENGTH, CUSTOM_MCP_HEADER_VALUE_MAX_LENGTH, CUSTOM_MCP_MAX_TOOLS, CUSTOM_MCP_TOOL_NAME_MAX_LENGTH, CUSTOM_MCP_TOOL_TEXT_MAX_LENGTH, CUSTOM_MCP_MIN_TIMEOUT_MS, CUSTOM_MCP_MAX_TIMEOUT_MS, CUSTOM_MCP_OAUTH_PENDING_TTL_MS, isoDateTime, agentId, nonNegativeInt, customMcpUrlInputSchema, customMcpDisplayNameSchema, customMcpTimeoutSchema, CUSTOM_MCP_RESERVED_HEADER_NAMES, HEADER_NAME, HEADER_VALUE_FORBIDDEN, customMcpHeaderNameSchema, headerValue, customMcpHeadersSchema, customMcpHeadersPatchSchema, customMcpToolNameSchema, customMcpToolSchema, customMcpServerInfoSchema, customMcpToolSelectionSchema, customMcpToolsResponseSchema, customMcpFailureSchema, customMcpHealthSchema, customMcpErrorBodySchema, customMcpConnectionBlockSchema, customMcpConnectionViewSchema, customMcpConnectionResponseSchema, customMcpProbeBodySchema, customMcpOAuthDiscoverySchema, customMcpProbeResponseSchema, createFields, mountAgentField, customMcpCreateAgentBodySchema, customMcpCreateUserBodySchema, customMcpOAuthClientSchema, startFields, customMcpOAuthStartAgentBodySchema, customMcpOAuthStartUserBodySchema, customMcpOAuthStartResponseSchema, nonce, customMcpOAuthSuccessRedirectQuerySchema, CUSTOM_MCP_OAUTH_CALLBACK_ERRORS, customMcpOAuthFailureRedirectQuerySchema, customMcpOAuthFinalizeBodySchema, customMcpCimdDocumentSchema, customMcpPatchBodySchema, customMcpCredentialRequestSchema, customMcpCredentialAuthSchema, customMcpCredentialResponseSchema, CUSTOM_MCP_CREDENTIAL_ERRORS, customMcpCredentialErrorBodySchema, customMcpHealthReportSchema, customMcpProbeRequestSchema, customMcpProbeResultSchema, customMcpOriginUrlSchema, customMcpServerProjectionSchema, customMcpMountUpsertBodySchema;
7134
7493
  var init_dist = __esm({
7135
7494
  "../shared-types/dist/index.mjs"() {
7136
7495
  "use strict";
@@ -7219,6 +7578,7 @@ var init_dist = __esm({
7219
7578
  minLevels: 2,
7220
7579
  maxLevels: 10,
7221
7580
  maxInstructionChars: 4e3,
7581
+ maxQuestionsChars: 1e5,
7222
7582
  maxStateChars: 12e4,
7223
7583
  maxImages: 4,
7224
7584
  maxImageBytes: 5 * 1024 * 1024,
@@ -7293,7 +7653,14 @@ var init_dist = __esm({
7293
7653
  "none"
7294
7654
  ]).optional()
7295
7655
  });
7296
- DecisionQuestionsSchema = z.record(NameSchema, DecisionQuestionSchema).refine((questions) => Object.keys(questions).length >= 1 && Object.keys(questions).length <= DECISION_LIMITS.maxQuestions, `a decision needs between 1 and ${DECISION_LIMITS.maxQuestions} questions`);
7656
+ DecisionQuestionsSchema = z.record(NameSchema, DecisionQuestionSchema).refine((questions) => Object.keys(questions).length >= 1 && Object.keys(questions).length <= DECISION_LIMITS.maxQuestions, `a decision needs between 1 and ${DECISION_LIMITS.maxQuestions} questions`).superRefine((questions, ctx) => {
7657
+ const chars = JSON.stringify(questions).length;
7658
+ if (chars <= DECISION_LIMITS.maxQuestionsChars) return;
7659
+ ctx.addIssue({
7660
+ code: z.ZodIssueCode.custom,
7661
+ message: `the questions take ${chars} characters as JSON, more than the ${DECISION_LIMITS.maxQuestionsChars} characters a decision may hold`
7662
+ });
7663
+ });
7297
7664
  DecisionDefinitionSchema = DecisionOptionsSchema.extend({
7298
7665
  name: z.string().regex(DECISION_NAME_PATTERN, "a decision name is 1 to 64 letters, digits, underscores or hyphens"),
7299
7666
  description: z.string().max(DECISION_LIMITS.maxInstructionChars).optional(),
@@ -7334,6 +7701,85 @@ var init_dist = __esm({
7334
7701
  __name4(isPlatformInvocationCaller, "isPlatformInvocationCaller");
7335
7702
  __name(supervisionSubjectId, "supervisionSubjectId");
7336
7703
  __name4(supervisionSubjectId, "supervisionSubjectId");
7704
+ MESSAGING_CHANNELS = new Set(CHANNEL_CONVERSATION_CHANNELS);
7705
+ VOICE_CHANNELS = /* @__PURE__ */ new Set([
7706
+ "phone",
7707
+ "meeting",
7708
+ "voice"
7709
+ ]);
7710
+ TURN_CATEGORIES = /* @__PURE__ */ new Set([
7711
+ "llm:inference",
7712
+ "llm:chat-modes",
7713
+ "llm:delegation",
7714
+ "decision:ask"
7715
+ ]);
7716
+ AGENT_TOOL_CATEGORIES = /* @__PURE__ */ new Set([
7717
+ "llm:media:describe",
7718
+ "tool:image-generate",
7719
+ "tool:image-edit"
7720
+ ]);
7721
+ __name(isModelCallCategory, "isModelCallCategory");
7722
+ __name4(isModelCallCategory, "isModelCallCategory");
7723
+ __name(deriveUsageSurface, "deriveUsageSurface");
7724
+ __name4(deriveUsageSurface, "deriveUsageSurface");
7725
+ count = /* @__PURE__ */ __name4((v) => typeof v === "number" && Number.isFinite(v) && v >= 0 ? Math.floor(v) : void 0, "count");
7726
+ __name(fromRaw, "fromRaw");
7727
+ __name4(fromRaw, "fromRaw");
7728
+ __name(anthropicMessageUsage, "anthropicMessageUsage");
7729
+ __name4(anthropicMessageUsage, "anthropicMessageUsage");
7730
+ AnthropicSseUsageReader = class {
7731
+ static {
7732
+ __name(this, "AnthropicSseUsageReader");
7733
+ }
7734
+ static {
7735
+ __name4(this, "AnthropicSseUsageReader");
7736
+ }
7737
+ pending = "";
7738
+ raw;
7739
+ id;
7740
+ model;
7741
+ push(chunk) {
7742
+ const text2 = this.pending + chunk;
7743
+ const lines = text2.split("\n");
7744
+ this.pending = lines.pop() ?? "";
7745
+ for (const line of lines) this.line(line);
7746
+ }
7747
+ result() {
7748
+ if (this.pending) {
7749
+ this.line(this.pending);
7750
+ this.pending = "";
7751
+ }
7752
+ return this.raw ? fromRaw(this.raw, this.id, this.model) : void 0;
7753
+ }
7754
+ line(line) {
7755
+ const trimmed = line.trim();
7756
+ if (!trimmed.startsWith("data:")) return;
7757
+ let event;
7758
+ try {
7759
+ event = JSON.parse(trimmed.slice(5).trim());
7760
+ } catch {
7761
+ return;
7762
+ }
7763
+ if (event.type === "message_start" && event.message) {
7764
+ this.id = event.message.id;
7765
+ this.model = event.message.model;
7766
+ this.raw = {
7767
+ ...event.message.usage ?? {}
7768
+ };
7769
+ } else if (event.type === "message_delta" && event.usage && typeof event.usage === "object") {
7770
+ const delta = event.usage;
7771
+ const merged = {
7772
+ ...this.raw ?? {}
7773
+ };
7774
+ for (const [key, value3] of Object.entries(delta)) {
7775
+ if (value3 !== null && value3 !== void 0) merged[key] = value3;
7776
+ }
7777
+ this.raw = merged;
7778
+ }
7779
+ }
7780
+ };
7781
+ __name(parseAnthropicReplyUsage, "parseAnthropicReplyUsage");
7782
+ __name4(parseAnthropicReplyUsage, "parseAnthropicReplyUsage");
7337
7783
  SUPERVISION_OPS = {
7338
7784
  "agents.list": "discover",
7339
7785
  "agents.get": "discover",
@@ -9317,6 +9763,10 @@ var init_dist = __esm({
9317
9763
  name: "close",
9318
9764
  description: "Close the session\u2019s browser."
9319
9765
  },
9766
+ {
9767
+ name: "read",
9768
+ description: "Read one page in a fresh session that is closed afterwards: open the URL, wait, return its title and content. Args: url, waitFor?(load|networkidle|selector), selector?, format?(text|html|markdown), timeoutMs?."
9769
+ },
9320
9770
  // perception
9321
9771
  {
9322
9772
  name: "snapshot",
@@ -9490,6 +9940,62 @@ var init_dist = __esm({
9490
9940
  }
9491
9941
  ];
9492
9942
  BROWSER_COMMAND_NAMES = BROWSER_COMMANDS.map((c) => c.name);
9943
+ SERVER_TRIGGERED_BROWSER_SOURCES = [
9944
+ "job",
9945
+ "webhook",
9946
+ "web-route",
9947
+ "trigger",
9948
+ "workflow-step",
9949
+ "workflow-script"
9950
+ ];
9951
+ __name(isServerTriggeredBrowserSource, "isServerTriggeredBrowserSource");
9952
+ __name4(isServerTriggeredBrowserSource, "isServerTriggeredBrowserSource");
9953
+ BROWSER_FALLBACKS = [
9954
+ "browser-use",
9955
+ "none"
9956
+ ];
9957
+ DEFAULT_BROWSER_FALLBACK = "browser-use";
9958
+ __name(resolveBrowserFallback, "resolveBrowserFallback");
9959
+ __name4(resolveBrowserFallback, "resolveBrowserFallback");
9960
+ PROXY_COUNTRY_CODE = /^[a-z]{2}$/;
9961
+ __name(resolveBrowserProxyCountry, "resolveBrowserProxyCountry");
9962
+ __name4(resolveBrowserProxyCountry, "resolveBrowserProxyCountry");
9963
+ BROWSER_LOG_CONTENT_MODES = [
9964
+ "summary",
9965
+ "full",
9966
+ "none"
9967
+ ];
9968
+ DEFAULT_BROWSER_LOG_CONTENT = "summary";
9969
+ BROWSER_SCREENSHOT_POLICIES = [
9970
+ "always",
9971
+ "onError",
9972
+ "never"
9973
+ ];
9974
+ DEFAULT_BROWSER_SCREENSHOT_POLICY = "onError";
9975
+ __name(resolveBrowserLogOptions, "resolveBrowserLogOptions");
9976
+ __name4(resolveBrowserLogOptions, "resolveBrowserLogOptions");
9977
+ BROWSER_PROFILE_NAME_PATTERN = /^[A-Za-z0-9][A-Za-z0-9_-]{0,63}$/;
9978
+ __name(browserProfileNotFoundMessage, "browserProfileNotFoundMessage");
9979
+ __name4(browserProfileNotFoundMessage, "browserProfileNotFoundMessage");
9980
+ BROWSER_LIMIT_KEYS = [
9981
+ "maxSessionMinutes",
9982
+ "idleTimeoutSeconds",
9983
+ "maxConcurrentSessions"
9984
+ ];
9985
+ BROWSER_LIMIT_MAX = {
9986
+ maxSessionMinutes: 60,
9987
+ idleTimeoutSeconds: 15 * 60,
9988
+ maxConcurrentSessions: 100
9989
+ };
9990
+ __name(resolveBrowserLimits, "resolveBrowserLimits");
9991
+ __name4(resolveBrowserLimits, "resolveBrowserLimits");
9992
+ BROWSER_EXECUTE_METHOD = "execute";
9993
+ BROWSER_GLOBAL_METHODS = [
9994
+ ...BROWSER_COMMAND_NAMES,
9995
+ BROWSER_EXECUTE_METHOD
9996
+ ];
9997
+ BROWSER_EXECUTE_DEFAULT_TIMEOUT_MS = 5 * 60 * 1e3;
9998
+ BROWSER_EXECUTE_MAX_TIMEOUT_MS = 15 * 60 * 1e3;
9493
9999
  LOG_FIELDS_MAX_KEYS = 32;
9494
10000
  LOG_FIELD_MAX_VALUE_BYTES = 1024;
9495
10001
  LOG_FIELDS_MAX_BYTES = 8192;
@@ -9555,6 +10061,308 @@ var init_dist = __esm({
9555
10061
  __name4(isDesktopFileCommandName, "isDesktopFileCommandName");
9556
10062
  __name(isDesktopFileSessionId, "isDesktopFileSessionId");
9557
10063
  __name4(isDesktopFileSessionId, "isDesktopFileSessionId");
10064
+ BROWSER_READ_FORMATS = [
10065
+ "text",
10066
+ "html",
10067
+ "markdown"
10068
+ ];
10069
+ BROWSER_READ_DEFAULT_TIMEOUT_MS = 6e4;
10070
+ BROWSER_READ_MIN_TIMEOUT_MS = 1e3;
10071
+ BROWSER_READ_MAX_TIMEOUT_MS = 1e5;
10072
+ BROWSER_READ_MAX_CONTENT_CHARS = 1e5;
10073
+ BROWSER_READ_DEFAULT_SELECTOR = "body";
10074
+ BROWSER_READ_MATCH_SEPARATOR = "\n\n";
10075
+ BROWSER_READ_LOGIN_BLOCKER = "login_required";
10076
+ BROWSER_ERROR_NAME = "BrowserError";
10077
+ __name(browserError, "browserError");
10078
+ __name4(browserError, "browserError");
10079
+ __name(isRecord, "isRecord");
10080
+ __name4(isRecord, "isRecord");
10081
+ __name(optionalString, "optionalString");
10082
+ __name4(optionalString, "optionalString");
10083
+ __name(readUrl, "readUrl");
10084
+ __name4(readUrl, "readUrl");
10085
+ __name(readFormat, "readFormat");
10086
+ __name4(readFormat, "readFormat");
10087
+ __name(readTimeout, "readTimeout");
10088
+ __name4(readTimeout, "readTimeout");
10089
+ __name(parseBrowserReadPayload, "parseBrowserReadPayload");
10090
+ __name4(parseBrowserReadPayload, "parseBrowserReadPayload");
10091
+ __name(clampBrowserReadContent, "clampBrowserReadContent");
10092
+ __name4(clampBrowserReadContent, "clampBrowserReadContent");
10093
+ __name(joinBrowserReadMatches, "joinBrowserReadMatches");
10094
+ __name4(joinBrowserReadMatches, "joinBrowserReadMatches");
10095
+ HTTP_STATUS_FAILURE = /ERR_HTTP_RESPONSE_CODE_FAILURE/;
10096
+ __name(isBrowserReadHttpFailure, "isBrowserReadHttpFailure");
10097
+ __name4(isBrowserReadHttpFailure, "isBrowserReadHttpFailure");
10098
+ __name(browserReadHttpErrorMessage, "browserReadHttpErrorMessage");
10099
+ __name4(browserReadHttpErrorMessage, "browserReadHttpErrorMessage");
10100
+ __name(urlOf, "urlOf");
10101
+ __name4(urlOf, "urlOf");
10102
+ __name(answeredDocuments, "answeredDocuments");
10103
+ __name4(answeredDocuments, "answeredDocuments");
10104
+ __name(documentStatusOf, "documentStatusOf");
10105
+ __name4(documentStatusOf, "documentStatusOf");
10106
+ LOGIN_PATH_SEGMENTS = /* @__PURE__ */ new Set([
10107
+ "login",
10108
+ "log-in",
10109
+ "logon",
10110
+ "signin",
10111
+ "sign-in",
10112
+ "sign_in",
10113
+ "auth",
10114
+ "authenticate",
10115
+ "authorize",
10116
+ "sso"
10117
+ ]);
10118
+ LOGIN_HOST_LABELS = /* @__PURE__ */ new Set([
10119
+ "login",
10120
+ "signin",
10121
+ "auth",
10122
+ "sso"
10123
+ ]);
10124
+ __name(isLoginUrl, "isLoginUrl");
10125
+ __name4(isLoginUrl, "isLoginUrl");
10126
+ __name(isLoginRedirect, "isLoginRedirect");
10127
+ __name4(isLoginRedirect, "isLoginRedirect");
10128
+ __name(browserReadLoginBlock, "browserReadLoginBlock");
10129
+ __name4(browserReadLoginBlock, "browserReadLoginBlock");
10130
+ AGENT_LOG_SOURCES = [
10131
+ "skill",
10132
+ "job",
10133
+ "webhook",
10134
+ "web-route",
10135
+ "trigger",
10136
+ "preprocessor",
10137
+ "postprocessor",
10138
+ "user_message",
10139
+ "agent_response",
10140
+ "agent_error",
10141
+ "runtime",
10142
+ "mcp",
10143
+ "rag",
10144
+ "device",
10145
+ "device-trigger",
10146
+ "model-resolver",
10147
+ "workflow-step",
10148
+ "workflow-script",
10149
+ "workflow",
10150
+ "supervision",
10151
+ "browser",
10152
+ "decisions"
10153
+ ];
10154
+ AGENT_LOG_ENVIRONMENTS = [
10155
+ "production",
10156
+ "sandbox"
10157
+ ];
10158
+ AGENT_LOG_FIELDS_MAX_WIRE_KEYS = LOG_FIELDS_MAX_KEYS + 1;
10159
+ __name(utf8Bytes, "utf8Bytes");
10160
+ __name4(utf8Bytes, "utf8Bytes");
10161
+ __name(isPlainFieldKey, "isPlainFieldKey");
10162
+ __name4(isPlainFieldKey, "isPlainFieldKey");
10163
+ __name(describeAgentLogFieldsViolation, "describeAgentLogFieldsViolation");
10164
+ __name4(describeAgentLogFieldsViolation, "describeAgentLogFieldsViolation");
10165
+ __name(isAgentLogFields, "isAgentLogFields");
10166
+ __name4(isAgentLogFields, "isAgentLogFields");
10167
+ BROWSER_LOG_EVENT_KINDS = [
10168
+ "session.opened",
10169
+ "command",
10170
+ "navigation",
10171
+ "blocked",
10172
+ "wall",
10173
+ "fallback",
10174
+ "confirm",
10175
+ "agent.step",
10176
+ "session.closed"
10177
+ ];
10178
+ BROWSER_LOG_ENGINES = [
10179
+ "desktop",
10180
+ "agent-browser",
10181
+ "browser-use",
10182
+ "none"
10183
+ ];
10184
+ BROWSER_SESSION_OPEN_REASONS = [
10185
+ "desktop-online",
10186
+ "cloud-fallback",
10187
+ "stepwise-cloud",
10188
+ "pinned",
10189
+ "none"
10190
+ ];
10191
+ BROWSER_BLOCK_KINDS = [
10192
+ "domain",
10193
+ "private-network",
10194
+ "policy",
10195
+ "concurrency",
10196
+ "bot-block"
10197
+ ];
10198
+ BROWSER_WALL_KINDS = [
10199
+ "captcha",
10200
+ "bot-block",
10201
+ "consent",
10202
+ "login",
10203
+ "empty-content"
10204
+ ];
10205
+ BROWSER_WALL_NEXT_ACTIONS = [
10206
+ "fallback",
10207
+ "retry",
10208
+ "ask-user",
10209
+ "gave-up"
10210
+ ];
10211
+ BROWSER_CONFIRM_DECISIONS = [
10212
+ "pending",
10213
+ "approved",
10214
+ "denied",
10215
+ "expired"
10216
+ ];
10217
+ BROWSER_SESSION_CLOSE_REASONS = [
10218
+ "done",
10219
+ "idle",
10220
+ "max-minutes",
10221
+ "max-steps",
10222
+ "cost-cap",
10223
+ "error",
10224
+ "reaped"
10225
+ ];
10226
+ BROWSER_LOG_CONTEXT_KEYS = [
10227
+ "runId",
10228
+ "executionId",
10229
+ "primitiveId",
10230
+ "primitiveName",
10231
+ "channel",
10232
+ "orgId",
10233
+ "environment",
10234
+ "agentVersion"
10235
+ ];
10236
+ BROWSER_LOG_ID_MAX_CHARS = 256;
10237
+ BROWSER_LOG_TEXT_MAX_CHARS = 64 * 1024;
10238
+ isString = /* @__PURE__ */ __name4((value3) => typeof value3 === "string", "isString");
10239
+ isBoolean = /* @__PURE__ */ __name4((value3) => typeof value3 === "boolean", "isBoolean");
10240
+ isCount = /* @__PURE__ */ __name4((value3) => typeof value3 === "number" && Number.isFinite(value3) && value3 >= 0, "isCount");
10241
+ isPlainObject2 = /* @__PURE__ */ __name4((value3) => typeof value3 === "object" && value3 !== null && !Array.isArray(value3), "isPlainObject");
10242
+ oneOf = /* @__PURE__ */ __name4((values) => (value3) => typeof value3 === "string" && values.includes(value3), "oneOf");
10243
+ isLimits = /* @__PURE__ */ __name4((value3) => isPlainObject2(value3) && Object.values(value3).every((entry) => isCount(entry)), "isLimits");
10244
+ EVENT_SHAPES = {
10245
+ "session.opened": {
10246
+ required: {
10247
+ reason: oneOf(BROWSER_SESSION_OPEN_REASONS)
10248
+ },
10249
+ optional: {
10250
+ limits: isLimits,
10251
+ region: isString,
10252
+ liveUrl: isString
10253
+ }
10254
+ },
10255
+ command: {
10256
+ required: {
10257
+ name: oneOf(BROWSER_COMMAND_NAMES),
10258
+ durationMs: isCount,
10259
+ ok: isBoolean
10260
+ },
10261
+ optional: {
10262
+ args: isPlainObject2,
10263
+ urlBefore: isString,
10264
+ urlAfter: isString,
10265
+ resultBytes: isCount,
10266
+ errorCode: isString,
10267
+ errorMessage: isString,
10268
+ title: isString,
10269
+ pageText: isString,
10270
+ screenshotRef: isString
10271
+ }
10272
+ },
10273
+ navigation: {
10274
+ required: {
10275
+ url: isString
10276
+ },
10277
+ optional: {
10278
+ finalUrl: isString,
10279
+ status: isCount,
10280
+ redirects: isCount
10281
+ }
10282
+ },
10283
+ blocked: {
10284
+ required: {
10285
+ kind: oneOf(BROWSER_BLOCK_KINDS)
10286
+ },
10287
+ optional: {
10288
+ rule: isString,
10289
+ target: isString,
10290
+ command: oneOf(BROWSER_COMMAND_NAMES),
10291
+ reason: isString
10292
+ }
10293
+ },
10294
+ wall: {
10295
+ required: {
10296
+ kind: oneOf(BROWSER_WALL_KINDS),
10297
+ url: isString,
10298
+ nextAction: oneOf(BROWSER_WALL_NEXT_ACTIONS)
10299
+ },
10300
+ optional: {}
10301
+ },
10302
+ fallback: {
10303
+ required: {
10304
+ from: oneOf(BROWSER_LOG_ENGINES),
10305
+ to: oneOf(BROWSER_LOG_ENGINES),
10306
+ reason: isString,
10307
+ provider: isString
10308
+ },
10309
+ optional: {}
10310
+ },
10311
+ confirm: {
10312
+ required: {
10313
+ action: isString,
10314
+ decision: oneOf(BROWSER_CONFIRM_DECISIONS)
10315
+ },
10316
+ optional: {
10317
+ decidedBy: isString
10318
+ }
10319
+ },
10320
+ "agent.step": {
10321
+ required: {
10322
+ step: isCount,
10323
+ action: isString
10324
+ },
10325
+ optional: {
10326
+ intent: isString,
10327
+ url: isString
10328
+ }
10329
+ },
10330
+ "session.closed": {
10331
+ required: {
10332
+ reason: oneOf(BROWSER_SESSION_CLOSE_REASONS),
10333
+ durationMs: isCount,
10334
+ pagesVisited: isCount,
10335
+ bytes: isCount
10336
+ },
10337
+ optional: {
10338
+ costUsd: isCount
10339
+ }
10340
+ }
10341
+ };
10342
+ BASE_KEYS = /* @__PURE__ */ new Set([
10343
+ "event",
10344
+ "sessionId",
10345
+ "engine",
10346
+ "at"
10347
+ ]);
10348
+ __name(describeBaseViolation, "describeBaseViolation");
10349
+ __name4(describeBaseViolation, "describeBaseViolation");
10350
+ __name(describeFieldViolation, "describeFieldViolation");
10351
+ __name4(describeFieldViolation, "describeFieldViolation");
10352
+ __name(describeBrowserLogEventViolation, "describeBrowserLogEventViolation");
10353
+ __name4(describeBrowserLogEventViolation, "describeBrowserLogEventViolation");
10354
+ __name(isBrowserLogEvent, "isBrowserLogEvent");
10355
+ __name4(isBrowserLogEvent, "isBrowserLogEvent");
10356
+ __name(describeBrowserLogContextViolation, "describeBrowserLogContextViolation");
10357
+ __name4(describeBrowserLogContextViolation, "describeBrowserLogContextViolation");
10358
+ BROWSER_WORKER_SESSION_ID_SEPARATOR = ":";
10359
+ __name(browserWorkerSessionId, "browserWorkerSessionId");
10360
+ __name4(browserWorkerSessionId, "browserWorkerSessionId");
10361
+ BROWSER_WORKER_BLOCK_REASON_MAX_CHARS = 1024;
10362
+ __name(browserLogContextOfWorkerContext, "browserLogContextOfWorkerContext");
10363
+ __name4(browserLogContextOfWorkerContext, "browserLogContextOfWorkerContext");
10364
+ __name(browserLogEventOfWorkerEvent, "browserLogEventOfWorkerEvent");
10365
+ __name4(browserLogEventOfWorkerEvent, "browserLogEventOfWorkerEvent");
9558
10366
  WORKFLOW_RETRY_BACKOFFS = [
9559
10367
  "fixed",
9560
10368
  "exponential"
@@ -9856,38 +10664,6 @@ This text is who you are for this person. As you learn them, their name, their w
9856
10664
  `;
9857
10665
  __name(buildPersonalSpaceStartingPersona, "buildPersonalSpaceStartingPersona");
9858
10666
  __name4(buildPersonalSpaceStartingPersona, "buildPersonalSpaceStartingPersona");
9859
- AGENT_LOG_SOURCES = [
9860
- "skill",
9861
- "job",
9862
- "webhook",
9863
- "web-route",
9864
- "trigger",
9865
- "preprocessor",
9866
- "postprocessor",
9867
- "user_message",
9868
- "agent_response",
9869
- "agent_error",
9870
- "runtime",
9871
- "mcp",
9872
- "rag",
9873
- "device",
9874
- "device-trigger",
9875
- "model-resolver",
9876
- "workflow-step",
9877
- "workflow-script",
9878
- "workflow",
9879
- "supervision",
9880
- "decisions"
9881
- ];
9882
- AGENT_LOG_FIELDS_MAX_WIRE_KEYS = LOG_FIELDS_MAX_KEYS + 1;
9883
- __name(utf8Bytes, "utf8Bytes");
9884
- __name4(utf8Bytes, "utf8Bytes");
9885
- __name(isPlainFieldKey, "isPlainFieldKey");
9886
- __name4(isPlainFieldKey, "isPlainFieldKey");
9887
- __name(describeAgentLogFieldsViolation, "describeAgentLogFieldsViolation");
9888
- __name4(describeAgentLogFieldsViolation, "describeAgentLogFieldsViolation");
9889
- __name(isAgentLogFields, "isAgentLogFields");
9890
- __name4(isAgentLogFields, "isAgentLogFields");
9891
10667
  LOG_DRAIN_TYPES_PHASE1 = [
9892
10668
  "http",
9893
10669
  "otlp",
@@ -10180,8 +10956,8 @@ This text is who you are for this person. As you learn them, their name, their w
10180
10956
  CORE_DRAINING_CODE = "CORE_DRAINING";
10181
10957
  CORE_DRAINING_DEFAULT_RETRY_MS = 1e3;
10182
10958
  CORE_DRAINING_MAX_RETRY_MS = 5e3;
10183
- __name(isRecord, "isRecord");
10184
- __name4(isRecord, "isRecord");
10959
+ __name(isRecord2, "isRecord2");
10960
+ __name4(isRecord2, "isRecord");
10185
10961
  __name(isCoreDrainingErrorResponse, "isCoreDrainingErrorResponse");
10186
10962
  __name4(isCoreDrainingErrorResponse, "isCoreDrainingErrorResponse");
10187
10963
  __name(coreDrainingRetryDelayMs, "coreDrainingRetryDelayMs");
@@ -10211,7 +10987,7 @@ This text is who you are for this person. As you learn them, their name, their w
10211
10987
  ModelDescriptorSchema = z2.string().min(1).max(200);
10212
10988
  InferenceModelSchema = z2.object({
10213
10989
  kind: z2.literal("inference"),
10214
- /** Provider-prefixed model id (e.g. `'openai/gpt-5.2-chat-latest'`). */
10990
+ /** Provider-prefixed model id (e.g. `'openai/chat-latest'`). */
10215
10991
  model: ModelDescriptorSchema,
10216
10992
  /**
10217
10993
  * TTS-only — provider voice id. Inference's TTS API takes voice
@@ -14187,7 +14963,7 @@ var init_connection_requests_api_service = __esm({
14187
14963
  });
14188
14964
 
14189
14965
  // ../sandbox-runtime/dist/decisions-api.mjs
14190
- function isRecord2(value3) {
14966
+ function isRecord3(value3) {
14191
14967
  return typeof value3 === "object" && value3 !== null && !Array.isArray(value3);
14192
14968
  }
14193
14969
  function isProvider(value3) {
@@ -14206,9 +14982,9 @@ function assertInstructions(builder, instructions) {
14206
14982
  throw invalid2(`Decisions.${builder} instructions must be at most ${DECISION_LIMITS.maxInstructionChars} characters`);
14207
14983
  }
14208
14984
  }
14209
- function assertCount(what, count, min, max) {
14210
- if (count < min || count > max) {
14211
- throw invalid2(`${what} must hold ${min} to ${max} entries, got ${count}`);
14985
+ function assertCount(what, count2, min, max) {
14986
+ if (count2 < min || count2 > max) {
14987
+ throw invalid2(`${what} must hold ${min} to ${max} entries, got ${count2}`);
14212
14988
  }
14213
14989
  }
14214
14990
  function odds(instructions, criteria) {
@@ -14217,7 +14993,7 @@ function odds(instructions, criteria) {
14217
14993
  type: "odds",
14218
14994
  instructions
14219
14995
  };
14220
- if (!isRecord2(criteria)) throw invalid2("Decisions.odds criteria must be an object like { yes, no }");
14996
+ if (!isRecord3(criteria)) throw invalid2("Decisions.odds criteria must be an object like { yes, no }");
14221
14997
  return {
14222
14998
  type: "odds",
14223
14999
  instructions,
@@ -14226,7 +15002,7 @@ function odds(instructions, criteria) {
14226
15002
  }
14227
15003
  function choice(instructions, options) {
14228
15004
  assertInstructions("choice", instructions);
14229
- if (!isRecord2(options)) throw invalid2("Decisions.choice options must be an object of label to description");
15005
+ if (!isRecord3(options)) throw invalid2("Decisions.choice options must be an object of label to description");
14230
15006
  assertCount("Decisions.choice options", Object.keys(options).length, DECISION_LIMITS.minOptions, DECISION_LIMITS.maxOptions);
14231
15007
  return {
14232
15008
  type: "choice",
@@ -14245,7 +15021,7 @@ function score(instructions, levels) {
14245
15021
  };
14246
15022
  }
14247
15023
  function assertDecisionQuestion(name, question) {
14248
- if (!isRecord2(question) || !DECISION_QUESTION_TYPES.includes(question.type)) {
15024
+ if (!isRecord3(question) || !DECISION_QUESTION_TYPES.includes(question.type)) {
14249
15025
  throw invalid2(`questions.${name} must be built with Decisions.odds, Decisions.choice or Decisions.score`);
14250
15026
  }
14251
15027
  if (typeof question.instructions !== "string" || question.instructions.trim().length === 0) {
@@ -14253,13 +15029,13 @@ function assertDecisionQuestion(name, question) {
14253
15029
  }
14254
15030
  }
14255
15031
  function checkDecisionRequest(request) {
14256
- if (!isRecord2(request)) {
15032
+ if (!isRecord3(request)) {
14257
15033
  throw invalid2("Decisions.ask needs { state, questions } or (state, question)");
14258
15034
  }
14259
15035
  if (request.state === void 0 || request.state === null) {
14260
15036
  throw invalid2("Decisions.ask needs a state");
14261
15037
  }
14262
- if (!isRecord2(request.questions) || Object.keys(request.questions).length === 0) {
15038
+ if (!isRecord3(request.questions) || Object.keys(request.questions).length === 0) {
14263
15039
  throw invalid2("Decisions.ask needs at least one question in questions");
14264
15040
  }
14265
15041
  for (const [name, question] of Object.entries(request.questions)) assertDecisionQuestion(name, question);
@@ -14276,7 +15052,7 @@ function checkDecisionRunRequest(request) {
14276
15052
  }
14277
15053
  function toDecisionError(caught) {
14278
15054
  if (caught instanceof DecisionError) return caught;
14279
- const raw = isRecord2(caught) ? caught : {};
15055
+ const raw = isRecord3(caught) ? caught : {};
14280
15056
  const message = typeof raw.message === "string" && raw.message.length > 0 ? raw.message : "Decision failed";
14281
15057
  const code = typeof raw.code === "string" && raw.code.length > 0 ? raw.code : DECISION_ERROR_CODES.UNAVAILABLE;
14282
15058
  return new DecisionError(message, {
@@ -14368,8 +15144,8 @@ var init_decisions_api = __esm({
14368
15144
  if (fields.decisionId !== void 0) this.decisionId = fields.decisionId;
14369
15145
  }
14370
15146
  };
14371
- __name(isRecord2, "isRecord");
14372
- __name6(isRecord2, "isRecord");
15147
+ __name(isRecord3, "isRecord");
15148
+ __name6(isRecord3, "isRecord");
14373
15149
  __name(isProvider, "isProvider");
14374
15150
  __name6(isProvider, "isProvider");
14375
15151
  __name(invalid2, "invalid");
@@ -16795,7 +17571,7 @@ function resolvePlacements(calls) {
16795
17571
  function isConditionalJoinId(stepId) {
16796
17572
  return CONDITIONAL_JOIN_ID.test(stepId);
16797
17573
  }
16798
- function isPlainObject2(v) {
17574
+ function isPlainObject3(v) {
16799
17575
  return typeof v === "object" && v !== null && !Array.isArray(v);
16800
17576
  }
16801
17577
  function leafValue(row) {
@@ -16816,7 +17592,7 @@ function deriveRunOutput(steps) {
16816
17592
  if (leaves.length === 1) {
16817
17593
  const leaf = leaves[0];
16818
17594
  const value22 = leafValue(leaf);
16819
- if (isConditionalJoinId(leaf.stepId) && isPlainObject2(value22)) {
17595
+ if (isConditionalJoinId(leaf.stepId) && isPlainObject3(value22)) {
16820
17596
  const keys = Object.keys(value22);
16821
17597
  if (keys.length === 1) return {
16822
17598
  output: value22[keys[0]],
@@ -18159,7 +18935,7 @@ function estimateGraph(envelopeOrGraph) {
18159
18935
  };
18160
18936
  }
18161
18937
  function* singleStepsOf(entry) {
18162
- if (!isRecord3(entry)) return;
18938
+ if (!isRecord4(entry)) return;
18163
18939
  switch (entry.type) {
18164
18940
  case "step":
18165
18941
  case "agent":
@@ -18183,8 +18959,8 @@ function* singleStepsOf(entry) {
18183
18959
  }
18184
18960
  }
18185
18961
  function entriesOf(graph) {
18186
- const definition = isRecord3(graph) ? graph.definition : void 0;
18187
- const entries = isRecord3(definition) ? definition.graph : void 0;
18962
+ const definition = isRecord4(graph) ? graph.definition : void 0;
18963
+ const entries = isRecord4(definition) ? definition.graph : void 0;
18188
18964
  return Array.isArray(entries) ? entries : [];
18189
18965
  }
18190
18966
  function inheritTargets(graphs) {
@@ -18201,7 +18977,7 @@ function inheritTargets(graphs) {
18201
18977
  return targets;
18202
18978
  }
18203
18979
  function needsInheritedWorkspace(graph) {
18204
- if (!isRecord3(graph) || graph.workspace !== void 0) return false;
18980
+ if (!isRecord4(graph) || graph.workspace !== void 0) return false;
18205
18981
  for (const entry of entriesOf(graph)) {
18206
18982
  for (const node of singleStepsOf(entry)) {
18207
18983
  if (node.workspace !== void 0 && node.workspace !== "inherit") return true;
@@ -18282,7 +19058,7 @@ function collectJobTierSteps(entry, out) {
18282
19058
  return;
18283
19059
  }
18284
19060
  }
18285
- var __defProp8, __name8, WorkflowTemplateError, TEMPLATE_PLACEHOLDER, TEMPLATE_NAMESPACES, MAP_DESCRIPTOR_KEYS, MAP_MEMBER_MALFORMED_CODE, fromInit, fromStep, value, template, fromRequest, rows, fromKnowledge, SideEffectsSchema, JobResourcesSchema, WORKFLOW_MODEL_TEMPLATE_ROOT, WORKFLOW_MODEL_TEMPLATE_RE, PATH_SEGMENT_RE, APPROVER_SPEC_MAX_USERS, ESCALATION_MAX_HOPS, TemplateBindingSchema, ApproverSpecSchema, FourEyesSchema, EscalationHopSchema, TerminalOutcomeSchema, ApprovalOnTimeoutSchema, APPROVER_SPEC_SHAPES, APPROVER_WRITTEN_MAX, USER_ID_SHAPED_RE, BINDING_ROOTS, APPROVAL_REMIND_AFTER_HOURS_MIN, APPROVAL_REMIND_AFTER_HOURS_MAX, APPROVAL_TIMEOUT_HOURS_MIN, APPROVAL_TIMEOUT_HOURS_MAX, WORKSPACE_TEMPLATE_EXPR_RE, SLEEP_UNTIL_REPLACEMENT, WORKFLOW_WORKSPACE_TTL_MAX_HOURS_DEFAULT, WORKFLOW_CAPS_DEFAULT, WORKFLOW_STEP_DEFAULT_TIMEOUT_SECONDS, WORKFLOW_AGENT_DEFAULT_TIMEOUT_SECONDS, WORKFLOW_JOB_DEFAULT_TIMEOUT_SECONDS, WORKFLOW_FOREACH_DEFAULT_CONCURRENCY, WORKFLOW_FOREACH_DEFAULT_MAX_ITEMS, WORKFLOW_LOOP_DEFAULT_MAX_ITERATIONS, WORKFLOW_SUSPEND_DEFAULT_TIMEOUT_HOURS2, WORKFLOW_SIGNAL_DEFAULT_SOURCES, clone, CONNECTION_ID_HEX_RE, WORKFLOW_JOB_MAX_WORKTREE_ARMS, workspaceOf, mountsWorkspace, isJobTier, jobToolsOf, schemaIsArray, isHitlNode, isSingleStep, singleId, armId, TEMPLATE_STEP_REF, EDITABLE_PATH_RE, PREDICATE_OPS, isPredicateScalar, GRAPH_HASH_PREFIX, WorkflowPlanError, isArmStep, armStepId, armStepKind, joinIdOf, containerIdOf, PATH_PLACEHOLDER, MISSING, stepIdOf, cmp, eq, ne, gt, gte, lt, lte, inSet, notIn, exists, notExists, truthy, falsy, and, or, not, CONTINUED_FAILURE_TAG, CONTINUED_FAILURE_DEFAULT_CODE, CONTINUED_FAILURE_OUTPUT_SCHEMA, CONTINUED_FAILURE_LEAF_PATHS, isHitlNode2, nodeIdOf, GOAL_JUDGE_STEP_ID, NON_LEAF_KINDS, CONDITIONAL_JOIN_ID, branchArmId, canonical, sortKeys, JOIN, entryOfJoin, FORCE_CANCEL_STALE_MS, TERMINAL, WORKFLOW_INLINE_RUN_TAG, RUN_ERROR_ISSUES_MAX, IN_FLIGHT, n, SUSPENDED_FOR_DIMENSIONS, STEP_ERROR_DETAIL_KEYS, STEP_ERROR_DETAIL_MAX_BYTES, DETAIL_MAX_DEPTH, DETAIL_MAX_ITEMS, MAX_HOLIDAYS, MAX_WALK_DAYS, HHMM, YMD, MS_PER_MIN, MS_PER_DAY, MON_FRI, supportedTz, fmtCache, WEEKDAYS, JSON_PATCH_OPS, JSON_PATCH_MAX_OPS, JSON_PATCH_MAX_VALUE_BYTES, JSON_PATCH_MAX_TOTAL_BYTES, SEGMENT_RE, WORKFLOW_SCHEDULE_TYPES, WORKFLOW_SCHEDULE_SHAPE_ISSUE, WORKFLOW_SCHEDULE_SHAPES_HINT, WORKFLOW_SCHEDULE_RUN_AS, isObject, WORKFLOW_ENV_OVERLAY_MAX_KEYS, WORKFLOW_ENV_OVERLAY_MAX_VALUE_BYTES, WORKFLOW_ENV_TEMPLATE_SECRET_KEY_RE, isEnvRef, looksLikeEmbeddedJson, ZERO, isRecord3;
19061
+ var __defProp8, __name8, WorkflowTemplateError, TEMPLATE_PLACEHOLDER, TEMPLATE_NAMESPACES, MAP_DESCRIPTOR_KEYS, MAP_MEMBER_MALFORMED_CODE, fromInit, fromStep, value, template, fromRequest, rows, fromKnowledge, SideEffectsSchema, JobResourcesSchema, WORKFLOW_MODEL_TEMPLATE_ROOT, WORKFLOW_MODEL_TEMPLATE_RE, PATH_SEGMENT_RE, APPROVER_SPEC_MAX_USERS, ESCALATION_MAX_HOPS, TemplateBindingSchema, ApproverSpecSchema, FourEyesSchema, EscalationHopSchema, TerminalOutcomeSchema, ApprovalOnTimeoutSchema, APPROVER_SPEC_SHAPES, APPROVER_WRITTEN_MAX, USER_ID_SHAPED_RE, BINDING_ROOTS, APPROVAL_REMIND_AFTER_HOURS_MIN, APPROVAL_REMIND_AFTER_HOURS_MAX, APPROVAL_TIMEOUT_HOURS_MIN, APPROVAL_TIMEOUT_HOURS_MAX, WORKSPACE_TEMPLATE_EXPR_RE, SLEEP_UNTIL_REPLACEMENT, WORKFLOW_WORKSPACE_TTL_MAX_HOURS_DEFAULT, WORKFLOW_CAPS_DEFAULT, WORKFLOW_STEP_DEFAULT_TIMEOUT_SECONDS, WORKFLOW_AGENT_DEFAULT_TIMEOUT_SECONDS, WORKFLOW_JOB_DEFAULT_TIMEOUT_SECONDS, WORKFLOW_FOREACH_DEFAULT_CONCURRENCY, WORKFLOW_FOREACH_DEFAULT_MAX_ITEMS, WORKFLOW_LOOP_DEFAULT_MAX_ITERATIONS, WORKFLOW_SUSPEND_DEFAULT_TIMEOUT_HOURS2, WORKFLOW_SIGNAL_DEFAULT_SOURCES, clone, CONNECTION_ID_HEX_RE, WORKFLOW_JOB_MAX_WORKTREE_ARMS, workspaceOf, mountsWorkspace, isJobTier, jobToolsOf, schemaIsArray, isHitlNode, isSingleStep, singleId, armId, TEMPLATE_STEP_REF, EDITABLE_PATH_RE, PREDICATE_OPS, isPredicateScalar, GRAPH_HASH_PREFIX, WorkflowPlanError, isArmStep, armStepId, armStepKind, joinIdOf, containerIdOf, PATH_PLACEHOLDER, MISSING, stepIdOf, cmp, eq, ne, gt, gte, lt, lte, inSet, notIn, exists, notExists, truthy, falsy, and, or, not, CONTINUED_FAILURE_TAG, CONTINUED_FAILURE_DEFAULT_CODE, CONTINUED_FAILURE_OUTPUT_SCHEMA, CONTINUED_FAILURE_LEAF_PATHS, isHitlNode2, nodeIdOf, GOAL_JUDGE_STEP_ID, NON_LEAF_KINDS, CONDITIONAL_JOIN_ID, branchArmId, canonical, sortKeys, JOIN, entryOfJoin, FORCE_CANCEL_STALE_MS, TERMINAL, WORKFLOW_INLINE_RUN_TAG, RUN_ERROR_ISSUES_MAX, IN_FLIGHT, n, SUSPENDED_FOR_DIMENSIONS, STEP_ERROR_DETAIL_KEYS, STEP_ERROR_DETAIL_MAX_BYTES, DETAIL_MAX_DEPTH, DETAIL_MAX_ITEMS, MAX_HOLIDAYS, MAX_WALK_DAYS, HHMM, YMD, MS_PER_MIN, MS_PER_DAY, MON_FRI, supportedTz, fmtCache, WEEKDAYS, JSON_PATCH_OPS, JSON_PATCH_MAX_OPS, JSON_PATCH_MAX_VALUE_BYTES, JSON_PATCH_MAX_TOTAL_BYTES, SEGMENT_RE, WORKFLOW_SCHEDULE_TYPES, WORKFLOW_SCHEDULE_SHAPE_ISSUE, WORKFLOW_SCHEDULE_SHAPES_HINT, WORKFLOW_SCHEDULE_RUN_AS, isObject, WORKFLOW_ENV_OVERLAY_MAX_KEYS, WORKFLOW_ENV_OVERLAY_MAX_VALUE_BYTES, WORKFLOW_ENV_TEMPLATE_SECRET_KEY_RE, isEnvRef, looksLikeEmbeddedJson, ZERO, isRecord4;
18286
19062
  var init_dist2 = __esm({
18287
19063
  "../workflow-graph/dist/index.mjs"() {
18288
19064
  "use strict";
@@ -18806,8 +19582,8 @@ var init_dist2 = __esm({
18806
19582
  CONDITIONAL_JOIN_ID = /^conditional@\d+\.join$/;
18807
19583
  __name(isConditionalJoinId, "isConditionalJoinId");
18808
19584
  __name8(isConditionalJoinId, "isConditionalJoinId");
18809
- __name(isPlainObject2, "isPlainObject");
18810
- __name8(isPlainObject2, "isPlainObject");
19585
+ __name(isPlainObject3, "isPlainObject");
19586
+ __name8(isPlainObject3, "isPlainObject");
18811
19587
  __name(leafValue, "leafValue");
18812
19588
  __name8(leafValue, "leafValue");
18813
19589
  __name(runOutputLeaves, "runOutputLeaves");
@@ -19097,7 +19873,7 @@ var init_dist2 = __esm({
19097
19873
  __name8(ofEntry, "ofEntry");
19098
19874
  __name(estimateGraph, "estimateGraph");
19099
19875
  __name8(estimateGraph, "estimateGraph");
19100
- isRecord3 = /* @__PURE__ */ __name8((v) => !!v && typeof v === "object" && !Array.isArray(v), "isRecord");
19876
+ isRecord4 = /* @__PURE__ */ __name8((v) => !!v && typeof v === "object" && !Array.isArray(v), "isRecord");
19101
19877
  __name(singleStepsOf, "singleStepsOf");
19102
19878
  __name8(singleStepsOf, "singleStepsOf");
19103
19879
  __name(entriesOf, "entriesOf");
@@ -19239,6 +20015,10 @@ function createWorkflow(cfg) {
19239
20015
  const n2 = cfg.backfillOnEnable.maxOccurrences;
19240
20016
  if (!Number.isInteger(n2) || n2 < 1 || n2 > 200) throw new LuaWorkflowBuildError("invalid-envelope", "backfillOnEnable.maxOccurrences must be an integer in 1..200 (backfill-max-occurrences-out-of-range; the org maxBatchItems twin is checked at publish/R56)");
19241
20017
  }
20018
+ if (cfg.concurrencyKey !== void 0) {
20019
+ if (cfg.concurrencyKey !== "correlationKey") throw new LuaWorkflowBuildError("invalid-envelope", "concurrencyKey must be 'correlationKey'");
20020
+ if (cfg.concurrencyPolicy !== "forbid") throw new LuaWorkflowBuildError("concurrency-key-requires-forbid", `workflow "${cfg.name}": concurrencyKey requires concurrencyPolicy:'forbid'`, "set concurrencyPolicy:'forbid' or remove concurrencyKey");
20021
+ }
19242
20022
  if (cfg.health !== void 0) {
19243
20023
  const issues = validateScheduleHealth(cfg.health, {
19244
20024
  target: "workflow",
@@ -20181,6 +20961,7 @@ var init_types = __esm({
20181
20961
  PrimitiveKind2["VOICE"] = "voice";
20182
20962
  PrimitiveKind2["WORKFLOW"] = "workflow";
20183
20963
  PrimitiveKind2["WEB_APP"] = "web-app";
20964
+ PrimitiveKind2["BROWSER"] = "browser";
20184
20965
  PrimitiveKind2["DECISION"] = "decision";
20185
20966
  return PrimitiveKind2;
20186
20967
  })({});
@@ -21148,7 +21929,7 @@ var init_base_handler = __esm({
21148
21929
  const { [idField]: goneId, ...rest } = stale;
21149
21930
  yamlItems[idx] = rest;
21150
21931
  yamlUpdated = true;
21151
- const msg = `\u2139\uFE0F ${this.displayName} "${stale.name}" (${goneId}) no longer exists on the server \u2014 re-registering it`;
21932
+ const msg = this.staleRowMessage(stale, String(goneId), serverData.serverItems);
21152
21933
  messages.push(msg);
21153
21934
  console.log(msg);
21154
21935
  }
@@ -21403,6 +22184,9 @@ var init_base_handler = __esm({
21403
22184
  staleYamlRows(_yamlItems, _serverItems, _manifestNames) {
21404
22185
  return [];
21405
22186
  }
22187
+ staleRowMessage(stale, goneId, _serverItems) {
22188
+ return `\u2139\uFE0F ${this.displayName} "${stale.name}" (${goneId}) no longer exists on the server \u2014 re-registering it`;
22189
+ }
21406
22190
  buildMaps(serverItems, yamlItems) {
21407
22191
  const yamlById = /* @__PURE__ */ new Map();
21408
22192
  const yamlByName = /* @__PURE__ */ new Map();
@@ -27824,6 +28608,7 @@ var LuaAgent = class {
27824
28608
  batching;
27825
28609
  governance;
27826
28610
  browser;
28611
+ browsers;
27827
28612
  /**
27828
28613
  * Creates a new LuaAgent instance.
27829
28614
  *
@@ -27870,6 +28655,7 @@ var LuaAgent = class {
27870
28655
  this.batching = config.batching;
27871
28656
  this.governance = config.governance;
27872
28657
  this.browser = config.browser;
28658
+ this.browsers = config.browsers;
27873
28659
  }
27874
28660
  getName() {
27875
28661
  return this.name;
@@ -27927,6 +28713,9 @@ var LuaAgent = class {
27927
28713
  getVoices() {
27928
28714
  return this.voices;
27929
28715
  }
28716
+ getBrowsers() {
28717
+ return this.browsers;
28718
+ }
27930
28719
  getDecisions() {
27931
28720
  return this.decisions;
27932
28721
  }
@@ -28045,6 +28834,51 @@ function defineVoice(config) {
28045
28834
  }
28046
28835
  __name(defineVoice, "defineVoice");
28047
28836
 
28837
+ // src/types/browser.ts
28838
+ init_dist();
28839
+ var LuaBrowser = class {
28840
+ static {
28841
+ __name(this, "LuaBrowser");
28842
+ }
28843
+ name;
28844
+ description;
28845
+ engine;
28846
+ fallback;
28847
+ proxyCountry;
28848
+ allowedDomains;
28849
+ confirmActions;
28850
+ maxSessionMinutes;
28851
+ idleTimeoutSeconds;
28852
+ maxConcurrentSessions;
28853
+ screenshots;
28854
+ logContent;
28855
+ persist;
28856
+ credentials;
28857
+ constructor(config) {
28858
+ if (!config.name || !BROWSER_PROFILE_NAME_PATTERN.test(config.name)) {
28859
+ throw new Error("LuaBrowser requires a `name` that starts with a letter or digit and uses only letters, digits, underscores or hyphens (max 64).");
28860
+ }
28861
+ this.name = config.name;
28862
+ this.description = config.description;
28863
+ this.engine = config.engine;
28864
+ this.fallback = config.fallback;
28865
+ this.proxyCountry = config.proxyCountry;
28866
+ this.allowedDomains = config.allowedDomains;
28867
+ this.confirmActions = config.confirmActions;
28868
+ this.maxSessionMinutes = config.maxSessionMinutes;
28869
+ this.idleTimeoutSeconds = config.idleTimeoutSeconds;
28870
+ this.maxConcurrentSessions = config.maxConcurrentSessions;
28871
+ this.screenshots = config.screenshots;
28872
+ this.logContent = config.logContent;
28873
+ this.persist = config.persist;
28874
+ this.credentials = config.credentials;
28875
+ }
28876
+ };
28877
+ function defineBrowser(config) {
28878
+ return new LuaBrowser(config);
28879
+ }
28880
+ __name(defineBrowser, "defineBrowser");
28881
+
28048
28882
  // src/types/decision.ts
28049
28883
  init_dist();
28050
28884
  init_decisions_api();
@@ -28228,6 +29062,26 @@ function createOfflineThreadsApi() {
28228
29062
  }
28229
29063
  __name(createOfflineThreadsApi, "createOfflineThreadsApi");
28230
29064
 
29065
+ // src/api/browser.offline.ts
29066
+ init_dist();
29067
+ function unavailable2(member) {
29068
+ return browserError("BROWSER_UNAVAILABLE", `Browser.${member} only runs on the Lua platform (deployed or sandbox agents with \`browser\` on), not in lua test / lua dev`);
29069
+ }
29070
+ __name(unavailable2, "unavailable");
29071
+ function createOfflineBrowserApi() {
29072
+ const members = Object.fromEntries([
29073
+ ...BROWSER_COMMAND_NAMES,
29074
+ BROWSER_EXECUTE_METHOD
29075
+ ].map((name) => [
29076
+ name,
29077
+ async () => {
29078
+ throw unavailable2(name);
29079
+ }
29080
+ ]));
29081
+ return members;
29082
+ }
29083
+ __name(createOfflineBrowserApi, "createOfflineBrowserApi");
29084
+
28231
29085
  // src/api/progress.api.service.ts
28232
29086
  function createOfflineProgressApi() {
28233
29087
  return Object.freeze({
@@ -29098,6 +29952,7 @@ var Secrets = {
29098
29952
  };
29099
29953
  var Metrics = offlineMetrics;
29100
29954
  var Threads = createOfflineThreadsApi();
29955
+ var Browser = createOfflineBrowserApi();
29101
29956
  var Progress = createOfflineProgressApi();
29102
29957
  function defineDevice(config) {
29103
29958
  return new LuaDevice(config);
@@ -29117,6 +29972,7 @@ export {
29117
29972
  BasketInstance,
29118
29973
  BasketStatus,
29119
29974
  Baskets,
29975
+ Browser,
29120
29976
  CDN,
29121
29977
  CHANNEL_SEND_CHANNELS,
29122
29978
  Channels,
@@ -29129,6 +29985,7 @@ export {
29129
29985
  Jobs,
29130
29986
  Lua,
29131
29987
  LuaAgent,
29988
+ LuaBrowser,
29132
29989
  LuaDecision,
29133
29990
  LuaDevice,
29134
29991
  LuaDeviceTrigger,
@@ -29167,6 +30024,7 @@ export {
29167
30024
  checkAsUserRequiresUser,
29168
30025
  createStep,
29169
30026
  createWorkflow,
30027
+ defineBrowser,
29170
30028
  defineDecision,
29171
30029
  defineDevice,
29172
30030
  defineDeviceTrigger,