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.
- package/dist/api-exports.d.ts +191 -35
- package/dist/api-exports.js +321 -23
- package/dist/api-exports.js.map +1 -1
- package/dist/index.js +598 -66
- package/dist/index.js.map +1 -1
- package/dist/voice/test/index.d.ts +18 -18
- package/dist/workflow-builder.js +177 -17
- package/dist/workflow-builder.js.map +1 -1
- package/docs/README.md +3 -3
- package/docs/api/Agents.md +51 -9
- package/docs/api/Data.md +51 -0
- package/docs/api/Workflows.md +1 -0
- package/docs/workflows/schedules.md +1 -1
- package/package.json +1 -1
- package/template/package.json +1 -1
|
@@ -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";
|
package/dist/workflow-builder.js
CHANGED
|
@@ -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:
|
|
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|
|
|
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(
|
|
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
|
|
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
|
|
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) =>
|
|
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:
|
|
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 (!
|
|
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 (!
|
|
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
|
|
16161
|
+
function isPlainObject4(v) {
|
|
16002
16162
|
return typeof v === "object" && v !== null && !Array.isArray(v);
|
|
16003
16163
|
}
|
|
16004
|
-
__name(
|
|
16005
|
-
__name5(
|
|
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) &&
|
|
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]],
|