lua-cli 3.54.0 → 3.56.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/api-exports.d.ts +205 -111
- package/dist/api-exports.js +397 -112
- package/dist/api-exports.js.map +1 -1
- package/dist/index.js +1144 -310
- package/dist/index.js.map +1 -1
- package/dist/voice/test/index.d.ts +100 -94
- package/dist/workflow-builder.d.ts +7 -4
- package/dist/workflow-builder.js +322 -71
- package/dist/workflow-builder.js.map +1 -1
- package/docs/README.md +3 -3
- package/docs/api/Data.md +19 -4
- package/docs/api/PreProcessor.md +66 -56
- package/docs/api/Threads.md +14 -0
- package/package.json +2 -1
- package/template/package.json +1 -1
- package/template-web-app/web/package.json +2 -3
- package/template-web-app/web/src/index.css +0 -2
- package/template-web-app/web/src/main.tsx +1 -9
package/dist/index.js
CHANGED
|
@@ -862,6 +862,8 @@ import { z as z5 } from "zod";
|
|
|
862
862
|
import { z as z6 } from "zod";
|
|
863
863
|
import { z as z7 } from "zod";
|
|
864
864
|
import { z as z8 } from "zod";
|
|
865
|
+
import { z as z9 } from "zod";
|
|
866
|
+
import { z as z10 } from "zod";
|
|
865
867
|
function isChannelConversationChannel(channel) {
|
|
866
868
|
return !!channel && CHANNEL_CONVERSATION_CHANNELS.includes(channel);
|
|
867
869
|
}
|
|
@@ -4263,7 +4265,7 @@ function mergeRichPartMirrorMessages(messages, sameTurnGroup) {
|
|
|
4263
4265
|
break;
|
|
4264
4266
|
}
|
|
4265
4267
|
if (folded) continue;
|
|
4266
|
-
const content = message.content.filter((part) => part.type !== "data-lua-tool-step");
|
|
4268
|
+
const content = message.content.filter((part) => part.type !== "data-lua-tool-step" && part.type !== "data-lua-reasoning-time" && part.type !== "data-lua-reply-timing");
|
|
4267
4269
|
if (content.length === 0) continue;
|
|
4268
4270
|
if (content.length !== message.content.length) {
|
|
4269
4271
|
merged.push({
|
|
@@ -4319,6 +4321,57 @@ function foldRichPartsIntoMessages(messages, records, makeMessage, sameTurnGroup
|
|
|
4319
4321
|
while (next < synthetic.length) combined.push(synthetic[next++].message);
|
|
4320
4322
|
return mergeRichPartMirrorMessages(combined, sameTurnGroup);
|
|
4321
4323
|
}
|
|
4324
|
+
function readStoredReplyVersion(metadata) {
|
|
4325
|
+
const md = metadata && typeof metadata === "object" ? metadata : void 0;
|
|
4326
|
+
const value3 = md?.replyVersion;
|
|
4327
|
+
const stamp = value3 && typeof value3.group === "string" && value3.group && typeof value3.index === "number" && Number.isInteger(value3.index) && value3.index >= 1 ? {
|
|
4328
|
+
group: value3.group,
|
|
4329
|
+
index: value3.index
|
|
4330
|
+
} : null;
|
|
4331
|
+
return {
|
|
4332
|
+
stamp,
|
|
4333
|
+
inactive: md?.inactiveVersion === true
|
|
4334
|
+
};
|
|
4335
|
+
}
|
|
4336
|
+
function applyReplyVersions(messages, markOf, includeVersions) {
|
|
4337
|
+
const blocks = [];
|
|
4338
|
+
const indicesByGroup = /* @__PURE__ */ new Map();
|
|
4339
|
+
let current = null;
|
|
4340
|
+
for (const message of messages) {
|
|
4341
|
+
const mark = markOf(message);
|
|
4342
|
+
if (message.role === "user") {
|
|
4343
|
+
current = mark?.stamp ? {
|
|
4344
|
+
...mark.stamp,
|
|
4345
|
+
inactive: mark.inactive
|
|
4346
|
+
} : null;
|
|
4347
|
+
if (current) {
|
|
4348
|
+
const seen = indicesByGroup.get(current.group) ?? /* @__PURE__ */ new Set();
|
|
4349
|
+
seen.add(current.index);
|
|
4350
|
+
indicesByGroup.set(current.group, seen);
|
|
4351
|
+
}
|
|
4352
|
+
}
|
|
4353
|
+
blocks.push(current);
|
|
4354
|
+
}
|
|
4355
|
+
const out = [];
|
|
4356
|
+
messages.forEach((message, i) => {
|
|
4357
|
+
const block = blocks[i];
|
|
4358
|
+
if (!block) {
|
|
4359
|
+
out.push(message);
|
|
4360
|
+
return;
|
|
4361
|
+
}
|
|
4362
|
+
if (block.inactive && !includeVersions) return;
|
|
4363
|
+
out.push({
|
|
4364
|
+
...message,
|
|
4365
|
+
replyVersion: {
|
|
4366
|
+
group: block.group,
|
|
4367
|
+
index: block.index,
|
|
4368
|
+
total: indicesByGroup.get(block.group)?.size ?? 1,
|
|
4369
|
+
active: !block.inactive
|
|
4370
|
+
}
|
|
4371
|
+
});
|
|
4372
|
+
});
|
|
4373
|
+
return out;
|
|
4374
|
+
}
|
|
4322
4375
|
function text(item, field, index, required) {
|
|
4323
4376
|
const value3 = item[field];
|
|
4324
4377
|
if (value3 === void 0 && !required) return void 0;
|
|
@@ -7804,7 +7857,7 @@ function parseWith2(schema, body) {
|
|
|
7804
7857
|
problems: r.error.issues.map((i) => `${i.path.join(".")} ${i.message}`)
|
|
7805
7858
|
};
|
|
7806
7859
|
}
|
|
7807
|
-
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, AGENT_IDENTITY_ERRORS, 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, WEB_APP_ID_PATTERN, 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, label, labels, onboardingHeadingSchema, onboardingRichTextInlineSchema, onboardingRichTextSchema, onboardingDestinationSchema, onboardingArtworkSchema, onboardingAnswerSchema, onboardingQuestionSchema, onboardingMatchScreenSchema, 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_TITLE_MAX_CHARS, WEB_APP_AGENT_PANE_MARKER, WEB_APP_CHAT_TEXT_MAX_CHARS, WEB_APP_CHAT_CONTEXT_MAX_BYTES, WEB_APP_CHAT_PATH_MAX_CHARS, WEB_APP_CHAT_HISTORY_DEFAULT_LIMIT, WEB_APP_CHAT_HISTORY_MAX_LIMIT, WEB_APP_CHAT_CONTROL_CHARS, WEB_APP_CHAT_APP_NAME_MAX_CHARS, 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, WEB_APP_HEALTH_KEY_TTL_SECONDS, WEB_APP_HEALTH_MIN_FAILURES, WEB_APP_HEALTH_MIN_FAILURE_RATIO, 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_OUT_OF_ACTIONS, 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, PLAN_KEYS, PLAN_LIMIT_KEYS, PLAN_FEATURE_KEYS, BILLING_ENGINES, BILLING_VERSION_KINDS, planKeyString, planPriceSchema, limitsShape, featuresShape, billingPlanSchema, topUpPackSchema, PLAN_REFUSAL_CODES, billingSignupConfigSchema, billingVersionDraftPatchSchema, billingVersionDraftCreateSchema, assignBillingPlanSchema, billingActionRatesSchema, BILLING_MOVE_DEFAULT_NOTICE_DAYS, keyString, billingMoveDraftSchema, billingMoveOrgDateSchema;
|
|
7860
|
+
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, INTEGRATION_PASSTHROUGH_MAX_BASE64_RESPONSE_BYTES, 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, AGENT_IDENTITY_ERRORS, 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, WEB_APP_ID_PATTERN, 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, label, labels, onboardingHeadingSchema, onboardingRichTextInlineSchema, onboardingRichTextSchema, onboardingDestinationSchema, onboardingArtworkSchema, onboardingAnswerSchema, onboardingQuestionSchema, onboardingMatchScreenSchema, 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_TITLE_MAX_CHARS, WEB_APP_AGENT_PANE_MARKER, WEB_APP_UI_VERSION_PATTERN, WEB_APP_UI_VERSION_MAX_CHARS, WEB_APP_CHAT_TEXT_MAX_CHARS, WEB_APP_CHAT_CONTEXT_MAX_BYTES, WEB_APP_CHAT_PATH_MAX_CHARS, WEB_APP_CHAT_HISTORY_DEFAULT_LIMIT, WEB_APP_CHAT_HISTORY_MAX_LIMIT, WEB_APP_CHAT_CONTROL_CHARS, WEB_APP_CHAT_APP_NAME_MAX_CHARS, 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, WEB_APP_HEALTH_KEY_TTL_SECONDS, WEB_APP_HEALTH_MIN_FAILURES, WEB_APP_HEALTH_MIN_FAILURE_RATIO, 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_OUT_OF_ACTIONS, 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, opaque, summaryHash, defaultWebAppBriefRequestSchema, DEFAULT_WEB_APP_BRIEF_SOURCES, defaultWebAppBriefUsageSchema, briefResponseBase, defaultWebAppBriefResponseSchema, defaultWebAppBriefKeyRequestSchema, defaultWebAppBriefKeyResponseSchema, DEFAULT_WEB_APP_BRIEF_ERROR_CODES, defaultWebAppBriefErrorSchema, SHARED_DATA_NAME_RE, SHARED_DATA_OWNER_PREFIX, SHARED_DATA_ERRORS, PLAN_KEYS, PLAN_LIMIT_KEYS, PLAN_FEATURE_KEYS, BILLING_ENGINES, BILLING_VERSION_KINDS, planKeyString, planPriceSchema, limitsShape, featuresShape, billingPlanSchema, topUpPackSchema, PLAN_REFUSAL_CODES, billingSignupConfigSchema, billingVersionDraftPatchSchema, billingVersionDraftCreateSchema, EXISTING_SUBSCRIPTION_POLICIES, billingVersionEditSchema, assignBillingPlanSchema, billingActionRatesSchema, BILLING_MOVE_DEFAULT_NOTICE_DAYS, BILLING_MOVE_NOTICE_KINDS, BILLING_MOVE_WHEN, keyString, emailTextSchema, billingMoveDraftSchema, billingMovePatchSchema, billingMoveOrgDateSchema, billingMoveEmailPreviewSchema, DWA_BUILD_MAX_BUNDLE_BYTES, sha256Hex, defaultWebAppBundleAssetSchema, defaultWebAppBundleToolSchema, defaultWebAppBundleSchema;
|
|
7808
7861
|
var init_dist = __esm({
|
|
7809
7862
|
"../shared-types/dist/index.mjs"() {
|
|
7810
7863
|
"use strict";
|
|
@@ -8026,6 +8079,7 @@ var init_dist = __esm({
|
|
|
8026
8079
|
"GET",
|
|
8027
8080
|
"HEAD"
|
|
8028
8081
|
];
|
|
8082
|
+
INTEGRATION_PASSTHROUGH_MAX_BASE64_RESPONSE_BYTES = 25 * 1024 * 1024;
|
|
8029
8083
|
__name(isIntegrationPassthroughReadMethod, "isIntegrationPassthroughReadMethod");
|
|
8030
8084
|
__name3(isIntegrationPassthroughReadMethod, "isIntegrationPassthroughReadMethod");
|
|
8031
8085
|
__name(connectionPermissionsAllowWrite, "connectionPermissionsAllowWrite");
|
|
@@ -10131,6 +10185,10 @@ var init_dist = __esm({
|
|
|
10131
10185
|
__name3(citationDedupeKeys, "citationDedupeKeys");
|
|
10132
10186
|
__name(foldRichPartsIntoMessages, "foldRichPartsIntoMessages");
|
|
10133
10187
|
__name3(foldRichPartsIntoMessages, "foldRichPartsIntoMessages");
|
|
10188
|
+
__name(readStoredReplyVersion, "readStoredReplyVersion");
|
|
10189
|
+
__name3(readStoredReplyVersion, "readStoredReplyVersion");
|
|
10190
|
+
__name(applyReplyVersions, "applyReplyVersions");
|
|
10191
|
+
__name3(applyReplyVersions, "applyReplyVersions");
|
|
10134
10192
|
WORK_ITEMS_KEY = "_luaWorkItems";
|
|
10135
10193
|
MAX_WORK_ITEMS = 100;
|
|
10136
10194
|
LIMITS = {
|
|
@@ -12926,6 +12984,8 @@ listed here; never invent a target.`;
|
|
|
12926
12984
|
WEB_APP_NAME_PATTERN = /^[a-z][a-z0-9-]*$/;
|
|
12927
12985
|
WEB_APP_TITLE_MAX_CHARS = 80;
|
|
12928
12986
|
WEB_APP_AGENT_PANE_MARKER = "__lua_agent_pane_v1__";
|
|
12987
|
+
WEB_APP_UI_VERSION_PATTERN = /^\d+\.\d+\.\d+(?:[-+][0-9A-Za-z.-]+)?$/;
|
|
12988
|
+
WEB_APP_UI_VERSION_MAX_CHARS = 64;
|
|
12929
12989
|
__name(agentPaneEnabled, "agentPaneEnabled");
|
|
12930
12990
|
__name3(agentPaneEnabled, "agentPaneEnabled");
|
|
12931
12991
|
__name(webAppChatThreadSuffix, "webAppChatThreadSuffix");
|
|
@@ -13766,6 +13826,74 @@ listed here; never invent a target.`;
|
|
|
13766
13826
|
}).strict().optional(),
|
|
13767
13827
|
timeout: customMcpTimeoutSchema.optional()
|
|
13768
13828
|
}).strict();
|
|
13829
|
+
opaque = z7.record(z7.unknown());
|
|
13830
|
+
summaryHash = z7.string().regex(/^[0-9a-f]{64}$/);
|
|
13831
|
+
defaultWebAppBriefRequestSchema = z7.object({
|
|
13832
|
+
agentId: z7.string().min(1).max(200),
|
|
13833
|
+
orgId: z7.string().min(1).max(200).optional(),
|
|
13834
|
+
/** A rebuild: the brief the app was built from. The new brief keeps its entity, fields and statuses. */
|
|
13835
|
+
previous: z7.object({
|
|
13836
|
+
brief: opaque
|
|
13837
|
+
}).optional(),
|
|
13838
|
+
/**
|
|
13839
|
+
* Another agent's brief (same template id + version) and the `summaryHash` it was made from. Used without a model
|
|
13840
|
+
* call only when the hash equals this agent's, its schema version is current and it is valid here; else ignored.
|
|
13841
|
+
*/
|
|
13842
|
+
reuse: z7.object({
|
|
13843
|
+
brief: opaque,
|
|
13844
|
+
summaryHash
|
|
13845
|
+
}).optional()
|
|
13846
|
+
});
|
|
13847
|
+
DEFAULT_WEB_APP_BRIEF_SOURCES = [
|
|
13848
|
+
"model",
|
|
13849
|
+
"fallback",
|
|
13850
|
+
"reused",
|
|
13851
|
+
"previous"
|
|
13852
|
+
];
|
|
13853
|
+
defaultWebAppBriefUsageSchema = z7.object({
|
|
13854
|
+
inputTokens: z7.number().nonnegative(),
|
|
13855
|
+
outputTokens: z7.number().nonnegative(),
|
|
13856
|
+
cacheReadTokens: z7.number().nonnegative(),
|
|
13857
|
+
cacheWriteTokens: z7.number().nonnegative()
|
|
13858
|
+
});
|
|
13859
|
+
briefResponseBase = z7.object({
|
|
13860
|
+
source: z7.enum(DEFAULT_WEB_APP_BRIEF_SOURCES),
|
|
13861
|
+
brief: opaque,
|
|
13862
|
+
names: opaque,
|
|
13863
|
+
capabilitySignature: z7.string().min(1),
|
|
13864
|
+
model: z7.string().optional(),
|
|
13865
|
+
usage: defaultWebAppBriefUsageSchema,
|
|
13866
|
+
costUsd: z7.number().nonnegative()
|
|
13867
|
+
});
|
|
13868
|
+
defaultWebAppBriefResponseSchema = z7.discriminatedUnion("reusable", [
|
|
13869
|
+
briefResponseBase.extend({
|
|
13870
|
+
reusable: z7.literal(true),
|
|
13871
|
+
summaryHash
|
|
13872
|
+
}),
|
|
13873
|
+
briefResponseBase.extend({
|
|
13874
|
+
reusable: z7.literal(false)
|
|
13875
|
+
})
|
|
13876
|
+
]);
|
|
13877
|
+
defaultWebAppBriefKeyRequestSchema = z7.object({
|
|
13878
|
+
agentId: z7.string().min(1).max(200)
|
|
13879
|
+
});
|
|
13880
|
+
defaultWebAppBriefKeyResponseSchema = z7.object({
|
|
13881
|
+
summaryHash,
|
|
13882
|
+
schemaVersion: z7.number().int().positive()
|
|
13883
|
+
});
|
|
13884
|
+
DEFAULT_WEB_APP_BRIEF_ERROR_CODES = [
|
|
13885
|
+
"AGENT_NOT_FOUND",
|
|
13886
|
+
"BRIEF_INVALID",
|
|
13887
|
+
"BRIEF_UNAVAILABLE"
|
|
13888
|
+
];
|
|
13889
|
+
defaultWebAppBriefErrorSchema = z7.object({
|
|
13890
|
+
code: z7.enum(DEFAULT_WEB_APP_BRIEF_ERROR_CODES),
|
|
13891
|
+
message: z7.string().optional(),
|
|
13892
|
+
problems: z7.array(z7.string()).optional(),
|
|
13893
|
+
model: z7.string().optional(),
|
|
13894
|
+
usage: defaultWebAppBriefUsageSchema.optional(),
|
|
13895
|
+
costUsd: z7.number().nonnegative().optional()
|
|
13896
|
+
});
|
|
13769
13897
|
__name(maskMcpServerHeaders, "maskMcpServerHeaders");
|
|
13770
13898
|
__name3(maskMcpServerHeaders, "maskMcpServerHeaders");
|
|
13771
13899
|
SHARED_DATA_NAME_RE = /^[A-Za-z0-9_.-]{1,128}$/;
|
|
@@ -13857,63 +13985,63 @@ listed here; never invent a target.`;
|
|
|
13857
13985
|
"catalog",
|
|
13858
13986
|
"custom"
|
|
13859
13987
|
];
|
|
13860
|
-
planKeyString =
|
|
13861
|
-
planPriceSchema =
|
|
13862
|
-
amountUsd:
|
|
13863
|
-
interval:
|
|
13988
|
+
planKeyString = z8.string().regex(/^[a-z0-9][a-z0-9-]{0,47}$/, "lowercase letters, digits and dashes");
|
|
13989
|
+
planPriceSchema = z8.object({
|
|
13990
|
+
amountUsd: z8.number().nonnegative(),
|
|
13991
|
+
interval: z8.enum([
|
|
13864
13992
|
"month",
|
|
13865
13993
|
"year"
|
|
13866
13994
|
]),
|
|
13867
|
-
per:
|
|
13995
|
+
per: z8.enum([
|
|
13868
13996
|
"workspace",
|
|
13869
13997
|
"seat"
|
|
13870
13998
|
])
|
|
13871
13999
|
}).strict();
|
|
13872
14000
|
limitsShape = Object.fromEntries(PLAN_LIMIT_KEYS.map((k) => [
|
|
13873
14001
|
k,
|
|
13874
|
-
|
|
14002
|
+
z8.number().int().nonnegative().nullable().optional()
|
|
13875
14003
|
]));
|
|
13876
14004
|
featuresShape = Object.fromEntries(PLAN_FEATURE_KEYS.map((k) => [
|
|
13877
14005
|
k,
|
|
13878
|
-
|
|
14006
|
+
z8.boolean().optional()
|
|
13879
14007
|
]));
|
|
13880
|
-
billingPlanSchema =
|
|
14008
|
+
billingPlanSchema = z8.object({
|
|
13881
14009
|
key: planKeyString,
|
|
13882
|
-
name:
|
|
14010
|
+
name: z8.string().min(1).max(80),
|
|
13883
14011
|
/** Absent = a workspace plan. An agent-team plan prices a hired team; it sets no limits or features. */
|
|
13884
|
-
kind:
|
|
14012
|
+
kind: z8.enum([
|
|
13885
14013
|
"workspace",
|
|
13886
14014
|
"agent-team"
|
|
13887
14015
|
]).optional(),
|
|
13888
|
-
tagline:
|
|
13889
|
-
visible:
|
|
13890
|
-
order:
|
|
14016
|
+
tagline: z8.string().max(200).optional(),
|
|
14017
|
+
visible: z8.boolean(),
|
|
14018
|
+
order: z8.number().int(),
|
|
13891
14019
|
price: planPriceSchema.nullable(),
|
|
13892
|
-
stripeProductId:
|
|
13893
|
-
stripePriceId:
|
|
13894
|
-
actionsPerPeriod:
|
|
13895
|
-
trialDays:
|
|
13896
|
-
limits:
|
|
13897
|
-
features:
|
|
13898
|
-
invoice:
|
|
13899
|
-
collectionMode:
|
|
14020
|
+
stripeProductId: z8.string().optional(),
|
|
14021
|
+
stripePriceId: z8.string().optional(),
|
|
14022
|
+
actionsPerPeriod: z8.number().int().nonnegative(),
|
|
14023
|
+
trialDays: z8.number().int().nonnegative().optional(),
|
|
14024
|
+
limits: z8.object(limitsShape).strict(),
|
|
14025
|
+
features: z8.object(featuresShape).strict(),
|
|
14026
|
+
invoice: z8.object({
|
|
14027
|
+
collectionMode: z8.enum([
|
|
13900
14028
|
"card",
|
|
13901
14029
|
"invoice"
|
|
13902
14030
|
]),
|
|
13903
|
-
dueDays:
|
|
13904
|
-
lines:
|
|
13905
|
-
description:
|
|
13906
|
-
amountUsd:
|
|
14031
|
+
dueDays: z8.number().int().nonnegative(),
|
|
14032
|
+
lines: z8.array(z8.object({
|
|
14033
|
+
description: z8.string().min(1),
|
|
14034
|
+
amountUsd: z8.number().nonnegative()
|
|
13907
14035
|
}).strict())
|
|
13908
14036
|
}).strict().optional()
|
|
13909
14037
|
}).strict();
|
|
13910
|
-
topUpPackSchema =
|
|
14038
|
+
topUpPackSchema = z8.object({
|
|
13911
14039
|
key: planKeyString,
|
|
13912
|
-
name:
|
|
13913
|
-
priceUsd:
|
|
13914
|
-
actions:
|
|
13915
|
-
stripeProductId:
|
|
13916
|
-
stripePriceId:
|
|
14040
|
+
name: z8.string().min(1).max(80),
|
|
14041
|
+
priceUsd: z8.number().positive(),
|
|
14042
|
+
actions: z8.number().int().positive(),
|
|
14043
|
+
stripeProductId: z8.string().optional(),
|
|
14044
|
+
stripePriceId: z8.string().optional()
|
|
13917
14045
|
}).strict();
|
|
13918
14046
|
__name(resolvePlanEntitlements, "resolvePlanEntitlements");
|
|
13919
14047
|
__name3(resolvePlanEntitlements, "resolvePlanEntitlements");
|
|
@@ -13924,67 +14052,191 @@ listed here; never invent a target.`;
|
|
|
13924
14052
|
];
|
|
13925
14053
|
__name(isPlanRefusal, "isPlanRefusal");
|
|
13926
14054
|
__name3(isPlanRefusal, "isPlanRefusal");
|
|
13927
|
-
billingSignupConfigSchema =
|
|
13928
|
-
enabled:
|
|
13929
|
-
defaultVersionKey:
|
|
13930
|
-
allowlistEmails:
|
|
13931
|
-
friendsPlan:
|
|
13932
|
-
versionKey:
|
|
14055
|
+
billingSignupConfigSchema = z8.object({
|
|
14056
|
+
enabled: z8.boolean(),
|
|
14057
|
+
defaultVersionKey: z8.string().min(1).nullable(),
|
|
14058
|
+
allowlistEmails: z8.array(z8.string().email().toLowerCase()).max(500),
|
|
14059
|
+
friendsPlan: z8.object({
|
|
14060
|
+
versionKey: z8.string().min(1),
|
|
13933
14061
|
planKey: planKeyString
|
|
13934
14062
|
}).strict().nullable()
|
|
13935
14063
|
}).strict();
|
|
13936
|
-
billingVersionDraftPatchSchema =
|
|
13937
|
-
revision:
|
|
13938
|
-
name:
|
|
13939
|
-
kind:
|
|
13940
|
-
engine:
|
|
13941
|
-
defaultPlanKey:
|
|
13942
|
-
plans:
|
|
13943
|
-
topUpPacks:
|
|
13944
|
-
forOrgIds:
|
|
13945
|
-
legacyCheckout:
|
|
13946
|
-
voiceAndDelegationAsActions:
|
|
13947
|
-
notes:
|
|
14064
|
+
billingVersionDraftPatchSchema = z8.object({
|
|
14065
|
+
revision: z8.number().int().nonnegative().optional(),
|
|
14066
|
+
name: z8.string().min(1).max(80).optional(),
|
|
14067
|
+
kind: z8.enum(BILLING_VERSION_KINDS).optional(),
|
|
14068
|
+
engine: z8.enum(BILLING_ENGINES).optional(),
|
|
14069
|
+
defaultPlanKey: z8.string().optional(),
|
|
14070
|
+
plans: z8.array(billingPlanSchema).optional(),
|
|
14071
|
+
topUpPacks: z8.array(topUpPackSchema).optional(),
|
|
14072
|
+
forOrgIds: z8.array(z8.string().min(1)).optional(),
|
|
14073
|
+
legacyCheckout: z8.boolean().optional(),
|
|
14074
|
+
voiceAndDelegationAsActions: z8.boolean().optional(),
|
|
14075
|
+
notes: z8.string().max(2e3).optional()
|
|
13948
14076
|
}).strict();
|
|
13949
14077
|
billingVersionDraftCreateSchema = billingVersionDraftPatchSchema.extend({
|
|
13950
|
-
key:
|
|
13951
|
-
copyFrom:
|
|
14078
|
+
key: z8.string().min(2),
|
|
14079
|
+
copyFrom: z8.string().optional()
|
|
13952
14080
|
}).strict();
|
|
13953
|
-
|
|
13954
|
-
|
|
13955
|
-
|
|
14081
|
+
EXISTING_SUBSCRIPTION_POLICIES = [
|
|
14082
|
+
"keep",
|
|
14083
|
+
"next-renewal"
|
|
14084
|
+
];
|
|
14085
|
+
billingVersionEditSchema = billingVersionDraftPatchSchema.extend({
|
|
14086
|
+
existingSubscriptions: z8.enum(EXISTING_SUBSCRIPTION_POLICIES).optional()
|
|
14087
|
+
}).strict();
|
|
14088
|
+
assignBillingPlanSchema = z8.object({
|
|
14089
|
+
versionKey: z8.string().min(1),
|
|
14090
|
+
planKey: z8.string().optional()
|
|
13956
14091
|
}).strict();
|
|
13957
14092
|
__name(planKeyList, "planKeyList");
|
|
13958
14093
|
__name3(planKeyList, "planKeyList");
|
|
13959
14094
|
__name(parseWith, "parseWith");
|
|
13960
14095
|
__name3(parseWith, "parseWith");
|
|
13961
|
-
billingActionRatesSchema =
|
|
13962
|
-
voiceActionsPerMinute:
|
|
14096
|
+
billingActionRatesSchema = z8.object({
|
|
14097
|
+
voiceActionsPerMinute: z8.number().nonnegative()
|
|
13963
14098
|
}).strict();
|
|
13964
14099
|
BILLING_MOVE_DEFAULT_NOTICE_DAYS = 90;
|
|
13965
|
-
|
|
13966
|
-
|
|
14100
|
+
BILLING_MOVE_NOTICE_KINDS = [
|
|
14101
|
+
"scheduled",
|
|
14102
|
+
"reminder",
|
|
14103
|
+
"done"
|
|
14104
|
+
];
|
|
14105
|
+
BILLING_MOVE_WHEN = [
|
|
14106
|
+
"notice",
|
|
14107
|
+
"now"
|
|
14108
|
+
];
|
|
14109
|
+
keyString = z9.string().regex(/^[a-z0-9][a-z0-9-]{1,63}$/, "lowercase letters, digits and dashes");
|
|
14110
|
+
emailTextSchema = z9.object({
|
|
14111
|
+
subject: z9.string().trim().min(1).max(200).optional(),
|
|
14112
|
+
title: z9.string().trim().min(1).max(200).optional(),
|
|
14113
|
+
body: z9.string().trim().min(1).max(2e3).optional()
|
|
14114
|
+
}).strict();
|
|
14115
|
+
billingMoveDraftSchema = z9.object({
|
|
13967
14116
|
key: keyString,
|
|
13968
|
-
name:
|
|
14117
|
+
name: z9.string().min(1).max(120),
|
|
13969
14118
|
fromVersionKey: keyString,
|
|
13970
14119
|
toVersionKey: keyString,
|
|
13971
14120
|
/** Every plan of the source version → a plan of the target version. */
|
|
13972
|
-
planMap:
|
|
13973
|
-
noticeDays:
|
|
14121
|
+
planMap: z9.record(z9.string().min(1), z9.string().min(1)),
|
|
14122
|
+
noticeDays: z9.number().int().min(0).max(730).default(BILLING_MOVE_DEFAULT_NOTICE_DAYS),
|
|
13974
14123
|
/** Absent ⇒ every org on the source version. */
|
|
13975
|
-
orgIds:
|
|
13976
|
-
excludeOrgIds:
|
|
13977
|
-
notes:
|
|
14124
|
+
orgIds: z9.array(z9.string().min(1)).max(1e4).optional(),
|
|
14125
|
+
excludeOrgIds: z9.array(z9.string().min(1)).max(1e4).default([]),
|
|
14126
|
+
notes: z9.string().max(2e3).optional(),
|
|
13978
14127
|
/** Actions per leftover credit when a credits version moves to an actions version; required then. */
|
|
13979
|
-
creditsToActionsRate:
|
|
14128
|
+
creditsToActionsRate: z9.number().positive().max(1e4).optional(),
|
|
14129
|
+
when: z9.enum(BILLING_MOVE_WHEN).default("notice"),
|
|
14130
|
+
/** Which owner emails this move sends; all off sends nothing. */
|
|
14131
|
+
emails: z9.object({
|
|
14132
|
+
scheduled: z9.boolean(),
|
|
14133
|
+
reminder: z9.boolean(),
|
|
14134
|
+
done: z9.boolean()
|
|
14135
|
+
}).strict().default({
|
|
14136
|
+
scheduled: true,
|
|
14137
|
+
reminder: true,
|
|
14138
|
+
done: true
|
|
14139
|
+
}),
|
|
14140
|
+
/** Staff wording per email, replacing ours; the list of what changes is always added. */
|
|
14141
|
+
emailText: z9.object({
|
|
14142
|
+
scheduled: emailTextSchema.optional(),
|
|
14143
|
+
reminder: emailTextSchema.optional(),
|
|
14144
|
+
done: emailTextSchema.optional()
|
|
14145
|
+
}).strict().optional()
|
|
13980
14146
|
}).strict().refine((m) => m.fromVersionKey !== m.toVersionKey, {
|
|
13981
14147
|
message: "source and target version must differ"
|
|
13982
14148
|
});
|
|
13983
|
-
|
|
13984
|
-
|
|
14149
|
+
billingMovePatchSchema = z9.object({
|
|
14150
|
+
name: z9.string().min(1).max(120).optional(),
|
|
14151
|
+
noticeDays: z9.number().int().min(0).max(730).optional(),
|
|
14152
|
+
when: z9.enum(BILLING_MOVE_WHEN).optional(),
|
|
14153
|
+
emails: z9.object({
|
|
14154
|
+
scheduled: z9.boolean(),
|
|
14155
|
+
reminder: z9.boolean(),
|
|
14156
|
+
done: z9.boolean()
|
|
14157
|
+
}).strict().optional(),
|
|
14158
|
+
emailText: z9.object({
|
|
14159
|
+
scheduled: emailTextSchema.optional(),
|
|
14160
|
+
reminder: emailTextSchema.optional(),
|
|
14161
|
+
done: emailTextSchema.optional()
|
|
14162
|
+
}).strict().optional(),
|
|
14163
|
+
notes: z9.string().max(2e3).optional()
|
|
14164
|
+
}).strict();
|
|
14165
|
+
billingMoveOrgDateSchema = z9.object({
|
|
14166
|
+
effectiveAt: z9.coerce.date()
|
|
14167
|
+
}).strict();
|
|
14168
|
+
billingMoveEmailPreviewSchema = z9.object({
|
|
14169
|
+
orgId: z9.string().min(1).optional(),
|
|
14170
|
+
kind: z9.enum(BILLING_MOVE_NOTICE_KINDS),
|
|
14171
|
+
/** Unsaved wording to try, so the dialog shows the email before the move is created. */
|
|
14172
|
+
subject: z9.string().max(200).optional(),
|
|
14173
|
+
title: z9.string().max(200).optional(),
|
|
14174
|
+
body: z9.string().max(2e3).optional()
|
|
13985
14175
|
}).strict();
|
|
13986
14176
|
__name(parseWith2, "parseWith2");
|
|
13987
14177
|
__name3(parseWith2, "parseWith");
|
|
14178
|
+
DWA_BUILD_MAX_BUNDLE_BYTES = 12 * 1024 * 1024;
|
|
14179
|
+
sha256Hex = z10.string().regex(/^[a-f0-9]{64}$/);
|
|
14180
|
+
defaultWebAppBundleAssetSchema = z10.object({
|
|
14181
|
+
path: z10.string().min(1).max(512),
|
|
14182
|
+
hash: sha256Hex,
|
|
14183
|
+
size: z10.number().int().nonnegative().max(WEB_APP_MAX_ASSET_BYTES),
|
|
14184
|
+
contentType: z10.string().min(1).max(200),
|
|
14185
|
+
base64: z10.string()
|
|
14186
|
+
});
|
|
14187
|
+
defaultWebAppBundleToolSchema = z10.object({
|
|
14188
|
+
name: z10.string().min(1).max(64),
|
|
14189
|
+
description: z10.string().max(2e3),
|
|
14190
|
+
inputSchema: z10.unknown().optional(),
|
|
14191
|
+
outputSchema: z10.unknown().optional(),
|
|
14192
|
+
/** gzip + base64, as `lua push skill` sends a tool. */
|
|
14193
|
+
code: z10.string().min(1)
|
|
14194
|
+
});
|
|
14195
|
+
defaultWebAppBundleSchema = z10.object({
|
|
14196
|
+
format: z10.literal(1),
|
|
14197
|
+
templateVersion: z10.string().regex(/^\d+\.\d+\.\d+$/),
|
|
14198
|
+
webApp: z10.object({
|
|
14199
|
+
name: z10.string().regex(/^[a-z][a-z0-9-]{1,39}$/),
|
|
14200
|
+
title: z10.string().max(200).optional(),
|
|
14201
|
+
description: z10.string().max(1e3).optional(),
|
|
14202
|
+
routes: z10.array(z10.object({
|
|
14203
|
+
key: z10.string(),
|
|
14204
|
+
method: z10.string(),
|
|
14205
|
+
path: z10.string(),
|
|
14206
|
+
description: z10.string().optional()
|
|
14207
|
+
}).passthrough()).min(1),
|
|
14208
|
+
hasFetch: z10.boolean(),
|
|
14209
|
+
nav: z10.array(z10.object({
|
|
14210
|
+
path: z10.string(),
|
|
14211
|
+
label: z10.string(),
|
|
14212
|
+
icon: z10.string().optional()
|
|
14213
|
+
}).passthrough()),
|
|
14214
|
+
csp: z10.record(z10.array(z10.string())).optional(),
|
|
14215
|
+
branding: z10.record(z10.unknown()).optional(),
|
|
14216
|
+
bundlesAgentPane: z10.boolean(),
|
|
14217
|
+
uiVersion: z10.string().max(64).optional(),
|
|
14218
|
+
entryHtml: z10.string().min(1).max(WEB_APP_ENTRY_HTML_MAX_CHARS),
|
|
14219
|
+
/** The route bundle, uncompressed. */
|
|
14220
|
+
code: z10.string().min(1),
|
|
14221
|
+
codeSha256: sha256Hex,
|
|
14222
|
+
assets: z10.array(defaultWebAppBundleAssetSchema).max(WEB_APP_MAX_ASSETS),
|
|
14223
|
+
compiler: z10.object({
|
|
14224
|
+
vite: z10.string().optional()
|
|
14225
|
+
})
|
|
14226
|
+
}),
|
|
14227
|
+
skill: z10.object({
|
|
14228
|
+
name: z10.string().regex(/^dwa-[a-z0-9-]+$/),
|
|
14229
|
+
title: z10.string().max(200).optional(),
|
|
14230
|
+
description: z10.string().min(1).max(2e3),
|
|
14231
|
+
context: z10.unknown(),
|
|
14232
|
+
tools: z10.array(defaultWebAppBundleToolSchema).min(1).max(10)
|
|
14233
|
+
}),
|
|
14234
|
+
/** What the pod's smoke run answered, route by route: every one 2xx or the build failed. */
|
|
14235
|
+
smoke: z10.array(z10.object({
|
|
14236
|
+
route: z10.string(),
|
|
14237
|
+
status: z10.number().int()
|
|
14238
|
+
})).min(1)
|
|
14239
|
+
});
|
|
13988
14240
|
}
|
|
13989
14241
|
});
|
|
13990
14242
|
|
|
@@ -15094,7 +15346,7 @@ var init_lua_fetch = __esm({
|
|
|
15094
15346
|
});
|
|
15095
15347
|
|
|
15096
15348
|
// src/services/firebase-session.ts
|
|
15097
|
-
import { z as
|
|
15349
|
+
import { z as z11 } from "zod";
|
|
15098
15350
|
function rejectedRefreshReason(message) {
|
|
15099
15351
|
const normalised = message.toUpperCase();
|
|
15100
15352
|
return REJECTED_REFRESH_REASONS.find((reason) => normalised.includes(reason));
|
|
@@ -15240,20 +15492,20 @@ var init_firebase_session = __esm({
|
|
|
15240
15492
|
this.name = "FirebaseSessionRejectedError";
|
|
15241
15493
|
}
|
|
15242
15494
|
};
|
|
15243
|
-
customTokenResponseSchema =
|
|
15244
|
-
idToken:
|
|
15245
|
-
refreshToken:
|
|
15246
|
-
expiresIn:
|
|
15247
|
-
localId:
|
|
15495
|
+
customTokenResponseSchema = z11.object({
|
|
15496
|
+
idToken: z11.string().min(1),
|
|
15497
|
+
refreshToken: z11.string().min(1),
|
|
15498
|
+
expiresIn: z11.coerce.number().positive().finite(),
|
|
15499
|
+
localId: z11.string().min(1).optional()
|
|
15248
15500
|
});
|
|
15249
|
-
refreshResponseSchema =
|
|
15250
|
-
id_token:
|
|
15251
|
-
refresh_token:
|
|
15252
|
-
expires_in:
|
|
15253
|
-
user_id:
|
|
15501
|
+
refreshResponseSchema = z11.object({
|
|
15502
|
+
id_token: z11.string().min(1),
|
|
15503
|
+
refresh_token: z11.string().min(1),
|
|
15504
|
+
expires_in: z11.coerce.number().positive().finite(),
|
|
15505
|
+
user_id: z11.string().min(1)
|
|
15254
15506
|
});
|
|
15255
|
-
firebaseIdTokenPayloadSchema =
|
|
15256
|
-
sub:
|
|
15507
|
+
firebaseIdTokenPayloadSchema = z11.object({
|
|
15508
|
+
sub: z11.string().min(1)
|
|
15257
15509
|
});
|
|
15258
15510
|
__name(requireFirebaseWebApiKey, "requireFirebaseWebApiKey");
|
|
15259
15511
|
__name(claimsOfFirebaseIdToken, "claimsOfFirebaseIdToken");
|
|
@@ -15270,7 +15522,7 @@ var init_firebase_session = __esm({
|
|
|
15270
15522
|
import { createHash, randomUUID } from "crypto";
|
|
15271
15523
|
import { mkdir, open, readFile, rename, rm, stat, unlink, writeFile } from "fs/promises";
|
|
15272
15524
|
import { join as join3 } from "path";
|
|
15273
|
-
import { z as
|
|
15525
|
+
import { z as z12 } from "zod";
|
|
15274
15526
|
function environmentKey(environment) {
|
|
15275
15527
|
return createHash("sha256").update(`${environment.apiUrl}
|
|
15276
15528
|
${environment.authUrl}
|
|
@@ -15287,15 +15539,15 @@ var init_firebase_session_store = __esm({
|
|
|
15287
15539
|
"src/services/firebase-session-store.ts"() {
|
|
15288
15540
|
"use strict";
|
|
15289
15541
|
init_constants();
|
|
15290
|
-
storedFirebaseSessionSchema =
|
|
15291
|
-
version:
|
|
15292
|
-
kind:
|
|
15293
|
-
generation:
|
|
15294
|
-
refreshToken:
|
|
15295
|
-
firebaseUid:
|
|
15296
|
-
apiUrl:
|
|
15297
|
-
authUrl:
|
|
15298
|
-
firebaseWebApiKey:
|
|
15542
|
+
storedFirebaseSessionSchema = z12.object({
|
|
15543
|
+
version: z12.literal(1),
|
|
15544
|
+
kind: z12.literal("firebase-session"),
|
|
15545
|
+
generation: z12.string().min(1),
|
|
15546
|
+
refreshToken: z12.string().min(1),
|
|
15547
|
+
firebaseUid: z12.string().min(1),
|
|
15548
|
+
apiUrl: z12.string().url(),
|
|
15549
|
+
authUrl: z12.string().url(),
|
|
15550
|
+
firebaseWebApiKey: z12.string().min(1)
|
|
15299
15551
|
});
|
|
15300
15552
|
currentFirebaseSessionEnvironment = /* @__PURE__ */ __name(() => ({
|
|
15301
15553
|
apiUrl: BASE_URLS.API,
|
|
@@ -15853,7 +16105,7 @@ var init_workflow_job_tools = __esm({
|
|
|
15853
16105
|
|
|
15854
16106
|
// ../workflow-graph/dist/index.mjs
|
|
15855
16107
|
import { createHash as createHash2 } from "crypto";
|
|
15856
|
-
import { z as
|
|
16108
|
+
import { z as z13 } from "zod";
|
|
15857
16109
|
import { z as z22 } from "zod";
|
|
15858
16110
|
import { createHash as createHash22 } from "crypto";
|
|
15859
16111
|
function isMapConfigObject(v) {
|
|
@@ -19580,8 +19832,8 @@ var init_dist2 = __esm({
|
|
|
19580
19832
|
fromKnowledge = /* @__PURE__ */ __name6((k) => ({
|
|
19581
19833
|
knowledge: k
|
|
19582
19834
|
}), "fromKnowledge");
|
|
19583
|
-
SideEffectsSchema =
|
|
19584
|
-
JobResourcesSchema =
|
|
19835
|
+
SideEffectsSchema = z13.enum(WORKFLOW_SIDE_EFFECTS);
|
|
19836
|
+
JobResourcesSchema = z13.enum(WORKFLOW_JOB_RESOURCES);
|
|
19585
19837
|
WORKFLOW_MODEL_TEMPLATE_ROOT = "initData";
|
|
19586
19838
|
WORKFLOW_MODEL_TEMPLATE_RE = /^\$\{\s*initData\.([A-Za-z0-9_.\-[\]]+)\s*(?:\|([^}]*))?\}$/;
|
|
19587
19839
|
PATH_SEGMENT_RE = /^[A-Za-z0-9_-]+(?:\[(?:0|[1-9]\d*)\])*$/;
|
|
@@ -22299,19 +22551,19 @@ import { gunzipSync as gunzipSync2, gzipSync as gzipSync2 } from "zlib";
|
|
|
22299
22551
|
function hashContentTruncated(content) {
|
|
22300
22552
|
return createHash3("sha256").update(content).digest("hex").slice(0, FILE_HASH_LENGTH);
|
|
22301
22553
|
}
|
|
22302
|
-
function
|
|
22554
|
+
function sha256Hex2(content) {
|
|
22303
22555
|
return createHash3("sha256").update(content).digest("hex");
|
|
22304
22556
|
}
|
|
22305
22557
|
function matchesFileHash(hash, plaintext) {
|
|
22306
22558
|
if (!/^(?:[a-f0-9]{16}|[a-f0-9]{64})$/.test(hash)) return false;
|
|
22307
|
-
if (
|
|
22308
|
-
return
|
|
22559
|
+
if (sha256Hex2(plaintext).startsWith(hash)) return true;
|
|
22560
|
+
return sha256Hex2(plaintext.toString("utf-8")).startsWith(hash);
|
|
22309
22561
|
}
|
|
22310
22562
|
function combineFileHashes(files) {
|
|
22311
22563
|
const sorted = [
|
|
22312
22564
|
...files
|
|
22313
22565
|
].sort((a, b) => a.relativePath.localeCompare(b.relativePath));
|
|
22314
|
-
return
|
|
22566
|
+
return sha256Hex2(sorted.map((f) => f.hash).join("|"));
|
|
22315
22567
|
}
|
|
22316
22568
|
function shouldSkipDirectory(name) {
|
|
22317
22569
|
return SKIP_DIRECTORIES.has(name);
|
|
@@ -22630,8 +22882,8 @@ var init_dist3 = __esm({
|
|
|
22630
22882
|
FILE_HASH_LENGTH = 16;
|
|
22631
22883
|
__name(hashContentTruncated, "hashContentTruncated");
|
|
22632
22884
|
__name7(hashContentTruncated, "hashContentTruncated");
|
|
22633
|
-
__name(
|
|
22634
|
-
__name7(
|
|
22885
|
+
__name(sha256Hex2, "sha256Hex");
|
|
22886
|
+
__name7(sha256Hex2, "sha256Hex");
|
|
22635
22887
|
__name(matchesFileHash, "matchesFileHash");
|
|
22636
22888
|
__name7(matchesFileHash, "matchesFileHash");
|
|
22637
22889
|
__name(combineFileHashes, "combineFileHashes");
|
|
@@ -23759,7 +24011,27 @@ var init_base_handler = __esm({
|
|
|
23759
24011
|
}
|
|
23760
24012
|
});
|
|
23761
24013
|
|
|
24014
|
+
// src/utils/server-refusal.ts
|
|
24015
|
+
function printableRefusal(error, code) {
|
|
24016
|
+
if (error?.code !== code || typeof error.message !== "string") return null;
|
|
24017
|
+
const message = error.message.replace(new RegExp("\\p{C}", "gu"), "").trim();
|
|
24018
|
+
return message || null;
|
|
24019
|
+
}
|
|
24020
|
+
function isSystemOwned(item) {
|
|
24021
|
+
return item?.systemOwned === true;
|
|
24022
|
+
}
|
|
24023
|
+
var init_server_refusal = __esm({
|
|
24024
|
+
"src/utils/server-refusal.ts"() {
|
|
24025
|
+
"use strict";
|
|
24026
|
+
__name(printableRefusal, "printableRefusal");
|
|
24027
|
+
__name(isSystemOwned, "isSystemOwned");
|
|
24028
|
+
}
|
|
24029
|
+
});
|
|
24030
|
+
|
|
23762
24031
|
// src/primitives/skill.handler.ts
|
|
24032
|
+
function skillNameReservedMessage(error) {
|
|
24033
|
+
return printableRefusal(error, "SKILL_NAME_RESERVED");
|
|
24034
|
+
}
|
|
23763
24035
|
var SkillHandler, skillHandler;
|
|
23764
24036
|
var init_skill_handler = __esm({
|
|
23765
24037
|
"src/primitives/skill.handler.ts"() {
|
|
@@ -23769,9 +24041,11 @@ var init_skill_handler = __esm({
|
|
|
23769
24041
|
init_constants();
|
|
23770
24042
|
init_skills_api_service();
|
|
23771
24043
|
init_base_handler();
|
|
24044
|
+
init_server_refusal();
|
|
23772
24045
|
init_artifact_loader();
|
|
23773
24046
|
init_bundle_upload();
|
|
23774
24047
|
init_files();
|
|
24048
|
+
__name(skillNameReservedMessage, "skillNameReservedMessage");
|
|
23775
24049
|
SkillHandler = class extends BaseVersionedHandler {
|
|
23776
24050
|
static {
|
|
23777
24051
|
__name(this, "SkillHandler");
|
|
@@ -23790,7 +24064,7 @@ var init_skill_handler = __esm({
|
|
|
23790
24064
|
async fetchFromServer(api) {
|
|
23791
24065
|
const response = await api.getSkills();
|
|
23792
24066
|
if (!response.success || !response.data?.skills) return null;
|
|
23793
|
-
return response.data.skills;
|
|
24067
|
+
return response.data.skills.filter((skill) => !isSystemOwned(skill));
|
|
23794
24068
|
}
|
|
23795
24069
|
async createOnServer(api, primitive) {
|
|
23796
24070
|
const skill = primitive;
|
|
@@ -23801,7 +24075,11 @@ var init_skill_handler = __esm({
|
|
|
23801
24075
|
context: skill.context
|
|
23802
24076
|
} : {}
|
|
23803
24077
|
});
|
|
23804
|
-
if (!response.success || !response.data?.id)
|
|
24078
|
+
if (!response.success || !response.data?.id) {
|
|
24079
|
+
const reserved = skillNameReservedMessage(response.error);
|
|
24080
|
+
if (reserved) throw new Error(reserved);
|
|
24081
|
+
return null;
|
|
24082
|
+
}
|
|
23805
24083
|
return response.data.id;
|
|
23806
24084
|
}
|
|
23807
24085
|
isActive(serverItem) {
|
|
@@ -25156,8 +25434,8 @@ function unwrapExpression(node) {
|
|
|
25156
25434
|
function findImportSource(identifier, sourceFile, resolveImportPath) {
|
|
25157
25435
|
for (const importDecl of sourceFile.getImportDeclarations()) {
|
|
25158
25436
|
const defaultImport = importDecl.getDefaultImport();
|
|
25159
|
-
const
|
|
25160
|
-
const isMatch = defaultImport && defaultImport.getText() === identifier ||
|
|
25437
|
+
const namedImports2 = importDecl.getNamedImports();
|
|
25438
|
+
const isMatch = defaultImport && defaultImport.getText() === identifier || namedImports2.some((named) => named.getName() === identifier);
|
|
25161
25439
|
if (isMatch) {
|
|
25162
25440
|
return resolveImportPath(importDecl.getModuleSpecifierValue(), sourceFile.getFilePath());
|
|
25163
25441
|
}
|
|
@@ -25812,7 +26090,7 @@ async function ensureSchemaConverterReady() {
|
|
|
25812
26090
|
await loadVendor();
|
|
25813
26091
|
}
|
|
25814
26092
|
async function zodToJsonSchema2(schemaNode) {
|
|
25815
|
-
const { z:
|
|
26093
|
+
const { z: z15, zodToJsonSchema: convertSchema } = await loadVendor();
|
|
25816
26094
|
try {
|
|
25817
26095
|
const sourceFile = schemaNode.getSourceFile();
|
|
25818
26096
|
const project = sourceFile.getProject();
|
|
@@ -25825,7 +26103,7 @@ async function zodToJsonSchema2(schemaNode) {
|
|
|
25825
26103
|
environment: {
|
|
25826
26104
|
preset: "NODE",
|
|
25827
26105
|
extra: {
|
|
25828
|
-
z:
|
|
26106
|
+
z: z15
|
|
25829
26107
|
}
|
|
25830
26108
|
},
|
|
25831
26109
|
policy: {
|
|
@@ -25873,10 +26151,10 @@ function cleanJsonSchema(schema) {
|
|
|
25873
26151
|
return cleanSchema;
|
|
25874
26152
|
}
|
|
25875
26153
|
async function zodStringToJsonSchema(zodSchemaCode) {
|
|
25876
|
-
const { z:
|
|
26154
|
+
const { z: z15, zodToJsonSchema: convertSchema } = await loadVendor();
|
|
25877
26155
|
try {
|
|
25878
26156
|
const evalFunction = new Function("z", `return ${zodSchemaCode}`);
|
|
25879
|
-
const zodSchema = evalFunction(
|
|
26157
|
+
const zodSchema = evalFunction(z15);
|
|
25880
26158
|
const jsonSchema = convertSchema(zodSchema, {
|
|
25881
26159
|
target: "jsonSchema7"
|
|
25882
26160
|
});
|
|
@@ -33635,7 +33913,7 @@ function collectBuilderCalls(expr) {
|
|
|
33635
33913
|
function serializeViaAst(sourceFile, exportName) {
|
|
33636
33914
|
const expr = locateWorkflowExpression(sourceFile, exportName);
|
|
33637
33915
|
if (!expr) return void 0;
|
|
33638
|
-
const
|
|
33916
|
+
const z15 = zodModule.z;
|
|
33639
33917
|
const committed = [];
|
|
33640
33918
|
const prev = __workflowCommitHook.onCommit;
|
|
33641
33919
|
__workflowCommitHook.onCommit = (wf) => committed.push(wf);
|
|
@@ -33648,7 +33926,7 @@ function serializeViaAst(sourceFile, exportName) {
|
|
|
33648
33926
|
preset: "NODE",
|
|
33649
33927
|
extra: {
|
|
33650
33928
|
...PRIMITIVE_SHIMS,
|
|
33651
|
-
z:
|
|
33929
|
+
z: z15,
|
|
33652
33930
|
env: Object.assign(() => "", {
|
|
33653
33931
|
template: /* @__PURE__ */ __name((k) => ({
|
|
33654
33932
|
__envRef: k
|
|
@@ -39468,13 +39746,13 @@ var init_data_entry_instance = __esm({
|
|
|
39468
39746
|
/**
|
|
39469
39747
|
* Updates the custom data entry
|
|
39470
39748
|
* @param data - The data fields to update (partial update supported)
|
|
39471
|
-
* @param
|
|
39749
|
+
* @param optionsOrSearchText - `{ searchText?, index? }` (as `Data.update`), or a bare string (legacy `searchText`)
|
|
39472
39750
|
* @returns Promise resolving to the updated data
|
|
39473
39751
|
* @throws Error if the update fails
|
|
39474
39752
|
*/
|
|
39475
|
-
async update(data,
|
|
39753
|
+
async update(data, optionsOrSearchText) {
|
|
39476
39754
|
try {
|
|
39477
|
-
const result = await this.customDataAPI.update(this.collectionName, this.id, data,
|
|
39755
|
+
const result = await this.customDataAPI.update(this.collectionName, this.id, data, optionsOrSearchText);
|
|
39478
39756
|
this.data = {
|
|
39479
39757
|
...this.data,
|
|
39480
39758
|
...data
|
|
@@ -39535,13 +39813,13 @@ var init_data_entry_instance = __esm({
|
|
|
39535
39813
|
}
|
|
39536
39814
|
/**
|
|
39537
39815
|
* Saves the data entry
|
|
39538
|
-
* @param
|
|
39816
|
+
* @param optionsOrSearchText - `{ searchText?, index? }` (as `Data.update`), or a bare string (legacy `searchText`)
|
|
39539
39817
|
* @returns Promise resolving to true if saving was successful
|
|
39540
39818
|
* @throws Error if the save operation fails
|
|
39541
39819
|
*/
|
|
39542
|
-
async save(
|
|
39820
|
+
async save(optionsOrSearchText) {
|
|
39543
39821
|
try {
|
|
39544
|
-
await this.customDataAPI.update(this.collectionName, this.id, this.data,
|
|
39822
|
+
await this.customDataAPI.update(this.collectionName, this.id, this.data, optionsOrSearchText);
|
|
39545
39823
|
return true;
|
|
39546
39824
|
} catch (error) {
|
|
39547
39825
|
throw new Error("Failed to save data entry", {
|
|
@@ -45263,6 +45541,7 @@ var PostProcessorApi = class extends HttpClient {
|
|
|
45263
45541
|
// src/utils/sync-fetch.ts
|
|
45264
45542
|
init_developer_api_service();
|
|
45265
45543
|
init_mcp_server_handler();
|
|
45544
|
+
init_server_refusal();
|
|
45266
45545
|
function normalizeForComparison(str3) {
|
|
45267
45546
|
return str3.trim().replace(/\\'/g, "'").replace(/\\"/g, '"').replace(/\\\\/g, "\\").replace(/\r\n/g, "\n").replace(/\r/g, "\n");
|
|
45268
45547
|
}
|
|
@@ -45391,7 +45670,7 @@ async function fetchServerPrimitives(apiKey, agentId2) {
|
|
|
45391
45670
|
postProcessorApi.getPostProcessors().catch(() => null),
|
|
45392
45671
|
developerApi.getMCPServers().catch(() => null)
|
|
45393
45672
|
]);
|
|
45394
|
-
const skills = skillsRes?.success && skillsRes.data?.skills ? skillsRes.data.skills.map((s) => ({
|
|
45673
|
+
const skills = skillsRes?.success && skillsRes.data?.skills ? skillsRes.data.skills.filter((s) => !isSystemOwned(s)).map((s) => ({
|
|
45395
45674
|
id: s.id,
|
|
45396
45675
|
name: s.name,
|
|
45397
45676
|
activeVersion: resolveActiveVersion(s.versions)
|
|
@@ -50095,7 +50374,11 @@ function createOfflineThreadsApi() {
|
|
|
50095
50374
|
}, "open"),
|
|
50096
50375
|
followUp: /* @__PURE__ */ __name(async () => {
|
|
50097
50376
|
throw unavailable("followUp");
|
|
50098
|
-
}, "followUp")
|
|
50377
|
+
}, "followUp"),
|
|
50378
|
+
resetContext: /* @__PURE__ */ __name(async () => ({
|
|
50379
|
+
status: "skipped",
|
|
50380
|
+
reason: "unavailable"
|
|
50381
|
+
}), "resetContext")
|
|
50099
50382
|
};
|
|
50100
50383
|
}
|
|
50101
50384
|
__name(createOfflineThreadsApi, "createOfflineThreadsApi");
|
|
@@ -53719,6 +54002,67 @@ function detectBundledAgentPane(pagesDir, assets) {
|
|
|
53719
54002
|
return dependsOnAppChat(pagesDir) && sourceImportsAppChat(pagesDir);
|
|
53720
54003
|
}
|
|
53721
54004
|
__name(detectBundledAgentPane, "detectBundledAgentPane");
|
|
54005
|
+
var UI_PACKAGE = "@lua-ai-global/ui";
|
|
54006
|
+
function resolvedUiVersion(pagesDir) {
|
|
54007
|
+
return resolvedPackageVersion(pagesDir, UI_PACKAGE);
|
|
54008
|
+
}
|
|
54009
|
+
__name(resolvedUiVersion, "resolvedUiVersion");
|
|
54010
|
+
var APP_CLIENT_PACKAGE = "@lua-ai-global/app-client";
|
|
54011
|
+
var THEME_APP_CLIENT_VERSION = "0.1.0";
|
|
54012
|
+
var PAGE_THEME_CODE = /['"]dark['"]|\.theme\b/;
|
|
54013
|
+
function appClientThemeWarning(pagesDir) {
|
|
54014
|
+
const main = [
|
|
54015
|
+
"main.tsx",
|
|
54016
|
+
"main.jsx"
|
|
54017
|
+
].map((f) => path23.join(pagesDir, "src", f)).find((f) => fs19.existsSync(f));
|
|
54018
|
+
if (!main || PAGE_THEME_CODE.test(fs19.readFileSync(main, "utf8"))) return void 0;
|
|
54019
|
+
const installed = resolvedPackageVersion(pagesDir, APP_CLIENT_PACKAGE);
|
|
54020
|
+
if (!installed || compareSemver(installed, THEME_APP_CLIENT_VERSION) >= 0) return void 0;
|
|
54021
|
+
return `The pages rely on ${APP_CLIENT_PACKAGE} \u2265 0.1 to apply light/dark and the accent, but ${installed} is installed: run npm install in ${path23.basename(pagesDir)}/.`;
|
|
54022
|
+
}
|
|
54023
|
+
__name(appClientThemeWarning, "appClientThemeWarning");
|
|
54024
|
+
var CURRENT_DESIGN_UI_VERSION = "0.3.0";
|
|
54025
|
+
function uiDesignWarning(pagesDir, appName) {
|
|
54026
|
+
const installed = resolvedUiVersion(pagesDir);
|
|
54027
|
+
if (!installed || compareSemver(installed, CURRENT_DESIGN_UI_VERSION) >= 0) return void 0;
|
|
54028
|
+
const name = appName !== void 0 && WEB_APP_NAME_PATTERN.test(appName) ? appName : "<name>";
|
|
54029
|
+
const majorMinor = /^(\d+)\.(\d+)/.exec(CURRENT_DESIGN_UI_VERSION);
|
|
54030
|
+
const current = majorMinor ? `${majorMinor[1]}.${majorMinor[2]}` : CURRENT_DESIGN_UI_VERSION;
|
|
54031
|
+
return `The pages are built with ${UI_PACKAGE} ${installed}, the design before Lua Workspace's current one. Run lua apps upgrade ${name} to move them to ui ${current} (the gateway restyles older apps in the meantime).`;
|
|
54032
|
+
}
|
|
54033
|
+
__name(uiDesignWarning, "uiDesignWarning");
|
|
54034
|
+
function pageWarnings(pagesDir, appName) {
|
|
54035
|
+
return [
|
|
54036
|
+
appClientThemeWarning(pagesDir),
|
|
54037
|
+
uiDesignWarning(pagesDir, appName)
|
|
54038
|
+
].filter((w) => w !== void 0);
|
|
54039
|
+
}
|
|
54040
|
+
__name(pageWarnings, "pageWarnings");
|
|
54041
|
+
function compareSemver(a, b) {
|
|
54042
|
+
const parts = /* @__PURE__ */ __name((v) => v.split("+")[0].split("-")[0].split(".").map(Number), "parts");
|
|
54043
|
+
const isPrerelease = /* @__PURE__ */ __name((v) => v.split("+")[0].includes("-"), "isPrerelease");
|
|
54044
|
+
const [x, y] = [
|
|
54045
|
+
parts(a),
|
|
54046
|
+
parts(b)
|
|
54047
|
+
];
|
|
54048
|
+
return x[0] - y[0] || x[1] - y[1] || x[2] - y[2] || Number(isPrerelease(b)) - Number(isPrerelease(a));
|
|
54049
|
+
}
|
|
54050
|
+
__name(compareSemver, "compareSemver");
|
|
54051
|
+
function resolvedPackageVersion(pagesDir, pkg2) {
|
|
54052
|
+
for (let dir = path23.resolve(pagesDir); ; dir = path23.dirname(dir)) {
|
|
54053
|
+
const manifest = path23.join(dir, "node_modules", ...pkg2.split("/"), "package.json");
|
|
54054
|
+
if (fs19.existsSync(manifest)) {
|
|
54055
|
+
try {
|
|
54056
|
+
const version = JSON.parse(fs19.readFileSync(manifest, "utf8")).version;
|
|
54057
|
+
return typeof version === "string" && version.length <= WEB_APP_UI_VERSION_MAX_CHARS && WEB_APP_UI_VERSION_PATTERN.test(version) ? version : void 0;
|
|
54058
|
+
} catch {
|
|
54059
|
+
return void 0;
|
|
54060
|
+
}
|
|
54061
|
+
}
|
|
54062
|
+
if (path23.dirname(dir) === dir) return void 0;
|
|
54063
|
+
}
|
|
54064
|
+
}
|
|
54065
|
+
__name(resolvedPackageVersion, "resolvedPackageVersion");
|
|
53722
54066
|
async function buildWebAppPages(pagesDir, loadVite = loadAppVite) {
|
|
53723
54067
|
if (!fs19.existsSync(path23.join(pagesDir, "index.html"))) {
|
|
53724
54068
|
throw new WebAppBuildError(`${pagesDir} has no index.html: \`pages.root\` must name the Vite project directory.`);
|
|
@@ -53741,10 +54085,14 @@ async function buildWebAppPages(pagesDir, loadVite = loadAppVite) {
|
|
|
53741
54085
|
}
|
|
53742
54086
|
});
|
|
53743
54087
|
const output = collectBuildOutput(outDir);
|
|
54088
|
+
const uiVersion = resolvedUiVersion(pagesDir);
|
|
53744
54089
|
return {
|
|
53745
54090
|
...output,
|
|
53746
54091
|
viteVersion: version,
|
|
53747
|
-
bundlesAgentPane: detectBundledAgentPane(pagesDir, output.assets)
|
|
54092
|
+
bundlesAgentPane: detectBundledAgentPane(pagesDir, output.assets),
|
|
54093
|
+
...uiVersion ? {
|
|
54094
|
+
uiVersion
|
|
54095
|
+
} : {}
|
|
53748
54096
|
};
|
|
53749
54097
|
} finally {
|
|
53750
54098
|
fs19.rmSync(outDir, {
|
|
@@ -53757,6 +54105,7 @@ __name(buildWebAppPages, "buildWebAppPages");
|
|
|
53757
54105
|
|
|
53758
54106
|
// src/primitives/web-app.handler.ts
|
|
53759
54107
|
init_package_root();
|
|
54108
|
+
init_server_refusal();
|
|
53760
54109
|
init_cli();
|
|
53761
54110
|
init_write_info();
|
|
53762
54111
|
init_base_handler();
|
|
@@ -53772,12 +54121,6 @@ function webAppNameReservedMessage(error) {
|
|
|
53772
54121
|
return printableRefusal(error, "WEB_APP_NAME_RESERVED");
|
|
53773
54122
|
}
|
|
53774
54123
|
__name(webAppNameReservedMessage, "webAppNameReservedMessage");
|
|
53775
|
-
function printableRefusal(error, code) {
|
|
53776
|
-
if (error?.code !== code || typeof error.message !== "string") return null;
|
|
53777
|
-
const message = error.message.replace(new RegExp("\\p{C}", "gu"), "").trim();
|
|
53778
|
-
return message || null;
|
|
53779
|
-
}
|
|
53780
|
-
__name(printableRefusal, "printableRefusal");
|
|
53781
54124
|
var WebAppHandler = class extends BaseVersionedHandler {
|
|
53782
54125
|
static {
|
|
53783
54126
|
__name(this, "WebAppHandler");
|
|
@@ -53797,7 +54140,7 @@ var WebAppHandler = class extends BaseVersionedHandler {
|
|
|
53797
54140
|
async fetchFromServer(api) {
|
|
53798
54141
|
const response = await api.getWebApps();
|
|
53799
54142
|
if (!response.success || !response.data?.webApps) return null;
|
|
53800
|
-
return response.data.webApps;
|
|
54143
|
+
return response.data.webApps.filter((app) => !isSystemOwned(app));
|
|
53801
54144
|
}
|
|
53802
54145
|
async createOnServer(api, primitive) {
|
|
53803
54146
|
const response = await api.createWebApp({
|
|
@@ -53888,6 +54231,7 @@ var WebAppHandler = class extends BaseVersionedHandler {
|
|
|
53888
54231
|
if (pages.skipped.length > 0) {
|
|
53889
54232
|
writeInfo(`\u26A0\uFE0F Not served (outside assets/): ${pages.skipped.slice(0, 10).join(", ")}${pages.skipped.length > 10 ? ", \u2026" : ""}. Import files from your source so Vite emits them under assets/.`);
|
|
53890
54233
|
}
|
|
54234
|
+
for (const warning of pageWarnings(pagesDir, name)) writeInfo(`\u26A0\uFE0F ${warning}`);
|
|
53891
54235
|
const compiler = pushData.compiler ?? {};
|
|
53892
54236
|
return {
|
|
53893
54237
|
...pushData,
|
|
@@ -53896,6 +54240,10 @@ var WebAppHandler = class extends BaseVersionedHandler {
|
|
|
53896
54240
|
...pages.bundlesAgentPane ? {
|
|
53897
54241
|
bundlesAgentPane: true
|
|
53898
54242
|
} : {},
|
|
54243
|
+
// ADR 0027: the resolved @lua-ai-global/ui, sent only when found; absent ⇒ unknown, the gateway scans the CSS.
|
|
54244
|
+
...pages.uiVersion ? {
|
|
54245
|
+
uiVersion: pages.uiVersion
|
|
54246
|
+
} : {},
|
|
53899
54247
|
assets: pages.assets.map(({ bytes: _bytes, ...entry }) => entry),
|
|
53900
54248
|
compiler: {
|
|
53901
54249
|
...compiler,
|
|
@@ -80372,6 +80720,7 @@ __name(deletePostProcessorInteractive, "deletePostProcessorInteractive");
|
|
|
80372
80720
|
|
|
80373
80721
|
// src/commands/marketplace.ts
|
|
80374
80722
|
init_cli();
|
|
80723
|
+
init_server_refusal();
|
|
80375
80724
|
|
|
80376
80725
|
// src/api/marketplace.api.service.ts
|
|
80377
80726
|
init_constants();
|
|
@@ -82330,7 +82679,7 @@ async function listSkillOnMarketplace(marketplaceApi, config, apiKey) {
|
|
|
82330
82679
|
`);
|
|
82331
82680
|
return;
|
|
82332
82681
|
}
|
|
82333
|
-
const skills = agentSkillsResponse.data.skills || [];
|
|
82682
|
+
const skills = (agentSkillsResponse.data.skills || []).filter((skill) => !isSystemOwned(skill));
|
|
82334
82683
|
if (skills.length === 0) {
|
|
82335
82684
|
console.log("\n\u2139\uFE0F No skills found on this agent.");
|
|
82336
82685
|
console.log("\u{1F4A1} Push a skill first using 'lua push skill'.\n");
|
|
@@ -90573,7 +90922,7 @@ init_types();
|
|
|
90573
90922
|
var WEB_APP_TEMPLATE_DIR = "template-web-app";
|
|
90574
90923
|
var PAGES_EXCLUDE_GLOB = "src/apps/*/web";
|
|
90575
90924
|
var NAME_PLACEHOLDER = "__APP_NAME__";
|
|
90576
|
-
function
|
|
90925
|
+
function pagesBundleAgentPane(pagesDir) {
|
|
90577
90926
|
return [
|
|
90578
90927
|
"main.tsx",
|
|
90579
90928
|
"main.jsx"
|
|
@@ -90582,7 +90931,7 @@ function pagesHaveAgentPane(pagesDir) {
|
|
|
90582
90931
|
return fs24.existsSync(file) && fs24.readFileSync(file, "utf8").includes("AgentPaneLayout");
|
|
90583
90932
|
});
|
|
90584
90933
|
}
|
|
90585
|
-
__name(
|
|
90934
|
+
__name(pagesBundleAgentPane, "pagesBundleAgentPane");
|
|
90586
90935
|
function appIdentifier(name) {
|
|
90587
90936
|
return name.replace(/-([a-z0-9])/g, (_, c) => c.toUpperCase());
|
|
90588
90937
|
}
|
|
@@ -90852,8 +91201,10 @@ async function appsDevCommand(name, opts = {}) {
|
|
|
90852
91201
|
});
|
|
90853
91202
|
await server.listen();
|
|
90854
91203
|
origin = server.resolvedUrls?.local?.[0]?.replace(/\/$/, "") ?? "";
|
|
91204
|
+
const bundlesPane = pagesBundleAgentPane(pagesDir);
|
|
90855
91205
|
writeSuccess(`
|
|
90856
91206
|
\u2705 ${name} is running`);
|
|
91207
|
+
for (const warning of pageWarnings(pagesDir, name)) writeInfo(`\u26A0\uFE0F ${warning}`);
|
|
90857
91208
|
writeHintBlock({
|
|
90858
91209
|
headline: "Lua apps dev:",
|
|
90859
91210
|
lines: [
|
|
@@ -90867,8 +91218,14 @@ async function appsDevCommand(name, opts = {}) {
|
|
|
90867
91218
|
},
|
|
90868
91219
|
{
|
|
90869
91220
|
label: "Agent pane:",
|
|
90870
|
-
command: app.agentPane === false ? "off (agentPane: false)" : !
|
|
91221
|
+
command: app.agentPane === false ? "off (agentPane: false)" : !bundlesPane ? "none here: the gateway adds the platform pane once deployed" : `/_lua/chat/* \u2192 ${chatEnv === "sandbox" ? "sandbox agent (your local skills)" : "production agent"}, thread ${chat.threadId}`
|
|
90871
91222
|
},
|
|
91223
|
+
...app.agentPane !== false && bundlesPane ? [
|
|
91224
|
+
{
|
|
91225
|
+
label: "Bundled pane:",
|
|
91226
|
+
command: `lua apps upgrade ${name} (moves to the platform pane)`
|
|
91227
|
+
}
|
|
91228
|
+
] : [],
|
|
90872
91229
|
{
|
|
90873
91230
|
label: "Stop:",
|
|
90874
91231
|
command: "Ctrl+C"
|
|
@@ -91107,13 +91464,19 @@ var APP_CHAT = "@lua-ai-global/app-chat";
|
|
|
91107
91464
|
var APP_CLIENT = "@lua-ai-global/app-client";
|
|
91108
91465
|
var UI = "@lua-ai-global/ui";
|
|
91109
91466
|
var UPGRADED_PACKAGES = [
|
|
91110
|
-
APP_CHAT,
|
|
91111
91467
|
APP_CLIENT,
|
|
91112
91468
|
UI
|
|
91113
91469
|
];
|
|
91114
|
-
var
|
|
91470
|
+
var PANE_API_CLIENT_RANGE = "~0.0.5";
|
|
91471
|
+
var PANE_COMMENT_PREFIX = "{/* The agent pane:";
|
|
91115
91472
|
var PANE_CSS_COMMENT = "/* The agent pane's styles: after the design system's, on its tokens. */";
|
|
91116
91473
|
var PANE_CSS = `${APP_CHAT}/styles.css`;
|
|
91474
|
+
var THEME_CLIENT_RANGE = "~0.1.0";
|
|
91475
|
+
var TEMPLATE_THEME_LINES = [
|
|
91476
|
+
"// Theme follows the shell: first from the bootstrap, then from the host's `init`.",
|
|
91477
|
+
"document.documentElement.classList.toggle('dark', lua.theme === 'dark');",
|
|
91478
|
+
"lua.onInit((init) => document.documentElement.classList.toggle('dark', init.theme === 'dark'));"
|
|
91479
|
+
];
|
|
91117
91480
|
var KNOWN_COPIED_CLIENTS = /* @__PURE__ */ new Set([
|
|
91118
91481
|
"6dee7fbd9103f2f9d33879b1c83279acf3ff3da974cc76b5e3482a4cbc00dd9c",
|
|
91119
91482
|
"2bf0527634fba64be8e71885dd10044231d4472baaae3982a9b4d6a801fe1195",
|
|
@@ -91218,6 +91581,13 @@ function templateRanges(templateRoot = getPackageRoot()) {
|
|
|
91218
91581
|
return ranges;
|
|
91219
91582
|
}
|
|
91220
91583
|
__name(templateRanges, "templateRanges");
|
|
91584
|
+
function movesToNewerDesign(pkg2, wanted) {
|
|
91585
|
+
const current = pkg2.dependencies?.[UI] ?? pkg2.devDependencies?.[UI];
|
|
91586
|
+
const have = typeof current === "string" ? rangeFloor(current) : void 0;
|
|
91587
|
+
const need = rangeFloor(wanted);
|
|
91588
|
+
return !!have && !!need && (have[0] < need[0] || have[0] === need[0] && have[1] < need[1]);
|
|
91589
|
+
}
|
|
91590
|
+
__name(movesToNewerDesign, "movesToNewerDesign");
|
|
91221
91591
|
function rangeFloor(range2) {
|
|
91222
91592
|
if (range2.includes("||")) return void 0;
|
|
91223
91593
|
const tokens = range2.trim().split(/\s+/);
|
|
@@ -91241,7 +91611,7 @@ function compareFloors(a, b) {
|
|
|
91241
91611
|
return a[0] - b[0] || a[1] - b[1] || a[2] - b[2];
|
|
91242
91612
|
}
|
|
91243
91613
|
__name(compareFloors, "compareFloors");
|
|
91244
|
-
function planPackageJson(source, ranges) {
|
|
91614
|
+
function planPackageJson(source, ranges, remove = []) {
|
|
91245
91615
|
const pkg2 = JSON.parse(source);
|
|
91246
91616
|
const changes = [];
|
|
91247
91617
|
const warnings = [];
|
|
@@ -91262,13 +91632,25 @@ function planPackageJson(source, ranges) {
|
|
|
91262
91632
|
const have = rangeFloor(current);
|
|
91263
91633
|
const need = rangeFloor(wanted);
|
|
91264
91634
|
if (!have || !need) {
|
|
91265
|
-
warnings.push(`${name} is "${current}" in web/package.json; it was kept. The
|
|
91635
|
+
warnings.push(`${name} is "${current}" in web/package.json; it was kept. The upgrade wants ${wanted}.`);
|
|
91266
91636
|
continue;
|
|
91267
91637
|
}
|
|
91268
91638
|
if (compareFloors(have, need) >= 0) continue;
|
|
91269
91639
|
pkg2[section2][name] = wanted;
|
|
91270
91640
|
changes.push(`${name} ${current} \u2192 ${wanted}`);
|
|
91271
91641
|
}
|
|
91642
|
+
for (const name of remove) {
|
|
91643
|
+
let removed = false;
|
|
91644
|
+
for (const section2 of [
|
|
91645
|
+
"dependencies",
|
|
91646
|
+
"devDependencies"
|
|
91647
|
+
]) {
|
|
91648
|
+
if (pkg2[section2]?.[name] === void 0) continue;
|
|
91649
|
+
delete pkg2[section2][name];
|
|
91650
|
+
removed = true;
|
|
91651
|
+
}
|
|
91652
|
+
if (removed) changes.push(`${name} (removed)`);
|
|
91653
|
+
}
|
|
91272
91654
|
if (!changes.length) return {
|
|
91273
91655
|
changes,
|
|
91274
91656
|
warnings
|
|
@@ -91323,15 +91705,20 @@ function rewriteClientImports(file, source, clientFile) {
|
|
|
91323
91705
|
return out;
|
|
91324
91706
|
}
|
|
91325
91707
|
__name(rewriteClientImports, "rewriteClientImports");
|
|
91708
|
+
var THEME_INSTALL_NOTE = `the pages' light/dark and accent now come from ${APP_CLIENT} 0.1, which only npm install brings`;
|
|
91326
91709
|
var MANUAL_PANE_EDIT = [
|
|
91327
|
-
|
|
91328
|
-
|
|
91329
|
-
"
|
|
91330
|
-
"
|
|
91331
|
-
"
|
|
91332
|
-
"
|
|
91333
|
-
|
|
91710
|
+
"<AgentPaneLayout>: replace it with what it wraps; its context prop becomes lua.pane.setContext(...),",
|
|
91711
|
+
` with lua from ${APP_CLIENT} (${PANE_API_CLIENT_RANGE} or later); its other props have no equivalent`,
|
|
91712
|
+
" (the platform pane owns them);",
|
|
91713
|
+
"useAgentPane(): use lua.pane instead (open, close, ask, setContext); it has no isOpen (the Workspace",
|
|
91714
|
+
" owns whether the pane is open);",
|
|
91715
|
+
"<AgentPane>: remove it; the platform pane replaces it (lua.pane.open(), lua.pane.ask(text));",
|
|
91716
|
+
`then npm uninstall ${APP_CHAT} in web/ and remove the @import of its styles from web/src/index.css.`
|
|
91334
91717
|
];
|
|
91718
|
+
var PANE_EXPORTS = /* @__PURE__ */ new Set([
|
|
91719
|
+
"AgentPaneLayout",
|
|
91720
|
+
"useAgentPane"
|
|
91721
|
+
]);
|
|
91335
91722
|
function syntaxErrors(file, source) {
|
|
91336
91723
|
return ts6.transpileModule(source, {
|
|
91337
91724
|
fileName: path32.basename(file).replace(/\.\w+$/, ".tsx"),
|
|
@@ -91345,148 +91732,518 @@ function syntaxErrors(file, source) {
|
|
|
91345
91732
|
}
|
|
91346
91733
|
__name(syntaxErrors, "syntaxErrors");
|
|
91347
91734
|
var tagName2 = /* @__PURE__ */ __name((sf, n2) => (ts6.isJsxElement(n2) ? n2.openingElement.tagName : n2.tagName).getText(sf), "tagName");
|
|
91348
|
-
function
|
|
91349
|
-
|
|
91350
|
-
|
|
91351
|
-
|
|
91352
|
-
|
|
91353
|
-
|
|
91354
|
-
const
|
|
91355
|
-
|
|
91356
|
-
|
|
91357
|
-
|
|
91358
|
-
|
|
91359
|
-
|
|
91360
|
-
|
|
91361
|
-
|
|
91362
|
-
|
|
91363
|
-
|
|
91364
|
-
|
|
91365
|
-
|
|
91366
|
-
|
|
91367
|
-
|
|
91368
|
-
|
|
91369
|
-
|
|
91370
|
-
|
|
91371
|
-
|
|
91372
|
-
|
|
91373
|
-
|
|
91374
|
-
|
|
91375
|
-
|
|
91376
|
-
|
|
91377
|
-
|
|
91378
|
-
|
|
91379
|
-
|
|
91380
|
-
|
|
91735
|
+
function applySplices(source, splices) {
|
|
91736
|
+
let out = source;
|
|
91737
|
+
const ordered = splices.map((s, i) => ({
|
|
91738
|
+
...s,
|
|
91739
|
+
i
|
|
91740
|
+
})).sort((a, b) => b.start - a.start || b.i - a.i);
|
|
91741
|
+
for (const s of ordered) out = out.slice(0, s.start) + s.text + out.slice(s.end);
|
|
91742
|
+
return out;
|
|
91743
|
+
}
|
|
91744
|
+
__name(applySplices, "applySplices");
|
|
91745
|
+
function indentAt(source, pos) {
|
|
91746
|
+
const before = source.slice(source.lastIndexOf("\n", pos - 1) + 1, pos);
|
|
91747
|
+
return /^[ \t]*$/.test(before) ? before : void 0;
|
|
91748
|
+
}
|
|
91749
|
+
__name(indentAt, "indentAt");
|
|
91750
|
+
function lineSpan(source, start, end) {
|
|
91751
|
+
const rest = /^[ \t]*(\r?\n|$)/.exec(source.slice(end));
|
|
91752
|
+
if (indentAt(source, start) === void 0 || !rest) return [
|
|
91753
|
+
start,
|
|
91754
|
+
end
|
|
91755
|
+
];
|
|
91756
|
+
return [
|
|
91757
|
+
source.lastIndexOf("\n", start - 1) + 1,
|
|
91758
|
+
end + rest[0].length
|
|
91759
|
+
];
|
|
91760
|
+
}
|
|
91761
|
+
__name(lineSpan, "lineSpan");
|
|
91762
|
+
function identifiers(node, out = []) {
|
|
91763
|
+
if (ts6.isIdentifier(node)) out.push(node);
|
|
91764
|
+
ts6.forEachChild(node, (child) => {
|
|
91765
|
+
identifiers(child, out);
|
|
91766
|
+
});
|
|
91767
|
+
return out;
|
|
91768
|
+
}
|
|
91769
|
+
__name(identifiers, "identifiers");
|
|
91770
|
+
function declares(id2) {
|
|
91771
|
+
const p = id2.parent;
|
|
91772
|
+
return (ts6.isVariableDeclaration(p) || ts6.isParameter(p) || ts6.isFunctionDeclaration(p) || ts6.isFunctionExpression(p) || ts6.isClassDeclaration(p) || ts6.isClassExpression(p) || ts6.isEnumDeclaration(p) || ts6.isImportSpecifier(p) || ts6.isImportClause(p) || ts6.isNamespaceImport(p) || ts6.isImportEqualsDeclaration(p) || ts6.isBindingElement(p)) && p.name === id2;
|
|
91773
|
+
}
|
|
91774
|
+
__name(declares, "declares");
|
|
91775
|
+
function isReference(id2) {
|
|
91776
|
+
const p = id2.parent;
|
|
91777
|
+
if (ts6.isPropertyAccessExpression(p) && p.name === id2) return false;
|
|
91778
|
+
if ((ts6.isPropertyAssignment(p) || ts6.isMethodDeclaration(p) || ts6.isJsxAttribute(p)) && p.name === id2) return false;
|
|
91779
|
+
return true;
|
|
91780
|
+
}
|
|
91781
|
+
__name(isReference, "isReference");
|
|
91782
|
+
function insideImport(node) {
|
|
91783
|
+
for (let n2 = node; n2; n2 = n2.parent) if (ts6.isImportDeclaration(n2)) return true;
|
|
91784
|
+
return false;
|
|
91785
|
+
}
|
|
91786
|
+
__name(insideImport, "insideImport");
|
|
91787
|
+
var importsFrom = /* @__PURE__ */ __name((d, module) => ts6.isImportDeclaration(d) && ts6.isStringLiteral(d.moduleSpecifier) && d.moduleSpecifier.text === module, "importsFrom");
|
|
91788
|
+
function namedImports(d) {
|
|
91789
|
+
const b = d.importClause?.namedBindings;
|
|
91790
|
+
return !d.importClause?.isTypeOnly && b && ts6.isNamedImports(b) ? b : void 0;
|
|
91791
|
+
}
|
|
91792
|
+
__name(namedImports, "namedImports");
|
|
91793
|
+
function chatLocals(sf, exported) {
|
|
91794
|
+
const out = /* @__PURE__ */ new Set();
|
|
91795
|
+
for (const d of sf.statements) {
|
|
91796
|
+
if (!importsFrom(d, APP_CHAT)) continue;
|
|
91797
|
+
for (const e of namedImports(d)?.elements ?? []) {
|
|
91798
|
+
if (!e.isTypeOnly && (e.propertyName ?? e.name).text === exported) out.add(e.name.text);
|
|
91381
91799
|
}
|
|
91382
|
-
|
|
91383
|
-
|
|
91384
|
-
|
|
91385
|
-
|
|
91386
|
-
|
|
91387
|
-
|
|
91388
|
-
|
|
91389
|
-
|
|
91390
|
-
|
|
91391
|
-
|
|
91392
|
-
|
|
91393
|
-
return {
|
|
91394
|
-
status: "unrecognised",
|
|
91395
|
-
reason: renders.length ? "more than one createRoot(...).render( call" : "no createRoot(...).render( call"
|
|
91800
|
+
}
|
|
91801
|
+
return out;
|
|
91802
|
+
}
|
|
91803
|
+
__name(chatLocals, "chatLocals");
|
|
91804
|
+
function luaBinding(sf) {
|
|
91805
|
+
for (const d of sf.statements) {
|
|
91806
|
+
if (!importsFrom(d, APP_CLIENT)) continue;
|
|
91807
|
+
const e = namedImports(d)?.elements.find((x) => !x.isTypeOnly && (x.propertyName ?? x.name).text === "lua");
|
|
91808
|
+
if (e) return {
|
|
91809
|
+
local: e.name.text,
|
|
91810
|
+
taken: false
|
|
91396
91811
|
};
|
|
91397
91812
|
}
|
|
91398
|
-
|
|
91399
|
-
|
|
91400
|
-
|
|
91401
|
-
|
|
91402
|
-
|
|
91403
|
-
|
|
91404
|
-
|
|
91405
|
-
|
|
91406
|
-
|
|
91407
|
-
|
|
91408
|
-
|
|
91409
|
-
|
|
91410
|
-
if (ts6.
|
|
91411
|
-
|
|
91412
|
-
|
|
91413
|
-
|
|
91414
|
-
|
|
91415
|
-
|
|
91416
|
-
|
|
91417
|
-
|
|
91418
|
-
|
|
91419
|
-
|
|
91420
|
-
|
|
91421
|
-
|
|
91813
|
+
return {
|
|
91814
|
+
taken: identifiers(sf).some((id2) => id2.text === "lua" && declares(id2))
|
|
91815
|
+
};
|
|
91816
|
+
}
|
|
91817
|
+
__name(luaBinding, "luaBinding");
|
|
91818
|
+
function hookResultUse(sf, call2) {
|
|
91819
|
+
if (call2.arguments.length) return "unknown";
|
|
91820
|
+
const pattern = /* @__PURE__ */ __name((b) => b.elements.some((e) => e.dotDotDotToken) ? "unknown" : b.elements.some((e) => (e.propertyName ?? e.name).getText(sf) === "isOpen") ? "isOpen" : "ok", "pattern");
|
|
91821
|
+
let node = call2;
|
|
91822
|
+
while (ts6.isParenthesizedExpression(node.parent)) node = node.parent;
|
|
91823
|
+
const p = node.parent;
|
|
91824
|
+
if (ts6.isPropertyAccessExpression(p) && p.expression === node) return p.name.text === "isOpen" ? "isOpen" : "ok";
|
|
91825
|
+
if (!ts6.isVariableDeclaration(p) || p.initializer !== node) return "unknown";
|
|
91826
|
+
if (ts6.isObjectBindingPattern(p.name)) return pattern(p.name);
|
|
91827
|
+
if (!ts6.isIdentifier(p.name)) return "unknown";
|
|
91828
|
+
const name = p.name;
|
|
91829
|
+
let use = "ok";
|
|
91830
|
+
for (const ref of identifiers(sf)) {
|
|
91831
|
+
if (ref === name || ref.text !== name.text || declares(ref) || !isReference(ref)) continue;
|
|
91832
|
+
const q = ref.parent;
|
|
91833
|
+
const here = ts6.isPropertyAccessExpression(q) && q.expression === ref ? q.name.text === "isOpen" ? "isOpen" : "ok" : ts6.isVariableDeclaration(q) && q.initializer === ref && ts6.isObjectBindingPattern(q.name) ? pattern(q.name) : ts6.isArrayLiteralExpression(q) ? "ok" : "unknown";
|
|
91834
|
+
if (here === "isOpen") return "isOpen";
|
|
91835
|
+
if (here === "unknown") use = "unknown";
|
|
91836
|
+
}
|
|
91837
|
+
return use;
|
|
91838
|
+
}
|
|
91839
|
+
__name(hookResultUse, "hookResultUse");
|
|
91840
|
+
function notAtModuleScope(sf, el, expr, statement) {
|
|
91841
|
+
let readsThis = false;
|
|
91842
|
+
const findThis = /* @__PURE__ */ __name((n2) => {
|
|
91843
|
+
if (n2.kind === ts6.SyntaxKind.ThisKeyword) readsThis = true;
|
|
91844
|
+
ts6.forEachChild(n2, findThis);
|
|
91845
|
+
}, "findThis");
|
|
91846
|
+
findThis(expr);
|
|
91847
|
+
if (readsThis) return "its context reads this";
|
|
91848
|
+
const used = new Set(identifiers(expr).filter(isReference).map((i) => i.text));
|
|
91849
|
+
for (let n2 = el.parent; n2 !== sf; n2 = n2.parent) {
|
|
91850
|
+
if (!ts6.isFunctionLike(n2)) continue;
|
|
91851
|
+
const local = /* @__PURE__ */ new Set();
|
|
91852
|
+
const collect2 = /* @__PURE__ */ __name((m) => {
|
|
91853
|
+
if (m === expr) return;
|
|
91854
|
+
if (ts6.isIdentifier(m) && declares(m)) local.add(m.text);
|
|
91855
|
+
ts6.forEachChild(m, collect2);
|
|
91856
|
+
}, "collect");
|
|
91857
|
+
collect2(n2);
|
|
91858
|
+
const hit = [
|
|
91859
|
+
...used
|
|
91860
|
+
].find((u) => local.has(u));
|
|
91861
|
+
if (hit) return `its context reads ${hit}, local to the component`;
|
|
91862
|
+
}
|
|
91863
|
+
const at = statement.getStart(sf);
|
|
91864
|
+
for (const s of sf.statements.filter((t) => t.getStart(sf) >= at)) {
|
|
91865
|
+
const names = ts6.isVariableStatement(s) ? s.declarationList.declarations.flatMap((d) => identifiers(d.name).filter(declares)) : (ts6.isClassDeclaration(s) || ts6.isEnumDeclaration(s)) && s.name ? [
|
|
91866
|
+
s.name
|
|
91867
|
+
] : [];
|
|
91868
|
+
const hit = names.find((n2) => used.has(n2.text));
|
|
91869
|
+
if (hit) return `its context reads ${hit.text}, declared after it`;
|
|
91422
91870
|
}
|
|
91423
|
-
|
|
91424
|
-
|
|
91425
|
-
|
|
91426
|
-
|
|
91427
|
-
|
|
91428
|
-
|
|
91429
|
-
|
|
91430
|
-
|
|
91431
|
-
|
|
91432
|
-
|
|
91433
|
-
|
|
91871
|
+
return void 0;
|
|
91872
|
+
}
|
|
91873
|
+
__name(notAtModuleScope, "notAtModuleScope");
|
|
91874
|
+
function unwrapLayout(sf, source, el) {
|
|
91875
|
+
const kids = el.children.filter((c) => !(ts6.isJsxText(c) && c.containsOnlyTriviaWhiteSpaces));
|
|
91876
|
+
const inJsx = ts6.isJsxElement(el.parent) || ts6.isJsxFragment(el.parent);
|
|
91877
|
+
const only = kids.length === 1 ? kids[0] : void 0;
|
|
91878
|
+
if (!inJsx && !(only && (ts6.isJsxElement(only) || ts6.isJsxSelfClosingElement(only) || ts6.isJsxFragment(only)))) {
|
|
91879
|
+
return [
|
|
91880
|
+
{
|
|
91881
|
+
start: el.openingElement.getStart(sf),
|
|
91882
|
+
end: el.openingElement.getEnd(),
|
|
91883
|
+
text: "<>"
|
|
91884
|
+
},
|
|
91885
|
+
{
|
|
91886
|
+
start: el.closingElement.getStart(sf),
|
|
91887
|
+
end: el.closingElement.getEnd(),
|
|
91888
|
+
text: "</>"
|
|
91889
|
+
}
|
|
91890
|
+
];
|
|
91434
91891
|
}
|
|
91435
|
-
let
|
|
91436
|
-
if (!
|
|
91437
|
-
const
|
|
91438
|
-
|
|
91439
|
-
|
|
91440
|
-
|
|
91441
|
-
|
|
91442
|
-
|
|
91443
|
-
|
|
91444
|
-
|
|
91445
|
-
|
|
91892
|
+
let start = el.getStart(sf);
|
|
91893
|
+
if (!kids.length) {
|
|
91894
|
+
const [s, e] = lineSpan(source, start, el.getEnd());
|
|
91895
|
+
return [
|
|
91896
|
+
{
|
|
91897
|
+
start: s,
|
|
91898
|
+
end: e,
|
|
91899
|
+
text: ""
|
|
91900
|
+
}
|
|
91901
|
+
];
|
|
91902
|
+
}
|
|
91903
|
+
const first = kids[0].getStart(sf);
|
|
91904
|
+
let inner = source.slice(first, kids[kids.length - 1].getEnd());
|
|
91905
|
+
const own = indentAt(source, start);
|
|
91906
|
+
const kid = indentAt(source, first);
|
|
91907
|
+
if (own !== void 0 && kid !== void 0 && kid.length > own.length && kid.startsWith(own)) {
|
|
91908
|
+
const deeper = kid;
|
|
91909
|
+
inner = inner.split("\n").map((line, i) => i > 0 && line.startsWith(deeper) ? own + line.slice(deeper.length) : line).join("\n");
|
|
91910
|
+
}
|
|
91911
|
+
if (inJsx && own !== void 0) {
|
|
91912
|
+
const siblings = el.parent.children.filter((c) => !(ts6.isJsxText(c) && c.containsOnlyTriviaWhiteSpaces));
|
|
91913
|
+
const prev = siblings[siblings.indexOf(el) - 1];
|
|
91914
|
+
if (prev && ts6.isJsxExpression(prev) && !prev.expression && prev.getText(sf).startsWith(PANE_COMMENT_PREFIX) && indentAt(source, prev.getStart(sf)) !== void 0) {
|
|
91915
|
+
start = prev.getStart(sf);
|
|
91446
91916
|
}
|
|
91447
91917
|
}
|
|
91448
|
-
|
|
91918
|
+
return [
|
|
91919
|
+
{
|
|
91920
|
+
start,
|
|
91921
|
+
end: el.getEnd(),
|
|
91922
|
+
text: inner
|
|
91923
|
+
}
|
|
91924
|
+
];
|
|
91925
|
+
}
|
|
91926
|
+
__name(unwrapLayout, "unwrapLayout");
|
|
91927
|
+
function insertBefore(sf, statement, line, eol) {
|
|
91928
|
+
const prev = sf.statements[sf.statements.indexOf(statement) - 1];
|
|
91929
|
+
if (!prev) {
|
|
91930
|
+
const semi2 = statement.getText(sf).trimEnd().endsWith(";") ? ";" : "";
|
|
91449
91931
|
return {
|
|
91450
|
-
|
|
91451
|
-
|
|
91932
|
+
start: statement.getStart(sf),
|
|
91933
|
+
end: statement.getStart(sf),
|
|
91934
|
+
text: `${line}${semi2}${eol}`
|
|
91452
91935
|
};
|
|
91453
91936
|
}
|
|
91937
|
+
const semi = prev.getText(sf).trimEnd().endsWith(";") ? ";" : "";
|
|
91938
|
+
const gap = ts6.isImportDeclaration(prev) ? eol : "";
|
|
91454
91939
|
return {
|
|
91455
|
-
|
|
91456
|
-
|
|
91940
|
+
start: prev.getEnd(),
|
|
91941
|
+
end: prev.getEnd(),
|
|
91942
|
+
text: `${eol}${gap}${line}${semi}`
|
|
91457
91943
|
};
|
|
91458
91944
|
}
|
|
91459
|
-
__name(
|
|
91460
|
-
function
|
|
91461
|
-
|
|
91462
|
-
|
|
91945
|
+
__name(insertBefore, "insertBefore");
|
|
91946
|
+
function tidyImports(file, source, needLua, eol) {
|
|
91947
|
+
const sf = ts6.createSourceFile(file, source, ts6.ScriptTarget.Latest, true, scriptKind(file));
|
|
91948
|
+
const referenced = new Set(identifiers(sf).filter((id2) => !insideImport(id2)).map((id2) => id2.text));
|
|
91949
|
+
const edits = [];
|
|
91950
|
+
let luaPlaced = !needLua || luaBinding(sf).local !== void 0;
|
|
91951
|
+
const luaImport = /* @__PURE__ */ __name((d) => {
|
|
91952
|
+
const quote = d.moduleSpecifier.getText(sf)[0];
|
|
91953
|
+
return `import { lua } from ${quote}${APP_CLIENT}${quote}${d.getText(sf).trimEnd().endsWith(";") ? ";" : ""}`;
|
|
91954
|
+
}, "luaImport");
|
|
91955
|
+
if (!luaPlaced) {
|
|
91956
|
+
const host = sf.statements.find((d) => importsFrom(d, APP_CLIENT) && !!namedImports(d));
|
|
91957
|
+
if (host) {
|
|
91958
|
+
const named = namedImports(host);
|
|
91959
|
+
const last = named.elements[named.elements.length - 1];
|
|
91960
|
+
edits.push(last ? {
|
|
91961
|
+
start: last.getEnd(),
|
|
91962
|
+
end: last.getEnd(),
|
|
91963
|
+
text: ", lua"
|
|
91964
|
+
} : {
|
|
91965
|
+
start: named.getStart(sf),
|
|
91966
|
+
end: named.getEnd(),
|
|
91967
|
+
text: "{ lua }"
|
|
91968
|
+
});
|
|
91969
|
+
luaPlaced = true;
|
|
91970
|
+
}
|
|
91971
|
+
}
|
|
91972
|
+
for (const d of sf.statements) {
|
|
91973
|
+
if (!importsFrom(d, APP_CHAT)) continue;
|
|
91974
|
+
const named = namedImports(d);
|
|
91975
|
+
if (!named) continue;
|
|
91976
|
+
const kept = named.elements.filter((e) => !(PANE_EXPORTS.has((e.propertyName ?? e.name).text) && !referenced.has(e.name.text)));
|
|
91977
|
+
if (kept.length === named.elements.length) continue;
|
|
91978
|
+
if (kept.length) {
|
|
91979
|
+
edits.push({
|
|
91980
|
+
start: named.getStart(sf),
|
|
91981
|
+
end: named.getEnd(),
|
|
91982
|
+
text: `{ ${kept.map((e) => e.getText(sf)).join(", ")} }`
|
|
91983
|
+
});
|
|
91984
|
+
} else if (d.importClause.name) {
|
|
91985
|
+
edits.push({
|
|
91986
|
+
start: d.importClause.name.getEnd(),
|
|
91987
|
+
end: named.getEnd(),
|
|
91988
|
+
text: ""
|
|
91989
|
+
});
|
|
91990
|
+
} else if (!luaPlaced) {
|
|
91991
|
+
edits.push({
|
|
91992
|
+
start: d.getStart(sf),
|
|
91993
|
+
end: d.getEnd(),
|
|
91994
|
+
text: luaImport(d)
|
|
91995
|
+
});
|
|
91996
|
+
luaPlaced = true;
|
|
91997
|
+
} else {
|
|
91998
|
+
const [start, end] = lineSpan(source, d.getStart(sf), d.getEnd());
|
|
91999
|
+
edits.push({
|
|
92000
|
+
start,
|
|
92001
|
+
end,
|
|
92002
|
+
text: ""
|
|
92003
|
+
});
|
|
92004
|
+
}
|
|
92005
|
+
}
|
|
92006
|
+
if (!luaPlaced) {
|
|
92007
|
+
const imports = sf.statements.filter(ts6.isImportDeclaration);
|
|
92008
|
+
const anchor = imports.filter((d) => d.importClause).at(-1) ?? imports.at(-1);
|
|
92009
|
+
edits.push(anchor ? {
|
|
92010
|
+
start: anchor.getEnd(),
|
|
92011
|
+
end: anchor.getEnd(),
|
|
92012
|
+
text: eol + luaImport(anchor)
|
|
92013
|
+
} : {
|
|
92014
|
+
start: 0,
|
|
92015
|
+
end: 0,
|
|
92016
|
+
text: `import { lua } from '${APP_CLIENT}';${eol}`
|
|
92017
|
+
});
|
|
92018
|
+
}
|
|
92019
|
+
return applySplices(source, edits);
|
|
92020
|
+
}
|
|
92021
|
+
__name(tidyImports, "tidyImports");
|
|
92022
|
+
function removeAgentPane(file, source) {
|
|
92023
|
+
if (!source.includes(APP_CHAT)) return {
|
|
92024
|
+
status: "none"
|
|
91463
92025
|
};
|
|
92026
|
+
const parse = /* @__PURE__ */ __name((text2) => ts6.createSourceFile(file, text2, ts6.ScriptTarget.Latest, true, scriptKind(file)), "parse");
|
|
92027
|
+
const sf = parse(source);
|
|
92028
|
+
const lua = luaBinding(sf);
|
|
92029
|
+
const luaName = lua.local ?? "lua";
|
|
91464
92030
|
const eol = source.includes("\r\n") ? "\r\n" : "\n";
|
|
91465
|
-
const
|
|
91466
|
-
|
|
91467
|
-
|
|
91468
|
-
|
|
91469
|
-
|
|
91470
|
-
|
|
91471
|
-
|
|
91472
|
-
|
|
91473
|
-
|
|
91474
|
-
|
|
91475
|
-
|
|
91476
|
-
|
|
92031
|
+
const analyse = /* @__PURE__ */ __name((sf2) => {
|
|
92032
|
+
const layouts = chatLocals(sf2, "AgentPaneLayout");
|
|
92033
|
+
const hooks = chatLocals(sf2, "useAgentPane");
|
|
92034
|
+
const panes = chatLocals(sf2, "AgentPane");
|
|
92035
|
+
const reasons = [];
|
|
92036
|
+
const elements = [];
|
|
92037
|
+
const contexts = [];
|
|
92038
|
+
const calls = [];
|
|
92039
|
+
const top = /* @__PURE__ */ __name((n2) => {
|
|
92040
|
+
while (n2.parent !== sf2) n2 = n2.parent;
|
|
92041
|
+
return n2;
|
|
92042
|
+
}, "top");
|
|
92043
|
+
const layout = /* @__PURE__ */ __name((tag, el) => {
|
|
92044
|
+
for (let n2 = el.parent; n2 !== sf2; n2 = n2.parent) {
|
|
92045
|
+
if (ts6.isJsxElement(n2) && layouts.has(tagName2(sf2, n2))) {
|
|
92046
|
+
reasons.push(`<${tag}> sits inside another`);
|
|
92047
|
+
return;
|
|
92048
|
+
}
|
|
92049
|
+
}
|
|
92050
|
+
const attrs = el.openingElement.attributes.properties;
|
|
92051
|
+
if (!attrs.length) {
|
|
92052
|
+
elements.push(el);
|
|
92053
|
+
return;
|
|
92054
|
+
}
|
|
92055
|
+
const attr = attrs[0];
|
|
92056
|
+
if (attrs.length > 1 || !ts6.isJsxAttribute(attr) || attr.name.getText(sf2) !== "context") {
|
|
92057
|
+
const names = attrs.map((a) => ts6.isJsxAttribute(a) ? a.name.getText(sf2) : "{...}");
|
|
92058
|
+
reasons.push(`<${tag}> has props (${names.join(", ")}): context becomes lua.pane.setContext(...), the others have no equivalent (the platform pane owns them)`);
|
|
92059
|
+
return;
|
|
92060
|
+
}
|
|
92061
|
+
const init3 = attr.initializer;
|
|
92062
|
+
const expr = init3 && (ts6.isStringLiteral(init3) ? init3 : ts6.isJsxExpression(init3) ? init3.expression : void 0);
|
|
92063
|
+
if (init3 && !expr) {
|
|
92064
|
+
reasons.push(`<${tag}>'s context is not an expression this can move`);
|
|
92065
|
+
return;
|
|
92066
|
+
}
|
|
92067
|
+
const statement = top(el);
|
|
92068
|
+
const why = expr && notAtModuleScope(sf2, el, expr, statement);
|
|
92069
|
+
if (why) {
|
|
92070
|
+
reasons.push(`<${tag} context>: ${why}, so call lua.pane.setContext(...) where it is in scope`);
|
|
92071
|
+
return;
|
|
92072
|
+
}
|
|
92073
|
+
contexts.push({
|
|
92074
|
+
text: expr ? expr.getText(sf2) : "true",
|
|
92075
|
+
statement
|
|
92076
|
+
});
|
|
92077
|
+
elements.push(el);
|
|
92078
|
+
}, "layout");
|
|
92079
|
+
const visit = /* @__PURE__ */ __name((node) => {
|
|
92080
|
+
if (ts6.isJsxElement(node) || ts6.isJsxSelfClosingElement(node)) {
|
|
92081
|
+
const tag = tagName2(sf2, node);
|
|
92082
|
+
if (panes.has(tag)) {
|
|
92083
|
+
reasons.push(`it renders <${tag}> from ${APP_CHAT}; the platform pane replaces it, so remove it (lua.pane reaches only the platform pane, never a bundled <AgentPane>, so this app's lua.pane calls already talk to the platform pane)`);
|
|
92084
|
+
} else if (layouts.has(tag)) {
|
|
92085
|
+
if (ts6.isJsxElement(node)) layout(tag, node);
|
|
92086
|
+
else reasons.push(`<${tag} /> wraps nothing`);
|
|
92087
|
+
}
|
|
92088
|
+
}
|
|
92089
|
+
if (ts6.isCallExpression(node) && ts6.isIdentifier(node.expression) && hooks.has(node.expression.text)) {
|
|
92090
|
+
const use = hookResultUse(sf2, node);
|
|
92091
|
+
const hook = node.expression.text;
|
|
92092
|
+
if (use === "isOpen") {
|
|
92093
|
+
reasons.push(`it reads isOpen from ${hook}() (lua.pane has none: the Workspace owns whether the pane is open)`);
|
|
92094
|
+
} else if (use === "unknown") {
|
|
92095
|
+
reasons.push(`it uses ${hook}()'s result in a way this does not follow`);
|
|
92096
|
+
} else calls.push(node);
|
|
92097
|
+
}
|
|
92098
|
+
ts6.forEachChild(node, visit);
|
|
92099
|
+
}, "visit");
|
|
92100
|
+
visit(sf2);
|
|
92101
|
+
return {
|
|
92102
|
+
reasons: [
|
|
92103
|
+
...new Set(reasons)
|
|
92104
|
+
],
|
|
92105
|
+
elements,
|
|
92106
|
+
contexts,
|
|
92107
|
+
calls
|
|
92108
|
+
};
|
|
92109
|
+
}, "analyse");
|
|
92110
|
+
const found = analyse(sf);
|
|
92111
|
+
const needLua = found.calls.length > 0 || found.contexts.length > 0;
|
|
92112
|
+
if (needLua && lua.taken) found.reasons.push("lua already names something else here, so lua.pane cannot be used");
|
|
92113
|
+
if (found.reasons.length) return {
|
|
92114
|
+
status: "manual",
|
|
92115
|
+
reasons: found.reasons
|
|
92116
|
+
};
|
|
92117
|
+
const step1 = applySplices(source, found.calls.map((c) => ({
|
|
92118
|
+
start: c.getStart(sf),
|
|
92119
|
+
end: c.getEnd(),
|
|
92120
|
+
text: `${luaName}.pane`
|
|
92121
|
+
})));
|
|
92122
|
+
const sf1 = parse(step1);
|
|
92123
|
+
const again = analyse(sf1);
|
|
92124
|
+
const step22 = applySplices(step1, [
|
|
92125
|
+
...again.elements.flatMap((el) => unwrapLayout(sf1, step1, el)),
|
|
92126
|
+
...again.contexts.map(({ text: text2, statement }) => insertBefore(sf1, statement, `${luaName}.pane.setContext(${text2})`, eol))
|
|
92127
|
+
]);
|
|
92128
|
+
const out = tidyImports(file, step22, needLua, eol);
|
|
92129
|
+
if (out === source) return {
|
|
92130
|
+
status: "none"
|
|
92131
|
+
};
|
|
92132
|
+
if (syntaxErrors(file, out) > syntaxErrors(file, source)) {
|
|
91477
92133
|
return {
|
|
91478
|
-
status: "
|
|
91479
|
-
|
|
91480
|
-
|
|
92134
|
+
status: "manual",
|
|
92135
|
+
reasons: [
|
|
92136
|
+
"the edit would not parse"
|
|
92137
|
+
]
|
|
91481
92138
|
};
|
|
91482
92139
|
}
|
|
92140
|
+
const summary = [
|
|
92141
|
+
...found.elements.length ? [
|
|
92142
|
+
"<AgentPaneLayout> removed (the platform pane replaces it)"
|
|
92143
|
+
] : [],
|
|
92144
|
+
...found.contexts.length ? [
|
|
92145
|
+
`its context \u2192 ${luaName}.pane.setContext(...)`
|
|
92146
|
+
] : [],
|
|
92147
|
+
...found.calls.length ? [
|
|
92148
|
+
`useAgentPane() \u2192 ${luaName}.pane`
|
|
92149
|
+
] : []
|
|
92150
|
+
];
|
|
91483
92151
|
return {
|
|
91484
|
-
status: "
|
|
91485
|
-
content:
|
|
91486
|
-
|
|
92152
|
+
status: "edited",
|
|
92153
|
+
content: out,
|
|
92154
|
+
summary: summary.length ? summary : [
|
|
92155
|
+
`unused import from ${APP_CHAT} removed`
|
|
92156
|
+
],
|
|
92157
|
+
usesPaneApi: needLua
|
|
91487
92158
|
};
|
|
91488
92159
|
}
|
|
91489
|
-
__name(
|
|
92160
|
+
__name(removeAgentPane, "removeAgentPane");
|
|
92161
|
+
function chatReferences(file, source) {
|
|
92162
|
+
if (!source.includes(APP_CHAT)) return {
|
|
92163
|
+
uses: [],
|
|
92164
|
+
styles: false
|
|
92165
|
+
};
|
|
92166
|
+
const sf = ts6.createSourceFile(file, source, ts6.ScriptTarget.Latest, true, scriptKind(file));
|
|
92167
|
+
const uses = /* @__PURE__ */ new Set();
|
|
92168
|
+
let styles = false;
|
|
92169
|
+
const fromChat = /* @__PURE__ */ __name((e) => !!e && ts6.isStringLiteral(e) && (e.text === APP_CHAT || e.text.startsWith(`${APP_CHAT}/`)), "fromChat");
|
|
92170
|
+
const visit = /* @__PURE__ */ __name((node) => {
|
|
92171
|
+
if (ts6.isImportDeclaration(node) && fromChat(node.moduleSpecifier)) {
|
|
92172
|
+
const clause = node.importClause;
|
|
92173
|
+
const b = clause?.namedBindings;
|
|
92174
|
+
if (!clause) {
|
|
92175
|
+
if (node.moduleSpecifier.text === PANE_CSS) styles = true;
|
|
92176
|
+
else uses.add(node.moduleSpecifier.text);
|
|
92177
|
+
} else {
|
|
92178
|
+
if (clause.name) uses.add(clause.name.text);
|
|
92179
|
+
if (b && ts6.isNamespaceImport(b)) uses.add(`* as ${b.name.text}`);
|
|
92180
|
+
if (b && ts6.isNamedImports(b)) for (const e of b.elements) uses.add((e.propertyName ?? e.name).text);
|
|
92181
|
+
if (!clause.name && b && ts6.isNamedImports(b) && !b.elements.length) uses.add(node.moduleSpecifier.text);
|
|
92182
|
+
}
|
|
92183
|
+
} else if (ts6.isExportDeclaration(node) && fromChat(node.moduleSpecifier)) {
|
|
92184
|
+
uses.add(`export \u2026 from '${node.moduleSpecifier.text}'`);
|
|
92185
|
+
} else if (ts6.isCallExpression(node) && node.expression.kind === ts6.SyntaxKind.ImportKeyword && fromChat(node.arguments[0])) {
|
|
92186
|
+
uses.add(`import('${node.arguments[0].text}')`);
|
|
92187
|
+
}
|
|
92188
|
+
ts6.forEachChild(node, visit);
|
|
92189
|
+
}, "visit");
|
|
92190
|
+
visit(sf);
|
|
92191
|
+
return {
|
|
92192
|
+
uses: [
|
|
92193
|
+
...uses
|
|
92194
|
+
],
|
|
92195
|
+
styles
|
|
92196
|
+
};
|
|
92197
|
+
}
|
|
92198
|
+
__name(chatReferences, "chatReferences");
|
|
92199
|
+
function dropChatStyleImports(file, source) {
|
|
92200
|
+
const sf = ts6.createSourceFile(file, source, ts6.ScriptTarget.Latest, true, scriptKind(file));
|
|
92201
|
+
const edits = sf.statements.filter((d) => importsFrom(d, PANE_CSS) && !d.importClause).map((d) => {
|
|
92202
|
+
const [start, end] = lineSpan(source, d.getStart(sf), d.getEnd());
|
|
92203
|
+
return {
|
|
92204
|
+
start,
|
|
92205
|
+
end,
|
|
92206
|
+
text: ""
|
|
92207
|
+
};
|
|
92208
|
+
});
|
|
92209
|
+
return edits.length ? applySplices(source, edits) : null;
|
|
92210
|
+
}
|
|
92211
|
+
__name(dropChatStyleImports, "dropChatStyleImports");
|
|
92212
|
+
function removePaneStyles(source) {
|
|
92213
|
+
const re = /^[ \t]*@import\s+(?:url\(\s*)?(['"])@lua-ai-global\/app-chat\/styles\.css\1[^;\n]*;[^\n]*(?:\n|$)/m;
|
|
92214
|
+
let out = source;
|
|
92215
|
+
for (let m = re.exec(out); m; m = re.exec(out)) {
|
|
92216
|
+
let start = m.index;
|
|
92217
|
+
if (start > 0) {
|
|
92218
|
+
const above = out.lastIndexOf("\n", start - 2) + 1;
|
|
92219
|
+
if (out.slice(above, start).trim() === PANE_CSS_COMMENT) start = above;
|
|
92220
|
+
}
|
|
92221
|
+
out = out.slice(0, start) + out.slice(m.index + m[0].length);
|
|
92222
|
+
}
|
|
92223
|
+
return out === source ? null : out;
|
|
92224
|
+
}
|
|
92225
|
+
__name(removePaneStyles, "removePaneStyles");
|
|
92226
|
+
var escapeRegExp = /* @__PURE__ */ __name((s) => s.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"), "escapeRegExp");
|
|
92227
|
+
function whitespaceInsensitive(lines) {
|
|
92228
|
+
const anySpace = "[ \\t]*";
|
|
92229
|
+
const line = /* @__PURE__ */ __name((text2) => anySpace + [
|
|
92230
|
+
...text2.replace(/\s+/g, "")
|
|
92231
|
+
].map(escapeRegExp).join(anySpace) + anySpace, "line");
|
|
92232
|
+
return new RegExp(`^${lines.map(line).join("\\r?\\n")}\\r?\\n`, "m");
|
|
92233
|
+
}
|
|
92234
|
+
__name(whitespaceInsensitive, "whitespaceInsensitive");
|
|
92235
|
+
var THEME_BLOCK = whitespaceInsensitive(TEMPLATE_THEME_LINES);
|
|
92236
|
+
function removeThemeLines(file, source) {
|
|
92237
|
+
const match = THEME_BLOCK.exec(source);
|
|
92238
|
+
if (!match) return null;
|
|
92239
|
+
const end = match.index + match[0].length;
|
|
92240
|
+
const blank = /^[ \t]*\r?\n/.exec(source.slice(end))?.[0].length ?? 0;
|
|
92241
|
+
const out = source.slice(0, match.index) + source.slice(end + blank);
|
|
92242
|
+
const sf = ts6.createSourceFile(file, out, ts6.ScriptTarget.Latest, true, scriptKind(file));
|
|
92243
|
+
if (luaBinding(sf).local !== "lua") return null;
|
|
92244
|
+
return identifiers(sf).some((id2) => id2.text === "lua" && !insideImport(id2) && isReference(id2)) ? out : null;
|
|
92245
|
+
}
|
|
92246
|
+
__name(removeThemeLines, "removeThemeLines");
|
|
91490
92247
|
function planWebAppUpgrade(target, templateRoot = getPackageRoot()) {
|
|
91491
92248
|
const { pagesDir } = target;
|
|
91492
92249
|
const contents = /* @__PURE__ */ new Map();
|
|
@@ -91501,18 +92258,7 @@ function planWebAppUpgrade(target, templateRoot = getPackageRoot()) {
|
|
|
91501
92258
|
summary
|
|
91502
92259
|
]);
|
|
91503
92260
|
}, "change");
|
|
91504
|
-
const
|
|
91505
|
-
try {
|
|
91506
|
-
const pkg2 = planPackageJson(fs26.readFileSync(pkgFile, "utf8"), templateRanges(templateRoot));
|
|
91507
|
-
if (pkg2.content) change(pkgFile, pkg2.content, pkg2.changes.join(", "));
|
|
91508
|
-
warnings.push(...pkg2.warnings);
|
|
91509
|
-
} catch (error) {
|
|
91510
|
-
if (!(error instanceof SyntaxError)) throw error;
|
|
91511
|
-
manual.push([
|
|
91512
|
-
"web/package.json is not plain JSON, so it was left as is. In web/:",
|
|
91513
|
-
` npm i ${UPGRADED_PACKAGES.map((n2) => `${n2}@"${templateRanges(templateRoot)[n2]}"`).join(" ")}`
|
|
91514
|
-
]);
|
|
91515
|
-
}
|
|
92261
|
+
const inWeb = /* @__PURE__ */ __name((file) => `web/${path32.relative(pagesDir, file).split(path32.sep).join("/")}`, "inWeb");
|
|
91516
92262
|
const srcDir = path32.join(pagesDir, "src");
|
|
91517
92263
|
const clientFile = path32.join(srcDir, "lua", "client.ts");
|
|
91518
92264
|
let clientKept = false;
|
|
@@ -91529,47 +92275,117 @@ function planWebAppUpgrade(target, templateRoot = getPackageRoot()) {
|
|
|
91529
92275
|
manual.push([
|
|
91530
92276
|
"web/src/lua/client.ts is the copied app client, edited since `lua apps new` wrote it, so it was kept.",
|
|
91531
92277
|
` Switch by hand: import from '${APP_CLIENT}' where the pages import './lua/client', bring over any`,
|
|
91532
|
-
" change of yours the package lacks, delete web/src/lua/client.ts, then run lua apps upgrade again"
|
|
91533
|
-
" (the agent pane talks through the package client, so it is added only after the switch)."
|
|
92278
|
+
" change of yours the package lacks, delete web/src/lua/client.ts, then run lua apps upgrade again."
|
|
91534
92279
|
]);
|
|
91535
92280
|
}
|
|
91536
92281
|
}
|
|
92282
|
+
let usesPaneApi = false;
|
|
92283
|
+
let paneRemoved = false;
|
|
92284
|
+
const stillImporting = [];
|
|
92285
|
+
const styleImporters = [];
|
|
92286
|
+
const leftAlone = /* @__PURE__ */ new Set();
|
|
91537
92287
|
if (!clientKept) {
|
|
91538
|
-
const
|
|
91539
|
-
|
|
91540
|
-
|
|
91541
|
-
|
|
91542
|
-
|
|
91543
|
-
|
|
91544
|
-
|
|
91545
|
-
manual
|
|
91546
|
-
|
|
91547
|
-
|
|
91548
|
-
|
|
92288
|
+
for (const file of sourceFiles(srcDir)) {
|
|
92289
|
+
if (contents.get(file) === null) continue;
|
|
92290
|
+
const edit = removeAgentPane(file, read(file));
|
|
92291
|
+
if (edit.status === "edited") {
|
|
92292
|
+
change(file, edit.content, edit.summary.join("; "));
|
|
92293
|
+
usesPaneApi ||= edit.usesPaneApi;
|
|
92294
|
+
paneRemoved = true;
|
|
92295
|
+
} else if (edit.status === "manual") {
|
|
92296
|
+
manual.push([
|
|
92297
|
+
`${inWeb(file)} was not edited: ${edit.reasons.join("; ")}.`
|
|
92298
|
+
]);
|
|
92299
|
+
leftAlone.add(file);
|
|
92300
|
+
}
|
|
92301
|
+
const refs = chatReferences(file, read(file));
|
|
92302
|
+
if (refs.uses.length) stillImporting.push(`${inWeb(file)} (${refs.uses.join(", ")})`);
|
|
92303
|
+
if (refs.styles) styleImporters.push(file);
|
|
92304
|
+
}
|
|
92305
|
+
}
|
|
92306
|
+
const pkgFile = path32.join(pagesDir, "package.json");
|
|
92307
|
+
const pkgSource = fs26.readFileSync(pkgFile, "utf8");
|
|
92308
|
+
const ranges = templateRanges(templateRoot);
|
|
92309
|
+
const clientFloor = rangeFloor(ranges[APP_CLIENT]);
|
|
92310
|
+
if (usesPaneApi && (!clientFloor || compareFloors(clientFloor, rangeFloor(PANE_API_CLIENT_RANGE)) < 0)) {
|
|
92311
|
+
ranges[APP_CLIENT] = PANE_API_CLIENT_RANGE;
|
|
92312
|
+
}
|
|
92313
|
+
let pkg2;
|
|
92314
|
+
try {
|
|
92315
|
+
pkg2 = JSON.parse(pkgSource);
|
|
92316
|
+
} catch (error) {
|
|
92317
|
+
if (!(error instanceof SyntaxError)) throw error;
|
|
92318
|
+
}
|
|
92319
|
+
const hasChat = !!pkg2 && [
|
|
92320
|
+
pkg2.dependencies,
|
|
92321
|
+
pkg2.devDependencies
|
|
92322
|
+
].some((d) => d?.[APP_CHAT] !== void 0);
|
|
92323
|
+
const dropChat = hasChat && !clientKept && !stillImporting.length;
|
|
92324
|
+
const designChanged = !!pkg2 && movesToNewerDesign(pkg2, ranges[UI]);
|
|
92325
|
+
if (pkg2) {
|
|
92326
|
+
const plan = planPackageJson(pkgSource, ranges, dropChat ? [
|
|
92327
|
+
APP_CHAT
|
|
92328
|
+
] : []);
|
|
92329
|
+
if (plan.content) change(pkgFile, plan.content, plan.changes.join(", "));
|
|
92330
|
+
warnings.push(...plan.warnings);
|
|
92331
|
+
} else {
|
|
92332
|
+
manual.push([
|
|
92333
|
+
"web/package.json is not plain JSON, so it was left as is. In web/:",
|
|
92334
|
+
` npm i ${UPGRADED_PACKAGES.map((n2) => `${n2}@"${ranges[n2]}"`).join(" ")}`,
|
|
92335
|
+
...pkgSource.includes(APP_CHAT) && !stillImporting.length ? [
|
|
92336
|
+
` npm uninstall ${APP_CHAT} (and remove the @import of its styles from web/src/index.css)`
|
|
92337
|
+
] : []
|
|
92338
|
+
]);
|
|
92339
|
+
}
|
|
92340
|
+
if (hasChat && stillImporting.length) {
|
|
92341
|
+
manual.push([
|
|
92342
|
+
`${APP_CHAT} was kept in web/package.json: ${stillImporting.join(", ")} still ${stillImporting.length === 1 ? "imports" : "import"} it. By hand,`,
|
|
92343
|
+
...MANUAL_PANE_EDIT.map((l) => ` ${l}`)
|
|
92344
|
+
]);
|
|
92345
|
+
}
|
|
92346
|
+
if (dropChat) {
|
|
92347
|
+
for (const file of styleImporters) {
|
|
92348
|
+
const next = dropChatStyleImports(file, read(file));
|
|
92349
|
+
if (next !== null) change(file, next, `import of ${PANE_CSS} removed`);
|
|
91549
92350
|
}
|
|
91550
92351
|
const cssFile = path32.join(srcDir, "index.css");
|
|
91551
|
-
|
|
91552
|
-
|
|
91553
|
-
|
|
91554
|
-
|
|
91555
|
-
|
|
91556
|
-
|
|
91557
|
-
|
|
91558
|
-
|
|
91559
|
-
|
|
92352
|
+
const css = fs26.existsSync(cssFile) ? removePaneStyles(read(cssFile)) : null;
|
|
92353
|
+
if (css !== null) change(cssFile, css, `@import '${PANE_CSS}' removed`);
|
|
92354
|
+
paneRemoved = true;
|
|
92355
|
+
}
|
|
92356
|
+
const mainFile = path32.join(srcDir, "main.tsx");
|
|
92357
|
+
let themeRemoved = false;
|
|
92358
|
+
if (!clientKept && !leftAlone.has(mainFile) && fs26.existsSync(mainFile)) {
|
|
92359
|
+
let planned;
|
|
92360
|
+
try {
|
|
92361
|
+
planned = JSON.parse(contents.get(pkgFile) ?? pkgSource);
|
|
92362
|
+
} catch (error) {
|
|
92363
|
+
if (!(error instanceof SyntaxError)) throw error;
|
|
92364
|
+
}
|
|
92365
|
+
const range2 = planned?.dependencies?.[APP_CLIENT] ?? planned?.devDependencies?.[APP_CLIENT];
|
|
92366
|
+
const floor = typeof range2 === "string" ? rangeFloor(range2) : void 0;
|
|
92367
|
+
if (floor && compareFloors(floor, rangeFloor(THEME_CLIENT_RANGE)) >= 0) {
|
|
92368
|
+
const next = removeThemeLines(mainFile, read(mainFile));
|
|
92369
|
+
if (next !== null) {
|
|
92370
|
+
change(mainFile, next, "theme lines removed (app-client applies the shell's theme)");
|
|
92371
|
+
themeRemoved = true;
|
|
92372
|
+
}
|
|
91560
92373
|
}
|
|
91561
92374
|
}
|
|
91562
92375
|
return {
|
|
91563
92376
|
target,
|
|
91564
92377
|
changes: [
|
|
91565
92378
|
...contents.entries()
|
|
91566
|
-
].map(([file, content]) => ({
|
|
92379
|
+
].sort(([a], [b]) => Number(b === pkgFile) - Number(a === pkgFile)).map(([file, content]) => ({
|
|
91567
92380
|
file,
|
|
91568
92381
|
content,
|
|
91569
92382
|
summary: summaries.get(file).join("; ")
|
|
91570
92383
|
})),
|
|
91571
92384
|
warnings,
|
|
91572
|
-
manual
|
|
92385
|
+
manual,
|
|
92386
|
+
paneRemoved,
|
|
92387
|
+
designChanged,
|
|
92388
|
+
themeRemoved
|
|
91573
92389
|
};
|
|
91574
92390
|
}
|
|
91575
92391
|
__name(planWebAppUpgrade, "planWebAppUpgrade");
|
|
@@ -91631,6 +92447,12 @@ async function appsUpgradeCommand(name, opts = {}, deps = {}) {
|
|
|
91631
92447
|
for (const c of plan.changes) {
|
|
91632
92448
|
writeInfo(` ${c.content === null ? "delete" : "update"} ${rel(c.file).padEnd(width)} ${c.summary}`);
|
|
91633
92449
|
}
|
|
92450
|
+
if (plan.designChanged) {
|
|
92451
|
+
writeInfo(` \u2139\uFE0F ${UI} moves to the current Lua design: buttons, inputs, tabs and cards get smaller and flatter. No code changes are needed; look over the pages with lua apps dev ${name} before you push.`);
|
|
92452
|
+
}
|
|
92453
|
+
if (plan.paneRemoved) {
|
|
92454
|
+
writeInfo(" \u2139\uFE0F The agent pane now comes from the platform: deployed, the app gets it in the Workspace (the top-bar button opens it). lua apps dev serves no pane.");
|
|
92455
|
+
}
|
|
91634
92456
|
printLeftovers();
|
|
91635
92457
|
if (opts.dryRun) {
|
|
91636
92458
|
writeInfo("\nDry run: nothing was written.");
|
|
@@ -91667,21 +92489,24 @@ async function appsUpgradeCommand(name, opts = {}, deps = {}) {
|
|
|
91667
92489
|
installed = status === 0;
|
|
91668
92490
|
if (!installed) {
|
|
91669
92491
|
throw new CliError("install_failed", `The upgrade was written to ${pagesRel}, but npm install there failed (exit ${status ?? "signal"}).`, {
|
|
91670
|
-
hint: `The files are already upgraded; only the install is missing. Run: cd ${pagesRel} && npm install`
|
|
92492
|
+
hint: `The files are already upgraded; only the install is missing. Run: cd ${pagesRel} && npm install` + (plan.themeRemoved ? ` (${THEME_INSTALL_NOTE}).` : "")
|
|
91671
92493
|
});
|
|
91672
92494
|
}
|
|
91673
92495
|
}
|
|
92496
|
+
if (opts.skipInstall && plan.themeRemoved) {
|
|
92497
|
+
writeInfo(` \u26A0\uFE0F Run npm install in ${pagesRel} before lua apps dev or lua push: ${THEME_INSTALL_NOTE}.`);
|
|
92498
|
+
}
|
|
91674
92499
|
writeHintBlock({
|
|
91675
92500
|
headline: "Next:",
|
|
91676
92501
|
lines: [
|
|
91677
92502
|
...opts.skipInstall ? [
|
|
91678
92503
|
{
|
|
91679
|
-
label: "Install pages:",
|
|
92504
|
+
label: plan.themeRemoved ? "Install pages (required):" : "Install pages:",
|
|
91680
92505
|
command: `cd ${pagesRel} && npm install`
|
|
91681
92506
|
}
|
|
91682
92507
|
] : [],
|
|
91683
92508
|
{
|
|
91684
|
-
label:
|
|
92509
|
+
label: "Run locally:",
|
|
91685
92510
|
command: `lua apps dev ${name}`
|
|
91686
92511
|
},
|
|
91687
92512
|
{
|
|
@@ -93389,18 +94214,27 @@ Examples:
|
|
|
93389
94214
|
$ lua apps delete hello --ci --code 123456 Delete with the emailed code
|
|
93390
94215
|
$ lua apps delete hello --agent agent_123 Outside the agent's project
|
|
93391
94216
|
`).action((name, opts) => appsDeleteCommand(name, opts));
|
|
93392
|
-
appsGroup.command("upgrade <name>").description("Bring a web app made by an older lua apps new up to the current template (agent pane, app-client)").option("--dry-run", "Print the changes and write nothing").option("--force", "Apply without asking").option("--skip-install", "Do not run npm install in web/ afterwards").addHelpText("after", `
|
|
94217
|
+
appsGroup.command("upgrade <name>").description("Bring a web app made by an older lua apps new up to the current template (platform agent pane, app-client)").option("--dry-run", "Print the changes and write nothing").option("--force", "Apply without asking").option("--skip-install", "Do not run npm install in web/ afterwards").addHelpText("after", `
|
|
93393
94218
|
Edits the app's pages in place, like the template lua apps new writes today:
|
|
93394
|
-
web/package.json @lua-ai-global/app-chat, app-client and ui at least at the
|
|
93395
|
-
template's ranges (a newer range of yours is kept)
|
|
93396
94219
|
web/src/lua/ the copied app client (apps made before the package) is
|
|
93397
94220
|
deleted and its imports point at @lua-ai-global/app-client,
|
|
93398
94221
|
only when it is unchanged; an edited copy is left to you
|
|
93399
|
-
web/src
|
|
93400
|
-
|
|
93401
|
-
|
|
93402
|
-
|
|
93403
|
-
|
|
94222
|
+
web/src/** the bundled agent pane comes out (the platform's pane, which
|
|
94223
|
+
the gateway injects, replaces it): <AgentPaneLayout> gives way
|
|
94224
|
+
to what it wraps (a context prop becomes lua.pane.setContext),
|
|
94225
|
+
useAgentPane() becomes lua.pane from @lua-ai-global/app-client
|
|
94226
|
+
web/package.json app-client and ui at least at the template's ranges
|
|
94227
|
+
(app-client ~0.0.5 once lua.pane is used; a newer range of
|
|
94228
|
+
yours is kept); @lua-ai-global/app-chat removed once nothing
|
|
94229
|
+
imports it
|
|
94230
|
+
web/src/index.css the @import of app-chat's styles, with the dependency
|
|
94231
|
+
web/src/main.tsx the old template's .dark toggle (app-client 0.1+ applies the
|
|
94232
|
+
shell's theme, density and accent itself), only when it is
|
|
94233
|
+
exactly the template's lines
|
|
94234
|
+
A file it cannot rewrite (other props, isOpen, <AgentPane>) is not edited: the
|
|
94235
|
+
steps are printed, and app-chat stays while a file imports it. Run it again and
|
|
94236
|
+
it says the app is up to date. It asks before writing when both stdin and stdout
|
|
94237
|
+
are terminals and --ci is off; --force (or --ci) applies without asking.
|
|
93404
94238
|
With agentPane: false in defineWebApp the pages are upgraded, and the pane stays
|
|
93405
94239
|
off until you remove it.
|
|
93406
94240
|
|