lua-cli 3.49.1 → 3.50.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/index.js CHANGED
@@ -950,6 +950,17 @@ function aiGenerateInputFromSimplified(prompt, content) {
950
950
  ]
951
951
  };
952
952
  }
953
+ function directProviderOfOpenRouterModel(model) {
954
+ return OPENROUTER_DIRECT_VENDORS.find((vendor) => vendor.pattern.test(model))?.provider;
955
+ }
956
+ function openRouterModelIssue(options) {
957
+ const model = typeof options.model === "string" && options.model ? options.model : void 0;
958
+ if (options.provider === "openrouter" && !model) return OPENROUTER_NEEDS_MODEL_MESSAGE;
959
+ if (!model || !model.includes("/")) return null;
960
+ const direct = directProviderOfOpenRouterModel(model);
961
+ if (!direct) return null;
962
+ return `model ${model} runs on provider '${direct}': set provider '${direct}' instead of a vendor/model id`;
963
+ }
953
964
  function formatDecisionSandboxPrimitive(name, tool) {
954
965
  return tool ? `${name}${DECISION_SANDBOX_TOOL_SEPARATOR}${tool}` : name;
955
966
  }
@@ -2657,6 +2668,31 @@ function scrubProviderMessage(raw, max = PROVIDER_MESSAGE_MAX_CHARS) {
2657
2668
  function scrubStepErrorMessage(raw) {
2658
2669
  return scrubProviderMessage(raw, ERROR_MESSAGE_MAX_CHARS);
2659
2670
  }
2671
+ function scrubSecretsDeep(value3, options = {}) {
2672
+ return scrubDeep(value3, 0, /* @__PURE__ */ new WeakSet(), options.text !== false);
2673
+ }
2674
+ function isPlainObject2(v) {
2675
+ if (!v || typeof v !== "object") return false;
2676
+ const proto = Object.getPrototypeOf(v);
2677
+ return proto === Object.prototype || proto === null;
2678
+ }
2679
+ function scrubDeep(value3, depth, seen, text2) {
2680
+ if (typeof value3 === "string") return text2 ? scrubSecretText(value3) : value3;
2681
+ if (!value3 || typeof value3 !== "object") return value3;
2682
+ if (!Array.isArray(value3) && !isPlainObject2(value3)) return value3;
2683
+ if (depth >= SCRUB_DEEP_MAX_DEPTH || seen.has(value3)) return REDACTED_PLACEHOLDER;
2684
+ seen.add(value3);
2685
+ try {
2686
+ if (Array.isArray(value3)) return value3.map((v) => scrubDeep(v, depth + 1, seen, text2));
2687
+ const out = {};
2688
+ for (const [k, v] of Object.entries(value3)) {
2689
+ out[k] = isWorkflowSecretKey(k) && v !== null && v !== void 0 && typeof v !== "boolean" ? REDACTED_PLACEHOLDER : scrubDeep(v, depth + 1, seen, text2);
2690
+ }
2691
+ return out;
2692
+ } finally {
2693
+ seen.delete(value3);
2694
+ }
2695
+ }
2660
2696
  function isTestSessionId(value3) {
2661
2697
  return typeof value3 === "string" && TEST_SESSION_ID_PATTERN.test(value3);
2662
2698
  }
@@ -2781,6 +2817,68 @@ function supervisionAccessBindingViolation(merged) {
2781
2817
  }
2782
2818
  return null;
2783
2819
  }
2820
+ function canonicalSupervisedSecretJson(row2) {
2821
+ const sorted = {};
2822
+ for (const k of Object.keys(row2).sort()) sorted[k] = row2[k];
2823
+ return JSON.stringify(sorted);
2824
+ }
2825
+ function validateSupervisedSecretPut(args2) {
2826
+ const bad = /* @__PURE__ */ __name3((message) => ({
2827
+ ok: false,
2828
+ code: SUPERVISED_SECRET_ERRORS.BAD_ARGS,
2829
+ message
2830
+ }), "bad");
2831
+ const collection = args2?.collection;
2832
+ if (typeof collection !== "string" || !SUPERVISED_SECRET_NAME_RE.test(collection) || collection.startsWith("__")) {
2833
+ return bad("collection must be an explicit collection name (letters, digits, _ . : -; at most 128)");
2834
+ }
2835
+ const key = args2?.key;
2836
+ if (typeof key !== "string" || !SUPERVISED_SECRET_NAME_RE.test(key)) {
2837
+ return bad("key must be an explicit row key (letters, digits, _ . : -; at most 128)");
2838
+ }
2839
+ const value3 = args2?.value;
2840
+ if (!value3 || typeof value3 !== "object" || Array.isArray(value3) || Object.getPrototypeOf(value3) !== Object.prototype) {
2841
+ return bad("value must be a plain object of scalar fields");
2842
+ }
2843
+ const fields = Object.keys(value3);
2844
+ const row2 = {};
2845
+ for (const field of fields) {
2846
+ if (!SUPERVISED_SECRET_FIELD_RE.test(field)) {
2847
+ return bad("value field names must be plain identifiers (no $ prefix, no dots; at most 64 characters)");
2848
+ }
2849
+ const v = value3[field];
2850
+ if (typeof v === "string") {
2851
+ if (v.length > SUPERVISED_SECRET_LIMITS.maxStringLength) {
2852
+ return bad(`value.${field} is longer than ${SUPERVISED_SECRET_LIMITS.maxStringLength} characters`);
2853
+ }
2854
+ } else if (typeof v === "number") {
2855
+ if (!Number.isFinite(v)) return bad(`value.${field} must be a finite number`);
2856
+ } else if (typeof v !== "boolean" && v !== null) {
2857
+ return bad(`value.${field} must be a string, a finite number, a boolean or null (no nesting)`);
2858
+ }
2859
+ row2[field] = v;
2860
+ }
2861
+ if (Object.prototype.hasOwnProperty.call(row2, SUPERVISED_SECRET_KEY_FIELD) && row2[SUPERVISED_SECRET_KEY_FIELD] !== key) {
2862
+ return bad(`value.${SUPERVISED_SECRET_KEY_FIELD}, when present, must equal key`);
2863
+ }
2864
+ row2[SUPERVISED_SECRET_KEY_FIELD] = key;
2865
+ if (Object.keys(row2).length > SUPERVISED_SECRET_LIMITS.maxFields) {
2866
+ return bad(`value has more than ${SUPERVISED_SECRET_LIMITS.maxFields} fields`);
2867
+ }
2868
+ if (Object.keys(row2).length < 2) return bad("value must carry at least one field besides _pk");
2869
+ const bytes = new TextEncoder().encode(canonicalSupervisedSecretJson(row2)).byteLength;
2870
+ if (bytes > SUPERVISED_SECRET_LIMITS.maxBytes) {
2871
+ return bad(`value is larger than ${SUPERVISED_SECRET_LIMITS.maxBytes} bytes`);
2872
+ }
2873
+ return {
2874
+ ok: true,
2875
+ input: {
2876
+ collection,
2877
+ key,
2878
+ row: row2
2879
+ }
2880
+ };
2881
+ }
2784
2882
  function hasFormatCharacters(text2) {
2785
2883
  return FORMAT_CHARS.test(text2);
2786
2884
  }
@@ -4666,7 +4764,7 @@ function describeFieldViolation(key, value3, check) {
4666
4764
  return void 0;
4667
4765
  }
4668
4766
  function describeBrowserLogEventViolation(value3) {
4669
- if (!isPlainObject2(value3)) return "event must be an object";
4767
+ if (!isPlainObject3(value3)) return "event must be an object";
4670
4768
  const event = value3;
4671
4769
  const base = describeBaseViolation(event);
4672
4770
  if (base) return base;
@@ -4686,7 +4784,7 @@ function isBrowserLogEvent(value3) {
4686
4784
  }
4687
4785
  function describeBrowserLogContextViolation(value3) {
4688
4786
  if (value3 === void 0) return void 0;
4689
- if (!isPlainObject2(value3)) return "logContext must be an object";
4787
+ if (!isPlainObject3(value3)) return "logContext must be an object";
4690
4788
  for (const [key, entry] of Object.entries(value3)) {
4691
4789
  if (!BROWSER_LOG_CONTEXT_KEYS.includes(key)) return `logContext.${key} is not allowed`;
4692
4790
  if (entry === void 0) continue;
@@ -4711,6 +4809,10 @@ function browserLogContextOfWorkerContext(context) {
4711
4809
  if (context?.primitiveId) out.primitiveId = context.primitiveId;
4712
4810
  if (context?.primitiveName) out.primitiveName = context.primitiveName;
4713
4811
  if (context?.channel) out.channel = context.channel;
4812
+ if (context?.environment && AGENT_LOG_ENVIRONMENTS.includes(context.environment)) {
4813
+ out.environment = context.environment;
4814
+ }
4815
+ if (context?.agentVersion) out.agentVersion = context.agentVersion;
4714
4816
  return out;
4715
4817
  }
4716
4818
  function browserLogEventOfWorkerEvent(event, mapping = {}) {
@@ -7514,7 +7616,13 @@ function maskMcpServerHeaders(server) {
7514
7616
  headersSet: headerNames.length > 0
7515
7617
  };
7516
7618
  }
7517
- var __defProp3, __name3, 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_SANDBOX_SITE_HEADER, DECISION_SANDBOX_PRIMITIVE_HEADER, DECISION_SANDBOX_TOOL_SEPARATOR, DECISION_LIMITS, DECISION_ERROR_CODES, DECISION_INACTIVE_CODE, 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, 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_ENGINES, 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_AGENT_EFFORTS, WORKFLOW_MODEL_CLASSES, WORKFLOW_TASK_CLASSES, WORKFLOW_MODEL_TRAITS, WORKFLOW_MODEL_REASON_MAX_LENGTH, WORKFLOW_MODELS_COMPOSE_MODES, WORKFLOW_MODELS_PIN_MODES, WORKFLOW_MODELS_FALLBACK_MODES, WORKFLOW_MODELS_CONSENT_ACTIONS_MIN, WORKFLOW_DEFAULT_TASK_CLASS_MAP, WORKFLOW_MODELS_MAX_CLASS_DEFAULT, WORKFLOW_AUTONOMY_FORMS, WORKFLOW_AUTONOMY_NUMERIC_KEYS, WORKFLOW_AUTONOMY_ENVELOPE_KEYS, WORKFLOW_AUTONOMY_ENABLED_DEFAULT, 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_FORMATS, LOG_DRAIN_SEVERITIES, LOG_DRAIN_SOURCES, LOG_DRAIN_CONTENT_SOURCES, LOG_DRAIN_DEFAULT_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, EventType, 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, TYPED_API_KEY, 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_JOURNAL_PROTOCOL_VERSION, 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_WALL_MS, WEB_ROUTE_MAX_REQUEST_BODY_BYTES, WEB_ROUTE_MAX_RESPONSE_BYTES, WEB_APP_NAME_PATTERN, WEB_APP_ENTRY_HTML_MAX_CHARS, WEB_APP_MAX_ASSETS, WEB_APP_ASSET_PATH_PATTERN, WEB_APP_ASSET_PATH_MAX_CHARS, WEB_APP_MAX_ROUTES, WEB_APP_MAX_ASSET_BYTES, WEB_APP_CSP_NONCE_PLACEHOLDER, 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;
7619
+ function sharedDataOwnerKey(collectionId) {
7620
+ return `${SHARED_DATA_OWNER_PREFIX}${collectionId}`;
7621
+ }
7622
+ function isSharedDataOwnerKey(agentId2) {
7623
+ return typeof agentId2 === "string" && agentId2.startsWith(SHARED_DATA_OWNER_PREFIX);
7624
+ }
7625
+ var __defProp3, __name3, PLUMBING_THREAD_CHANNELS, CHANNEL_CONVERSATION_CHANNELS, HIDDEN_THREAD_CHANNELS, CHOICE_PERSON_TURN_CHANNELS, CHOICE_REPLAY_CLIENT_CAPABILITIES, CHOICE_REPLAY_CLIENT_SURFACES, DECISION_PROVIDERS, DECISION_FALLBACK_PROVIDERS, OPENROUTER_DIRECT_VENDORS, OPENROUTER_NEEDS_MODEL_MESSAGE, DECISION_QUESTION_TYPES, DECISION_NAME_PATTERN, DECISION_SANDBOX_SITE_HEADER, DECISION_SANDBOX_PRIMITIVE_HEADER, DECISION_SANDBOX_TOOL_SEPARATOR, DECISION_LIMITS, DECISION_ERROR_CODES, DECISION_INACTIVE_CODE, MAX_NAME_CHARS, InstructionsSchema, NameSchema, OddsQuestionSchema, ChoiceQuestionSchema, ScoreQuestionSchema, DecisionQuestionSchema, DecisionOptionsSchema, DecisionQuestionsSchema, DecisionDefinitionSchema, DecisionDefinitionWriteSchema, 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, SCRUB_DEEP_MAX_DEPTH, 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, SUPERVISED_SECRET_LIMITS, SUPERVISED_SECRET_NAME_RE, SUPERVISED_SECRET_FIELD_RE, SUPERVISED_SECRET_KEY_FIELD, SUPERVISED_SECRET_ERRORS, 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, 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_ENGINES, 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, isPlainObject3, 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_AGENT_EFFORTS, WORKFLOW_MODEL_CLASSES, WORKFLOW_TASK_CLASSES, WORKFLOW_MODEL_TRAITS, WORKFLOW_MODEL_REASON_MAX_LENGTH, WORKFLOW_MODELS_COMPOSE_MODES, WORKFLOW_MODELS_PIN_MODES, WORKFLOW_MODELS_FALLBACK_MODES, WORKFLOW_MODELS_CONSENT_ACTIONS_MIN, WORKFLOW_DEFAULT_TASK_CLASS_MAP, WORKFLOW_MODELS_MAX_CLASS_DEFAULT, WORKFLOW_AUTONOMY_FORMS, WORKFLOW_AUTONOMY_NUMERIC_KEYS, WORKFLOW_AUTONOMY_ENVELOPE_KEYS, WORKFLOW_AUTONOMY_ENABLED_DEFAULT, 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_FORMATS, LOG_DRAIN_SEVERITIES, LOG_DRAIN_SOURCES, LOG_DRAIN_CONTENT_SOURCES, LOG_DRAIN_DEFAULT_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, EventType, 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, TYPED_API_KEY, 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_JOURNAL_PROTOCOL_VERSION, 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_WALL_MS, WEB_ROUTE_MAX_REQUEST_BODY_BYTES, WEB_ROUTE_MAX_RESPONSE_BYTES, WEB_APP_NAME_PATTERN, WEB_APP_ENTRY_HTML_MAX_CHARS, WEB_APP_MAX_ASSETS, WEB_APP_ASSET_PATH_PATTERN, WEB_APP_ASSET_PATH_MAX_CHARS, WEB_APP_MAX_ROUTES, WEB_APP_MAX_ASSET_BYTES, WEB_APP_CSP_NONCE_PLACEHOLDER, 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, SHARED_DATA_NAME_RE, SHARED_DATA_OWNER_PREFIX, SHARED_DATA_ERRORS;
7518
7626
  var init_dist = __esm({
7519
7627
  "../shared-types/dist/index.mjs"() {
7520
7628
  "use strict";
@@ -7587,9 +7695,29 @@ var init_dist = __esm({
7587
7695
  __name(aiGenerateInputFromSimplified, "aiGenerateInputFromSimplified");
7588
7696
  __name3(aiGenerateInputFromSimplified, "aiGenerateInputFromSimplified");
7589
7697
  DECISION_PROVIDERS = [
7698
+ "jev",
7699
+ "openai",
7700
+ "openrouter"
7701
+ ];
7702
+ DECISION_FALLBACK_PROVIDERS = [
7590
7703
  "jev",
7591
7704
  "openai"
7592
7705
  ];
7706
+ OPENROUTER_DIRECT_VENDORS = [
7707
+ {
7708
+ pattern: /^~?typesafe\//,
7709
+ provider: "jev"
7710
+ },
7711
+ {
7712
+ pattern: /^openai\//,
7713
+ provider: "openai"
7714
+ }
7715
+ ];
7716
+ __name(directProviderOfOpenRouterModel, "directProviderOfOpenRouterModel");
7717
+ __name3(directProviderOfOpenRouterModel, "directProviderOfOpenRouterModel");
7718
+ OPENROUTER_NEEDS_MODEL_MESSAGE = "provider openrouter needs a model id, such as liquid/d1";
7719
+ __name(openRouterModelIssue, "openRouterModelIssue");
7720
+ __name3(openRouterModelIssue, "openRouterModelIssue");
7593
7721
  DECISION_QUESTION_TYPES = [
7594
7722
  "odds",
7595
7723
  "choice",
@@ -7673,7 +7801,7 @@ var init_dist = __esm({
7673
7801
  ]).optional(),
7674
7802
  model: z.string().min(1).optional(),
7675
7803
  fallback: z.union([
7676
- z.enum(DECISION_PROVIDERS),
7804
+ z.enum(DECISION_FALLBACK_PROVIDERS),
7677
7805
  z.literal("none")
7678
7806
  ]).optional(),
7679
7807
  region: z.literal("eu").optional(),
@@ -7702,6 +7830,16 @@ var init_dist = __esm({
7702
7830
  description: z.string().max(DECISION_LIMITS.maxInstructionChars).optional(),
7703
7831
  questions: DecisionQuestionsSchema
7704
7832
  }).strict();
7833
+ DecisionDefinitionWriteSchema = DecisionDefinitionSchema.superRefine((definition, ctx) => {
7834
+ const issue = openRouterModelIssue(definition);
7835
+ if (issue) ctx.addIssue({
7836
+ code: z.ZodIssueCode.custom,
7837
+ path: [
7838
+ "model"
7839
+ ],
7840
+ message: issue
7841
+ });
7842
+ });
7705
7843
  INTEGRATION_PASSTHROUGH_READ_METHODS = [
7706
7844
  "GET",
7707
7845
  "HEAD"
@@ -7946,7 +8084,14 @@ var init_dist = __esm({
7946
8084
  * the target (`snapshot.jobs[]`) so the promote activates and schedules it. Mongo-only marker write; EventBridge stays
7947
8085
  * on the post-promote reconcile. Release-class: needs `register-job` AND `release` on the grant, from a signed step.
7948
8086
  */
7949
- "jobs.register": "register-job"
8087
+ "jobs.register": "register-job",
8088
+ // [SW]
8089
+ /**
8090
+ * SW — `Agents.secrets(id).put(collection, key, value)`: write ONE secret row into the TARGET's own Data, in a
8091
+ * collection the grant names in `secretWriteCollections` (deny by default), keyed by `data._pk`. The value never
8092
+ * comes back: the answer is `{ ok, id, fingerprint }`, and the audit row carries the fingerprint only.
8093
+ */
8094
+ "secrets.put": "act"
7950
8095
  };
7951
8096
  __name(isSupervisionOp, "isSupervisionOp");
7952
8097
  __name3(isSupervisionOp, "isSupervisionOp");
@@ -8142,6 +8287,12 @@ var init_dist = __esm({
8142
8287
  gate: "register-job",
8143
8288
  targeted: true,
8144
8289
  item: "JR"
8290
+ },
8291
+ /** SW — `Agents.secrets(id).put(collection, key, value)`: one secret row in a `secretWriteCollections` collection. */
8292
+ "secrets.put": {
8293
+ gate: "act",
8294
+ targeted: true,
8295
+ item: "SW"
8145
8296
  }
8146
8297
  };
8147
8298
  SUPERVISION_WATCHDOG_OPS = {
@@ -8829,6 +8980,12 @@ var init_dist = __esm({
8829
8980
  {
8830
8981
  re: /\b(npm_)[A-Za-z0-9]{36}\b/g
8831
8982
  },
8983
+ // Linear personal API keys (`lin_api_` + 40) and OAuth access / refresh tokens (`lin_oauth_` + 64 hex,
8984
+ // `lin_refresh_`): the fleet's Engineering Manager hands OAuth tokens to agents in a prompt + tool call, and
8985
+ // both landed verbatim in `vmExecutionLogs` (2026-10-11).
8986
+ {
8987
+ re: /\b(lin_(?:api|oauth|refresh)_)[A-Za-z0-9]{16,}/g
8988
+ },
8832
8989
  {
8833
8990
  re: /\b(sk-ant-)[A-Za-z0-9_-]{16,}/g
8834
8991
  },
@@ -8847,11 +9004,16 @@ var init_dist = __esm({
8847
9004
  {
8848
9005
  re: /\b(ya29\.)[A-Za-z0-9_-]{20,}/g
8849
9006
  },
9007
+ // 2026-10-11: `(?<![A-Za-z0-9_-])`, not `\b` — with `\b` every `eyJ` after a `-` / `_` started an attempt that
9008
+ // ran the first segment to the end of the run and failed on the missing `.`, so `eyJabcdefgh-` × 1 MB took
9009
+ // ~115 s (quadratic). Now a run of segment characters admits at most one attempt.
8850
9010
  {
8851
- re: /\b(eyJ)[A-Za-z0-9_-]{8,}\.[A-Za-z0-9_-]{8,}\.[A-Za-z0-9_-]{8,}/g
9011
+ re: /(?<![A-Za-z0-9_-])(eyJ)[A-Za-z0-9_-]{8,}\.[A-Za-z0-9_-]{8,}\.[A-Za-z0-9_-]{8,}/g
8852
9012
  },
9013
+ // 2026-10-11: the body stops at the next `-----BEGIN ` — a lazy `[\s\S]*?` let every unterminated BEGIN scan to the
9014
+ // end of the text (quadratic on a repeated header with no END). A key whose END follows is matched as before.
8853
9015
  {
8854
- re: /(-----BEGIN [A-Z ]*PRIVATE KEY-----)[\s\S]*?-----END [A-Z ]*PRIVATE KEY-----/g
9016
+ re: /(-----BEGIN [A-Z ]*PRIVATE KEY-----)(?:(?!-----BEGIN )[\s\S])*?-----END [A-Z ]*PRIVATE KEY-----/g
8855
9017
  },
8856
9018
  // `https://x-access-token:<token>@github.com/…` (the git credential shape the pod scrubbed already)
8857
9019
  {
@@ -8859,7 +9021,7 @@ var init_dist = __esm({
8859
9021
  suffix: true
8860
9022
  }
8861
9023
  ];
8862
- 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?)";
9024
+ 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?)";
8863
9025
  SECRET_PAIR_PATTERNS = [
8864
9026
  // `Authorization: Bearer x`, `x-api-key: x`, `AWS_SECRET_ACCESS_KEY=x`, `SVC_JOB_KEY=x`, `"apiKey": "x"`,
8865
9027
  // `FOO_TOKEN=x`, `secretKey=x`, `password=x`. Groups: the char before the name, the name, the separator
@@ -8935,6 +9097,13 @@ var init_dist = __esm({
8935
9097
  __name3(scrubProviderMessage, "scrubProviderMessage");
8936
9098
  __name(scrubStepErrorMessage, "scrubStepErrorMessage");
8937
9099
  __name3(scrubStepErrorMessage, "scrubStepErrorMessage");
9100
+ SCRUB_DEEP_MAX_DEPTH = 12;
9101
+ __name(scrubSecretsDeep, "scrubSecretsDeep");
9102
+ __name3(scrubSecretsDeep, "scrubSecretsDeep");
9103
+ __name(isPlainObject2, "isPlainObject2");
9104
+ __name3(isPlainObject2, "isPlainObject");
9105
+ __name(scrubDeep, "scrubDeep");
9106
+ __name3(scrubDeep, "scrubDeep");
8938
9107
  TEST_SESSION_ID_PATTERN = /^tsn_[0-9a-f-]{36}$/;
8939
9108
  __name(isTestSessionId, "isTestSessionId");
8940
9109
  __name3(isTestSessionId, "isTestSessionId");
@@ -8986,6 +9155,27 @@ var init_dist = __esm({
8986
9155
  __name3(sameSupervisionAccessFields, "sameSupervisionAccessFields");
8987
9156
  __name(supervisionAccessBindingViolation, "supervisionAccessBindingViolation");
8988
9157
  __name3(supervisionAccessBindingViolation, "supervisionAccessBindingViolation");
9158
+ SUPERVISED_SECRET_LIMITS = {
9159
+ /** Fields in `value` (the `_pk` field included). */
9160
+ maxFields: 32,
9161
+ /** One string field's length. */
9162
+ maxStringLength: 8192,
9163
+ /** The canonical JSON of the whole row. */
9164
+ maxBytes: 16384
9165
+ };
9166
+ SUPERVISED_SECRET_NAME_RE = /^[A-Za-z0-9_.:-]{1,128}$/;
9167
+ SUPERVISED_SECRET_FIELD_RE = /^[A-Za-z_][A-Za-z0-9_]{0,63}$/;
9168
+ SUPERVISED_SECRET_KEY_FIELD = "_pk";
9169
+ SUPERVISED_SECRET_ERRORS = {
9170
+ BAD_ARGS: "supervision_secret_bad_args",
9171
+ NOT_GRANTED: "supervision_secret_write_not_granted",
9172
+ /** A collection named for secret writes is write-only for the supervisor: `data.get` / `data.query` refuse it. */
9173
+ WRITE_ONLY: "supervision_secret_collection_write_only"
9174
+ };
9175
+ __name(canonicalSupervisedSecretJson, "canonicalSupervisedSecretJson");
9176
+ __name3(canonicalSupervisedSecretJson, "canonicalSupervisedSecretJson");
9177
+ __name(validateSupervisedSecretPut, "validateSupervisedSecretPut");
9178
+ __name3(validateSupervisedSecretPut, "validateSupervisedSecretPut");
8989
9179
  CONNECTION_HANDOVER_APPROVAL_PAYLOAD_KEY = "connectionAssignment";
8990
9180
  CONNECTION_HANDOVER_APPROVAL_CARD_MAX_CHARS = 1200;
8991
9181
  CONNECTION_HANDOVER_LIMITS = {
@@ -9865,7 +10055,7 @@ var init_dist = __esm({
9865
10055
  },
9866
10056
  {
9867
10057
  name: "find",
9868
- 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?."
10058
+ description: "Act by semantic locator. Args: by(role|text|label|placeholder|alt|title|testid), query, action(click|fill|hover|check|text), value?, name?, exact?."
9869
10059
  },
9870
10060
  // AI fallbacks
9871
10061
  {
@@ -9879,7 +10069,7 @@ var init_dist = __esm({
9879
10069
  // wait
9880
10070
  {
9881
10071
  name: "wait",
9882
- description: "Wait for a condition. Provide one of: selector(+state), ms, text, url, load, fn."
10072
+ description: "Wait for a condition. Provide one of: selector (waits until it is visible), ms, text, url, load, fn."
9883
10073
  },
9884
10074
  // tabs / frames
9885
10075
  {
@@ -9914,7 +10104,7 @@ var init_dist = __esm({
9914
10104
  },
9915
10105
  {
9916
10106
  name: "set",
9917
- description: "Configure the browser. Args: setting(viewport|device|geo|headers|credentials|media), args[]."
10107
+ description: "Configure the browser. Args: setting(viewport|device|geo|headers|credentials|media|offline), args[]."
9918
10108
  },
9919
10109
  // files / clipboard
9920
10110
  {
@@ -9958,7 +10148,7 @@ var init_dist = __esm({
9958
10148
  },
9959
10149
  {
9960
10150
  name: "keyboard",
9961
- description: "Low-level keyboard at focus. Args: action(type|inserttext|keydown|keyup), text?, key?."
10151
+ description: "Low-level keyboard at focus. Args: action(type|inserttext), text. Use press for single keys and chords."
9962
10152
  },
9963
10153
  {
9964
10154
  name: "state",
@@ -10252,7 +10442,11 @@ var init_dist = __esm({
10252
10442
  "max-steps",
10253
10443
  "cost-cap",
10254
10444
  "error",
10255
- "reaped"
10445
+ "reaped",
10446
+ "cancelled",
10447
+ "confirmation",
10448
+ "blocked",
10449
+ "stopped"
10256
10450
  ];
10257
10451
  BROWSER_LOG_CONTEXT_KEYS = [
10258
10452
  "runId",
@@ -10269,9 +10463,9 @@ var init_dist = __esm({
10269
10463
  isString = /* @__PURE__ */ __name3((value3) => typeof value3 === "string", "isString");
10270
10464
  isBoolean = /* @__PURE__ */ __name3((value3) => typeof value3 === "boolean", "isBoolean");
10271
10465
  isCount = /* @__PURE__ */ __name3((value3) => typeof value3 === "number" && Number.isFinite(value3) && value3 >= 0, "isCount");
10272
- isPlainObject2 = /* @__PURE__ */ __name3((value3) => typeof value3 === "object" && value3 !== null && !Array.isArray(value3), "isPlainObject");
10466
+ isPlainObject3 = /* @__PURE__ */ __name3((value3) => typeof value3 === "object" && value3 !== null && !Array.isArray(value3), "isPlainObject");
10273
10467
  oneOf = /* @__PURE__ */ __name3((values) => (value3) => typeof value3 === "string" && values.includes(value3), "oneOf");
10274
- isLimits = /* @__PURE__ */ __name3((value3) => isPlainObject2(value3) && Object.values(value3).every((entry) => isCount(entry)), "isLimits");
10468
+ isLimits = /* @__PURE__ */ __name3((value3) => isPlainObject3(value3) && Object.values(value3).every((entry) => isCount(entry)), "isLimits");
10275
10469
  EVENT_SHAPES = {
10276
10470
  "session.opened": {
10277
10471
  required: {
@@ -10280,7 +10474,8 @@ var init_dist = __esm({
10280
10474
  optional: {
10281
10475
  limits: isLimits,
10282
10476
  region: isString,
10283
- liveUrl: isString
10477
+ liveUrl: isString,
10478
+ browser: isString
10284
10479
  }
10285
10480
  },
10286
10481
  command: {
@@ -10290,7 +10485,7 @@ var init_dist = __esm({
10290
10485
  ok: isBoolean
10291
10486
  },
10292
10487
  optional: {
10293
- args: isPlainObject2,
10488
+ args: isPlainObject3,
10294
10489
  urlBefore: isString,
10295
10490
  urlAfter: isString,
10296
10491
  resultBytes: isCount,
@@ -13311,6 +13506,23 @@ listed here; never invent a target.`;
13311
13506
  }).strict();
13312
13507
  __name(maskMcpServerHeaders, "maskMcpServerHeaders");
13313
13508
  __name3(maskMcpServerHeaders, "maskMcpServerHeaders");
13509
+ SHARED_DATA_NAME_RE = /^[A-Za-z0-9_.-]{1,128}$/;
13510
+ SHARED_DATA_OWNER_PREFIX = "shared:";
13511
+ __name(sharedDataOwnerKey, "sharedDataOwnerKey");
13512
+ __name3(sharedDataOwnerKey, "sharedDataOwnerKey");
13513
+ __name(isSharedDataOwnerKey, "isSharedDataOwnerKey");
13514
+ __name3(isSharedDataOwnerKey, "isSharedDataOwnerKey");
13515
+ SHARED_DATA_ERRORS = {
13516
+ /** Not in the ACL for this access, the collection does not exist, or it belongs to another org: one answer. */
13517
+ FORBIDDEN: "shared_data_forbidden",
13518
+ /** A test session may read a shared collection but never write it (no shadow namespace for shared rows). */
13519
+ TEST_SESSION_WRITE_REFUSED: "shared_data_test_session_write_refused",
13520
+ /** `lua test` / offline runs have no server-side ACL to consult. */
13521
+ UNAVAILABLE_OFFLINE: "shared_data_unavailable_offline",
13522
+ /** A private Data route was called with a shared-collection owner key. */
13523
+ RESERVED_OWNER_KEY: "shared_data_reserved_owner_key",
13524
+ INVALID_NAME: "shared_data_invalid_name"
13525
+ };
13314
13526
  }
13315
13527
  });
13316
13528
 
@@ -13597,6 +13809,12 @@ function joinHint(...parts) {
13597
13809
  const lines = parts.filter((part) => typeof part === "string" && part.length > 0);
13598
13810
  return lines.length > 0 ? lines.join("\n") : void 0;
13599
13811
  }
13812
+ function isLuaErrorBody(body) {
13813
+ return typeof body.message === "string" || typeof body.statusCode === "number" || typeof body.code === "string";
13814
+ }
13815
+ function isEdgeBlockedError(error) {
13816
+ return CliError.isCliError(error) && error.serverCode === EDGE_BLOCKED_CODE;
13817
+ }
13600
13818
  function isAccessDeniedError(error) {
13601
13819
  if (CliError.isCliError(error)) return error.statusCode === 403;
13602
13820
  return error instanceof Error && error.message.startsWith("Access denied (403)");
@@ -13868,7 +14086,7 @@ function reportUnhandledCliError(error) {
13868
14086
  process.exitCode = reported.exitCode;
13869
14087
  return reported.exitCode;
13870
14088
  }
13871
- var CLI_EXIT, CliError, HandledCliError, debugFlag, NETWORK_ERRNO, NETWORK_MESSAGE, UNAVAILABLE_HINT, VENDOR_RETRY_SOON_SECONDS, VENDOR_LABELS, PROVIDER_REJECTED_SERVER_CODE, PROVIDER_REJECTED_HTTP_STATUS, PROVIDER_REJECTION_REASONS, PROVIDER_REJECTED_NO_RETRY, PROVIDER_REJECTED_LUA_SIDE, MODEL_SETTINGS_URL, DECISION_STATUS, CLI_EXIT_CODE_HELP;
14089
+ var CLI_EXIT, CliError, EDGE_BLOCKED_CODE, HandledCliError, debugFlag, NETWORK_ERRNO, NETWORK_MESSAGE, UNAVAILABLE_HINT, VENDOR_RETRY_SOON_SECONDS, VENDOR_LABELS, PROVIDER_REJECTED_SERVER_CODE, PROVIDER_REJECTED_HTTP_STATUS, PROVIDER_REJECTION_REASONS, PROVIDER_REJECTED_NO_RETRY, PROVIDER_REJECTED_LUA_SIDE, MODEL_SETTINGS_URL, DECISION_STATUS, CLI_EXIT_CODE_HELP;
13872
14090
  var init_cli_error = __esm({
13873
14091
  "src/errors/cli.error.ts"() {
13874
14092
  "use strict";
@@ -13984,6 +14202,9 @@ var init_cli_error = __esm({
13984
14202
  __name(isTypedCliError, "isTypedCliError");
13985
14203
  __name(listHint, "listHint");
13986
14204
  __name(joinHint, "joinHint");
14205
+ EDGE_BLOCKED_CODE = "EDGE_BLOCKED";
14206
+ __name(isLuaErrorBody, "isLuaErrorBody");
14207
+ __name(isEdgeBlockedError, "isEdgeBlockedError");
13987
14208
  __name(isAccessDeniedError, "isAccessDeniedError");
13988
14209
  HandledCliError = class extends Error {
13989
14210
  static {
@@ -17306,7 +17527,7 @@ function resolvePlacements(calls) {
17306
17527
  function isConditionalJoinId(stepId) {
17307
17528
  return CONDITIONAL_JOIN_ID.test(stepId);
17308
17529
  }
17309
- function isPlainObject3(v) {
17530
+ function isPlainObject4(v) {
17310
17531
  return typeof v === "object" && v !== null && !Array.isArray(v);
17311
17532
  }
17312
17533
  function leafValue(row2) {
@@ -17327,7 +17548,7 @@ function deriveRunOutput(steps) {
17327
17548
  if (leaves.length === 1) {
17328
17549
  const leaf = leaves[0];
17329
17550
  const value22 = leafValue(leaf);
17330
- if (isConditionalJoinId(leaf.stepId) && isPlainObject3(value22)) {
17551
+ if (isConditionalJoinId(leaf.stepId) && isPlainObject4(value22)) {
17331
17552
  const keys = Object.keys(value22);
17332
17553
  if (keys.length === 1) return {
17333
17554
  output: value22[keys[0]],
@@ -19317,8 +19538,8 @@ var init_dist2 = __esm({
19317
19538
  CONDITIONAL_JOIN_ID = /^conditional@\d+\.join$/;
19318
19539
  __name(isConditionalJoinId, "isConditionalJoinId");
19319
19540
  __name6(isConditionalJoinId, "isConditionalJoinId");
19320
- __name(isPlainObject3, "isPlainObject");
19321
- __name6(isPlainObject3, "isPlainObject");
19541
+ __name(isPlainObject4, "isPlainObject");
19542
+ __name6(isPlainObject4, "isPlainObject");
19322
19543
  __name(leafValue, "leafValue");
19323
19544
  __name6(leafValue, "leafValue");
19324
19545
  __name(runOutputLeaves, "runOutputLeaves");
@@ -20818,6 +21039,14 @@ async function classifyErrorResponse(response) {
20818
21039
  }
20819
21040
  throw new AuthenticationError(`Authentication failed: ${serverMessage}`, "unknown", serverMessage);
20820
21041
  }
21042
+ if (response.status === 403 && !isLuaErrorBody(errorData) && isHtmlResponse(response)) {
21043
+ throw new CliError("forbidden", "The request was blocked before it reached Lua (HTTP 403 from the network firewall), not by your credentials.", {
21044
+ exitCode: CLI_EXIT.FORBIDDEN,
21045
+ statusCode: 403,
21046
+ serverCode: EDGE_BLOCKED_CODE,
21047
+ hint: "Something in the request looked like an attack to the firewall, for example a URL that contains a system path. Change the request and try again."
21048
+ });
21049
+ }
20821
21050
  if (response.status === 403) {
20822
21051
  const detail = errorData.message || "You do not have permission to access this resource.";
20823
21052
  const serverCode = serverCodeOf(errorData.code, errorData.error);
@@ -20933,6 +21162,9 @@ async function* parseSseStream(body, signal) {
20933
21162
  }
20934
21163
  }
20935
21164
  }
21165
+ function isHtmlResponse(response) {
21166
+ return (response.headers.get("content-type") ?? "").toLowerCase().includes("text/html");
21167
+ }
20936
21168
  function parseRetryAfter(raw) {
20937
21169
  if (!raw) return void 0;
20938
21170
  const seconds = Number.parseInt(raw, 10);
@@ -21351,6 +21583,7 @@ var init_http_client = __esm({
21351
21583
  __name(serverCodeOf, "serverCodeOf");
21352
21584
  __name(refusalFromResponse, "refusalFromResponse");
21353
21585
  __name(parseSseStream, "parseSseStream");
21586
+ __name(isHtmlResponse, "isHtmlResponse");
21354
21587
  __name(parseRetryAfter, "parseRetryAfter");
21355
21588
  __name(isCoreDrainApiError, "isCoreDrainApiError");
21356
21589
  __name(coreDrainApiRetryDelayMs, "coreDrainApiRetryDelayMs");
@@ -23666,15 +23899,22 @@ var init_analytics = __esm({
23666
23899
  });
23667
23900
 
23668
23901
  // src/utils/write-info.ts
23902
+ function clearLineFor(stream) {
23903
+ return stream.isTTY ? CLEAR_LINE : "";
23904
+ }
23669
23905
  function writeInfo(message) {
23670
- process.stdout.write("\r\x1B[K" + message + "\n");
23906
+ process.stdout.write(clearLineFor(process.stdout) + message + "\n");
23671
23907
  }
23672
23908
  function writeProgress(message) {
23673
- process.stderr.write("\r\x1B[K" + message);
23909
+ if (process.stderr.isTTY) process.stderr.write(CLEAR_LINE + message);
23910
+ else process.stderr.write(message + "\n");
23674
23911
  }
23912
+ var CLEAR_LINE;
23675
23913
  var init_write_info = __esm({
23676
23914
  "src/utils/write-info.ts"() {
23677
23915
  "use strict";
23916
+ CLEAR_LINE = "\r\x1B[K";
23917
+ __name(clearLineFor, "clearLineFor");
23678
23918
  __name(writeInfo, "writeInfo");
23679
23919
  __name(writeProgress, "writeProgress");
23680
23920
  }
@@ -23843,10 +24083,10 @@ function clearPromptLines(count2 = 1) {
23843
24083
  }
23844
24084
  }
23845
24085
  function writeSuccess(message) {
23846
- process.stdout.write("\r\x1B[K" + message + "\n");
24086
+ process.stdout.write(clearLineFor(process.stdout) + message + "\n");
23847
24087
  }
23848
24088
  function writeError(message) {
23849
- process.stderr.write("\r\x1B[K" + message + "\n");
24089
+ process.stderr.write(clearLineFor(process.stderr) + message + "\n");
23850
24090
  }
23851
24091
  var isCiMode, jsonOutputRequested;
23852
24092
  var init_cli = __esm({
@@ -23859,6 +24099,7 @@ var init_cli = __esm({
23859
24099
  init_analytics();
23860
24100
  init_hints();
23861
24101
  init_write_info();
24102
+ init_write_info();
23862
24103
  isCiMode = false;
23863
24104
  __name(setCiMode, "setCiMode");
23864
24105
  __name(isCiModeEnabled, "isCiModeEnabled");
@@ -34311,7 +34552,7 @@ function unresolvedRefIssues(all, browsers) {
34311
34552
  }
34312
34553
  return issues;
34313
34554
  }
34314
- var oneOf2, stringList, positiveIntUpTo, SETTING_CHECKS, BROWSER_SETTING_KEYS, BrowserPlugin;
34555
+ var oneOf2, stringList, positiveIntUpTo, SETTING_CHECKS, wholeNumberUpTo, SETTING_RULES, BROWSER_SETTING_KEYS, BrowserPlugin;
34315
34556
  var init_browser_plugin = __esm({
34316
34557
  "src/compiler/plugins/browser.plugin.ts"() {
34317
34558
  "use strict";
@@ -34338,6 +34579,21 @@ var init_browser_plugin = __esm({
34338
34579
  persist: /* @__PURE__ */ __name((value3) => typeof value3 === "boolean", "persist"),
34339
34580
  credentials: stringList
34340
34581
  };
34582
+ wholeNumberUpTo = /* @__PURE__ */ __name((max, unit) => `it must be a whole number of ${unit} from 1 to ${max}`, "wholeNumberUpTo");
34583
+ SETTING_RULES = {
34584
+ engine: `it must be one of ${BROWSER_ENGINES.join(", ")}`,
34585
+ fallback: `it must be one of ${BROWSER_FALLBACKS.join(", ")}`,
34586
+ proxyCountry: 'it must be a two-letter country code, like "de"',
34587
+ allowedDomains: "it must be a list of non-empty domain strings",
34588
+ confirmActions: "it must be a list of non-empty action names",
34589
+ maxSessionMinutes: wholeNumberUpTo(BROWSER_LIMIT_MAX.maxSessionMinutes, "minutes"),
34590
+ idleTimeoutSeconds: wholeNumberUpTo(BROWSER_LIMIT_MAX.idleTimeoutSeconds, "seconds"),
34591
+ maxConcurrentSessions: wholeNumberUpTo(BROWSER_LIMIT_MAX.maxConcurrentSessions, "sessions"),
34592
+ screenshots: `it must be one of ${BROWSER_SCREENSHOT_POLICIES.join(", ")}`,
34593
+ logContent: `it must be one of ${BROWSER_LOG_CONTENT_MODES.join(", ")}`,
34594
+ persist: "it must be true or false",
34595
+ credentials: "it must be a list of non-empty credential names"
34596
+ };
34341
34597
  BROWSER_SETTING_KEYS = Object.keys(SETTING_CHECKS);
34342
34598
  __name(shapeBrowserSettings, "shapeBrowserSettings");
34343
34599
  __name(duplicateNameIssues, "duplicateNameIssues");
@@ -34379,7 +34635,7 @@ var init_browser_plugin = __esm({
34379
34635
  }));
34380
34636
  }
34381
34637
  for (const key of metadata.metadata.invalidSettings ?? []) {
34382
- errors.push(validationError(`Browser "${metadata.name}" has an invalid \`${key}\``, {
34638
+ errors.push(validationError(`Browser "${metadata.name}" has an invalid \`${key}\`: ${SETTING_RULES[key]}`, {
34383
34639
  line: metadata.line
34384
34640
  }));
34385
34641
  }
@@ -34600,7 +34856,7 @@ var init_decision_plugin = __esm({
34600
34856
  line
34601
34857
  }));
34602
34858
  if (extractionErrors.length === 0) {
34603
- const parsed = DecisionDefinitionSchema.safeParse(definitionOf(metadata.name, metadata.description, metadata.metadata));
34859
+ const parsed = DecisionDefinitionWriteSchema.safeParse(definitionOf(metadata.name, metadata.description, metadata.metadata));
34604
34860
  if (!parsed.success) {
34605
34861
  for (const issue of parsed.error.issues) {
34606
34862
  const path32 = issue.path.length > 0 ? issue.path.join(".") : "<root>";
@@ -38695,6 +38951,49 @@ var init_data_entry_instance = __esm({
38695
38951
  }
38696
38952
  });
38697
38953
 
38954
+ // src/api/shared-data.offline.ts
38955
+ function assertSharedName(name) {
38956
+ if (typeof name !== "string" || !SHARED_DATA_NAME_RE.test(name)) {
38957
+ throw new SharedDataError(SHARED_DATA_ERRORS.INVALID_NAME, "Data.shared(name): name must be 1-128 of [A-Za-z0-9_.-]");
38958
+ }
38959
+ }
38960
+ function offlineSharedData(name) {
38961
+ assertSharedName(name);
38962
+ const refuse = /* @__PURE__ */ __name(async () => {
38963
+ throw new SharedDataError(SHARED_DATA_ERRORS.UNAVAILABLE_OFFLINE, `Data.shared('${name}') is only available to a deployed agent (the org ACL is checked on the platform); it is not available in local test runs`);
38964
+ }, "refuse");
38965
+ return {
38966
+ collections: refuse,
38967
+ create: refuse,
38968
+ get: refuse,
38969
+ getEntry: refuse,
38970
+ update: refuse,
38971
+ patch: refuse,
38972
+ increment: refuse,
38973
+ search: refuse,
38974
+ delete: refuse
38975
+ };
38976
+ }
38977
+ var SharedDataError;
38978
+ var init_shared_data_offline = __esm({
38979
+ "src/api/shared-data.offline.ts"() {
38980
+ "use strict";
38981
+ init_dist();
38982
+ SharedDataError = class extends Error {
38983
+ static {
38984
+ __name(this, "SharedDataError");
38985
+ }
38986
+ code;
38987
+ name = "SharedDataError";
38988
+ constructor(code, message) {
38989
+ super(message), this.code = code;
38990
+ }
38991
+ };
38992
+ __name(assertSharedName, "assertSharedName");
38993
+ __name(offlineSharedData, "offlineSharedData");
38994
+ }
38995
+ });
38996
+
38698
38997
  // src/api/custom.data.api.service.ts
38699
38998
  var CustomDataApi;
38700
38999
  var init_custom_data_api_service = __esm({
@@ -38703,6 +39002,7 @@ var init_custom_data_api_service = __esm({
38703
39002
  init_http_client();
38704
39003
  init_custom_data();
38705
39004
  init_data_entry_instance();
39005
+ init_shared_data_offline();
38706
39006
  CustomDataApi = class extends HttpClient {
38707
39007
  static {
38708
39008
  __name(this, "CustomDataApi");
@@ -38903,6 +39203,10 @@ var init_custom_data_api_service = __esm({
38903
39203
  }
38904
39204
  throw new Error(response.error?.message || "Failed to delete custom data entry");
38905
39205
  }
39206
+ /** Org-shared Data. Local runs have no org ACL to consult, so every call of the handle rejects (offline). */
39207
+ shared(name) {
39208
+ return offlineSharedData(name);
39209
+ }
38906
39210
  };
38907
39211
  }
38908
39212
  });
@@ -39639,7 +39943,7 @@ var init_agents_api_service = __esm({
39639
39943
  if (op === "lease.acquire" || op === "lease.release") {
39640
39944
  refuse("supervision_offline_unsupported", `${op} is not available offline; run it on the platform`);
39641
39945
  }
39642
- if (op === "lifecycle.archive" || op === "lifecycle.delete" || op === "config.set" || op === "secrets.attach") {
39946
+ if (op === "lifecycle.archive" || op === "lifecycle.delete" || op === "config.set" || op === "secrets.attach" || op === "secrets.put") {
39643
39947
  refuse("supervision_offline_unsupported", `${op} is not available offline; run it on the platform`);
39644
39948
  }
39645
39949
  if (op === "agents.directory" || op === "access.request" || op === "access.requests" || op === "access.cancel") {
@@ -39691,7 +39995,9 @@ var init_agents_api_service = __esm({
39691
39995
  return runSummary(await get(`/workflows/${id2}/runs/${encodeURIComponent(String(args2.runId ?? ""))}`));
39692
39996
  case "versions.list":
39693
39997
  return get(`/developer/agents/${id2}/versions${q({
39694
- limit: args2.limit
39998
+ limit: args2.limit,
39999
+ status: Array.isArray(args2.status) ? args2.status.join(",") : args2.status,
40000
+ offset: args2.offset
39695
40001
  })}`);
39696
40002
  case "versions.get":
39697
40003
  return get(`/developer/agents/${id2}/versions/${encodeURIComponent(String(args2.version))}`);
@@ -40566,10 +40872,32 @@ function createWorkflowsRuntime(getApi) {
40566
40872
  assertBoundAgent(api, agentId2, "goals.close");
40567
40873
  return unwrap(await api.closeGoal(goalId, opts), "Workflows.goals.close");
40568
40874
  }
40875
+ },
40876
+ // Lua Apps — off the platform (`lua apps dev`, `lua test webapp`) a route runs as you, so the viewer IS the
40877
+ // CLI's own credential; on the platform the sandbox global routes these through the gateway-sealed viewer.
40878
+ viewer: {
40879
+ async decideApproval(runId, approvalId, decision) {
40880
+ const api = viewerApi(await getApi(), decision.agentId);
40881
+ return unwrap(await api.resolveApproval(runId, approvalId, {
40882
+ decision: decision.decision,
40883
+ ...decision.note !== void 0 ? {
40884
+ note: decision.note
40885
+ } : {},
40886
+ ...decision.expectedFingerprint !== void 0 ? {
40887
+ expectedFingerprint: decision.expectedFingerprint
40888
+ } : {}
40889
+ }), "Workflows.viewer.decideApproval");
40890
+ },
40891
+ async resume(runId, stepId, resumeData, opts = {}) {
40892
+ const api = viewerApi(await getApi(), opts.agentId);
40893
+ return unwrap(await api.resumeRun(runId, stepId, {
40894
+ resumeData
40895
+ }), "Workflows.viewer.resume");
40896
+ }
40569
40897
  }
40570
40898
  };
40571
40899
  }
40572
- var WORKFLOW_START_MAX_WAIT_SECONDS, WORKFLOW_START_CLIENT_DEADLINE_SLACK_MS, CONTROL_UNAVAILABLE_HINT, WorkflowApiError, WORKFLOWS_RUNTIME_MEMBERS, unwrap, isWorkflowIdShaped, assertBoundAgent, pathId, WorkflowApi;
40900
+ var WORKFLOW_START_MAX_WAIT_SECONDS, WORKFLOW_START_CLIENT_DEADLINE_SLACK_MS, CONTROL_UNAVAILABLE_HINT, WorkflowApiError, WORKFLOWS_RUNTIME_MEMBERS, unwrap, isWorkflowIdShaped, viewerApi, assertBoundAgent, pathId, WorkflowApi;
40573
40901
  var init_workflow_api_service = __esm({
40574
40902
  "src/api/workflow.api.service.ts"() {
40575
40903
  "use strict";
@@ -40616,6 +40944,7 @@ var init_workflow_api_service = __esm({
40616
40944
  return res.data;
40617
40945
  }, "unwrap");
40618
40946
  isWorkflowIdShaped = /* @__PURE__ */ __name((v) => /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(v) || /^wfc?_[A-Za-z0-9]/.test(v), "isWorkflowIdShaped");
40947
+ viewerApi = /* @__PURE__ */ __name((api, agentId2) => agentId2 && agentId2 !== api.agentId ? api.forAgent(agentId2) : api, "viewerApi");
40619
40948
  assertBoundAgent = /* @__PURE__ */ __name((api, agentId2, member) => {
40620
40949
  if (agentId2 && agentId2 !== api.agentId) {
40621
40950
  throw new WorkflowApiError("FORBIDDEN", `Workflows.${member}: goals are scoped to the bound agent ${api.agentId}`, 403);
@@ -40623,7 +40952,7 @@ var init_workflow_api_service = __esm({
40623
40952
  }, "assertBoundAgent");
40624
40953
  pathId = /* @__PURE__ */ __name((id2) => encodeURIComponent(id2), "pathId");
40625
40954
  __name(createWorkflowsRuntime, "createWorkflowsRuntime");
40626
- WorkflowApi = class extends HttpClient {
40955
+ WorkflowApi = class _WorkflowApi extends HttpClient {
40627
40956
  static {
40628
40957
  __name(this, "WorkflowApi");
40629
40958
  }
@@ -40634,6 +40963,10 @@ var init_workflow_api_service = __esm({
40634
40963
  this.credential = credential;
40635
40964
  this.agentId = agentId2;
40636
40965
  }
40966
+ /** The same client and credential, bound to another agent's workflow tree (`Workflows.viewer` with `agentId`). */
40967
+ forAgent(agentId2) {
40968
+ return new _WorkflowApi(this.baseUrl, this.credential, agentId2);
40969
+ }
40637
40970
  /** PRO-1434 (main sync): auth rides the renewable request credential — resolve a current bearer per call. */
40638
40971
  async auth() {
40639
40972
  return {
@@ -48598,7 +48931,20 @@ function buildSupervisionAgentsApi(call2) {
48598
48931
  secrets: /* @__PURE__ */ __name10((agentId2) => ({
48599
48932
  attach: /* @__PURE__ */ __name10((requestIds) => call2("secrets.attach", agentId2, {
48600
48933
  requestIds: copyList(requestIds)
48601
- }), "attach")
48934
+ }), "attach"),
48935
+ /**
48936
+ * SW — write ONE secret row into `agentId`'s own Data: the row of `collection` whose `_pk` is `key`, replaced
48937
+ * whole by `value` (flat: string / number / boolean / null fields), created when absent. Needs `act` and the
48938
+ * collection in the grant's `secretWriteCollections`. Answers `{ ok, id, fingerprint }`, never the value; call it
48939
+ * from code (a workflow step, a job), so the secret never passes through a model.
48940
+ */
48941
+ put: /* @__PURE__ */ __name10((collection, key, value3) => call2("secrets.put", agentId2, {
48942
+ collection,
48943
+ key,
48944
+ value: value3 && typeof value3 === "object" && !Array.isArray(value3) ? {
48945
+ ...value3
48946
+ } : value3
48947
+ }), "put")
48602
48948
  }), "secrets")
48603
48949
  };
48604
48950
  }
@@ -53085,6 +53431,7 @@ __name(printToolOutput, "printToolOutput");
53085
53431
 
53086
53432
  // src/commands/test.ts
53087
53433
  init_cli();
53434
+ init_write_info();
53088
53435
  init_command_utils();
53089
53436
 
53090
53437
  // src/utils/web-app-route.ts
@@ -53703,6 +54050,12 @@ var ALIAS_MAP = {
53703
54050
  ],
53704
54051
  aliases: lowerKeys({
53705
54052
  skills: "skill",
54053
+ // Lua Apps: a web app's route executions are logged as `web-route`.
54054
+ webapp: "web-route",
54055
+ webapps: "web-route",
54056
+ "web-app": "web-route",
54057
+ "web-apps": "web-route",
54058
+ "web-routes": "web-route",
53706
54059
  jobs: "job",
53707
54060
  webhooks: "webhook",
53708
54061
  preprocessors: "preprocessor",
@@ -55821,7 +56174,7 @@ async function selectEntityOrPrompt(options) {
55821
56174
  __name(selectEntityOrPrompt, "selectEntityOrPrompt");
55822
56175
  function progress(asJson, message) {
55823
56176
  if (asJson) {
55824
- process.stderr.write("\r\x1B[K" + message + "\n");
56177
+ process.stderr.write(clearLineFor(process.stderr) + message + "\n");
55825
56178
  } else {
55826
56179
  writeProgress(message);
55827
56180
  }
@@ -55829,7 +56182,7 @@ function progress(asJson, message) {
55829
56182
  __name(progress, "progress");
55830
56183
  function success(asJson, message) {
55831
56184
  if (asJson) {
55832
- process.stderr.write("\r\x1B[K" + message + "\n");
56185
+ process.stderr.write(clearLineFor(process.stderr) + message + "\n");
55833
56186
  } else {
55834
56187
  writeSuccess(message);
55835
56188
  }
@@ -59832,19 +60185,19 @@ init_cli();
59832
60185
  init_constants();
59833
60186
  import { readFileSync as readFileSync12, writeFileSync as writeFileSync9, mkdirSync as mkdirSync7 } from "fs";
59834
60187
  import { dirname as dirname6 } from "path";
59835
- function isPlainObject4(value3) {
60188
+ function isPlainObject5(value3) {
59836
60189
  return typeof value3 === "object" && value3 !== null && !Array.isArray(value3);
59837
60190
  }
59838
- __name(isPlainObject4, "isPlainObject");
60191
+ __name(isPlainObject5, "isPlainObject");
59839
60192
  function readStore2() {
59840
60193
  try {
59841
60194
  const raw = readFileSync12(SANDBOX_STORAGE_FILE, "utf8");
59842
60195
  const parsed = JSON.parse(raw);
59843
60196
  return {
59844
- skillsById: isPlainObject4(parsed.skillsById) ? parsed.skillsById : {},
59845
- preprocessorsById: isPlainObject4(parsed.preprocessorsById) ? parsed.preprocessorsById : {},
59846
- postprocessorsById: isPlainObject4(parsed.postprocessorsById) ? parsed.postprocessorsById : {},
59847
- devicesById: isPlainObject4(parsed.devicesById) ? parsed.devicesById : {}
60197
+ skillsById: isPlainObject5(parsed.skillsById) ? parsed.skillsById : {},
60198
+ preprocessorsById: isPlainObject5(parsed.preprocessorsById) ? parsed.preprocessorsById : {},
60199
+ postprocessorsById: isPlainObject5(parsed.postprocessorsById) ? parsed.postprocessorsById : {},
60200
+ devicesById: isPlainObject5(parsed.devicesById) ? parsed.devicesById : {}
59848
60201
  };
59849
60202
  } catch {
59850
60203
  return {
@@ -65312,7 +65665,9 @@ var ENTITY_SOURCES = /* @__PURE__ */ new Set([
65312
65665
  "webhook",
65313
65666
  "preprocessor",
65314
65667
  "postprocessor",
65315
- "device"
65668
+ "device",
65669
+ // Lua Apps: route executions, one entity per web app (`--type webapp --name <app>`).
65670
+ "web-route"
65316
65671
  ]);
65317
65672
  var NON_ENTITY_SOURCES = new Set(ALL_VALID_SOURCES.filter((s) => !ENTITY_SOURCES.has(s)));
65318
65673
  var FOLLOW_POLL_MS = 2e3;
@@ -65441,7 +65796,7 @@ function renderLogEntry(log, isLast) {
65441
65796
  const icon = getLogIcon(log.subType, logSource);
65442
65797
  const color = getLogColor(log.subType, logSource);
65443
65798
  console.log(color(`${icon} [${timestamp}] ${log.subType.toUpperCase()}`));
65444
- const capitalizedType = logSource ? capitalize(logSource) : "Item";
65799
+ const capitalizedType = logSource ? sourceLabel(logSource) : "Item";
65445
65800
  if (logSource === "user_message" || logSource === "agent_response" || logSource === "agent_error") {
65446
65801
  if (channel) {
65447
65802
  console.log(chalk2.gray(` Channel: ${channel}`));
@@ -65451,7 +65806,8 @@ function renderLogEntry(log, isLast) {
65451
65806
  }
65452
65807
  } else {
65453
65808
  if (primitiveName) {
65454
- console.log(chalk2.gray(` ${capitalizedType} Name: ${primitiveName}`));
65809
+ const label2 = logSource === "browser" ? "Called by" : `${capitalizedType} Name`;
65810
+ console.log(chalk2.gray(` ${label2}: ${primitiveName}`));
65455
65811
  }
65456
65812
  if (primitiveId) {
65457
65813
  console.log(chalk2.gray(` ${capitalizedType} ID: ${primitiveId}`));
@@ -65539,6 +65895,10 @@ async function fetchEntitiesByType(apiKey, agentId2, type) {
65539
65895
  const res = await new DeviceApi(BASE_URLS.API, apiKey, agentId2).getDevices();
65540
65896
  return res.data?.devices || [];
65541
65897
  }
65898
+ case "web-route": {
65899
+ const res = await new WebAppApi(BASE_URLS.API, apiKey, agentId2).getWebApps();
65900
+ return res.data?.webApps || [];
65901
+ }
65542
65902
  default:
65543
65903
  return [];
65544
65904
  }
@@ -65707,10 +66067,14 @@ async function nonInteractiveLogs(logsApi, agentId2, apiKey, options) {
65707
66067
  throw CliError.usage(`--name is not applicable for ${filters.logSource} type`, `Usage: lua logs --type ${filters.logSource} (no --name needed)`);
65708
66068
  }
65709
66069
  const entityId = await resolveEntityId(apiKey, agentId2, filters.logSource, options.name);
65710
- if (!entityId) {
65711
- throw CliError.notFound(`${capitalize(filters.logSource ?? "")} "${options.name}" not found`);
66070
+ if (entityId) {
66071
+ filters.primitiveId = entityId;
66072
+ } else if (filters.logSource === "web-route") {
66073
+ writeInfo(`\u2139\uFE0F No web app named "${options.name}" on the agent now; showing logs recorded under that name.`);
66074
+ filters.primitiveName = options.name;
66075
+ } else {
66076
+ throw CliError.notFound(`${sourceLabel(filters.logSource ?? "")} "${options.name}" not found`);
65712
66077
  }
65713
- filters.primitiveId = entityId;
65714
66078
  }
65715
66079
  if (options.userId) {
65716
66080
  filters.userId = options.userId;
@@ -65742,7 +66106,7 @@ async function nonInteractiveLogs(logsApi, agentId2, apiKey, options) {
65742
66106
  pagination: data.pagination
65743
66107
  }, null, 2));
65744
66108
  } else {
65745
- const typeLabel = options.type ? capitalize(options.type) : "All";
66109
+ const typeLabel = options.type ? sourceLabel(options.type) : "All";
65746
66110
  displayLogsCore(data.logs, data.pagination, `\u{1F4CA} ${typeLabel} Logs`);
65747
66111
  writeHintBlock({
65748
66112
  headline: "If you see errors:",
@@ -65829,6 +66193,10 @@ async function filterAndShowLogsInteractive(logsApi, agentId2, apiKey) {
65829
66193
  name: "Devices",
65830
66194
  value: "device"
65831
66195
  },
66196
+ {
66197
+ name: "Web Apps",
66198
+ value: "web-route"
66199
+ },
65832
66200
  new inquirer9.Separator(),
65833
66201
  {
65834
66202
  name: "\u{1F4AC} User Messages",
@@ -65893,10 +66261,10 @@ async function filterAndShowLogsInteractive(logsApi, agentId2, apiKey) {
65893
66261
  continue;
65894
66262
  }
65895
66263
  const entitySource = filterType;
65896
- const capitalizedType = capitalize(entitySource);
66264
+ const capitalizedType = sourceLabel(entitySource);
65897
66265
  const items = await fetchEntitiesByType(apiKey, agentId2, entitySource);
65898
66266
  if (items.length === 0) {
65899
- writeInfo(`\u2139\uFE0F No ${entitySource}s found for this agent.
66267
+ writeInfo(`\u2139\uFE0F No ${capitalizedType.toLowerCase()}s found for this agent.
65900
66268
  `);
65901
66269
  continue;
65902
66270
  }
@@ -65904,7 +66272,7 @@ async function filterAndShowLogsInteractive(logsApi, agentId2, apiKey) {
65904
66272
  {
65905
66273
  type: "list",
65906
66274
  name: "selectedId",
65907
- message: `Select a ${entitySource}:`,
66275
+ message: `Select a ${capitalizedType.toLowerCase()}:`,
65908
66276
  choices: [
65909
66277
  {
65910
66278
  name: `All ${capitalizedType}s`,
@@ -66031,6 +66399,10 @@ function capitalize(str3) {
66031
66399
  return str3.charAt(0).toUpperCase() + str3.slice(1);
66032
66400
  }
66033
66401
  __name(capitalize, "capitalize");
66402
+ function sourceLabel(source) {
66403
+ return source === "web-route" ? "Web app" : capitalize(source);
66404
+ }
66405
+ __name(sourceLabel, "sourceLabel");
66034
66406
  function getLogIcon(subType, logSource) {
66035
66407
  if (logSource === "user_message") {
66036
66408
  return "\u{1F4AC}";
@@ -72525,6 +72897,13 @@ function parseProvider2(raw) {
72525
72897
  return provider;
72526
72898
  }
72527
72899
  __name(parseProvider2, "parseProvider");
72900
+ function parseModel(raw) {
72901
+ if (raw === void 0) return void 0;
72902
+ const model = raw.trim();
72903
+ if (!model) throw CliError.usage("--model must name a model, such as jev-latest, gpt-6-luna or liquid/d1");
72904
+ return model;
72905
+ }
72906
+ __name(parseModel, "parseModel");
72528
72907
  function parseMinConfidence(raw) {
72529
72908
  if (raw === void 0) return void 0;
72530
72909
  const value3 = Number(raw);
@@ -72664,6 +73043,7 @@ async function runAction(api, name, options) {
72664
73043
  const decisionName = requireArg(name, "A decision name", "lua decisions run <name> --message '<text>'");
72665
73044
  const { state: state3, input } = parseState(options);
72666
73045
  const provider = parseProvider2(options.provider);
73046
+ const model = parseModel(options.model);
72667
73047
  const minConfidence = parseMinConfidence(options.minConfidence);
72668
73048
  const request2 = {
72669
73049
  name: decisionName,
@@ -72671,6 +73051,9 @@ async function runAction(api, name, options) {
72671
73051
  ...provider !== void 0 && {
72672
73052
  provider
72673
73053
  },
73054
+ ...model !== void 0 && {
73055
+ model
73056
+ },
72674
73057
  ...minConfidence !== void 0 && {
72675
73058
  minConfidence
72676
73059
  }
@@ -72679,6 +73062,7 @@ async function runAction(api, name, options) {
72679
73062
  trackEvent("cli_decisions_run", {
72680
73063
  input,
72681
73064
  provider: result.provider,
73065
+ model: model !== void 0,
72682
73066
  rule: result.rule,
72683
73067
  fallback: !!result.fallback,
72684
73068
  cached: result.cached,
@@ -89482,14 +89866,29 @@ var REFUSAL_HINTS = {
89482
89866
  BROWSER_CLI_CONCURRENCY: "Wait for a run to finish, or press Ctrl-C on it to cancel it.",
89483
89867
  BROWSER_CLI_LIMITER_UNAVAILABLE: "Try again in a minute."
89484
89868
  };
89869
+ var BROWSER_RUN_MAX_STEPS = 60;
89870
+ var BROWSER_RUN_MIN_COST_USD = 0.01;
89871
+ var BROWSER_RUN_MAX_COST_USD = 10;
89485
89872
  function parseEnvironment2(raw) {
89486
89873
  if (raw === void 0) return "sandbox";
89487
89874
  const env = raw.toLowerCase();
89488
- if (env === "sandbox" || env === "staging") return "sandbox";
89489
- if (env === "production") return "production";
89490
- throw CliError.usage(`-e must be sandbox, staging or production (got '${raw}')`);
89875
+ if (env === "sandbox" || env === "production") return env;
89876
+ throw CliError.usage(`-e must be sandbox or production (got '${raw}')`, "Log rows are tagged sandbox or production.");
89491
89877
  }
89492
89878
  __name(parseEnvironment2, "parseEnvironment");
89879
+ function parseWebUrl(raw, flag) {
89880
+ let parsed;
89881
+ try {
89882
+ parsed = new URL(raw.trim());
89883
+ } catch {
89884
+ throw CliError.usage(`${flag} must be a full web address like https://example.com (got '${raw}')`);
89885
+ }
89886
+ if (parsed.protocol !== "http:" && parsed.protocol !== "https:") {
89887
+ throw CliError.usage(`${flag} must start with http:// or https:// (got '${raw}')`);
89888
+ }
89889
+ return raw.trim();
89890
+ }
89891
+ __name(parseWebUrl, "parseWebUrl");
89493
89892
  function parseReadFormat(raw) {
89494
89893
  if (raw === void 0) return void 0;
89495
89894
  const format = BROWSER_READ_FORMATS2.find((f) => f === raw);
@@ -89510,12 +89909,20 @@ function parseMaxCost(raw) {
89510
89909
  if (raw === void 0) return void 0;
89511
89910
  const amount = raw.trim().replace(/^\$/, "");
89512
89911
  const n2 = Number(amount);
89513
- if (!/^(\d+(\.\d+)?|\.\d+)$/.test(amount) || n2 <= 0) {
89514
- throw CliError.usage(`--max-cost must be an amount in USD above 0, like 0.50 (got '${raw}')`);
89912
+ if (!/^(\d+(\.\d+)?|\.\d+)$/.test(amount) || n2 < BROWSER_RUN_MIN_COST_USD || n2 > BROWSER_RUN_MAX_COST_USD) {
89913
+ throw CliError.usage(`--max-cost must be an amount in USD from ${BROWSER_RUN_MIN_COST_USD} to ${BROWSER_RUN_MAX_COST_USD}, like 0.50 (got '${raw}')`);
89515
89914
  }
89516
89915
  return n2;
89517
89916
  }
89518
89917
  __name(parseMaxCost, "parseMaxCost");
89918
+ function parseMaxSteps(raw) {
89919
+ const n2 = parsePositiveInt(raw, "--max-steps");
89920
+ if (n2 !== void 0 && n2 > BROWSER_RUN_MAX_STEPS) {
89921
+ throw CliError.usage(`--max-steps must be ${BROWSER_RUN_MAX_STEPS} or less (got '${raw}')`);
89922
+ }
89923
+ return n2;
89924
+ }
89925
+ __name(parseMaxSteps, "parseMaxSteps");
89519
89926
  function readSchemaFile(path32, read = readUtf8) {
89520
89927
  if (path32 === void 0) return void 0;
89521
89928
  let text2;
@@ -89548,6 +89955,7 @@ function readResultLines(output) {
89548
89955
  ];
89549
89956
  if (data.url && data.finalUrl && data.url !== data.finalUrl) lines.push(`Requested: ${data.url}`);
89550
89957
  if (typeof data.status === "number" && data.status !== 200) lines.push(`Status: HTTP ${data.status}`);
89958
+ if (typeof data.matches === "number") lines.push(`Matches: ${data.matches}`);
89551
89959
  lines.push(`Engine: ${output.engine}`, ...blockedLines(data), "", data.content ?? "");
89552
89960
  if (data.truncated) lines.push("", "(content was cut short)");
89553
89961
  return lines;
@@ -89616,7 +90024,7 @@ async function guarded(agentId2, call2) {
89616
90024
  try {
89617
90025
  return await call2();
89618
90026
  } catch (error) {
89619
- if (!isAccessDeniedError(error)) throw error;
90027
+ if (!isAccessDeniedError(error) || isEdgeBlockedError(error)) throw error;
89620
90028
  throw CliError.forbidden(`Your API key can't run the browser for agent ${agentId2}.`, "It needs agents:write on that agent. Check the agent id, or run `lua auth configure` with a key for it.");
89621
90029
  }
89622
90030
  }
@@ -89656,8 +90064,9 @@ function logsHint() {
89656
90064
  __name(logsHint, "logsHint");
89657
90065
  async function runBrowserRead(ctx, url, options) {
89658
90066
  const format = parseReadFormat(options.format);
90067
+ const target = parseWebUrl(url, "The URL");
89659
90068
  const output = unwrap5(await guarded(ctx.agentId, () => ctx.api.read({
89660
- url,
90069
+ url: target,
89661
90070
  environment: ctx.environment,
89662
90071
  ...options.selector ? {
89663
90072
  selector: options.selector
@@ -89719,22 +90128,31 @@ async function followBrowserRun(api, first, signal, out, startedAt = Date.now())
89719
90128
  return view;
89720
90129
  }
89721
90130
  __name(followBrowserRun, "followBrowserRun");
89722
- async function runBrowserTask(ctx, task, options, out = {
89723
- write: /* @__PURE__ */ __name((line) => console.log(line), "write"),
89724
- progress: writeProgress
89725
- }) {
90131
+ function terminalRunOutput(stderr = process.stderr) {
90132
+ return {
90133
+ write: /* @__PURE__ */ __name((line) => {
90134
+ if (stderr.isTTY) stderr.write("\r\x1B[K");
90135
+ console.log(line);
90136
+ }, "write"),
90137
+ progress: /* @__PURE__ */ __name((line) => {
90138
+ if (stderr.isTTY) writeProgress(line);
90139
+ }, "progress")
90140
+ };
90141
+ }
90142
+ __name(terminalRunOutput, "terminalRunOutput");
90143
+ async function runBrowserTask(ctx, task, options, out = terminalRunOutput()) {
89726
90144
  if (!task.trim()) throw CliError.usage("A task is required", 'Usage: lua browser run "<task>"');
89727
90145
  const body = {
89728
90146
  task,
89729
90147
  environment: ctx.environment,
89730
90148
  ...options.startUrl ? {
89731
- startUrl: options.startUrl
90149
+ startUrl: parseWebUrl(options.startUrl, "--start-url")
89732
90150
  } : {},
89733
90151
  ...options.schema ? {
89734
90152
  schema: readSchemaFile(options.schema)
89735
90153
  } : {},
89736
90154
  ...options.maxSteps !== void 0 ? {
89737
- maxSteps: parsePositiveInt(options.maxSteps, "--max-steps")
90155
+ maxSteps: parseMaxSteps(options.maxSteps)
89738
90156
  } : {},
89739
90157
  ...options.maxCost !== void 0 ? {
89740
90158
  maxCostUsd: parseMaxCost(options.maxCost)
@@ -90211,6 +90629,8 @@ Examples:
90211
90629
  $ lua logs --type skill --name mySkill --limit 10 Skill-specific logs
90212
90630
  $ lua logs --type job --name healthCheck --json JSON output for CI
90213
90631
  $ lua logs --type mcp View MCP tool execution logs
90632
+ $ lua logs --type webapp --name ops-dashboard A web app's route runs (console output, errors)
90633
+ $ lua logs --execution-id <id> One route call (the id is in X-Lua-Execution-Id)
90214
90634
  $ lua logs --user-id user-123 View all logs for a user
90215
90635
  $ lua logs --user-id user-123 --json > user-logs.json Export user logs
90216
90636
  $ lua logs --channel integration:lua_crm Isolate one integration's wake-up turns
@@ -90392,7 +90812,7 @@ Examples:
90392
90812
  $ lua jobs versions -i myJob View job versions
90393
90813
  $ lua jobs history -i myJob View execution history
90394
90814
  `).action(jobsCommand);
90395
- program2.command("decisions [action] [name] [version]").description("\u{1F9ED} See, try and roll back named decisions (list, versions, publish, run, delete)").option("--json", "Machine-readable output (list, versions, run)").option("--force", "Skip the confirmation (publish, delete)").option("--state <json>", "run: the state to decide on, as JSON").option("--message <text>", "run: a message to decide on, sent as { message: <text> }").option("--provider <provider>", "run: jev, openai or auto").option("--min-confidence <n>", "run: below this confidence an answer is marked uncertain (0 to 1)").addHelpText("after", `
90815
+ program2.command("decisions [action] [name] [version]").description("\u{1F9ED} See, try and roll back named decisions (list, versions, publish, run, delete)").option("--json", "Machine-readable output (list, versions, run)").option("--force", "Skip the confirmation (publish, delete)").option("--state <json>", "run: the state to decide on, as JSON").option("--message <text>", "run: a message to decide on, sent as { message: <text> }").option("--provider <provider>", "run: jev, openai, openrouter or auto").option("--model <id>", "run: the model to answer with; an OpenRouter id such as liquid/d1 pins openrouter").option("--min-confidence <n>", "run: below this confidence an answer is marked uncertain (0 to 1)").addHelpText("after", `
90396
90816
  Arguments:
90397
90817
  action Optional: list (default), versions, publish, run, delete
90398
90818
  name The decision's name