lua-cli 3.43.0 → 3.45.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.
@@ -162,6 +162,106 @@ function supervisionSubjectId(agentId) {
162
162
  function isSupervisionOp(op) {
163
163
  return typeof op === "string" && Object.prototype.hasOwnProperty.call(SUPERVISION_OPS, op);
164
164
  }
165
+ function isSupervisionWatchdogOp(op) {
166
+ return typeof op === "string" && Object.prototype.hasOwnProperty.call(SUPERVISION_WATCHDOG_OPS, op);
167
+ }
168
+ function isSupervisionRollbackRefusalReason(v) {
169
+ return typeof v === "string" && Object.prototype.hasOwnProperty.call(SUPERVISION_ROLLBACK_REFUSAL_CODES, v);
170
+ }
171
+ function supervisionRollbackTargetRefusal(target, expectActive, window) {
172
+ if (target.status !== "superseded" || !target.promotedAt || target.compensationFailed === true) {
173
+ return {
174
+ reason: "never_active",
175
+ message: `Version ${target.version} was never fully the active version (status ${target.status ?? "unknown"})`
176
+ };
177
+ }
178
+ if (typeof expectActive !== "number" || !(target.version < expectActive)) {
179
+ return {
180
+ reason: "not_older",
181
+ message: `Version ${target.version} is not older than the active version ${expectActive ?? "none"}`
182
+ };
183
+ }
184
+ if (window) {
185
+ if (target.supersededVia === "rollback" || target.promotedVia === "rollback") {
186
+ return {
187
+ reason: "after_rollback",
188
+ message: `Version ${target.version} was retired or restored by a rollback`
189
+ };
190
+ }
191
+ if (target.supersededVia !== "promote" && target.supersededVia !== "scoped") {
192
+ return {
193
+ reason: "not_in_lineage",
194
+ message: `Version ${target.version} has no forward-promote history`
195
+ };
196
+ }
197
+ const ended = target.supersededAt ? new Date(target.supersededAt).getTime() : NaN;
198
+ if (!Number.isFinite(ended) || ended < window.now - window.windowMs) {
199
+ return {
200
+ reason: "too_old",
201
+ message: `Version ${target.version} was last active outside the ${Math.round(window.windowMs / 864e5)}-day window`
202
+ };
203
+ }
204
+ }
205
+ return null;
206
+ }
207
+ function supervisionRollbackRefusal(input) {
208
+ const { target, active, lineage, expectActive, windowMs, now } = input;
209
+ const pre = supervisionRollbackTargetRefusal(target, expectActive);
210
+ if (pre) return pre;
211
+ if (!active || active.version !== expectActive) {
212
+ return {
213
+ reason: "not_older",
214
+ message: `Version ${expectActive ?? "none"} is not the active version`
215
+ };
216
+ }
217
+ if (active.promotedVia === "rollback") {
218
+ return {
219
+ reason: "after_rollback",
220
+ message: `The active version ${active.version} was restored by a rollback; a watchdog does not roll back twice in a row`
221
+ };
222
+ }
223
+ let previous = active;
224
+ for (const step3 of lineage.slice(0, SUPERVISION_ROLLBACK_LINEAGE_MAX)) {
225
+ const label = `version ${step3.version}`;
226
+ if (step3.supersededVia === "rollback" || step3.promotedVia === "rollback") {
227
+ return {
228
+ reason: "after_rollback",
229
+ message: `The rollback lineage crosses ${label}, which a rollback retired or restored`
230
+ };
231
+ }
232
+ if (step3.supersededVia !== "promote" && step3.supersededVia !== "scoped") {
233
+ return {
234
+ reason: "not_in_lineage",
235
+ message: `The rollback lineage stops at ${label} (no forward-promote history)`
236
+ };
237
+ }
238
+ if (step3.compensationFailed === true || step3.status !== "superseded" || !step3.promotedAt) {
239
+ return {
240
+ reason: "not_in_lineage",
241
+ message: `The rollback lineage stops at ${label} (not fully served)`
242
+ };
243
+ }
244
+ if (!(step3.version < previous.version)) {
245
+ return {
246
+ reason: "after_backward_promote",
247
+ message: `Version ${previous.version} was promoted BACK over ${label}; a watchdog never reaches behind that`
248
+ };
249
+ }
250
+ const ended = step3.supersededAt ? new Date(step3.supersededAt).getTime() : NaN;
251
+ if (!Number.isFinite(ended) || ended < now - windowMs) {
252
+ return {
253
+ reason: "too_old",
254
+ message: `The rollback lineage reaches ${label}, last active outside the ${Math.round(windowMs / 864e5)}-day window`
255
+ };
256
+ }
257
+ if (step3.version === target.version && (!target.id || !step3.id || step3.id === target.id)) return null;
258
+ previous = step3;
259
+ }
260
+ return {
261
+ reason: "not_in_lineage",
262
+ message: `Version ${target.version} is not in the active version's recent forward-promote lineage`
263
+ };
264
+ }
165
265
  function isUntargetedSupervisionOp(op) {
166
266
  return typeof op === "string" && SUPERVISION_UNTARGETED_OPS.includes(op);
167
267
  }
@@ -2462,6 +2562,19 @@ function resolveSlackReactionName(value3) {
2462
2562
  }
2463
2563
  return slackEmojiName(trimmed);
2464
2564
  }
2565
+ function threadScopingSetting(type) {
2566
+ const noun = THREAD_SCOPING_NOUN[type];
2567
+ return {
2568
+ key: `${type}.threadScoping`,
2569
+ group: "conversations",
2570
+ label: `One conversation per ${noun}`,
2571
+ help: `Each ${noun} is its own conversation with its own history.`,
2572
+ effect: "Off: every message from the same person shares one conversation.",
2573
+ type: "boolean",
2574
+ default: false,
2575
+ confirm: "Changing this starts fresh conversations for ones that are already open. Earlier history isn't carried over."
2576
+ };
2577
+ }
2465
2578
  function takeoverSettings(type) {
2466
2579
  const variants = type === "email" ? [
2467
2580
  "ses"
@@ -2817,13 +2930,13 @@ function channelSettingsGroups(channel, config) {
2817
2930
  const groups = [];
2818
2931
  for (const def of channelSettingDefinitions(channel, config)) {
2819
2932
  const { tunableDefault: _tunable, ...shown } = def;
2820
- const unavailable3 = channelSettingUnavailable(channel, def);
2933
+ const unavailable2 = channelSettingUnavailable(channel, def);
2821
2934
  const view = {
2822
2935
  ...shown,
2823
2936
  ...effectiveChannelSetting(channel, def),
2824
2937
  resettable: channelSettingResettable(def),
2825
- ...unavailable3 && {
2826
- unavailable: unavailable3
2938
+ ...unavailable2 && {
2939
+ unavailable: unavailable2
2827
2940
  }
2828
2941
  };
2829
2942
  const group = groups.find((candidate) => candidate.key === def.group);
@@ -4435,6 +4548,9 @@ function workflowOccurrenceId(lineageId, stepId) {
4435
4548
  function workflowOrgSlotKey(orgId, kind) {
4436
4549
  return `wf:org:${orgId}:${kind}`;
4437
4550
  }
4551
+ function isWorkflowAgentAppConnectionId(id2) {
4552
+ return typeof id2 === "string" && id2.startsWith(WORKFLOW_AGENT_APP_CONNECTION_PREFIX) && /^[A-Za-z0-9_-]{1,128}$/.test(id2);
4553
+ }
4438
4554
  function workflowJobModelSourceLabel(source) {
4439
4555
  return WORKFLOW_JOB_MODEL_SOURCE_LABELS[source];
4440
4556
  }
@@ -5990,7 +6106,7 @@ function isPaymentRequiredChatErrorEnvelope(data) {
5990
6106
  if (d.type !== "error") return false;
5991
6107
  return d.textDelta === BILLING_REJECTION_TEXT_CREDITS || d.textDelta === BILLING_REJECTION_TEXT_SEAT || d.textDelta === BILLING_REJECTION_TEXT_USER_QUOTA;
5992
6108
  }
5993
- var __defProp3, __name3, PLUMBING_THREAD_CHANNELS, CHANNEL_CONVERSATION_CHANNELS, HIDDEN_THREAD_CHANNELS, CHOICE_PERSON_TURN_CHANNELS, CHOICE_REPLAY_CLIENT_CAPABILITIES, CHOICE_REPLAY_CLIENT_SURFACES, INTEGRATION_PASSTHROUGH_READ_METHODS, URL_REINTERPRETED_PATH_CHARACTERS, PERCENT_ENCODED_DOT, PERCENT_ESCAPE, DECODED_PATH_SEPARATORS, DECODED_LEADING_SEPARATOR, MAX_PERCENT_DECODE_ROUNDS, URL_RESOLUTION_PROBE_BASE, PLATFORM_INVOCATION_CALLERS, SUPERVISION_OPS, SUPERVISION_OPS_WAVE2, SUPERVISION_UNTARGETED_OPS, SUPERVISED_WORKFLOW_VERSIONS_MAX, SUPERVISION_EVENT_KINDS, AGENT_PROVISIONING_LIMITS, AGENT_PROVISIONING_APPROVAL_PAYLOAD_KEY, AGENT_PROVISIONING_ERRORS, PROVISIONED_SUPERVISION_ACTIONS, isNonEmptyString, uniqueStrings, sameSet, AGENT_PROVISIONING_APPROVAL_CARD_MAX_CHARS, APPROVAL_PAYLOAD_MEMBERS, AGENT_CONNECTION_POLICIES, AGENT_CONNECTION_POLICY_DEFAULT, AGENT_CONNECTION_MOUNT_MODES, AGENT_CONNECTION_GOVERNANCE_ERRORS, AGENT_CONNECTION_OPERATION_RULES_MAX, AGENT_CONNECTION_OPERATION_PATTERN_MAX_LENGTH, OPERATION_RULE_METHODS, PATH_SEPARATOR, PATH_SINGLE_SEGMENT_WILDCARD, PATH_REST_WILDCARD, METHOD_OVERRIDE_HEADER_NAMES, METHOD_OVERRIDE_QUERY_NAMES, ODATA_BATCH_SEGMENT, GOOGLE_BATCH_FIRST_SEGMENT, CONNECTION_CHECK_RESULTS, CONNECTION_CHECK_CATALOGUE_V1, CONNECTION_CHECK_NAME_PATTERN, CONNECTION_CHECK_NAME_MAX, CONNECT_OUTCOME_STATUSES, SECRET_TEST_RESULTS, SECRET_DATADOG_REGIONS, SECRET_PROVIDER_CATALOGUE_V1, SECRET_TEST_MAX_RESPONSE_BYTES, SECRET_ENV_KEY_PATTERN, SECRET_REQUEST_ERRORS, SECRET_OUTCOME_STATUSES, CLIENT_OUTCOME_TURNS_MAX, SHORT_TEXT_MAX, SLUG_MAX, shortText, optionalShortText, CONNECTION_REQUEST_TERMINAL_STATES, CONNECTION_USE_ORIGINS, AGENT_CONNECTION_OPERATION_LIMITS_BOUNDS, CURRENCY_CODE, LIMITS_KEYS, CAPS_KEYS, EXCLUSIONS_KEYS, EMAIL_IN_TEXT, MAX_EXCLUSION_DEPTH, PROJECTION_PARAMETER_KEYS, CHANNEL_PARAMETER_KEYS, GMAIL_SYSTEM_LABEL_IDS, ZERO_DECIMAL_CURRENCIES, THREE_DECIMAL_CURRENCIES, DECIMAL_AMOUNT, REDACTED_PLACEHOLDER, PROVIDER_MESSAGE_MAX_CHARS, ERROR_MESSAGE_MAX_CHARS, SECRET_LITERAL_PATTERNS, SECRET_NAME, SECRET_PAIR_PATTERNS, GROUP_COUNT, WORKFLOW_SECRET_KEY_RE, WORKFLOW_RESERVED_SECRET_KEYS, SCRUB_INPUT_MAX_CHARS, SCRUB_CUT_BACKOFF_CHARS, TEST_SESSION_ID_PATTERN, TEST_SESSION_COLLECTION_PREFIX, TEST_EFFECT_BODY_MAX_BYTES, TEST_EFFECT_DROPPED_HEADERS, EVAL_CREDITS_PER_1K_TOKENS, EVAL_RESERVED_TOOL_ID_PREFIXES, CONNECTION_HANDOVER_APPROVAL_PAYLOAD_KEY, CONNECTION_HANDOVER_APPROVAL_CARD_MAX_CHARS, CONNECTION_HANDOVER_LIMITS, MEMBERS, FORMAT_CHARS, oneLine, boundedString, AGENT_METRIC_NAME_PATTERN, AGENT_METRIC_LIMITS, AGENT_OBJECTIVE_ERRORS, CHANGE_LEASE_TTL_MINUTES_MIN, CHANGE_LEASE_TTL_MINUTES_MAX, CHANGE_LEASE_REASON_MAX, CHANGE_LEASE_ERRORS, AGENT_CONFIG_SET_LIMITS, SECRET_ENV_KEY_SUFFIXES, DEFAULT_OWNER_DEPARTURE_POLICY, AGENT_LIFECYCLE_ERRORS, USER_COST_COUNTER_TTL_SECONDS, USER_COST_ATTRIBUTION_CHANNELS, CALLER_DEDUPE_KEY_MAX, FOLLOW_UP_IDEMPOTENCY_TTL_SECONDS, THREAD_FOLLOW_UP_LIMITS, THREAD_FOLLOW_UP_ERRORS, PROGRESS_UPDATE_LIMITS, PAUSABLE_CAPABILITY_KINDS, UNIFIED_CATCH_UP_MAX_WINDOW_HOURS, UNIFIED_CATCH_UP_EVENTS, UNIFIED_CATCH_UP_FILTERABLE_OBJECT_TYPES, AGENT_NEVER_RULES_MAX, AGENT_NEVER_RULE_FIELD_MAX, AGENT_NEVER_RULE_INPUT_MATCH_MAX, NEVER_RULE_ID_PATTERN, NEVER_RULE_HTTP_METHODS, TEMPLATE_DISTRIBUTION_MODES, CHANNEL_SEND_CHANNELS, TAKEOVER_MAX_IDLE_MINUTES, MINUTES_PER_DAY, DEFAULT_IDLE_RELEASE_MINUTES, FALLBACK_IDLE_RELEASE_MINUTES, VARIATION_SELECTORS, SLACK_EMOJI_NAMES, SLACK_SHORTCODE, PLAIN_EMAIL_ADDRESS, DOMAIN, UNSAFE_TEXT, SLACK_CONVERSATION_ID, CHANNEL_SETTING_GROUPS, 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, BROWSER_COMMANDS, BROWSER_COMMAND_NAMES, LOG_FIELDS_MAX_KEYS, LOG_FIELD_MAX_VALUE_BYTES, LOG_FIELDS_MAX_BYTES, LOG_FIELD_KEY_PATTERN, LOG_FIELD_SECRET_SHAPED_KEY_PATTERNS, LOG_FIELDS_CLAMPED_KEY, LOG_FIELD_ARRAY_COUNT_SUFFIX, LuaLogFieldsError, DESKTOP_FILE_COMMANDS, DESKTOP_FILE_COMMAND_SET, WORKFLOW_RETRY_BACKOFFS, WORKFLOW_RETRY_MIN_ATTEMPTS, WORKFLOW_RETRY_POLICY_KEYS, WORKFLOW_RETRY_MAX_ATTEMPTS, WORKFLOW_RETRY_ENGINE_KEYS, WORKFLOW_JOB_RESOURCES, WORKFLOW_SIDE_EFFECTS, WORKFLOW_MODEL_CLASSES, WORKFLOW_DEFAULT_TASK_CLASS_MAP, WORKFLOW_MODELS_MAX_CLASS_DEFAULT, WORKFLOW_AUTONOMY_NUMERIC_KEYS, WORKFLOW_AUTONOMY_ENVELOPE_KEYS, WORKFLOW_AUTONOMY_DEFAULTS, WORKFLOW_AUTONOMY_CEILINGS, WORKFLOW_AUTONOMY_MAX_RUNS_PER_HOUR_ENV, WORKFLOW_AUTONOMY_MAX_RUNS_PER_HOUR_CEILING, WORKFLOW_AUTONOMY_FORMS_DEFAULT, WORKFLOW_AUTONOMY_MIN_VALUE, WORKFLOW_JOB_RANGES, WORKFLOW_JOB_RANGE_MEMBERS, WORKFLOW_SINGLE_STEP_TYPES, WORKFLOW_HITL_ENTRY_TYPES, WORKFLOW_ARM_ENTRY_TYPES, WORKFLOW_HITL_ARM_CONTAINERS, WORKFLOW_GRAPH_ENTRY_STEP_KINDS, WORKFLOW_ARM_ENTRY_STEP_KINDS, WORKFLOW_BUDGET_MAX_DURATION_SECONDS, MODEL_ID_BYOK_PROVIDERS, MODEL_CLASS_REF_PREFIX, MODEL_SNAPSHOT_SUFFIX, REASONING_EFFORT_VALUES, IMPLICIT_MODEL_SELECTION_SOURCES, PLATFORM_FALLBACK_MODEL_SOURCE, AGENT_NAME_TOKEN, DEFAULT_PERSONA_GUIDE, PERSONAL_SPACE_STARTING_PERSONA, AGENT_LOG_SOURCES, AGENT_LOG_FIELDS_MAX_WIRE_KEYS, LOG_DRAIN_TYPES_PHASE1, LOG_DRAIN_TYPES_PHASE2, LOG_DRAIN_TYPES_IMPLEMENTED, LOG_DRAIN_SOURCES, LOG_DRAIN_MAX_PER_ORG, LOG_DRAIN_MAX_PER_ORG_ENTERPRISE, LOG_DRAIN_DATADOG_SITES, LOG_DRAIN_NEWRELIC_SITES, LOG_DRAIN_ENDPOINT_TEMPLATES, LOG_DRAIN_PRESET_SITES, LOG_DRAIN_BUCKET_NAME_PATTERN, LOG_DRAIN_BUCKET_HOST_PATTERNS, LOG_DRAIN_PRESET_HOST_SUFFIXES, DRAIN_CONTENT_ACK_ERROR_CODE, DRAIN_CONTENT_ACK_FIELD, DrainContentAckRequiredError, LOG_DRAIN_PRESET_PATHS, PRESET_SEGMENT_RE, LOG_DRAIN_QUOTAS, LOG_DRAIN_QUOTA_WARN_RATIO, LOG_DRAIN_QUOTA_DROP_DEBUG_RATIO, LOG_DRAIN_QUOTA_DROP_INFO_RATIO, LOG_DRAIN_QUOTA_PAUSE_RATIO, LOG_EXPORT_SOURCES, LOG_EXPORT_MAX_WINDOW_DAYS, LOG_EXPORT_MAX_WINDOW_MS, LOG_EXPORT_URL_TTL_SECONDS, LOG_EXPORT_FILE_RETENTION_DAYS, LOG_EXPORT_FILE_RETENTION_MS, LOG_EXPORT_PART_MAX_BYTES, LOG_DRAIN_NOTICE_RATE_LIMIT_MS, LOG_DRAIN_VERIFICATION_STALE_MS, LOG_DRAIN_DIGEST_INTERVAL_MS, LOG_DRAIN_DIGEST_MAX_ENTRIES, LOG_DRAIN_NOTICE_ERROR_MAX_CHARS, LOG_DRAIN_USAGE_LINE_ITEM, LOG_DRAIN_BYTES_PER_GIB, DEFAULT_LOG_DRAIN_PLAN_CONFIG, TIERS, LOG_CURSOR_MAX_LENGTH, LOG_CURSOR_MAX_ID_LENGTH, LOG_RELATIVE_TIME_PATTERN, LOG_ISO_TIME_PATTERN, RELATIVE_UNIT_MS, CORE_DRAINING_CODE, CORE_DRAINING_DEFAULT_RETRY_MS, CORE_DRAINING_MAX_RETRY_MS, VoiceNameSchema, PluginProviderSchema, RealtimeProviderSchema, PluginClassSchema, ModelDescriptorSchema, InferenceModelSchema, PluginModelSchema, RealtimeModelSchema, LuaVoiceModelSchema, TurnDetectionSchema, InterruptionSchema, BuiltinAudioClipSchema, AudioConfigSchema, BackgroundAudioEntrySchema, BackgroundAudioSchema, LuaVoiceConfigInnerSchema, LuaVoiceConfigSchema, LuaVoiceRefSchema, LUA_JOB_DEFAULT_TIMEOUT_SECONDS, LUA_JOB_MIN_TIMEOUT_SECONDS, LUA_JOB_MAX_TIMEOUT_SECONDS, KEYS, MAX_BODY_BYTES, MAX_ID_LENGTH, UTC_ISO, TEMPLATE_TRIGGER_URL_ENV_PREFIX, TEMPLATE_INSTALL_POLICY_PER_WORKSPACE_VALUES, SUBJECT_TYPES, SubjectTypeSchema, CREDENTIAL_TYPES, CredentialTypeSchema, DEVICE_OPERATIONS, DeviceOperationSchema, DEVICE_SCOPE_BY_OPERATION, DeviceBindingSchema, IdSchema, SESSION_AUTH_TIME_MAX_S, PrincipalDescriptorSchema, ActorDescriptorSchema, PrincipalOwnerSchema, CredentialLifecycleSchema, GeneralCredentialDescriptorSchema, DeviceCredentialDescriptorSchema, GeneralPrincipalContextSchema, DeviceCredentialPrincipalContextSchema, RawPrincipalContextSchema, PrincipalContextSchema, DeviceCredentialClaimSchema, LUA_CLIENT_HEADER, LUA_CLIENT_APPS, SEMVER_PATTERN, WEB_RELEASE_PATTERN, CLIENT_HEADER_PATTERN, LUA_SESSION_ID_CLAIM, SESSION_REVOKED_CODE, AUTHZ_PROJECTION_VERSION, ProjectedScopeSchema, DisplayRoleSchema, AuthorizationPrincipalSchema, CredentialContextSchema, ProjectionAnomalySchema, ProjectedOrgSchema, ProjectedResourceSchema, CapabilityProfilesSchema, RoleCatalogSchema, EffectiveAuthorizationSchema, ResourcePageSchema, SYSTEM_USER_PREFIX, WORKFLOW_RUN_IN_FLIGHT, WORKFLOW_RUN_IDLE, WORKFLOW_RUN_TERMINAL, WORKFLOW_RUN_STATUSES, WORKFLOW_RUN_GATE_KINDS, WORKFLOW_STEP_STATUSES, WORKFLOW_STEP_IN_FLIGHT, WORKFLOW_SIGNAL_EVENT_SITES, ARCHIVE_WINDOW_MARGIN_DAYS, WORKFLOW_ORG_PURGING_TTL_S, WORKFLOW_ORG_PURGE_FORCE_AFTER_MS, IDEMPOTENCY_HOLDING_STATUSES, WORKFLOW_SCHEDULED_RUN_ID_PREFIX, CLOUD_TASK_RUN_ID_PREFIX, WORKFLOW_SCHEDULE_KEY_MAX, WORKFLOW_SCHEDULE_IDEMPOTENCY_KEY_PREFIX, WORKFLOW_OPERATION_ID_PREFIX, WORKFLOW_CONNECTION_KEY_RE, WORKFLOW_JOB_MODEL_SOURCE_LABELS, WORKFLOW_SUSPEND_KINDS, WORKFLOW_RUN_NOTIFICATION_SUSPENDED_KINDS, WORKFLOW_SIGNAL_PAYLOAD_MAX_BYTES, WORKFLOW_SUSPEND_DEFAULT_TIMEOUT_HOURS, WORKFLOW_RESOLVE_OUTPUT_MAX_BYTES, SCHEDULE_HEALTH_NOTIFY_CHANNELS, SCHEDULE_HEALTH_DEFAULT_NOTIFY, SCHEDULE_HEALTH_LIMITS, KNOWN_KEYS, WORKFLOW_GOAL_JUDGE_SELF, APPROVAL_ARGS_MAX_CHARS, APPROVAL_ARG_STRING_MAX_CHARS, APPROVAL_ARGS_SUMMARY_MAX_CHARS, MAX_DEPTH, MAX_KEYS, MAX_ITEMS, MAX_NODES, MAX_KEY_CHARS, KEY_SCRUB_INPUT_MAX_CHARS, STRING_SCRUB_INPUT_MAX_CHARS, ELLIPSIS, SKIP, SCRUB_SECRETS_BEFORE_PERSIST_ENV, PERSIST_SCRUB_MAX_CHARS, PERSIST_SCRUB_REF_MAX_CHARS, WORKFLOW_AUDIT_EVENTS, WORKFLOW_AUDIT_METADATA_MAX_BYTES, INDENT, WRAP_WIDTH, NOUNS, GET_TOOL_NAMES, PREAMBLE, WORKFLOW_APPROVAL_OUTPUT_DECISIONS, WORKFLOW_APPROVAL_OUTPUT_SCHEMA, JSON_FENCE_RE, DEFAULT_ON_AGENT_FEATURES, SUBAGENT_PER_KEY_FLAG_ENV, PER_KEY_FLAG_VALUES, ONBOARDING_FLOW_KEY, ONBOARDING_SCHEMA_VERSION, id, copy, onboardingHeadingSchema, onboardingRichTextInlineSchema, onboardingRichTextSchema, onboardingDestinationSchema, onboardingArtworkSchema, onboardingAnswerSchema, onboardingQuestionSchema, onboardingTemplateSectionSchema, onboardingInstallScreenSchema, onboardingResultScreenSchema, onboardingConnectScreenSchema, onboardingTemplateContentSchema, onboardingUnavailableOutcomeSchema, onboardingFlowSchema, onboardingActorSchema, onboardingEditorSchema, onboardingPublicationSummarySchema, onboardingValidationIssueSchema, onboardingValidationResponseSchema, onboardingAssetSchema, onboardingPublicAssetSchema, getOnboardingConfigResponseSchema, saveOnboardingDraftRequestSchema, validateOnboardingRequestSchema, publishOnboardingRequestSchema, rollbackOnboardingRequestSchema, onboardingTemplateCatalogItemSchema, getPublishedOnboardingResponseSchema, WEB_ROUTE_PROTOCOL_VERSION, WEB_ROUTE_METHODS, WEB_ROUTE_REQUEST_HEADER_ALLOWLIST, WEB_ROUTE_RESPONSE_HEADER_ALLOWLIST, WEB_ROUTE_MAX_REQUEST_BODY_BYTES, WEB_ROUTE_MAX_RESPONSE_BYTES, WEB_APP_NAME_PATTERN, WEB_APP_ENTRY_HTML_MAX_CHARS, WEB_APP_MAX_ASSET_BYTES, EVIDENCE_SESSION_IDLE_MS, EVIDENCE_MIN_CONVERSATIONS, EVIDENCE_LOW_CONFIDENCE_N, EVIDENCE_SNIPPET_MAX_CHARS, EVIDENCE_EXAMPLES_PER_ITEM, EVIDENCE_SHOWN_ITEMS, EVIDENCE_LATENCY_BOUNDS_MS, EVIDENCE_WORD_BOUNDS, BAD_CONVERSATION_REASONS, ATTACHMENT_LINES, REVIEW_VERDICT_REASON_ORDER, ENV_TEMPLATE_SECRET_KEY_RE, CONNECTION_SEND_NOT_ALLOWED, CONNECTION_RECIPIENT_NOT_ALLOWED, NOT_SEND, PLAIN_ADDRESS, RecipientSet, MCP_MESSAGING_CREATE, MCP_CALENDAR_EVENT_WRITE, REPLY_KEYS, DEDICATED_MAIL_SLUGS, FULL_SUITE_SLUGS, WELL_KNOWN_MAIL_FOLDERS, MEMBER_KEYS, CANONICAL_ORIGIN, CANONICAL_PREFIX, STRICT_BASE64, GMAIL_PREFIX, GMAIL_MESSAGES_SEND, GMAIL_DRAFTS_SEND, GOOGLE_BATCH, GRAPH_VERSION, GRAPH_PRINCIPAL, GRAPH_SEND_MAIL, GRAPH_MESSAGE_ACTION, GRAPH_OWNER, GRAPH_EVENTS, GRAPH_EVENT_COLLECTION, GRAPH_EVENT_ID, GRAPH_EVENT_ITEM, GRAPH_EVENT_ACTION, GRAPH_BATCH, GRAPH_TEAMS_MESSAGE, GRAPH_ACTIVITY_NOTIFICATION, GRAPH_GROUP_CONVERSATION, GCAL_EVENTS, GRAPH_READ_KEYS, MALFORMED_POLICY, BILLING_REJECTION_TEXT_CREDITS, BILLING_REJECTION_TEXT_SEAT, BILLING_REJECTION_TEXT_USER_QUOTA;
6109
+ var __defProp3, __name3, PLUMBING_THREAD_CHANNELS, CHANNEL_CONVERSATION_CHANNELS, HIDDEN_THREAD_CHANNELS, CHOICE_PERSON_TURN_CHANNELS, CHOICE_REPLAY_CLIENT_CAPABILITIES, CHOICE_REPLAY_CLIENT_SURFACES, INTEGRATION_PASSTHROUGH_READ_METHODS, URL_REINTERPRETED_PATH_CHARACTERS, PERCENT_ENCODED_DOT, PERCENT_ESCAPE, DECODED_PATH_SEPARATORS, DECODED_LEADING_SEPARATOR, MAX_PERCENT_DECODE_ROUNDS, URL_RESOLUTION_PROBE_BASE, PLATFORM_INVOCATION_CALLERS, SUPERVISION_OPS, SUPERVISION_OPS_WAVE2, SUPERVISION_WATCHDOG_OPS, SUPERVISION_WATCHDOG_ERRORS, SUPERVISION_ROLLBACK_REFUSAL_CODES, SUPERVISION_ROLLBACK_LINEAGE_MAX, SUPERVISION_UNTARGETED_OPS, SUPERVISED_WORKFLOW_VERSIONS_MAX, SUPERVISION_EVENT_KINDS, AGENT_PROVISIONING_LIMITS, AGENT_PROVISIONING_APPROVAL_PAYLOAD_KEY, AGENT_PROVISIONING_ERRORS, PROVISIONED_SUPERVISION_ACTIONS, isNonEmptyString, uniqueStrings, sameSet, AGENT_PROVISIONING_APPROVAL_CARD_MAX_CHARS, APPROVAL_PAYLOAD_MEMBERS, AGENT_CONNECTION_POLICIES, AGENT_CONNECTION_POLICY_DEFAULT, AGENT_CONNECTION_MOUNT_MODES, AGENT_CONNECTION_GOVERNANCE_ERRORS, AGENT_CONNECTION_OPERATION_RULES_MAX, AGENT_CONNECTION_OPERATION_PATTERN_MAX_LENGTH, OPERATION_RULE_METHODS, PATH_SEPARATOR, PATH_SINGLE_SEGMENT_WILDCARD, PATH_REST_WILDCARD, METHOD_OVERRIDE_HEADER_NAMES, METHOD_OVERRIDE_QUERY_NAMES, ODATA_BATCH_SEGMENT, GOOGLE_BATCH_FIRST_SEGMENT, CONNECTION_CHECK_RESULTS, CONNECTION_CHECK_CATALOGUE_V1, CONNECTION_CHECK_NAME_PATTERN, CONNECTION_CHECK_NAME_MAX, CONNECT_OUTCOME_STATUSES, SECRET_TEST_RESULTS, SECRET_DATADOG_REGIONS, SECRET_PROVIDER_CATALOGUE_V1, SECRET_TEST_MAX_RESPONSE_BYTES, SECRET_ENV_KEY_PATTERN, SECRET_REQUEST_ERRORS, SECRET_OUTCOME_STATUSES, CLIENT_OUTCOME_TURNS_MAX, SHORT_TEXT_MAX, SLUG_MAX, shortText, optionalShortText, CONNECTION_REQUEST_TERMINAL_STATES, CONNECTION_USE_ORIGINS, AGENT_CONNECTION_OPERATION_LIMITS_BOUNDS, CURRENCY_CODE, LIMITS_KEYS, CAPS_KEYS, EXCLUSIONS_KEYS, EMAIL_IN_TEXT, MAX_EXCLUSION_DEPTH, PROJECTION_PARAMETER_KEYS, CHANNEL_PARAMETER_KEYS, GMAIL_SYSTEM_LABEL_IDS, ZERO_DECIMAL_CURRENCIES, THREE_DECIMAL_CURRENCIES, DECIMAL_AMOUNT, REDACTED_PLACEHOLDER, PROVIDER_MESSAGE_MAX_CHARS, ERROR_MESSAGE_MAX_CHARS, SECRET_LITERAL_PATTERNS, SECRET_NAME, SECRET_PAIR_PATTERNS, GROUP_COUNT, WORKFLOW_SECRET_KEY_RE, WORKFLOW_RESERVED_SECRET_KEYS, SCRUB_INPUT_MAX_CHARS, SCRUB_CUT_BACKOFF_CHARS, TEST_SESSION_ID_PATTERN, TEST_SESSION_COLLECTION_PREFIX, TEST_EFFECT_BODY_MAX_BYTES, TEST_EFFECT_DROPPED_HEADERS, EVAL_CREDITS_PER_1K_TOKENS, EVAL_RESERVED_TOOL_ID_PREFIXES, CONNECTION_HANDOVER_APPROVAL_PAYLOAD_KEY, CONNECTION_HANDOVER_APPROVAL_CARD_MAX_CHARS, CONNECTION_HANDOVER_LIMITS, MEMBERS, FORMAT_CHARS, oneLine, boundedString, AGENT_METRIC_NAME_PATTERN, AGENT_METRIC_LIMITS, AGENT_OBJECTIVE_ERRORS, CHANGE_LEASE_TTL_MINUTES_MIN, CHANGE_LEASE_TTL_MINUTES_MAX, CHANGE_LEASE_REASON_MAX, CHANGE_LEASE_ERRORS, AGENT_CONFIG_SET_LIMITS, SECRET_ENV_KEY_SUFFIXES, DEFAULT_OWNER_DEPARTURE_POLICY, AGENT_LIFECYCLE_ERRORS, USER_COST_COUNTER_TTL_SECONDS, USER_COST_ATTRIBUTION_CHANNELS, CALLER_DEDUPE_KEY_MAX, FOLLOW_UP_IDEMPOTENCY_TTL_SECONDS, THREAD_FOLLOW_UP_LIMITS, THREAD_FOLLOW_UP_ERRORS, PROGRESS_UPDATE_LIMITS, PAUSABLE_CAPABILITY_KINDS, UNIFIED_CATCH_UP_MAX_WINDOW_HOURS, UNIFIED_CATCH_UP_EVENTS, UNIFIED_CATCH_UP_FILTERABLE_OBJECT_TYPES, AGENT_NEVER_RULES_MAX, AGENT_NEVER_RULE_FIELD_MAX, AGENT_NEVER_RULE_INPUT_MATCH_MAX, NEVER_RULE_ID_PATTERN, NEVER_RULE_HTTP_METHODS, TEMPLATE_DISTRIBUTION_MODES, CHANNEL_SEND_CHANNELS, TAKEOVER_MAX_IDLE_MINUTES, MINUTES_PER_DAY, DEFAULT_IDLE_RELEASE_MINUTES, FALLBACK_IDLE_RELEASE_MINUTES, VARIATION_SELECTORS, SLACK_EMOJI_NAMES, SLACK_SHORTCODE, PLAIN_EMAIL_ADDRESS, DOMAIN, UNSAFE_TEXT, SLACK_CONVERSATION_ID, CHANNEL_SETTING_GROUPS, THREAD_SCOPING_NOUN, TAKEOVER_CHANNEL_TYPES, EMAIL_SETTINGS, SLACK_SETTING_DEFAULTS, SLACK_REACTION_MAX, SLACK_INTRO_MAX, SLACK_EXAMPLE_PROMPTS_MAX, SLACK_EXAMPLE_PROMPT_MAX, SLACK_SUPPORT_CONTACT_MAX, SLACK_SETTINGS, CHANNEL_SETTINGS, REVIEWABLE_ACTION_EXECUTE_TOOL_ALLOWLIST, REVIEWABLE_STANDING_START_TOOLS, REVIEWABLE_MCP_SEND_TOOL_SUFFIX, MCP_TOOL_READ_VERB_RE, MCP_DRAFT_CREATE_VERBS, NON_INTERACTIVE_CHANNELS, RICH_PARTS_MESSAGE_ID_PREFIX, SCREENSHOT_MESSAGE_ID_PREFIX, BROWSER_COMMANDS, BROWSER_COMMAND_NAMES, LOG_FIELDS_MAX_KEYS, LOG_FIELD_MAX_VALUE_BYTES, LOG_FIELDS_MAX_BYTES, LOG_FIELD_KEY_PATTERN, LOG_FIELD_SECRET_SHAPED_KEY_PATTERNS, LOG_FIELDS_CLAMPED_KEY, LOG_FIELD_ARRAY_COUNT_SUFFIX, LuaLogFieldsError, DESKTOP_FILE_COMMANDS, DESKTOP_FILE_COMMAND_SET, WORKFLOW_RETRY_BACKOFFS, WORKFLOW_RETRY_MIN_ATTEMPTS, WORKFLOW_RETRY_POLICY_KEYS, WORKFLOW_RETRY_MAX_ATTEMPTS, WORKFLOW_RETRY_ENGINE_KEYS, WORKFLOW_JOB_RESOURCES, WORKFLOW_SIDE_EFFECTS, WORKFLOW_MODEL_CLASSES, WORKFLOW_DEFAULT_TASK_CLASS_MAP, WORKFLOW_MODELS_MAX_CLASS_DEFAULT, WORKFLOW_AUTONOMY_NUMERIC_KEYS, WORKFLOW_AUTONOMY_ENVELOPE_KEYS, WORKFLOW_AUTONOMY_DEFAULTS, WORKFLOW_AUTONOMY_CEILINGS, WORKFLOW_AUTONOMY_MAX_RUNS_PER_HOUR_ENV, WORKFLOW_AUTONOMY_MAX_RUNS_PER_HOUR_CEILING, WORKFLOW_AUTONOMY_FORMS_DEFAULT, WORKFLOW_AUTONOMY_MIN_VALUE, WORKFLOW_JOB_RANGES, WORKFLOW_JOB_RANGE_MEMBERS, WORKFLOW_SINGLE_STEP_TYPES, WORKFLOW_HITL_ENTRY_TYPES, WORKFLOW_ARM_ENTRY_TYPES, WORKFLOW_HITL_ARM_CONTAINERS, WORKFLOW_GRAPH_ENTRY_STEP_KINDS, WORKFLOW_ARM_ENTRY_STEP_KINDS, WORKFLOW_BUDGET_MAX_DURATION_SECONDS, MODEL_ID_BYOK_PROVIDERS, MODEL_CLASS_REF_PREFIX, MODEL_SNAPSHOT_SUFFIX, REASONING_EFFORT_VALUES, IMPLICIT_MODEL_SELECTION_SOURCES, PLATFORM_FALLBACK_MODEL_SOURCE, AGENT_NAME_TOKEN, DEFAULT_PERSONA_GUIDE, PERSONAL_SPACE_STARTING_PERSONA, AGENT_LOG_SOURCES, AGENT_LOG_FIELDS_MAX_WIRE_KEYS, LOG_DRAIN_TYPES_PHASE1, LOG_DRAIN_TYPES_PHASE2, LOG_DRAIN_TYPES_IMPLEMENTED, LOG_DRAIN_SOURCES, LOG_DRAIN_MAX_PER_ORG, LOG_DRAIN_MAX_PER_ORG_ENTERPRISE, LOG_DRAIN_DATADOG_SITES, LOG_DRAIN_NEWRELIC_SITES, LOG_DRAIN_ENDPOINT_TEMPLATES, LOG_DRAIN_PRESET_SITES, LOG_DRAIN_BUCKET_NAME_PATTERN, LOG_DRAIN_BUCKET_HOST_PATTERNS, LOG_DRAIN_PRESET_HOST_SUFFIXES, DRAIN_CONTENT_ACK_ERROR_CODE, DRAIN_CONTENT_ACK_FIELD, DrainContentAckRequiredError, LOG_DRAIN_PRESET_PATHS, PRESET_SEGMENT_RE, LOG_DRAIN_QUOTAS, LOG_DRAIN_QUOTA_WARN_RATIO, LOG_DRAIN_QUOTA_DROP_DEBUG_RATIO, LOG_DRAIN_QUOTA_DROP_INFO_RATIO, LOG_DRAIN_QUOTA_PAUSE_RATIO, LOG_EXPORT_SOURCES, LOG_EXPORT_MAX_WINDOW_DAYS, LOG_EXPORT_MAX_WINDOW_MS, LOG_EXPORT_URL_TTL_SECONDS, LOG_EXPORT_FILE_RETENTION_DAYS, LOG_EXPORT_FILE_RETENTION_MS, LOG_EXPORT_PART_MAX_BYTES, LOG_DRAIN_NOTICE_RATE_LIMIT_MS, LOG_DRAIN_VERIFICATION_STALE_MS, LOG_DRAIN_DIGEST_INTERVAL_MS, LOG_DRAIN_DIGEST_MAX_ENTRIES, LOG_DRAIN_NOTICE_ERROR_MAX_CHARS, LOG_DRAIN_USAGE_LINE_ITEM, LOG_DRAIN_BYTES_PER_GIB, DEFAULT_LOG_DRAIN_PLAN_CONFIG, TIERS, LOG_CURSOR_MAX_LENGTH, LOG_CURSOR_MAX_ID_LENGTH, LOG_RELATIVE_TIME_PATTERN, LOG_ISO_TIME_PATTERN, RELATIVE_UNIT_MS, CORE_DRAINING_CODE, CORE_DRAINING_DEFAULT_RETRY_MS, CORE_DRAINING_MAX_RETRY_MS, VoiceNameSchema, PluginProviderSchema, RealtimeProviderSchema, PluginClassSchema, ModelDescriptorSchema, InferenceModelSchema, PluginModelSchema, RealtimeModelSchema, LuaVoiceModelSchema, TurnDetectionSchema, InterruptionSchema, BuiltinAudioClipSchema, AudioConfigSchema, BackgroundAudioEntrySchema, BackgroundAudioSchema, LuaVoiceConfigInnerSchema, LuaVoiceConfigSchema, LuaVoiceRefSchema, LUA_JOB_DEFAULT_TIMEOUT_SECONDS, LUA_JOB_MIN_TIMEOUT_SECONDS, LUA_JOB_MAX_TIMEOUT_SECONDS, KEYS, MAX_BODY_BYTES, MAX_ID_LENGTH, UTC_ISO, TEMPLATE_TRIGGER_URL_ENV_PREFIX, TEMPLATE_INSTALL_POLICY_PER_WORKSPACE_VALUES, SUBJECT_TYPES, SubjectTypeSchema, CREDENTIAL_TYPES, CredentialTypeSchema, DEVICE_OPERATIONS, DeviceOperationSchema, DEVICE_SCOPE_BY_OPERATION, DeviceBindingSchema, IdSchema, SESSION_AUTH_TIME_MAX_S, PrincipalDescriptorSchema, ActorDescriptorSchema, PrincipalOwnerSchema, CredentialLifecycleSchema, GeneralCredentialDescriptorSchema, DeviceCredentialDescriptorSchema, GeneralPrincipalContextSchema, DeviceCredentialPrincipalContextSchema, RawPrincipalContextSchema, PrincipalContextSchema, DeviceCredentialClaimSchema, LUA_CLIENT_HEADER, LUA_CLIENT_APPS, SEMVER_PATTERN, WEB_RELEASE_PATTERN, CLIENT_HEADER_PATTERN, LUA_SESSION_ID_CLAIM, SESSION_REVOKED_CODE, AUTHZ_PROJECTION_VERSION, ProjectedScopeSchema, DisplayRoleSchema, AuthorizationPrincipalSchema, CredentialContextSchema, ProjectionAnomalySchema, ProjectedOrgSchema, ProjectedResourceSchema, CapabilityProfilesSchema, RoleCatalogSchema, EffectiveAuthorizationSchema, ResourcePageSchema, SYSTEM_USER_PREFIX, WORKFLOW_RUN_IN_FLIGHT, WORKFLOW_RUN_IDLE, WORKFLOW_RUN_TERMINAL, WORKFLOW_RUN_STATUSES, WORKFLOW_RUN_GATE_KINDS, WORKFLOW_STEP_STATUSES, WORKFLOW_STEP_IN_FLIGHT, WORKFLOW_SIGNAL_EVENT_SITES, ARCHIVE_WINDOW_MARGIN_DAYS, WORKFLOW_ORG_PURGING_TTL_S, WORKFLOW_ORG_PURGE_FORCE_AFTER_MS, IDEMPOTENCY_HOLDING_STATUSES, WORKFLOW_SCHEDULED_RUN_ID_PREFIX, CLOUD_TASK_RUN_ID_PREFIX, WORKFLOW_SCHEDULE_KEY_MAX, WORKFLOW_SCHEDULE_IDEMPOTENCY_KEY_PREFIX, WORKFLOW_OPERATION_ID_PREFIX, WORKFLOW_CONNECTION_KEY_RE, WORKFLOW_AGENT_APP_CONNECTION_PREFIX, WORKFLOW_JOB_MODEL_SOURCE_LABELS, WORKFLOW_SUSPEND_KINDS, WORKFLOW_RUN_NOTIFICATION_SUSPENDED_KINDS, WORKFLOW_SIGNAL_PAYLOAD_MAX_BYTES, WORKFLOW_SIGNAL_NAME_RE, WORKFLOW_SUSPEND_DEFAULT_TIMEOUT_HOURS, WORKFLOW_RESOLVE_OUTPUT_MAX_BYTES, SCHEDULE_HEALTH_NOTIFY_CHANNELS, SCHEDULE_HEALTH_DEFAULT_NOTIFY, SCHEDULE_HEALTH_LIMITS, KNOWN_KEYS, WORKFLOW_GOAL_JUDGE_SELF, APPROVAL_ARGS_MAX_CHARS, APPROVAL_ARG_STRING_MAX_CHARS, APPROVAL_ARGS_SUMMARY_MAX_CHARS, MAX_DEPTH, MAX_KEYS, MAX_ITEMS, MAX_NODES, MAX_KEY_CHARS, KEY_SCRUB_INPUT_MAX_CHARS, STRING_SCRUB_INPUT_MAX_CHARS, ELLIPSIS, SKIP, SCRUB_SECRETS_BEFORE_PERSIST_ENV, PERSIST_SCRUB_MAX_CHARS, PERSIST_SCRUB_REF_MAX_CHARS, WORKFLOW_AUDIT_EVENTS, WORKFLOW_AUDIT_METADATA_MAX_BYTES, INDENT, WRAP_WIDTH, NOUNS, GET_TOOL_NAMES, PREAMBLE, WORKFLOW_APPROVAL_OUTPUT_DECISIONS, WORKFLOW_APPROVAL_OUTPUT_SCHEMA, JSON_FENCE_RE, DEFAULT_ON_AGENT_FEATURES, SUBAGENT_PER_KEY_FLAG_ENV, PER_KEY_FLAG_VALUES, ONBOARDING_FLOW_KEY, ONBOARDING_SCHEMA_VERSION, id, copy, onboardingHeadingSchema, onboardingRichTextInlineSchema, onboardingRichTextSchema, onboardingDestinationSchema, onboardingArtworkSchema, onboardingAnswerSchema, onboardingQuestionSchema, onboardingTemplateSectionSchema, onboardingInstallScreenSchema, onboardingResultScreenSchema, onboardingConnectScreenSchema, onboardingTemplateContentSchema, onboardingUnavailableOutcomeSchema, onboardingFlowSchema, onboardingActorSchema, onboardingEditorSchema, onboardingPublicationSummarySchema, onboardingValidationIssueSchema, onboardingValidationResponseSchema, onboardingAssetSchema, onboardingPublicAssetSchema, getOnboardingConfigResponseSchema, saveOnboardingDraftRequestSchema, validateOnboardingRequestSchema, publishOnboardingRequestSchema, rollbackOnboardingRequestSchema, onboardingTemplateCatalogItemSchema, getPublishedOnboardingResponseSchema, WEB_ROUTE_PROTOCOL_VERSION, WEB_ROUTE_METHODS, WEB_ROUTE_REQUEST_HEADER_ALLOWLIST, WEB_ROUTE_RESPONSE_HEADER_ALLOWLIST, WEB_ROUTE_MAX_REQUEST_BODY_BYTES, WEB_ROUTE_MAX_RESPONSE_BYTES, WEB_APP_NAME_PATTERN, WEB_APP_ENTRY_HTML_MAX_CHARS, WEB_APP_MAX_ASSET_BYTES, EVIDENCE_SESSION_IDLE_MS, EVIDENCE_MIN_CONVERSATIONS, EVIDENCE_LOW_CONFIDENCE_N, EVIDENCE_SNIPPET_MAX_CHARS, EVIDENCE_EXAMPLES_PER_ITEM, EVIDENCE_SHOWN_ITEMS, EVIDENCE_LATENCY_BOUNDS_MS, EVIDENCE_WORD_BOUNDS, BAD_CONVERSATION_REASONS, ATTACHMENT_LINES, REVIEW_VERDICT_REASON_ORDER, ENV_TEMPLATE_SECRET_KEY_RE, CONNECTION_SEND_NOT_ALLOWED, CONNECTION_RECIPIENT_NOT_ALLOWED, NOT_SEND, PLAIN_ADDRESS, RecipientSet, MCP_MESSAGING_CREATE, MCP_CALENDAR_EVENT_WRITE, REPLY_KEYS, DEDICATED_MAIL_SLUGS, FULL_SUITE_SLUGS, WELL_KNOWN_MAIL_FOLDERS, MEMBER_KEYS, CANONICAL_ORIGIN, CANONICAL_PREFIX, STRICT_BASE64, GMAIL_PREFIX, GMAIL_MESSAGES_SEND, GMAIL_DRAFTS_SEND, GOOGLE_BATCH, GRAPH_VERSION, GRAPH_PRINCIPAL, GRAPH_SEND_MAIL, GRAPH_MESSAGE_ACTION, GRAPH_OWNER, GRAPH_EVENTS, GRAPH_EVENT_COLLECTION, GRAPH_EVENT_ID, GRAPH_EVENT_ITEM, GRAPH_EVENT_ACTION, GRAPH_BATCH, GRAPH_TEAMS_MESSAGE, GRAPH_ACTIVITY_NOTIFICATION, GRAPH_GROUP_CONVERSATION, GCAL_EVENTS, GRAPH_READ_KEYS, MALFORMED_POLICY, BILLING_REJECTION_TEXT_CREDITS, BILLING_REJECTION_TEXT_SEAT, BILLING_REJECTION_TEXT_USER_QUOTA;
5994
6110
  var init_dist = __esm({
5995
6111
  "../shared-types/dist/index.mjs"() {
5996
6112
  "use strict";
@@ -6206,7 +6322,20 @@ var init_dist = __esm({
6206
6322
  * agentId }`) to its env. `act`, on a turn whose platform-picked user is the target's owner, never overwriting a
6207
6323
  * key (`LUA_SECRET_ATTACH_EXISTING_ENABLED`).
6208
6324
  */
6209
- "secrets.attach": "act"
6325
+ "secrets.attach": "act",
6326
+ /**
6327
+ * SV (LUA-1080) — `Agents.deployed(id)`: what the target serves RIGHT NOW, read from each primitive's live pointer
6328
+ * (skills with their tools, the published persona, pre/postprocessors), with version ids comparable to an agent
6329
+ * version snapshot. Works whether or not the target has a promoted agent version. Metadata and hashes only.
6330
+ */
6331
+ "primitives.deployed": "observe",
6332
+ // [WD]
6333
+ /**
6334
+ * WD (watchdog grant) — `Agents.versions(id).rollback(version, { expectActive })`: restore a version of the target
6335
+ * that was ACTIVE before, is OLDER than the active one and was active within the last 7 days. CAS on the active
6336
+ * version; only from a workflow step the watchdog grant names. Held only by a watchdog grant.
6337
+ */
6338
+ "versions.rollback": "rollback"
6210
6339
  };
6211
6340
  __name(isSupervisionOp, "isSupervisionOp");
6212
6341
  __name3(isSupervisionOp, "isSupervisionOp");
@@ -6384,8 +6513,65 @@ var init_dist = __esm({
6384
6513
  gate: "act",
6385
6514
  targeted: true,
6386
6515
  item: "SV"
6516
+ },
6517
+ /** SV (LUA-1080) — `Agents.deployed(id)`: the target's deployed primitives (live pointers, no agent version needed). */
6518
+ "primitives.deployed": {
6519
+ gate: "observe",
6520
+ targeted: true,
6521
+ item: "SV"
6522
+ },
6523
+ /** WD — `Agents.versions(id).rollback(version, { expectActive })` (watchdog grant only). */
6524
+ "versions.rollback": {
6525
+ gate: "rollback",
6526
+ targeted: true,
6527
+ item: "WD"
6387
6528
  }
6388
6529
  };
6530
+ SUPERVISION_WATCHDOG_OPS = {
6531
+ logs: "observe",
6532
+ "runs.list": "observe",
6533
+ "runs.get": "observe",
6534
+ "data.get": "observe",
6535
+ "data.query": "observe",
6536
+ "versions.list": "observe",
6537
+ "versions.get": "observe",
6538
+ "versions.diff": "observe",
6539
+ "versions.rollback": "rollback"
6540
+ };
6541
+ __name(isSupervisionWatchdogOp, "isSupervisionWatchdogOp");
6542
+ __name3(isSupervisionWatchdogOp, "isSupervisionWatchdogOp");
6543
+ SUPERVISION_WATCHDOG_ERRORS = {
6544
+ /** A watchdog holder called an op outside {@link SUPERVISION_WATCHDOG_OPS}. */
6545
+ OP_REFUSED: "supervision_watchdog_op_refused",
6546
+ /** See {@link SupervisionRollbackRefusalReason}. */
6547
+ ROLLBACK_NEVER_ACTIVE: "supervision_rollback_never_active",
6548
+ ROLLBACK_NOT_OLDER: "supervision_rollback_not_older",
6549
+ ROLLBACK_NOT_IN_LINEAGE: "supervision_rollback_not_in_lineage",
6550
+ ROLLBACK_AFTER_ROLLBACK: "supervision_rollback_after_rollback",
6551
+ ROLLBACK_AFTER_BACKWARD_PROMOTE: "supervision_rollback_after_backward_promote",
6552
+ ROLLBACK_TOO_OLD: "supervision_rollback_too_old",
6553
+ /** `expectActive` is not the active version (CAS). */
6554
+ ROLLBACK_CONFLICT: "supervision_rollback_conflict",
6555
+ /** The promote failed part-way and its compensation restored the previous active version. */
6556
+ ROLLBACK_INCOMPLETE: "supervision_rollback_incomplete",
6557
+ /** The promote failed part-way AND its compensation failed: the Agents DB may have moved (manual triage). */
6558
+ ROLLBACK_INCOMPLETE_UNCOMPENSATED: "supervision_rollback_incomplete_uncompensated"
6559
+ };
6560
+ SUPERVISION_ROLLBACK_REFUSAL_CODES = {
6561
+ never_active: SUPERVISION_WATCHDOG_ERRORS.ROLLBACK_NEVER_ACTIVE,
6562
+ not_older: SUPERVISION_WATCHDOG_ERRORS.ROLLBACK_NOT_OLDER,
6563
+ not_in_lineage: SUPERVISION_WATCHDOG_ERRORS.ROLLBACK_NOT_IN_LINEAGE,
6564
+ after_rollback: SUPERVISION_WATCHDOG_ERRORS.ROLLBACK_AFTER_ROLLBACK,
6565
+ after_backward_promote: SUPERVISION_WATCHDOG_ERRORS.ROLLBACK_AFTER_BACKWARD_PROMOTE,
6566
+ too_old: SUPERVISION_WATCHDOG_ERRORS.ROLLBACK_TOO_OLD
6567
+ };
6568
+ __name(isSupervisionRollbackRefusalReason, "isSupervisionRollbackRefusalReason");
6569
+ __name3(isSupervisionRollbackRefusalReason, "isSupervisionRollbackRefusalReason");
6570
+ SUPERVISION_ROLLBACK_LINEAGE_MAX = 25;
6571
+ __name(supervisionRollbackTargetRefusal, "supervisionRollbackTargetRefusal");
6572
+ __name3(supervisionRollbackTargetRefusal, "supervisionRollbackTargetRefusal");
6573
+ __name(supervisionRollbackRefusal, "supervisionRollbackRefusal");
6574
+ __name3(supervisionRollbackRefusal, "supervisionRollbackRefusal");
6389
6575
  SUPERVISION_UNTARGETED_OPS = [
6390
6576
  "agents.list",
6391
6577
  ...Object.entries(SUPERVISION_OPS_WAVE2).filter(([, contract]) => !contract.targeted).map(([op]) => op)
@@ -6821,7 +7007,9 @@ var init_dist = __esm({
6821
7007
  /** `secrets.attach` would set an env key the agent already has: never overwritten (remove or rotate it first). */
6822
7008
  KEY_EXISTS: "secret_key_exists",
6823
7009
  /** A request held for an existing agent submitted on the public token page: its owner submits it signed in. */
6824
- OWNER_SUBMIT_REQUIRED: "secret_submit_requires_owner"
7010
+ OWNER_SUBMIT_REQUIRED: "secret_submit_requires_owner",
7011
+ /** LUA-1079 — `requestSecret` with `pendingFor` on a client that did not declare the pending card capability. */
7012
+ PENDING_CARD_UNSUPPORTED: "secret_pending_card_unsupported"
6825
7013
  };
6826
7014
  SECRET_OUTCOME_STATUSES = [
6827
7015
  ...SECRET_TEST_RESULTS,
@@ -7546,6 +7734,13 @@ var init_dist = __esm({
7546
7734
  welcome: "Welcome and Home page",
7547
7735
  takeover: "Human takeover"
7548
7736
  };
7737
+ THREAD_SCOPING_NOUN = {
7738
+ front: "Front conversation",
7739
+ messagebird: "MessageBird conversation",
7740
+ imessage: "iMessage chat"
7741
+ };
7742
+ __name(threadScopingSetting, "threadScopingSetting");
7743
+ __name3(threadScopingSetting, "threadScopingSetting");
7549
7744
  TAKEOVER_CHANNEL_TYPES = [
7550
7745
  "whatsapp",
7551
7746
  "instagram",
@@ -7819,7 +8014,10 @@ var init_dist = __esm({
7819
8014
  CHANNEL_SETTINGS = {
7820
8015
  ...Object.fromEntries(TAKEOVER_CHANNEL_TYPES.map((type) => [
7821
8016
  type,
7822
- type === "email" ? EMAIL_SETTINGS : takeoverSettings(type)
8017
+ type === "email" ? EMAIL_SETTINGS : type === "front" || type === "messagebird" || type === "imessage" ? [
8018
+ ...takeoverSettings(type),
8019
+ threadScopingSetting(type)
8020
+ ] : takeoverSettings(type)
7823
8021
  ])),
7824
8022
  slack: SLACK_SETTINGS
7825
8023
  };
@@ -9566,6 +9764,9 @@ This text is who you are for this person. As you learn them, their name, their w
9566
9764
  __name(workflowOrgSlotKey, "workflowOrgSlotKey");
9567
9765
  __name3(workflowOrgSlotKey, "workflowOrgSlotKey");
9568
9766
  WORKFLOW_CONNECTION_KEY_RE = /^[a-z][a-z0-9_-]{0,63}$/;
9767
+ WORKFLOW_AGENT_APP_CONNECTION_PREFIX = "agentapp_";
9768
+ __name(isWorkflowAgentAppConnectionId, "isWorkflowAgentAppConnectionId");
9769
+ __name3(isWorkflowAgentAppConnectionId, "isWorkflowAgentAppConnectionId");
9569
9770
  WORKFLOW_JOB_MODEL_SOURCE_LABELS = {
9570
9771
  stamp: "lease stamp",
9571
9772
  initData: "run input",
@@ -9591,6 +9792,7 @@ This text is who you are for this person. As you learn them, their name, their w
9591
9792
  ...WORKFLOW_RUN_GATE_KINDS
9592
9793
  ];
9593
9794
  WORKFLOW_SIGNAL_PAYLOAD_MAX_BYTES = 64 * 1024;
9795
+ WORKFLOW_SIGNAL_NAME_RE = /^[a-zA-Z0-9_.-]{1,64}$/;
9594
9796
  WORKFLOW_SUSPEND_DEFAULT_TIMEOUT_HOURS = 168;
9595
9797
  WORKFLOW_RESOLVE_OUTPUT_MAX_BYTES = 256 * 1024;
9596
9798
  SCHEDULE_HEALTH_NOTIFY_CHANNELS = [
@@ -11694,6 +11896,19 @@ var init_request_credential = __esm({
11694
11896
 
11695
11897
  // src/api/http.client.ts
11696
11898
  import { randomUUID as randomUUID2 } from "crypto";
11899
+ function abortedResponse() {
11900
+ return {
11901
+ success: false,
11902
+ error: {
11903
+ message: "Request aborted",
11904
+ code: REQUEST_ABORTED_CODE,
11905
+ statusCode: 0
11906
+ }
11907
+ };
11908
+ }
11909
+ function isAborted(signal) {
11910
+ return !!signal && signal.aborted === true;
11911
+ }
11697
11912
  async function classifyErrorResponse(response) {
11698
11913
  let errorData;
11699
11914
  try {
@@ -11826,7 +12041,7 @@ function coreDrainApiRetryDelayMs(error) {
11826
12041
  const delayMs = retryAfterSeconds * 1e3;
11827
12042
  return Math.min(Math.max(0, delayMs), CORE_DRAINING_MAX_RETRY_MS);
11828
12043
  }
11829
- var DEFAULT_REQUEST_TIMEOUT_MS, HttpClient;
12044
+ var DEFAULT_REQUEST_TIMEOUT_MS, REQUEST_ABORTED_CODE, HttpClient;
11830
12045
  var init_http_client = __esm({
11831
12046
  "src/api/http.client.ts"() {
11832
12047
  "use strict";
@@ -11837,6 +12052,9 @@ var init_http_client = __esm({
11837
12052
  init_lua_fetch();
11838
12053
  init_request_credential();
11839
12054
  DEFAULT_REQUEST_TIMEOUT_MS = 3e4;
12055
+ REQUEST_ABORTED_CODE = "REQUEST_ABORTED";
12056
+ __name(abortedResponse, "abortedResponse");
12057
+ __name(isAborted, "isAborted");
11840
12058
  HttpClient = class {
11841
12059
  static {
11842
12060
  __name(this, "HttpClient");
@@ -11859,9 +12077,17 @@ var init_http_client = __esm({
11859
12077
  * @private
11860
12078
  */
11861
12079
  async request(url, options = {}, overrides) {
12080
+ const callerSignal = overrides?.signal;
12081
+ if (isAborted(callerSignal)) return abortedResponse();
11862
12082
  const controller = new AbortController();
11863
12083
  const timeoutMs = overrides?.timeoutMs ?? DEFAULT_REQUEST_TIMEOUT_MS;
11864
12084
  const timeoutId = setTimeout(() => controller.abort(), timeoutMs);
12085
+ const onCallerAbort = /* @__PURE__ */ __name(() => controller.abort(), "onCallerAbort");
12086
+ if (typeof callerSignal?.addEventListener === "function") {
12087
+ callerSignal.addEventListener("abort", onCallerAbort, {
12088
+ once: true
12089
+ });
12090
+ }
11865
12091
  try {
11866
12092
  const authorization = this.requestCredential ? `Bearer ${await bearerFor(this.requestCredential)}` : void 0;
11867
12093
  const response = await luaFetch(url, {
@@ -11883,6 +12109,7 @@ var init_http_client = __esm({
11883
12109
  try {
11884
12110
  data = await response.json();
11885
12111
  } catch (jsonError) {
12112
+ if (isAborted(callerSignal)) throw jsonError;
11886
12113
  data = {};
11887
12114
  }
11888
12115
  if (typeof data === "object" && data !== null && "success" in data) {
@@ -11900,6 +12127,9 @@ var init_http_client = __esm({
11900
12127
  if (isAccessDeniedError(error)) {
11901
12128
  throw error;
11902
12129
  }
12130
+ if (isAborted(callerSignal)) {
12131
+ return abortedResponse();
12132
+ }
11903
12133
  if (error instanceof DOMException && error.name === "AbortError") {
11904
12134
  return {
11905
12135
  success: false,
@@ -11916,9 +12146,36 @@ var init_http_client = __esm({
11916
12146
  statusCode: 0
11917
12147
  }
11918
12148
  };
12149
+ } finally {
12150
+ clearTimeout(timeoutId);
12151
+ if (typeof callerSignal?.removeEventListener === "function") {
12152
+ callerSignal.removeEventListener("abort", onCallerAbort);
12153
+ }
11919
12154
  }
11920
12155
  }
11921
12156
  /**
12157
+ * A backoff wait the caller's signal can cut short (BAC-1097): resolves at `ms` or on abort, whichever is
12158
+ * first, and never leaves the timer or the listener behind. The caller re-checks `signal.aborted` afterwards.
12159
+ * @private
12160
+ */
12161
+ sleep(ms, signal) {
12162
+ if (isAborted(signal)) return Promise.resolve();
12163
+ const listenable = typeof signal?.addEventListener === "function";
12164
+ return new Promise((resolve3) => {
12165
+ const onAbort = /* @__PURE__ */ __name(() => {
12166
+ clearTimeout(timer);
12167
+ resolve3();
12168
+ }, "onAbort");
12169
+ const timer = setTimeout(() => {
12170
+ if (listenable) signal.removeEventListener("abort", onAbort);
12171
+ resolve3();
12172
+ }, ms);
12173
+ if (listenable) signal.addEventListener("abort", onAbort, {
12174
+ once: true
12175
+ });
12176
+ });
12177
+ }
12178
+ /**
11922
12179
  * Non-2xx classification shared by `request` and `httpStream` (WF-204): 401s become
11923
12180
  * `AuthenticationError` (ownership vs credential), 403s throw, everything else returns the
11924
12181
  * `{ success:false, error }` envelope with the server body spread in.
@@ -11986,19 +12243,22 @@ var init_http_client = __esm({
11986
12243
  }
11987
12244
  }
11988
12245
  let lastResult = null;
12246
+ const signal = overrides?.signal;
11989
12247
  for (let attempt = 0; attempt <= maxRetries; attempt++) {
12248
+ if (isAborted(signal)) return abortedResponse();
11990
12249
  try {
11991
12250
  const result = await this.request(url, options, overrides);
11992
12251
  if (result.success || !result.error || !this.isRetryableStatus(result.error.statusCode || 0)) {
11993
12252
  return result;
11994
12253
  }
12254
+ if (isAborted(signal)) return result;
11995
12255
  lastResult = result;
11996
12256
  } catch (error) {
11997
12257
  throw error;
11998
12258
  }
11999
12259
  if (attempt < maxRetries) {
12000
12260
  const backoff = this.retryDelayMs(attempt, lastResult?.error, options.method);
12001
- await new Promise((resolve3) => setTimeout(resolve3, backoff));
12261
+ await this.sleep(backoff, signal);
12002
12262
  }
12003
12263
  }
12004
12264
  return lastResult;
@@ -12047,7 +12307,8 @@ var init_http_client = __esm({
12047
12307
  async httpPostCoreDrainRetry(url, data, headers, overrides) {
12048
12308
  const first = await this.httpPostOnce(url, data, headers, overrides);
12049
12309
  if (!isCoreDrainApiError(first.error)) return first;
12050
- await new Promise((resolve3) => setTimeout(resolve3, coreDrainApiRetryDelayMs(first.error)));
12310
+ await this.sleep(coreDrainApiRetryDelayMs(first.error), overrides?.signal);
12311
+ if (isAborted(overrides?.signal)) return abortedResponse();
12051
12312
  return this.httpPostOnce(url, data, headers, overrides);
12052
12313
  }
12053
12314
  /**
@@ -12927,6 +13188,19 @@ function validateApprovalReminder(node, path3) {
12927
13188
  }
12928
13189
  return [];
12929
13190
  }
13191
+ function validateHitlTimeoutHours(node, path3) {
13192
+ const h = node.timeoutHours;
13193
+ if (typeof h !== "number") return [];
13194
+ if (Number.isFinite(h) && h >= APPROVAL_TIMEOUT_HOURS_MIN && h <= APPROVAL_TIMEOUT_HOURS_MAX) return [];
13195
+ return [
13196
+ {
13197
+ code: "timeout-hours-out-of-range",
13198
+ path: `${path3}.timeoutHours`,
13199
+ severity: "error",
13200
+ message: `timeoutHours must be a number of hours in [${APPROVAL_TIMEOUT_HOURS_MIN}, ${APPROVAL_TIMEOUT_HOURS_MAX}] (got ${h})`
13201
+ }
13202
+ ];
13203
+ }
12930
13204
  function firstAskDeadline(node) {
12931
13205
  const head = Array.isArray(node.onTimeout) ? node.onTimeout[0] : node.onTimeout;
12932
13206
  if (typeof head === "object" && head !== null && "escalateTo" in head) {
@@ -12998,6 +13272,9 @@ function retryBackoffs() {
12998
13272
  function sleepUntilUnsupportedMessage(id2) {
12999
13273
  return `the engine does not execute \`sleepUntil\` yet (node "${id2}") \u2014 replace it with a \`sleep\` node with a \`duration\` in ms, e.g. { type: 'sleep', id: '${id2}', duration: ${SLEEP_UNTIL_REPLACEMENT.duration} }`;
13000
13274
  }
13275
+ function signalNameInvalidMessage(id2, name) {
13276
+ return `waitForSignal "${id2}" signal "${name}" must match /${WORKFLOW_SIGNAL_NAME_RE.source}/ (the names a delivery accepts)`;
13277
+ }
13001
13278
  function armSubrunUnsupportedMessage(id2, workflowId) {
13002
13279
  return `the engine does not execute the implicit \`${workflowId}\` arm subrun (node "${id2}") \u2014 a [map, step] container arm is the step itself with the map as its \`input\` since lua-cli 3.32.4; re-run \`lua compile\` with the current CLI (a hand-written artifact: put the map on the arm node's \`input\` and drop the \`workflow\` wrapper)`;
13003
13280
  }
@@ -13590,10 +13867,13 @@ function validateLuaExtensions(g, caps = WORKFLOW_CAPS_DEFAULT, opts = {
13590
13867
  const w = node;
13591
13868
  checkId(w.id, path3);
13592
13869
  if (typeof w.signal !== "string" || w.signal.length === 0) err("invalid-envelope", "waitForSignal.signal is required", `${path3}.signal`, w.id);
13870
+ else if (!WORKFLOW_SIGNAL_NAME_RE.test(w.signal)) err("signal-name-invalid", signalNameInvalidMessage(w.id, w.signal), `${path3}.signal`, w.id);
13871
+ for (const r of validateHitlTimeoutHours(w, path3)) err(r.code, r.message, r.path, w.id);
13593
13872
  return;
13594
13873
  }
13595
13874
  const a = node;
13596
13875
  checkId(a.id, path3);
13876
+ for (const r of validateHitlTimeoutHours(a, path3)) err(r.code, r.message, r.path, a.id);
13597
13877
  if ((a.approver ?? "creator") === "creator" && a.excludeInitiator === true) {
13598
13878
  err("approver-excludes-only-candidate", "approver:'creator' with excludeInitiator:true always excludes the only candidate", path3, a.id);
13599
13879
  }
@@ -16061,7 +16341,7 @@ function collectJobTierSteps(entry, out) {
16061
16341
  return;
16062
16342
  }
16063
16343
  }
16064
- var __defProp6, __name6, WorkflowTemplateError, TEMPLATE_PLACEHOLDER, TEMPLATE_NAMESPACES, MAP_DESCRIPTOR_KEYS, MAP_MEMBER_MALFORMED_CODE, fromInit, fromStep, value, template, fromRequest, rows, fromKnowledge, SideEffectsSchema, JobResourcesSchema, WORKFLOW_MODEL_TEMPLATE_ROOT, WORKFLOW_MODEL_TEMPLATE_RE, PATH_SEGMENT_RE, APPROVER_SPEC_MAX_USERS, ESCALATION_MAX_HOPS, TemplateBindingSchema, ApproverSpecSchema, FourEyesSchema, EscalationHopSchema, TerminalOutcomeSchema, ApprovalOnTimeoutSchema, APPROVER_SPEC_SHAPES, APPROVER_WRITTEN_MAX, USER_ID_SHAPED_RE, BINDING_ROOTS, APPROVAL_REMIND_AFTER_HOURS_MIN, APPROVAL_REMIND_AFTER_HOURS_MAX, WORKSPACE_TEMPLATE_EXPR_RE, SLEEP_UNTIL_REPLACEMENT, WORKFLOW_WORKSPACE_TTL_MAX_HOURS_DEFAULT, WORKFLOW_CAPS_DEFAULT, WORKFLOW_STEP_DEFAULT_TIMEOUT_SECONDS, WORKFLOW_AGENT_DEFAULT_TIMEOUT_SECONDS, WORKFLOW_JOB_DEFAULT_TIMEOUT_SECONDS, WORKFLOW_FOREACH_DEFAULT_CONCURRENCY, WORKFLOW_FOREACH_DEFAULT_MAX_ITEMS, WORKFLOW_LOOP_DEFAULT_MAX_ITERATIONS, WORKFLOW_SUSPEND_DEFAULT_TIMEOUT_HOURS2, WORKFLOW_SIGNAL_DEFAULT_SOURCES, clone, CONNECTION_ID_HEX_RE, WORKFLOW_JOB_MAX_WORKTREE_ARMS, workspaceOf, mountsWorkspace, isJobTier, jobToolsOf, schemaIsArray, isHitlNode, isSingleStep, singleId, armId, TEMPLATE_STEP_REF, EDITABLE_PATH_RE, PREDICATE_OPS, isPredicateScalar, GRAPH_HASH_PREFIX, WorkflowPlanError, isArmStep, armStepId, armStepKind, joinIdOf, containerIdOf, PATH_PLACEHOLDER, MISSING, stepIdOf, cmp, eq, ne, gt, gte, lt, lte, inSet, notIn, exists, notExists, truthy, falsy, and, or, not, CONTINUED_FAILURE_TAG, CONTINUED_FAILURE_DEFAULT_CODE, CONTINUED_FAILURE_OUTPUT_SCHEMA, CONTINUED_FAILURE_LEAF_PATHS, isHitlNode2, nodeIdOf, GOAL_JUDGE_STEP_ID, NON_LEAF_KINDS, CONDITIONAL_JOIN_ID, branchArmId, canonical, sortKeys, JOIN, entryOfJoin, FORCE_CANCEL_STALE_MS, TERMINAL, WORKFLOW_INLINE_RUN_TAG, RUN_ERROR_ISSUES_MAX, IN_FLIGHT, n, SUSPENDED_FOR_DIMENSIONS, STEP_ERROR_DETAIL_KEYS, STEP_ERROR_DETAIL_MAX_BYTES, DETAIL_MAX_DEPTH, DETAIL_MAX_ITEMS, MAX_HOLIDAYS, MAX_WALK_DAYS, HHMM, YMD, MS_PER_MIN, MS_PER_DAY, MON_FRI, supportedTz, fmtCache, WEEKDAYS, JSON_PATCH_OPS, JSON_PATCH_MAX_OPS, JSON_PATCH_MAX_VALUE_BYTES, JSON_PATCH_MAX_TOTAL_BYTES, SEGMENT_RE, WORKFLOW_SCHEDULE_TYPES, WORKFLOW_SCHEDULE_SHAPE_ISSUE, WORKFLOW_SCHEDULE_SHAPES_HINT, WORKFLOW_SCHEDULE_RUN_AS, isObject, WORKFLOW_ENV_OVERLAY_MAX_KEYS, WORKFLOW_ENV_OVERLAY_MAX_VALUE_BYTES, WORKFLOW_ENV_TEMPLATE_SECRET_KEY_RE, isEnvRef, looksLikeEmbeddedJson, ZERO, isRecord2;
16344
+ var __defProp6, __name6, WorkflowTemplateError, TEMPLATE_PLACEHOLDER, TEMPLATE_NAMESPACES, MAP_DESCRIPTOR_KEYS, MAP_MEMBER_MALFORMED_CODE, fromInit, fromStep, value, template, fromRequest, rows, fromKnowledge, SideEffectsSchema, JobResourcesSchema, WORKFLOW_MODEL_TEMPLATE_ROOT, WORKFLOW_MODEL_TEMPLATE_RE, PATH_SEGMENT_RE, APPROVER_SPEC_MAX_USERS, ESCALATION_MAX_HOPS, TemplateBindingSchema, ApproverSpecSchema, FourEyesSchema, EscalationHopSchema, TerminalOutcomeSchema, ApprovalOnTimeoutSchema, APPROVER_SPEC_SHAPES, APPROVER_WRITTEN_MAX, USER_ID_SHAPED_RE, BINDING_ROOTS, APPROVAL_REMIND_AFTER_HOURS_MIN, APPROVAL_REMIND_AFTER_HOURS_MAX, APPROVAL_TIMEOUT_HOURS_MIN, APPROVAL_TIMEOUT_HOURS_MAX, WORKSPACE_TEMPLATE_EXPR_RE, SLEEP_UNTIL_REPLACEMENT, WORKFLOW_WORKSPACE_TTL_MAX_HOURS_DEFAULT, WORKFLOW_CAPS_DEFAULT, WORKFLOW_STEP_DEFAULT_TIMEOUT_SECONDS, WORKFLOW_AGENT_DEFAULT_TIMEOUT_SECONDS, WORKFLOW_JOB_DEFAULT_TIMEOUT_SECONDS, WORKFLOW_FOREACH_DEFAULT_CONCURRENCY, WORKFLOW_FOREACH_DEFAULT_MAX_ITEMS, WORKFLOW_LOOP_DEFAULT_MAX_ITERATIONS, WORKFLOW_SUSPEND_DEFAULT_TIMEOUT_HOURS2, WORKFLOW_SIGNAL_DEFAULT_SOURCES, clone, CONNECTION_ID_HEX_RE, WORKFLOW_JOB_MAX_WORKTREE_ARMS, workspaceOf, mountsWorkspace, isJobTier, jobToolsOf, schemaIsArray, isHitlNode, isSingleStep, singleId, armId, TEMPLATE_STEP_REF, EDITABLE_PATH_RE, PREDICATE_OPS, isPredicateScalar, GRAPH_HASH_PREFIX, WorkflowPlanError, isArmStep, armStepId, armStepKind, joinIdOf, containerIdOf, PATH_PLACEHOLDER, MISSING, stepIdOf, cmp, eq, ne, gt, gte, lt, lte, inSet, notIn, exists, notExists, truthy, falsy, and, or, not, CONTINUED_FAILURE_TAG, CONTINUED_FAILURE_DEFAULT_CODE, CONTINUED_FAILURE_OUTPUT_SCHEMA, CONTINUED_FAILURE_LEAF_PATHS, isHitlNode2, nodeIdOf, GOAL_JUDGE_STEP_ID, NON_LEAF_KINDS, CONDITIONAL_JOIN_ID, branchArmId, canonical, sortKeys, JOIN, entryOfJoin, FORCE_CANCEL_STALE_MS, TERMINAL, WORKFLOW_INLINE_RUN_TAG, RUN_ERROR_ISSUES_MAX, IN_FLIGHT, n, SUSPENDED_FOR_DIMENSIONS, STEP_ERROR_DETAIL_KEYS, STEP_ERROR_DETAIL_MAX_BYTES, DETAIL_MAX_DEPTH, DETAIL_MAX_ITEMS, MAX_HOLIDAYS, MAX_WALK_DAYS, HHMM, YMD, MS_PER_MIN, MS_PER_DAY, MON_FRI, supportedTz, fmtCache, WEEKDAYS, JSON_PATCH_OPS, JSON_PATCH_MAX_OPS, JSON_PATCH_MAX_VALUE_BYTES, JSON_PATCH_MAX_TOTAL_BYTES, SEGMENT_RE, WORKFLOW_SCHEDULE_TYPES, WORKFLOW_SCHEDULE_SHAPE_ISSUE, WORKFLOW_SCHEDULE_SHAPES_HINT, WORKFLOW_SCHEDULE_RUN_AS, isObject, WORKFLOW_ENV_OVERLAY_MAX_KEYS, WORKFLOW_ENV_OVERLAY_MAX_VALUE_BYTES, WORKFLOW_ENV_TEMPLATE_SECRET_KEY_RE, isEnvRef, looksLikeEmbeddedJson, ZERO, isRecord2;
16065
16345
  var init_dist2 = __esm({
16066
16346
  "../workflow-graph/dist/index.mjs"() {
16067
16347
  "use strict";
@@ -16270,8 +16550,12 @@ var init_dist2 = __esm({
16270
16550
  __name6(validateApproverBlock, "validateApproverBlock");
16271
16551
  APPROVAL_REMIND_AFTER_HOURS_MIN = 1;
16272
16552
  APPROVAL_REMIND_AFTER_HOURS_MAX = 720;
16553
+ APPROVAL_TIMEOUT_HOURS_MIN = 1;
16554
+ APPROVAL_TIMEOUT_HOURS_MAX = 720;
16273
16555
  __name(validateApprovalReminder, "validateApprovalReminder");
16274
16556
  __name6(validateApprovalReminder, "validateApprovalReminder");
16557
+ __name(validateHitlTimeoutHours, "validateHitlTimeoutHours");
16558
+ __name6(validateHitlTimeoutHours, "validateHitlTimeoutHours");
16275
16559
  __name(firstAskDeadline, "firstAskDeadline");
16276
16560
  __name6(firstAskDeadline, "firstAskDeadline");
16277
16561
  __name(liftRenderedApprover, "liftRenderedApprover");
@@ -16289,6 +16573,8 @@ var init_dist2 = __esm({
16289
16573
  });
16290
16574
  __name(sleepUntilUnsupportedMessage, "sleepUntilUnsupportedMessage");
16291
16575
  __name6(sleepUntilUnsupportedMessage, "sleepUntilUnsupportedMessage");
16576
+ __name(signalNameInvalidMessage, "signalNameInvalidMessage");
16577
+ __name6(signalNameInvalidMessage, "signalNameInvalidMessage");
16292
16578
  __name(armSubrunUnsupportedMessage, "armSubrunUnsupportedMessage");
16293
16579
  __name6(armSubrunUnsupportedMessage, "armSubrunUnsupportedMessage");
16294
16580
  WORKFLOW_WORKSPACE_TTL_MAX_HOURS_DEFAULT = 168;
@@ -17698,6 +17984,9 @@ var init_workflow = __esm({
17698
17984
  for (const r of validateApprovalReminder(opts, `approval("${id2}")`)) {
17699
17985
  if (r.severity === "error") throw new LuaWorkflowBuildError("remind-after-invalid", `"${id2}": ${r.message}`);
17700
17986
  }
17987
+ for (const r of validateHitlTimeoutHours(opts, `approval("${id2}")`)) {
17988
+ throw new LuaWorkflowBuildError("timeout-hours-out-of-range", `"${id2}": ${r.message}`);
17989
+ }
17701
17990
  if (typeof opts.details === "function") throw new LuaWorkflowBuildError("closure-binding", `approval("${id2}").details must be template(...)`);
17702
17991
  this.recordEnvRefs(opts.details, opts.timeoutHours, opts.approver);
17703
17992
  const node = defined({
@@ -17728,6 +18017,10 @@ var init_workflow = __esm({
17728
18017
  waitForSignal(id2, opts) {
17729
18018
  this.assertId(id2, "waitForSignal()");
17730
18019
  if (!opts || typeof opts.signal !== "string" || opts.signal.length === 0) throw new LuaWorkflowBuildError("invalid-envelope", `waitForSignal("${id2}") needs a signal name`);
18020
+ if (!WORKFLOW_SIGNAL_NAME_RE.test(opts.signal)) throw new LuaWorkflowBuildError("signal-name-invalid", signalNameInvalidMessage(id2, opts.signal));
18021
+ for (const r of validateHitlTimeoutHours(opts, `waitForSignal("${id2}")`)) {
18022
+ throw new LuaWorkflowBuildError("timeout-hours-out-of-range", `"${id2}": ${r.message}`);
18023
+ }
17731
18024
  this.recordEnvRefs(opts.timeoutHours);
17732
18025
  const node = defined({
17733
18026
  type: "waitForSignal",
@@ -17790,7 +18083,7 @@ var init_workflow = __esm({
17790
18083
  if (this.mapCount >= 2 && this.unnamedMaps > 0) {
17791
18084
  this.warnings.push({
17792
18085
  code: "map-id-required",
17793
- message: `${this.unnamedMaps} of ${this.mapCount} map() calls have no explicit id \u2014 positional ids renumber on insert; pass { id } (error at push)`
18086
+ message: `${this.unnamedMaps} of ${this.mapCount} map() calls have no explicit id \u2014 positional ids renumber on insert; pass { id } to every map() to keep step ids stable`
17794
18087
  });
17795
18088
  }
17796
18089
  if (graphHasHitl(graph, this.steps) && this.config.budget?.maxDurationSeconds === void 0) {
@@ -20897,10 +21190,15 @@ var init_basket_api_service = __esm({
20897
21190
  });
20898
21191
 
20899
21192
  // src/instances/user.instance.ts
21193
+ function omit(source, key) {
21194
+ const { [key]: _dropped, ...rest } = source;
21195
+ return rest;
21196
+ }
20900
21197
  var UserDataInstance;
20901
21198
  var init_user_instance = __esm({
20902
21199
  "src/instances/user.instance.ts"() {
20903
21200
  "use strict";
21201
+ __name(omit, "omit");
20904
21202
  UserDataInstance = class {
20905
21203
  static {
20906
21204
  __name(this, "UserDataInstance");
@@ -20916,7 +21214,12 @@ var init_user_instance = __esm({
20916
21214
  * @returns Proxied instance that allows direct access to data properties
20917
21215
  */
20918
21216
  constructor(api, data, profile) {
20919
- this.data = data && typeof data === "object" ? data : {};
21217
+ Object.defineProperty(this, "data", {
21218
+ value: data && typeof data === "object" ? data : {},
21219
+ writable: true,
21220
+ enumerable: false,
21221
+ configurable: true
21222
+ });
20920
21223
  Object.defineProperty(this, "userAPI", {
20921
21224
  value: api,
20922
21225
  writable: true,
@@ -21028,7 +21331,8 @@ var init_user_instance = __esm({
21028
21331
  */
21029
21332
  async update(data) {
21030
21333
  try {
21031
- const response = await this.userAPI.update(data);
21334
+ const payload = data && data.data === this.data ? omit(data, "data") : data;
21335
+ const response = await this.userAPI.update(payload);
21032
21336
  this.data = response;
21033
21337
  return this.data;
21034
21338
  } catch (error) {
@@ -22279,6 +22583,29 @@ var init_ai_api_service = __esm({
22279
22583
  }
22280
22584
  return result.data;
22281
22585
  }
22586
+ async image(body) {
22587
+ return this.httpPost(`/developer/ai/${this.agentId}/image`, body, {});
22588
+ }
22589
+ /**
22590
+ * Handles the simplified-vs-full-options branching for `AI.image`.
22591
+ * Simplified (`AI.image(prompt, options?)`) returns the hosted CDN url string; the options overload
22592
+ * (`AI.image({ prompt, ... })`) returns the full `{ url, model, provider }`.
22593
+ */
22594
+ async imageForSandbox(promptOrOptions, options) {
22595
+ const simplified = typeof promptOrOptions === "string";
22596
+ const body = simplified ? {
22597
+ prompt: promptOrOptions,
22598
+ ...options
22599
+ } : promptOrOptions;
22600
+ const result = await this.image(body);
22601
+ if (!result.success) {
22602
+ throw new Error(result.error?.message || "AI image generation failed");
22603
+ }
22604
+ if (!result.data) {
22605
+ throw new Error("AI image generation failed: empty response");
22606
+ }
22607
+ return simplified ? result.data.url : result.data;
22608
+ }
22282
22609
  };
22283
22610
  }
22284
22611
  });
@@ -22389,6 +22716,12 @@ var init_integrations_api_service = __esm({
22389
22716
  });
22390
22717
 
22391
22718
  // src/api/agents.api.service.ts
22719
+ function isAborted2(signal) {
22720
+ return !!signal && signal.aborted === true;
22721
+ }
22722
+ function abortReason(signal) {
22723
+ return signal.reason ?? new DOMException("The operation was aborted", "AbortError");
22724
+ }
22392
22725
  function toInvocationOutput(data, callerThreadId) {
22393
22726
  const toolNames = /* @__PURE__ */ new Set();
22394
22727
  for (const step3 of Array.isArray(data.steps) ? data.steps : []) {
@@ -22474,9 +22807,15 @@ var init_agents_api_service = __esm({
22474
22807
  });
22475
22808
  if (body.identifier) query.set("identifier", body.identifier);
22476
22809
  const chatBody = this.toChatGenerateBody(body);
22477
- return this.httpPostCoreDrainRetry(`/chat/generate/${targetAgentId}?${query.toString()}`, chatBody, {}, typeof body.timeoutMs === "number" ? {
22478
- timeoutMs: body.timeoutMs
22479
- } : void 0);
22810
+ const overrides = {
22811
+ ...typeof body.timeoutMs === "number" ? {
22812
+ timeoutMs: body.timeoutMs
22813
+ } : {},
22814
+ ...body.signal ? {
22815
+ signal: body.signal
22816
+ } : {}
22817
+ };
22818
+ return this.httpPostCoreDrainRetry(`/chat/generate/${targetAgentId}?${query.toString()}`, chatBody, {}, Object.keys(overrides).length > 0 ? overrides : void 0);
22480
22819
  }
22481
22820
  /**
22482
22821
  * Sandbox overload: mirrors the `AI.generate` pattern where the simplified
@@ -22487,15 +22826,29 @@ var init_agents_api_service = __esm({
22487
22826
  const input = typeof promptOrInput === "string" ? {
22488
22827
  prompt: promptOrInput
22489
22828
  } : promptOrInput;
22829
+ if (isAborted2(input.signal)) throw abortReason(input.signal);
22490
22830
  const result = await this.invoke(targetAgentId, input);
22491
22831
  if (!result.success) {
22832
+ if (isAborted2(input.signal)) throw abortReason(input.signal);
22492
22833
  throw new Error(result.error?.message || "Agent invocation failed");
22493
22834
  }
22494
22835
  if (!result.data) {
22495
22836
  throw new Error("Agent invocation failed: empty response");
22496
22837
  }
22497
- if (typeof promptOrInput === "string") return result.data.text ?? "";
22498
22838
  const data = result.data;
22839
+ if (data?.type === "error") {
22840
+ if (isPaymentRequiredChatErrorEnvelope(data)) {
22841
+ throw Object.assign(new Error(data.error || "Payment required"), {
22842
+ name: "AgentInvocationError",
22843
+ code: "PAYMENT_REQUIRED",
22844
+ statusCode: 402
22845
+ });
22846
+ }
22847
+ throw Object.assign(new Error(data.error || "Agent invocation failed"), {
22848
+ name: "AgentInvocationError",
22849
+ code: "AGENT_ERROR"
22850
+ });
22851
+ }
22499
22852
  if (data?.type === "preprocessor_blocked") {
22500
22853
  throw Object.assign(new Error(data.text || "Agent invocation blocked by preprocessor"), {
22501
22854
  name: "AgentInvocationError",
@@ -22510,6 +22863,7 @@ var init_agents_api_service = __esm({
22510
22863
  stage: data.governanceBlock?.stage
22511
22864
  });
22512
22865
  }
22866
+ if (typeof promptOrInput === "string") return data.text ?? "";
22513
22867
  return toInvocationOutput(data, input.threadId);
22514
22868
  }
22515
22869
  /**
@@ -22530,7 +22884,8 @@ var init_agents_api_service = __esm({
22530
22884
  code
22531
22885
  });
22532
22886
  }, "refuse");
22533
- if (op === "versions.promote" || op === "persona.activate" || op === "versions.delete" || op === "workflows.create" || op === "workflows.push" || op === "workflows.deploy") {
22887
+ if (op === "versions.promote" || // WD — a watchdog rollback changes what a live agent serves, like a promote.
22888
+ op === "versions.rollback" || op === "persona.activate" || op === "versions.delete" || op === "workflows.create" || op === "workflows.push" || op === "workflows.deploy") {
22534
22889
  refuse("supervision_release_offline_refused", `${op} is refused offline: a local test never changes a live agent`);
22535
22890
  }
22536
22891
  if (op === "versions.preview" || op === "agents.list" || op === "agents.get" || op === "source.get" || // U25 — a subscription is live platform state (it starts a deployed trigger): never from a local test.
@@ -22698,6 +23053,8 @@ var init_agents_api_service = __esm({
22698
23053
  case "evals.cancel":
22699
23054
  case "owner.notify":
22700
23055
  case "connections.assign":
23056
+ // SV (LUA-1080) — the live pointers are not exposed on a developer route: platform only.
23057
+ case "primitives.deployed":
22701
23058
  return refuse("supervision_offline_unsupported", `${op} is not available offline; run it on the platform`);
22702
23059
  default:
22703
23060
  return refuse("supervision_unknown_op", `Unknown supervision operation ${String(op)}`);
@@ -22734,6 +23091,8 @@ var init_agents_api_service = __esm({
22734
23091
  };
22735
23092
  }
22736
23093
  };
23094
+ __name(isAborted2, "isAborted");
23095
+ __name(abortReason, "abortReason");
22737
23096
  __name(toInvocationOutput, "toInvocationOutput");
22738
23097
  __name(runSummary, "runSummary");
22739
23098
  __name(supervisedCheck, "supervisedCheck");
@@ -23363,9 +23722,22 @@ function createWorkflowsRuntime(getApi) {
23363
23722
  },
23364
23723
  async list(opts = {}) {
23365
23724
  const api = await getApi();
23366
- const ref = opts.workflow ? await resolveRef(api, opts.workflow) : {};
23725
+ let workflowId;
23726
+ if (opts.workflow) {
23727
+ const v = opts.workflow.trim();
23728
+ const defs = await api.getWorkflows({
23729
+ includeDynamic: true
23730
+ });
23731
+ const hit = defs.success && defs.data ? defs.data.workflows.find((w) => w.name === v) ?? defs.data.workflows.find((w) => w.id === v) : void 0;
23732
+ if (hit) workflowId = hit.id;
23733
+ else if (isWorkflowIdShaped(v)) workflowId = v;
23734
+ else {
23735
+ unwrap(defs, "Workflows.list");
23736
+ return [];
23737
+ }
23738
+ }
23367
23739
  const page = unwrap(await api.getRuns({
23368
- workflowId: ref.workflowId,
23740
+ workflowId,
23369
23741
  status: opts.status,
23370
23742
  limit: opts.limit,
23371
23743
  correlationKey: opts.correlationKey,
@@ -23403,7 +23775,10 @@ function createWorkflowsRuntime(getApi) {
23403
23775
  ...opts
23404
23776
  }), "Workflows.signalByKey");
23405
23777
  },
23406
- raiseBudget: unavailable("raiseBudget", "R45"),
23778
+ async raiseBudget(runId, patch) {
23779
+ const api = await getApi();
23780
+ return unwrap(await api.raiseBudget(runId, patch), "Workflows.raiseBudget");
23781
+ },
23407
23782
  // Goals are scoped to the bound agent: the IF-21 `agentId` argument is parity with the HTTP twin
23408
23783
  // (`/workflows/:agentId/goals`), never a way to reach another agent's goals (403 otherwise).
23409
23784
  async setGoal(agentId, goal) {
@@ -23446,7 +23821,7 @@ function createWorkflowsRuntime(getApi) {
23446
23821
  }
23447
23822
  };
23448
23823
  }
23449
- var WORKFLOW_START_MAX_WAIT_SECONDS, WORKFLOW_START_CLIENT_DEADLINE_SLACK_MS, WorkflowApiError, unwrap, assertBoundAgent, pathId, unavailable, WorkflowApi;
23824
+ var WORKFLOW_START_MAX_WAIT_SECONDS, WORKFLOW_START_CLIENT_DEADLINE_SLACK_MS, WorkflowApiError, unwrap, isWorkflowIdShaped, assertBoundAgent, pathId, WorkflowApi;
23450
23825
  var init_workflow_api_service = __esm({
23451
23826
  "src/api/workflow.api.service.ts"() {
23452
23827
  "use strict";
@@ -23478,15 +23853,13 @@ var init_workflow_api_service = __esm({
23478
23853
  }
23479
23854
  return res.data;
23480
23855
  }, "unwrap");
23856
+ 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");
23481
23857
  assertBoundAgent = /* @__PURE__ */ __name((api, agentId, member) => {
23482
23858
  if (agentId && agentId !== api.agentId) {
23483
23859
  throw new WorkflowApiError("FORBIDDEN", `Workflows.${member}: goals are scoped to the bound agent ${api.agentId}`, 403);
23484
23860
  }
23485
23861
  }, "assertBoundAgent");
23486
23862
  pathId = /* @__PURE__ */ __name((id2) => encodeURIComponent(id2), "pathId");
23487
- unavailable = /* @__PURE__ */ __name((member, route2) => async () => {
23488
- throw new WorkflowApiError("WORKFLOWS_API_UNAVAILABLE", `Workflows.${member} is not available in this runtime yet (${route2} lands with a later wave)`, 501);
23489
- }, "unavailable");
23490
23863
  __name(createWorkflowsRuntime, "createWorkflowsRuntime");
23491
23864
  WorkflowApi = class extends HttpClient {
23492
23865
  static {
@@ -23926,20 +24299,35 @@ var init_device_api_service = __esm({
23926
24299
  return this.httpDelete(`/developer/devices/${this.agentId}/${deviceId}`, {});
23927
24300
  }
23928
24301
  async sendCommand(deviceName, command, payload, timeout) {
23929
- return this.httpPost(`/developer/devices/${this.agentId}/${deviceName}/command`, {
24302
+ return this.httpPost(`/developer/devices/${this.agentId}/${encodeURIComponent(deviceName)}/command`, {
23930
24303
  command,
23931
24304
  payload,
23932
24305
  timeout: timeout || 3e4
23933
24306
  }, {});
23934
24307
  }
23935
24308
  async getDeviceStatus(deviceName) {
23936
- return this.httpGet(`/developer/devices/${this.agentId}/${deviceName}/status`, {});
24309
+ return this.httpGet(`/developer/devices/${this.agentId}/${encodeURIComponent(deviceName)}/status`, {});
23937
24310
  }
23938
24311
  async enableDevice(deviceName) {
23939
- return this.httpPatch(`/developer/devices/${this.agentId}/${deviceName}/enable`, {}, {});
24312
+ return this.httpPatch(`/developer/devices/${this.agentId}/${encodeURIComponent(deviceName)}/enable`, {}, {});
23940
24313
  }
23941
24314
  async disableDevice(deviceName) {
23942
- return this.httpPatch(`/developer/devices/${this.agentId}/${deviceName}/disable`, {}, {});
24315
+ return this.httpPatch(`/developer/devices/${this.agentId}/${encodeURIComponent(deviceName)}/disable`, {}, {});
24316
+ }
24317
+ /** Device instances the agent has seen, with live status; self-describing devices only appear here. */
24318
+ async getConnectedDevices() {
24319
+ return this.httpGet(`/developer/devices/${this.agentId}/connected`, {});
24320
+ }
24321
+ /** Fire a trigger as the named device would; the live handler runs. */
24322
+ async fireTrigger(deviceName, triggerName, payload) {
24323
+ return this.httpPost(`/developer/devices/${this.agentId}/${encodeURIComponent(deviceName)}/trigger`, {
24324
+ triggerName,
24325
+ payload
24326
+ }, {});
24327
+ }
24328
+ /** Remove a connected device's instance record (not its definition). */
24329
+ async deleteDeviceInstance(deviceName) {
24330
+ return this.httpDelete(`/developer/devices/${this.agentId}/${encodeURIComponent(deviceName)}/instance`, {});
23943
24331
  }
23944
24332
  };
23945
24333
  }
@@ -24315,6 +24703,14 @@ function requireExpectActiveId(opts, what) {
24315
24703
  }
24316
24704
  __name(requireExpectActiveId, "requireExpectActiveId");
24317
24705
  __name2(requireExpectActiveId, "requireExpectActiveId");
24706
+ function optionalCommitHash(opts, what) {
24707
+ const commitHash = opts?.commitHash;
24708
+ if (commitHash === void 0) return void 0;
24709
+ if (typeof commitHash === "string" && commitHash.length > 0) return commitHash;
24710
+ throw typedError("supervision_bad_args", `${what} commitHash must be a non-empty string`);
24711
+ }
24712
+ __name(optionalCommitHash, "optionalCommitHash");
24713
+ __name2(optionalCommitHash, "optionalCommitHash");
24318
24714
  function approvalIdsOf(approval) {
24319
24715
  if (approval === void 0 || approval === null) return void 0;
24320
24716
  if (typeof approval !== "object" || Array.isArray(approval)) return {
@@ -24393,6 +24789,20 @@ function buildSupervisionAgentsApi(call2) {
24393
24789
  delete: /* @__PURE__ */ __name2((version) => call2("versions.delete", agentId, {
24394
24790
  version
24395
24791
  }), "delete"),
24792
+ /**
24793
+ * WD — restore a previously-active, OLDER `version` (watchdog grant; last 7 days; only from a workflow step the
24794
+ * grant names). Compare-and-swap: `expectActive` is the active version number now (required, never null).
24795
+ */
24796
+ rollback: /* @__PURE__ */ __name2(async (version, opts) => {
24797
+ const expectActive = requireExpectActive(opts, "versions.rollback");
24798
+ if (expectActive === null) {
24799
+ throw typedError("supervision_expect_active_required", "versions.rollback requires { expectActive } \u2014 the active version number (a rollback needs one)");
24800
+ }
24801
+ return call2("versions.rollback", agentId, {
24802
+ version,
24803
+ expectActive
24804
+ });
24805
+ }, "rollback"),
24396
24806
  // wave 2 U11
24397
24807
  /**
24398
24808
  * U11 (DOC2 §6.1) — open a TEST SESSION on staged `opts.version`: multi-turn `chat`, `fire`, `effects()` and
@@ -24430,11 +24840,18 @@ function buildSupervisionAgentsApi(call2) {
24430
24840
  }
24431
24841
  }), "push"),
24432
24842
  /** Publish workflow `version`. Compare-and-swap: refused unless `expectActive` is the live version id. */
24433
- deploy: /* @__PURE__ */ __name2(async (workflowId, version, opts) => call2("workflows.deploy", agentId, {
24434
- workflowId,
24435
- version,
24436
- expectActive: requireExpectActiveId(opts, "workflows.deploy")
24437
- }), "deploy")
24843
+ deploy: /* @__PURE__ */ __name2(async (workflowId, version, opts) => {
24844
+ const expectActive = requireExpectActiveId(opts, "workflows.deploy");
24845
+ const commitHash = optionalCommitHash(opts, "workflows.deploy");
24846
+ return call2("workflows.deploy", agentId, {
24847
+ workflowId,
24848
+ version,
24849
+ expectActive,
24850
+ ...commitHash !== void 0 ? {
24851
+ commitHash
24852
+ } : {}
24853
+ });
24854
+ }, "deploy")
24438
24855
  }), "workflows"),
24439
24856
  persona: /* @__PURE__ */ __name2((agentId) => ({
24440
24857
  versions: /* @__PURE__ */ __name2(() => call2("persona.versions", agentId), "versions"),
@@ -24455,6 +24872,12 @@ function buildSupervisionAgentsApi(call2) {
24455
24872
  keys: /* @__PURE__ */ __name2(() => call2("env.keys", agentId), "keys")
24456
24873
  }), "env"),
24457
24874
  /**
24875
+ * SV (LUA-1080) — what `agentId` serves RIGHT NOW: its live skills (with tools), the published persona and its
24876
+ * pre/postprocessors, each with the version id an agent version snapshot would pin. Works with no promoted agent
24877
+ * version, so a release can diff live against a staged version. Metadata and hashes only (`observe`).
24878
+ */
24879
+ deployed: /* @__PURE__ */ __name2((agentId) => call2("primitives.deployed", agentId), "deployed"),
24880
+ /**
24458
24881
  * U25 — supervision events of the target (`observe`): each event of a subscribed kind starts
24459
24882
  * one of the CALLER's own triggers (`triggerName`) with a `source: 'supervision'` body.
24460
24883
  */
@@ -25189,6 +25612,12 @@ var PreProcessor = class {
25189
25612
  return this.executeFunction(user, messages, channel);
25190
25613
  }
25191
25614
  };
25615
+ function messageText2(message) {
25616
+ if (typeof message === "string") return message;
25617
+ if (!Array.isArray(message)) return "";
25618
+ return message.filter((p) => !!p && p.type === "text" && typeof p.text === "string").map((p) => p.text).join("\n");
25619
+ }
25620
+ __name(messageText2, "messageText");
25192
25621
  var PostProcessor = class {
25193
25622
  static {
25194
25623
  __name(this, "PostProcessor");
@@ -25673,20 +26102,20 @@ init_order_instance();
25673
26102
 
25674
26103
  // src/api/threads.offline.ts
25675
26104
  init_dist();
25676
- function unavailable2(member) {
26105
+ function unavailable(member) {
25677
26106
  return Object.assign(new Error(`Threads.${member} only runs on the Lua platform (deployed or sandbox agents), not in lua test / lua dev`), {
25678
26107
  name: "ThreadFollowUpError",
25679
26108
  code: THREAD_FOLLOW_UP_ERRORS.UNAVAILABLE
25680
26109
  });
25681
26110
  }
25682
- __name(unavailable2, "unavailable");
26111
+ __name(unavailable, "unavailable");
25683
26112
  function createOfflineThreadsApi() {
25684
26113
  return {
25685
26114
  open: /* @__PURE__ */ __name(async () => {
25686
- throw unavailable2("open");
26115
+ throw unavailable("open");
25687
26116
  }, "open"),
25688
26117
  followUp: /* @__PURE__ */ __name(async () => {
25689
- throw unavailable2("followUp");
26118
+ throw unavailable("followUp");
25690
26119
  }, "followUp")
25691
26120
  };
25692
26121
  }
@@ -26291,6 +26720,11 @@ var AI = {
26291
26720
  const { getAiInstance: getAiInstance2 } = await Promise.resolve().then(() => (init_lazy_instances(), lazy_instances_exports));
26292
26721
  const ai = await getAiInstance2();
26293
26722
  return ai.generateForSandbox(promptOrOptions, content);
26723
+ },
26724
+ async image(promptOrOptions, options) {
26725
+ const { getAiInstance: getAiInstance2 } = await Promise.resolve().then(() => (init_lazy_instances(), lazy_instances_exports));
26726
+ const ai = await getAiInstance2();
26727
+ return ai.imageForSandbox(promptOrOptions, options);
26294
26728
  }
26295
26729
  };
26296
26730
  var Integrations = {
@@ -26634,6 +27068,7 @@ export {
26634
27068
  log,
26635
27069
  lt2 as lt,
26636
27070
  lte2 as lte,
27071
+ messageText2 as messageText,
26637
27072
  ne2 as ne,
26638
27073
  not2 as not,
26639
27074
  notExists2 as notExists,