lua-cli 3.49.2 → 3.51.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.
@@ -255,15 +255,15 @@ declare const LuaVoiceConfigSchema: z.ZodEffects<z.ZodObject<{
255
255
  */
256
256
  options: z.ZodRecord<z.ZodString, z.ZodUnknown>;
257
257
  }, "strip", z.ZodTypeAny, {
258
+ class: "LLM" | "STT" | "STTv2" | "TTS";
258
259
  options: Record<string, unknown>;
259
260
  provider: "deepgram" | "elevenlabs";
260
261
  kind: "plugin";
261
- class: "LLM" | "STT" | "STTv2" | "TTS";
262
262
  }, {
263
+ class: "LLM" | "STT" | "STTv2" | "TTS";
263
264
  options: Record<string, unknown>;
264
265
  provider: "deepgram" | "elevenlabs";
265
266
  kind: "plugin";
266
- class: "LLM" | "STT" | "STTv2" | "TTS";
267
267
  }>, z.ZodObject<{
268
268
  kind: z.ZodLiteral<"realtime">;
269
269
  provider: z.ZodEnum<["openai", "google", "xai"]>;
@@ -321,15 +321,15 @@ declare const LuaVoiceConfigSchema: z.ZodEffects<z.ZodObject<{
321
321
  */
322
322
  options: z.ZodRecord<z.ZodString, z.ZodUnknown>;
323
323
  }, "strip", z.ZodTypeAny, {
324
+ class: "LLM" | "STT" | "STTv2" | "TTS";
324
325
  options: Record<string, unknown>;
325
326
  provider: "deepgram" | "elevenlabs";
326
327
  kind: "plugin";
327
- class: "LLM" | "STT" | "STTv2" | "TTS";
328
328
  }, {
329
+ class: "LLM" | "STT" | "STTv2" | "TTS";
329
330
  options: Record<string, unknown>;
330
331
  provider: "deepgram" | "elevenlabs";
331
332
  kind: "plugin";
332
- class: "LLM" | "STT" | "STTv2" | "TTS";
333
333
  }>, z.ZodObject<{
334
334
  kind: z.ZodLiteral<"realtime">;
335
335
  provider: z.ZodEnum<["openai", "google", "xai"]>;
@@ -387,15 +387,15 @@ declare const LuaVoiceConfigSchema: z.ZodEffects<z.ZodObject<{
387
387
  */
388
388
  options: z.ZodRecord<z.ZodString, z.ZodUnknown>;
389
389
  }, "strip", z.ZodTypeAny, {
390
+ class: "LLM" | "STT" | "STTv2" | "TTS";
390
391
  options: Record<string, unknown>;
391
392
  provider: "deepgram" | "elevenlabs";
392
393
  kind: "plugin";
393
- class: "LLM" | "STT" | "STTv2" | "TTS";
394
394
  }, {
395
+ class: "LLM" | "STT" | "STTv2" | "TTS";
395
396
  options: Record<string, unknown>;
396
397
  provider: "deepgram" | "elevenlabs";
397
398
  kind: "plugin";
398
- class: "LLM" | "STT" | "STTv2" | "TTS";
399
399
  }>, z.ZodObject<{
400
400
  kind: z.ZodLiteral<"realtime">;
401
401
  provider: z.ZodEnum<["openai", "google", "xai"]>;
@@ -577,10 +577,10 @@ declare const LuaVoiceConfigSchema: z.ZodEffects<z.ZodObject<{
577
577
  voice?: string | undefined;
578
578
  options?: Record<string, unknown> | undefined;
579
579
  } | {
580
+ class: "LLM" | "STT" | "STTv2" | "TTS";
580
581
  options: Record<string, unknown>;
581
582
  provider: "deepgram" | "elevenlabs";
582
583
  kind: "plugin";
583
- class: "LLM" | "STT" | "STTv2" | "TTS";
584
584
  } | {
585
585
  options: Record<string, unknown>;
586
586
  provider: "openai" | "google" | "xai";
@@ -594,10 +594,10 @@ declare const LuaVoiceConfigSchema: z.ZodEffects<z.ZodObject<{
594
594
  voice?: string | undefined;
595
595
  options?: Record<string, unknown> | undefined;
596
596
  } | {
597
+ class: "LLM" | "STT" | "STTv2" | "TTS";
597
598
  options: Record<string, unknown>;
598
599
  provider: "deepgram" | "elevenlabs";
599
600
  kind: "plugin";
600
- class: "LLM" | "STT" | "STTv2" | "TTS";
601
601
  } | {
602
602
  options: Record<string, unknown>;
603
603
  provider: "openai" | "google" | "xai";
@@ -610,10 +610,10 @@ declare const LuaVoiceConfigSchema: z.ZodEffects<z.ZodObject<{
610
610
  voice?: string | undefined;
611
611
  options?: Record<string, unknown> | undefined;
612
612
  } | {
613
+ class: "LLM" | "STT" | "STTv2" | "TTS";
613
614
  options: Record<string, unknown>;
614
615
  provider: "deepgram" | "elevenlabs";
615
616
  kind: "plugin";
616
- class: "LLM" | "STT" | "STTv2" | "TTS";
617
617
  } | {
618
618
  options: Record<string, unknown>;
619
619
  provider: "openai" | "google" | "xai";
@@ -671,10 +671,10 @@ declare const LuaVoiceConfigSchema: z.ZodEffects<z.ZodObject<{
671
671
  voice?: string | undefined;
672
672
  options?: Record<string, unknown> | undefined;
673
673
  } | {
674
+ class: "LLM" | "STT" | "STTv2" | "TTS";
674
675
  options: Record<string, unknown>;
675
676
  provider: "deepgram" | "elevenlabs";
676
677
  kind: "plugin";
677
- class: "LLM" | "STT" | "STTv2" | "TTS";
678
678
  } | {
679
679
  options: Record<string, unknown>;
680
680
  provider: "openai" | "google" | "xai";
@@ -688,10 +688,10 @@ declare const LuaVoiceConfigSchema: z.ZodEffects<z.ZodObject<{
688
688
  voice?: string | undefined;
689
689
  options?: Record<string, unknown> | undefined;
690
690
  } | {
691
+ class: "LLM" | "STT" | "STTv2" | "TTS";
691
692
  options: Record<string, unknown>;
692
693
  provider: "deepgram" | "elevenlabs";
693
694
  kind: "plugin";
694
- class: "LLM" | "STT" | "STTv2" | "TTS";
695
695
  } | {
696
696
  options: Record<string, unknown>;
697
697
  provider: "openai" | "google" | "xai";
@@ -704,10 +704,10 @@ declare const LuaVoiceConfigSchema: z.ZodEffects<z.ZodObject<{
704
704
  voice?: string | undefined;
705
705
  options?: Record<string, unknown> | undefined;
706
706
  } | {
707
+ class: "LLM" | "STT" | "STTv2" | "TTS";
707
708
  options: Record<string, unknown>;
708
709
  provider: "deepgram" | "elevenlabs";
709
710
  kind: "plugin";
710
- class: "LLM" | "STT" | "STTv2" | "TTS";
711
711
  } | {
712
712
  options: Record<string, unknown>;
713
713
  provider: "openai" | "google" | "xai";
@@ -765,10 +765,10 @@ declare const LuaVoiceConfigSchema: z.ZodEffects<z.ZodObject<{
765
765
  voice?: string | undefined;
766
766
  options?: Record<string, unknown> | undefined;
767
767
  } | {
768
+ class: "LLM" | "STT" | "STTv2" | "TTS";
768
769
  options: Record<string, unknown>;
769
770
  provider: "deepgram" | "elevenlabs";
770
771
  kind: "plugin";
771
- class: "LLM" | "STT" | "STTv2" | "TTS";
772
772
  } | {
773
773
  options: Record<string, unknown>;
774
774
  provider: "openai" | "google" | "xai";
@@ -782,10 +782,10 @@ declare const LuaVoiceConfigSchema: z.ZodEffects<z.ZodObject<{
782
782
  voice?: string | undefined;
783
783
  options?: Record<string, unknown> | undefined;
784
784
  } | {
785
+ class: "LLM" | "STT" | "STTv2" | "TTS";
785
786
  options: Record<string, unknown>;
786
787
  provider: "deepgram" | "elevenlabs";
787
788
  kind: "plugin";
788
- class: "LLM" | "STT" | "STTv2" | "TTS";
789
789
  } | {
790
790
  options: Record<string, unknown>;
791
791
  provider: "openai" | "google" | "xai";
@@ -798,10 +798,10 @@ declare const LuaVoiceConfigSchema: z.ZodEffects<z.ZodObject<{
798
798
  voice?: string | undefined;
799
799
  options?: Record<string, unknown> | undefined;
800
800
  } | {
801
+ class: "LLM" | "STT" | "STTv2" | "TTS";
801
802
  options: Record<string, unknown>;
802
803
  provider: "deepgram" | "elevenlabs";
803
804
  kind: "plugin";
804
- class: "LLM" | "STT" | "STTv2" | "TTS";
805
805
  } | {
806
806
  options: Record<string, unknown>;
807
807
  provider: "openai" | "google" | "xai";
@@ -859,10 +859,10 @@ declare const LuaVoiceConfigSchema: z.ZodEffects<z.ZodObject<{
859
859
  voice?: string | undefined;
860
860
  options?: Record<string, unknown> | undefined;
861
861
  } | {
862
+ class: "LLM" | "STT" | "STTv2" | "TTS";
862
863
  options: Record<string, unknown>;
863
864
  provider: "deepgram" | "elevenlabs";
864
865
  kind: "plugin";
865
- class: "LLM" | "STT" | "STTv2" | "TTS";
866
866
  } | {
867
867
  options: Record<string, unknown>;
868
868
  provider: "openai" | "google" | "xai";
@@ -876,10 +876,10 @@ declare const LuaVoiceConfigSchema: z.ZodEffects<z.ZodObject<{
876
876
  voice?: string | undefined;
877
877
  options?: Record<string, unknown> | undefined;
878
878
  } | {
879
+ class: "LLM" | "STT" | "STTv2" | "TTS";
879
880
  options: Record<string, unknown>;
880
881
  provider: "deepgram" | "elevenlabs";
881
882
  kind: "plugin";
882
- class: "LLM" | "STT" | "STTv2" | "TTS";
883
883
  } | {
884
884
  options: Record<string, unknown>;
885
885
  provider: "openai" | "google" | "xai";
@@ -892,10 +892,10 @@ declare const LuaVoiceConfigSchema: z.ZodEffects<z.ZodObject<{
892
892
  voice?: string | undefined;
893
893
  options?: Record<string, unknown> | undefined;
894
894
  } | {
895
+ class: "LLM" | "STT" | "STTv2" | "TTS";
895
896
  options: Record<string, unknown>;
896
897
  provider: "deepgram" | "elevenlabs";
897
898
  kind: "plugin";
898
- class: "LLM" | "STT" | "STTv2" | "TTS";
899
899
  } | {
900
900
  options: Record<string, unknown>;
901
901
  provider: "openai" | "google" | "xai";
@@ -1707,7 +1707,14 @@ var SUPERVISION_OPS = {
1707
1707
  * the target (`snapshot.jobs[]`) so the promote activates and schedules it. Mongo-only marker write; EventBridge stays
1708
1708
  * on the post-promote reconcile. Release-class: needs `register-job` AND `release` on the grant, from a signed step.
1709
1709
  */
1710
- "jobs.register": "register-job"
1710
+ "jobs.register": "register-job",
1711
+ // [SW]
1712
+ /**
1713
+ * SW — `Agents.secrets(id).put(collection, key, value)`: write ONE secret row into the TARGET's own Data, in a
1714
+ * collection the grant names in `secretWriteCollections` (deny by default), keyed by `data._pk`. The value never
1715
+ * comes back: the answer is `{ ok, id, fingerprint }`, and the audit row carries the fingerprint only.
1716
+ */
1717
+ "secrets.put": "act"
1711
1718
  };
1712
1719
  function isSupervisionOp(op) {
1713
1720
  return typeof op === "string" && Object.prototype.hasOwnProperty.call(SUPERVISION_OPS, op);
@@ -1906,6 +1913,12 @@ var SUPERVISION_OPS_WAVE2 = {
1906
1913
  gate: "register-job",
1907
1914
  targeted: true,
1908
1915
  item: "JR"
1916
+ },
1917
+ /** SW — `Agents.secrets(id).put(collection, key, value)`: one secret row in a `secretWriteCollections` collection. */
1918
+ "secrets.put": {
1919
+ gate: "act",
1920
+ targeted: true,
1921
+ item: "SW"
1909
1922
  }
1910
1923
  };
1911
1924
  var SUPERVISION_WATCHDOG_OPS = {
@@ -4073,6 +4086,12 @@ var SECRET_LITERAL_PATTERNS = [
4073
4086
  {
4074
4087
  re: /\b(npm_)[A-Za-z0-9]{36}\b/g
4075
4088
  },
4089
+ // Linear personal API keys (`lin_api_` + 40) and OAuth access / refresh tokens (`lin_oauth_` + 64 hex,
4090
+ // `lin_refresh_`): the fleet's Engineering Manager hands OAuth tokens to agents in a prompt + tool call, and
4091
+ // both landed verbatim in `vmExecutionLogs` (2026-10-11).
4092
+ {
4093
+ re: /\b(lin_(?:api|oauth|refresh)_)[A-Za-z0-9]{16,}/g
4094
+ },
4076
4095
  {
4077
4096
  re: /\b(sk-ant-)[A-Za-z0-9_-]{16,}/g
4078
4097
  },
@@ -4091,11 +4110,16 @@ var SECRET_LITERAL_PATTERNS = [
4091
4110
  {
4092
4111
  re: /\b(ya29\.)[A-Za-z0-9_-]{20,}/g
4093
4112
  },
4113
+ // 2026-10-11: `(?<![A-Za-z0-9_-])`, not `\b` — with `\b` every `eyJ` after a `-` / `_` started an attempt that
4114
+ // ran the first segment to the end of the run and failed on the missing `.`, so `eyJabcdefgh-` × 1 MB took
4115
+ // ~115 s (quadratic). Now a run of segment characters admits at most one attempt.
4094
4116
  {
4095
- re: /\b(eyJ)[A-Za-z0-9_-]{8,}\.[A-Za-z0-9_-]{8,}\.[A-Za-z0-9_-]{8,}/g
4117
+ re: /(?<![A-Za-z0-9_-])(eyJ)[A-Za-z0-9_-]{8,}\.[A-Za-z0-9_-]{8,}\.[A-Za-z0-9_-]{8,}/g
4096
4118
  },
4119
+ // 2026-10-11: the body stops at the next `-----BEGIN ` — a lazy `[\s\S]*?` let every unterminated BEGIN scan to the
4120
+ // end of the text (quadratic on a repeated header with no END). A key whose END follows is matched as before.
4097
4121
  {
4098
- re: /(-----BEGIN [A-Z ]*PRIVATE KEY-----)[\s\S]*?-----END [A-Z ]*PRIVATE KEY-----/g
4122
+ re: /(-----BEGIN [A-Z ]*PRIVATE KEY-----)(?:(?!-----BEGIN )[\s\S])*?-----END [A-Z ]*PRIVATE KEY-----/g
4099
4123
  },
4100
4124
  // `https://x-access-token:<token>@github.com/…` (the git credential shape the pod scrubbed already)
4101
4125
  {
@@ -4103,7 +4127,7 @@ var SECRET_LITERAL_PATTERNS = [
4103
4127
  suffix: true
4104
4128
  }
4105
4129
  ];
4106
- var SECRET_NAME = "(?:authorization|proxy-authorization|x-api-key|x-wf-[a-z-]*key|x-internal-auth|api[_-]?key|apikey|access[_-]?key|secret[_-]?key|private[_-]?key|client[_-]?secret|secret|password|passwd|pwd|passphrase|token|credentials?)";
4130
+ var SECRET_NAME = "(?:access[_-]?token|refresh[_-]?token|id[_-]?token|auth[_-]?token|authorization|proxy-authorization|x-api-key|x-wf-[a-z-]*key|x-internal-auth|api[_-]?key|apikey|access[_-]?key|secret[_-]?key|private[_-]?key|client[_-]?secret|secret|password|passwd|pwd|passphrase|token|credentials?)";
4107
4131
  var SECRET_PAIR_PATTERNS = [
4108
4132
  // `Authorization: Bearer x`, `x-api-key: x`, `AWS_SECRET_ACCESS_KEY=x`, `SVC_JOB_KEY=x`, `"apiKey": "x"`,
4109
4133
  // `FOO_TOKEN=x`, `secretKey=x`, `password=x`. Groups: the char before the name, the name, the separator
@@ -4262,6 +4286,38 @@ function scrubStepErrorMessage(raw) {
4262
4286
  }
4263
4287
  __name(scrubStepErrorMessage, "scrubStepErrorMessage");
4264
4288
  __name4(scrubStepErrorMessage, "scrubStepErrorMessage");
4289
+ var SCRUB_DEEP_MAX_DEPTH = 12;
4290
+ function scrubSecretsDeep(value3, options = {}) {
4291
+ return scrubDeep(value3, 0, /* @__PURE__ */ new WeakSet(), options.text !== false);
4292
+ }
4293
+ __name(scrubSecretsDeep, "scrubSecretsDeep");
4294
+ __name4(scrubSecretsDeep, "scrubSecretsDeep");
4295
+ function isPlainObject2(v) {
4296
+ if (!v || typeof v !== "object") return false;
4297
+ const proto = Object.getPrototypeOf(v);
4298
+ return proto === Object.prototype || proto === null;
4299
+ }
4300
+ __name(isPlainObject2, "isPlainObject2");
4301
+ __name4(isPlainObject2, "isPlainObject");
4302
+ function scrubDeep(value3, depth, seen, text2) {
4303
+ if (typeof value3 === "string") return text2 ? scrubSecretText(value3) : value3;
4304
+ if (!value3 || typeof value3 !== "object") return value3;
4305
+ if (!Array.isArray(value3) && !isPlainObject2(value3)) return value3;
4306
+ if (depth >= SCRUB_DEEP_MAX_DEPTH || seen.has(value3)) return REDACTED_PLACEHOLDER;
4307
+ seen.add(value3);
4308
+ try {
4309
+ if (Array.isArray(value3)) return value3.map((v) => scrubDeep(v, depth + 1, seen, text2));
4310
+ const out = {};
4311
+ for (const [k, v] of Object.entries(value3)) {
4312
+ out[k] = isWorkflowSecretKey(k) && v !== null && v !== void 0 && typeof v !== "boolean" ? REDACTED_PLACEHOLDER : scrubDeep(v, depth + 1, seen, text2);
4313
+ }
4314
+ return out;
4315
+ } finally {
4316
+ seen.delete(value3);
4317
+ }
4318
+ }
4319
+ __name(scrubDeep, "scrubDeep");
4320
+ __name4(scrubDeep, "scrubDeep");
4265
4321
  var TEST_SESSION_ID_PATTERN = /^tsn_[0-9a-f-]{36}$/;
4266
4322
  function isTestSessionId(value3) {
4267
4323
  return typeof value3 === "string" && TEST_SESSION_ID_PATTERN.test(value3);
@@ -4437,6 +4493,89 @@ function supervisionAccessBindingViolation(merged) {
4437
4493
  }
4438
4494
  __name(supervisionAccessBindingViolation, "supervisionAccessBindingViolation");
4439
4495
  __name4(supervisionAccessBindingViolation, "supervisionAccessBindingViolation");
4496
+ var SUPERVISED_SECRET_LIMITS = {
4497
+ /** Fields in `value` (the `_pk` field included). */
4498
+ maxFields: 32,
4499
+ /** One string field's length. */
4500
+ maxStringLength: 8192,
4501
+ /** The canonical JSON of the whole row. */
4502
+ maxBytes: 16384
4503
+ };
4504
+ var SUPERVISED_SECRET_NAME_RE = /^[A-Za-z0-9_.:-]{1,128}$/;
4505
+ var SUPERVISED_SECRET_FIELD_RE = /^[A-Za-z_][A-Za-z0-9_]{0,63}$/;
4506
+ var SUPERVISED_SECRET_KEY_FIELD = "_pk";
4507
+ var SUPERVISED_SECRET_ERRORS = {
4508
+ BAD_ARGS: "supervision_secret_bad_args",
4509
+ NOT_GRANTED: "supervision_secret_write_not_granted",
4510
+ /** A collection named for secret writes is write-only for the supervisor: `data.get` / `data.query` refuse it. */
4511
+ WRITE_ONLY: "supervision_secret_collection_write_only"
4512
+ };
4513
+ function canonicalSupervisedSecretJson(row) {
4514
+ const sorted = {};
4515
+ for (const k of Object.keys(row).sort()) sorted[k] = row[k];
4516
+ return JSON.stringify(sorted);
4517
+ }
4518
+ __name(canonicalSupervisedSecretJson, "canonicalSupervisedSecretJson");
4519
+ __name4(canonicalSupervisedSecretJson, "canonicalSupervisedSecretJson");
4520
+ function validateSupervisedSecretPut(args) {
4521
+ const bad = /* @__PURE__ */ __name4((message) => ({
4522
+ ok: false,
4523
+ code: SUPERVISED_SECRET_ERRORS.BAD_ARGS,
4524
+ message
4525
+ }), "bad");
4526
+ const collection = args?.collection;
4527
+ if (typeof collection !== "string" || !SUPERVISED_SECRET_NAME_RE.test(collection) || collection.startsWith("__")) {
4528
+ return bad("collection must be an explicit collection name (letters, digits, _ . : -; at most 128)");
4529
+ }
4530
+ const key = args?.key;
4531
+ if (typeof key !== "string" || !SUPERVISED_SECRET_NAME_RE.test(key)) {
4532
+ return bad("key must be an explicit row key (letters, digits, _ . : -; at most 128)");
4533
+ }
4534
+ const value3 = args?.value;
4535
+ if (!value3 || typeof value3 !== "object" || Array.isArray(value3) || Object.getPrototypeOf(value3) !== Object.prototype) {
4536
+ return bad("value must be a plain object of scalar fields");
4537
+ }
4538
+ const fields = Object.keys(value3);
4539
+ const row = {};
4540
+ for (const field of fields) {
4541
+ if (!SUPERVISED_SECRET_FIELD_RE.test(field)) {
4542
+ return bad("value field names must be plain identifiers (no $ prefix, no dots; at most 64 characters)");
4543
+ }
4544
+ const v = value3[field];
4545
+ if (typeof v === "string") {
4546
+ if (v.length > SUPERVISED_SECRET_LIMITS.maxStringLength) {
4547
+ return bad(`value.${field} is longer than ${SUPERVISED_SECRET_LIMITS.maxStringLength} characters`);
4548
+ }
4549
+ } else if (typeof v === "number") {
4550
+ if (!Number.isFinite(v)) return bad(`value.${field} must be a finite number`);
4551
+ } else if (typeof v !== "boolean" && v !== null) {
4552
+ return bad(`value.${field} must be a string, a finite number, a boolean or null (no nesting)`);
4553
+ }
4554
+ row[field] = v;
4555
+ }
4556
+ if (Object.prototype.hasOwnProperty.call(row, SUPERVISED_SECRET_KEY_FIELD) && row[SUPERVISED_SECRET_KEY_FIELD] !== key) {
4557
+ return bad(`value.${SUPERVISED_SECRET_KEY_FIELD}, when present, must equal key`);
4558
+ }
4559
+ row[SUPERVISED_SECRET_KEY_FIELD] = key;
4560
+ if (Object.keys(row).length > SUPERVISED_SECRET_LIMITS.maxFields) {
4561
+ return bad(`value has more than ${SUPERVISED_SECRET_LIMITS.maxFields} fields`);
4562
+ }
4563
+ if (Object.keys(row).length < 2) return bad("value must carry at least one field besides _pk");
4564
+ const bytes = new TextEncoder().encode(canonicalSupervisedSecretJson(row)).byteLength;
4565
+ if (bytes > SUPERVISED_SECRET_LIMITS.maxBytes) {
4566
+ return bad(`value is larger than ${SUPERVISED_SECRET_LIMITS.maxBytes} bytes`);
4567
+ }
4568
+ return {
4569
+ ok: true,
4570
+ input: {
4571
+ collection,
4572
+ key,
4573
+ row
4574
+ }
4575
+ };
4576
+ }
4577
+ __name(validateSupervisedSecretPut, "validateSupervisedSecretPut");
4578
+ __name4(validateSupervisedSecretPut, "validateSupervisedSecretPut");
4440
4579
  var CONNECTION_HANDOVER_APPROVAL_PAYLOAD_KEY = "connectionAssignment";
4441
4580
  var CONNECTION_HANDOVER_APPROVAL_CARD_MAX_CHARS = 1200;
4442
4581
  var CONNECTION_HANDOVER_LIMITS = {
@@ -6779,7 +6918,7 @@ var BROWSER_COMMANDS = [
6779
6918
  },
6780
6919
  {
6781
6920
  name: "find",
6782
- description: "Act by semantic locator. Args: by(role|text|label|placeholder|alt|title|testid), query, action(click|fill|type|hover|focus|check|uncheck|text), value?, name?, exact?."
6921
+ description: "Act by semantic locator. Args: by(role|text|label|placeholder|alt|title|testid), query, action(click|fill|hover|check|text), value?, name?, exact?."
6783
6922
  },
6784
6923
  // AI fallbacks
6785
6924
  {
@@ -6793,7 +6932,7 @@ var BROWSER_COMMANDS = [
6793
6932
  // wait
6794
6933
  {
6795
6934
  name: "wait",
6796
- description: "Wait for a condition. Provide one of: selector(+state), ms, text, url, load, fn."
6935
+ description: "Wait for a condition. Provide one of: selector (waits until it is visible), ms, text, url, load, fn."
6797
6936
  },
6798
6937
  // tabs / frames
6799
6938
  {
@@ -6828,7 +6967,7 @@ var BROWSER_COMMANDS = [
6828
6967
  },
6829
6968
  {
6830
6969
  name: "set",
6831
- description: "Configure the browser. Args: setting(viewport|device|geo|headers|credentials|media), args[]."
6970
+ description: "Configure the browser. Args: setting(viewport|device|geo|headers|credentials|media|offline), args[]."
6832
6971
  },
6833
6972
  // files / clipboard
6834
6973
  {
@@ -6872,7 +7011,7 @@ var BROWSER_COMMANDS = [
6872
7011
  },
6873
7012
  {
6874
7013
  name: "keyboard",
6875
- description: "Low-level keyboard at focus. Args: action(type|inserttext|keydown|keyup), text?, key?."
7014
+ description: "Low-level keyboard at focus. Args: action(type|inserttext), text. Use press for single keys and chords."
6876
7015
  },
6877
7016
  {
6878
7017
  name: "state",
@@ -7570,9 +7709,9 @@ var BROWSER_LOG_TEXT_MAX_CHARS = 64 * 1024;
7570
7709
  var isString = /* @__PURE__ */ __name4((value3) => typeof value3 === "string", "isString");
7571
7710
  var isBoolean = /* @__PURE__ */ __name4((value3) => typeof value3 === "boolean", "isBoolean");
7572
7711
  var isCount = /* @__PURE__ */ __name4((value3) => typeof value3 === "number" && Number.isFinite(value3) && value3 >= 0, "isCount");
7573
- var isPlainObject2 = /* @__PURE__ */ __name4((value3) => typeof value3 === "object" && value3 !== null && !Array.isArray(value3), "isPlainObject");
7712
+ var isPlainObject3 = /* @__PURE__ */ __name4((value3) => typeof value3 === "object" && value3 !== null && !Array.isArray(value3), "isPlainObject");
7574
7713
  var oneOf = /* @__PURE__ */ __name4((values) => (value3) => typeof value3 === "string" && values.includes(value3), "oneOf");
7575
- var isLimits = /* @__PURE__ */ __name4((value3) => isPlainObject2(value3) && Object.values(value3).every((entry) => isCount(entry)), "isLimits");
7714
+ var isLimits = /* @__PURE__ */ __name4((value3) => isPlainObject3(value3) && Object.values(value3).every((entry) => isCount(entry)), "isLimits");
7576
7715
  var EVENT_SHAPES = {
7577
7716
  "session.opened": {
7578
7717
  required: {
@@ -7592,7 +7731,7 @@ var EVENT_SHAPES = {
7592
7731
  ok: isBoolean
7593
7732
  },
7594
7733
  optional: {
7595
- args: isPlainObject2,
7734
+ args: isPlainObject3,
7596
7735
  urlBefore: isString,
7597
7736
  urlAfter: isString,
7598
7737
  resultBytes: isCount,
@@ -7697,7 +7836,7 @@ function describeFieldViolation(key, value3, check) {
7697
7836
  __name(describeFieldViolation, "describeFieldViolation");
7698
7837
  __name4(describeFieldViolation, "describeFieldViolation");
7699
7838
  function describeBrowserLogEventViolation(value3) {
7700
- if (!isPlainObject2(value3)) return "event must be an object";
7839
+ if (!isPlainObject3(value3)) return "event must be an object";
7701
7840
  const event = value3;
7702
7841
  const base = describeBaseViolation(event);
7703
7842
  if (base) return base;
@@ -7721,7 +7860,7 @@ __name(isBrowserLogEvent, "isBrowserLogEvent");
7721
7860
  __name4(isBrowserLogEvent, "isBrowserLogEvent");
7722
7861
  function describeBrowserLogContextViolation(value3) {
7723
7862
  if (value3 === void 0) return void 0;
7724
- if (!isPlainObject2(value3)) return "logContext must be an object";
7863
+ if (!isPlainObject3(value3)) return "logContext must be an object";
7725
7864
  for (const [key, entry] of Object.entries(value3)) {
7726
7865
  if (!BROWSER_LOG_CONTEXT_KEYS.includes(key)) return `logContext.${key} is not allowed`;
7727
7866
  if (entry === void 0) continue;
@@ -9790,6 +9929,16 @@ function luaClientMetricLabels(client) {
9790
9929
  }
9791
9930
  __name(luaClientMetricLabels, "luaClientMetricLabels");
9792
9931
  __name4(luaClientMetricLabels, "luaClientMetricLabels");
9932
+ var WEB_APP_ID_PATTERN = /^[A-Za-z0-9_-]{1,64}$/;
9933
+ function webAppPreviewSessionBinding(webAppId, previewId) {
9934
+ const binding = `${webAppId}--p-${previewId}`;
9935
+ if (!WEB_APP_ID_PATTERN.test(binding)) {
9936
+ throw new Error(`Web app preview session binding does not fit WEB_APP_ID_PATTERN: ${binding.length} characters`);
9937
+ }
9938
+ return binding;
9939
+ }
9940
+ __name(webAppPreviewSessionBinding, "webAppPreviewSessionBinding");
9941
+ __name4(webAppPreviewSessionBinding, "webAppPreviewSessionBinding");
9793
9942
  var AUTHZ_PROJECTION_VERSION = 1;
9794
9943
  var ProjectedScopeSchema = z4.string().min(1).max(128);
9795
9944
  var DisplayRoleSchema = z4.object({
@@ -13349,6 +13498,17 @@ function maskMcpServerHeaders(server) {
13349
13498
  }
13350
13499
  __name(maskMcpServerHeaders, "maskMcpServerHeaders");
13351
13500
  __name4(maskMcpServerHeaders, "maskMcpServerHeaders");
13501
+ var SHARED_DATA_OWNER_PREFIX = "shared:";
13502
+ function sharedDataOwnerKey(collectionId) {
13503
+ return `${SHARED_DATA_OWNER_PREFIX}${collectionId}`;
13504
+ }
13505
+ __name(sharedDataOwnerKey, "sharedDataOwnerKey");
13506
+ __name4(sharedDataOwnerKey, "sharedDataOwnerKey");
13507
+ function isSharedDataOwnerKey(agentId2) {
13508
+ return typeof agentId2 === "string" && agentId2.startsWith(SHARED_DATA_OWNER_PREFIX);
13509
+ }
13510
+ __name(isSharedDataOwnerKey, "isSharedDataOwnerKey");
13511
+ __name4(isSharedDataOwnerKey, "isSharedDataOwnerKey");
13352
13512
 
13353
13513
  // ../workflow-graph/dist/index.mjs
13354
13514
  import { createHash } from "crypto";
@@ -15998,11 +16158,11 @@ function isConditionalJoinId(stepId) {
15998
16158
  }
15999
16159
  __name(isConditionalJoinId, "isConditionalJoinId");
16000
16160
  __name5(isConditionalJoinId, "isConditionalJoinId");
16001
- function isPlainObject3(v) {
16161
+ function isPlainObject4(v) {
16002
16162
  return typeof v === "object" && v !== null && !Array.isArray(v);
16003
16163
  }
16004
- __name(isPlainObject3, "isPlainObject");
16005
- __name5(isPlainObject3, "isPlainObject");
16164
+ __name(isPlainObject4, "isPlainObject");
16165
+ __name5(isPlainObject4, "isPlainObject");
16006
16166
  function leafValue(row) {
16007
16167
  if (row.status === "completed") return row.output === void 0 ? null : row.output;
16008
16168
  return continuedFailureValue(row.error, row.killReason);
@@ -16025,7 +16185,7 @@ function deriveRunOutput(steps) {
16025
16185
  if (leaves.length === 1) {
16026
16186
  const leaf = leaves[0];
16027
16187
  const value22 = leafValue(leaf);
16028
- if (isConditionalJoinId(leaf.stepId) && isPlainObject3(value22)) {
16188
+ if (isConditionalJoinId(leaf.stepId) && isPlainObject4(value22)) {
16029
16189
  const keys = Object.keys(value22);
16030
16190
  if (keys.length === 1) return {
16031
16191
  output: value22[keys[0]],