lua-cli 3.54.0 → 3.55.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 +135 -91
- package/dist/api-exports.js +392 -111
- package/dist/api-exports.js.map +1 -1
- package/dist/index.js +1124 -309
- package/dist/index.js.map +1 -1
- package/dist/voice/test/index.d.ts +82 -76
- 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/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)
|
|
@@ -53719,6 +53998,50 @@ function detectBundledAgentPane(pagesDir, assets) {
|
|
|
53719
53998
|
return dependsOnAppChat(pagesDir) && sourceImportsAppChat(pagesDir);
|
|
53720
53999
|
}
|
|
53721
54000
|
__name(detectBundledAgentPane, "detectBundledAgentPane");
|
|
54001
|
+
var UI_PACKAGE = "@lua-ai-global/ui";
|
|
54002
|
+
function resolvedUiVersion(pagesDir) {
|
|
54003
|
+
return resolvedPackageVersion(pagesDir, UI_PACKAGE);
|
|
54004
|
+
}
|
|
54005
|
+
__name(resolvedUiVersion, "resolvedUiVersion");
|
|
54006
|
+
var APP_CLIENT_PACKAGE = "@lua-ai-global/app-client";
|
|
54007
|
+
var THEME_APP_CLIENT_VERSION = "0.1.0";
|
|
54008
|
+
var PAGE_THEME_CODE = /['"]dark['"]|\.theme\b/;
|
|
54009
|
+
function appClientThemeWarning(pagesDir) {
|
|
54010
|
+
const main = [
|
|
54011
|
+
"main.tsx",
|
|
54012
|
+
"main.jsx"
|
|
54013
|
+
].map((f) => path23.join(pagesDir, "src", f)).find((f) => fs19.existsSync(f));
|
|
54014
|
+
if (!main || PAGE_THEME_CODE.test(fs19.readFileSync(main, "utf8"))) return void 0;
|
|
54015
|
+
const installed = resolvedPackageVersion(pagesDir, APP_CLIENT_PACKAGE);
|
|
54016
|
+
if (!installed || compareSemver(installed, THEME_APP_CLIENT_VERSION) >= 0) return void 0;
|
|
54017
|
+
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)}/.`;
|
|
54018
|
+
}
|
|
54019
|
+
__name(appClientThemeWarning, "appClientThemeWarning");
|
|
54020
|
+
function compareSemver(a, b) {
|
|
54021
|
+
const parts = /* @__PURE__ */ __name((v) => v.split("+")[0].split("-")[0].split(".").map(Number), "parts");
|
|
54022
|
+
const isPrerelease = /* @__PURE__ */ __name((v) => v.split("+")[0].includes("-"), "isPrerelease");
|
|
54023
|
+
const [x, y] = [
|
|
54024
|
+
parts(a),
|
|
54025
|
+
parts(b)
|
|
54026
|
+
];
|
|
54027
|
+
return x[0] - y[0] || x[1] - y[1] || x[2] - y[2] || Number(isPrerelease(b)) - Number(isPrerelease(a));
|
|
54028
|
+
}
|
|
54029
|
+
__name(compareSemver, "compareSemver");
|
|
54030
|
+
function resolvedPackageVersion(pagesDir, pkg2) {
|
|
54031
|
+
for (let dir = path23.resolve(pagesDir); ; dir = path23.dirname(dir)) {
|
|
54032
|
+
const manifest = path23.join(dir, "node_modules", ...pkg2.split("/"), "package.json");
|
|
54033
|
+
if (fs19.existsSync(manifest)) {
|
|
54034
|
+
try {
|
|
54035
|
+
const version = JSON.parse(fs19.readFileSync(manifest, "utf8")).version;
|
|
54036
|
+
return typeof version === "string" && version.length <= WEB_APP_UI_VERSION_MAX_CHARS && WEB_APP_UI_VERSION_PATTERN.test(version) ? version : void 0;
|
|
54037
|
+
} catch {
|
|
54038
|
+
return void 0;
|
|
54039
|
+
}
|
|
54040
|
+
}
|
|
54041
|
+
if (path23.dirname(dir) === dir) return void 0;
|
|
54042
|
+
}
|
|
54043
|
+
}
|
|
54044
|
+
__name(resolvedPackageVersion, "resolvedPackageVersion");
|
|
53722
54045
|
async function buildWebAppPages(pagesDir, loadVite = loadAppVite) {
|
|
53723
54046
|
if (!fs19.existsSync(path23.join(pagesDir, "index.html"))) {
|
|
53724
54047
|
throw new WebAppBuildError(`${pagesDir} has no index.html: \`pages.root\` must name the Vite project directory.`);
|
|
@@ -53741,10 +54064,14 @@ async function buildWebAppPages(pagesDir, loadVite = loadAppVite) {
|
|
|
53741
54064
|
}
|
|
53742
54065
|
});
|
|
53743
54066
|
const output = collectBuildOutput(outDir);
|
|
54067
|
+
const uiVersion = resolvedUiVersion(pagesDir);
|
|
53744
54068
|
return {
|
|
53745
54069
|
...output,
|
|
53746
54070
|
viteVersion: version,
|
|
53747
|
-
bundlesAgentPane: detectBundledAgentPane(pagesDir, output.assets)
|
|
54071
|
+
bundlesAgentPane: detectBundledAgentPane(pagesDir, output.assets),
|
|
54072
|
+
...uiVersion ? {
|
|
54073
|
+
uiVersion
|
|
54074
|
+
} : {}
|
|
53748
54075
|
};
|
|
53749
54076
|
} finally {
|
|
53750
54077
|
fs19.rmSync(outDir, {
|
|
@@ -53757,6 +54084,7 @@ __name(buildWebAppPages, "buildWebAppPages");
|
|
|
53757
54084
|
|
|
53758
54085
|
// src/primitives/web-app.handler.ts
|
|
53759
54086
|
init_package_root();
|
|
54087
|
+
init_server_refusal();
|
|
53760
54088
|
init_cli();
|
|
53761
54089
|
init_write_info();
|
|
53762
54090
|
init_base_handler();
|
|
@@ -53772,12 +54100,6 @@ function webAppNameReservedMessage(error) {
|
|
|
53772
54100
|
return printableRefusal(error, "WEB_APP_NAME_RESERVED");
|
|
53773
54101
|
}
|
|
53774
54102
|
__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
54103
|
var WebAppHandler = class extends BaseVersionedHandler {
|
|
53782
54104
|
static {
|
|
53783
54105
|
__name(this, "WebAppHandler");
|
|
@@ -53797,7 +54119,7 @@ var WebAppHandler = class extends BaseVersionedHandler {
|
|
|
53797
54119
|
async fetchFromServer(api) {
|
|
53798
54120
|
const response = await api.getWebApps();
|
|
53799
54121
|
if (!response.success || !response.data?.webApps) return null;
|
|
53800
|
-
return response.data.webApps;
|
|
54122
|
+
return response.data.webApps.filter((app) => !isSystemOwned(app));
|
|
53801
54123
|
}
|
|
53802
54124
|
async createOnServer(api, primitive) {
|
|
53803
54125
|
const response = await api.createWebApp({
|
|
@@ -53888,6 +54210,8 @@ var WebAppHandler = class extends BaseVersionedHandler {
|
|
|
53888
54210
|
if (pages.skipped.length > 0) {
|
|
53889
54211
|
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
54212
|
}
|
|
54213
|
+
const themeWarning = appClientThemeWarning(pagesDir);
|
|
54214
|
+
if (themeWarning) writeInfo(`\u26A0\uFE0F ${themeWarning}`);
|
|
53891
54215
|
const compiler = pushData.compiler ?? {};
|
|
53892
54216
|
return {
|
|
53893
54217
|
...pushData,
|
|
@@ -53896,6 +54220,10 @@ var WebAppHandler = class extends BaseVersionedHandler {
|
|
|
53896
54220
|
...pages.bundlesAgentPane ? {
|
|
53897
54221
|
bundlesAgentPane: true
|
|
53898
54222
|
} : {},
|
|
54223
|
+
// ADR 0027: the resolved @lua-ai-global/ui, sent only when found; absent ⇒ unknown, the gateway scans the CSS.
|
|
54224
|
+
...pages.uiVersion ? {
|
|
54225
|
+
uiVersion: pages.uiVersion
|
|
54226
|
+
} : {},
|
|
53899
54227
|
assets: pages.assets.map(({ bytes: _bytes, ...entry }) => entry),
|
|
53900
54228
|
compiler: {
|
|
53901
54229
|
...compiler,
|
|
@@ -80372,6 +80700,7 @@ __name(deletePostProcessorInteractive, "deletePostProcessorInteractive");
|
|
|
80372
80700
|
|
|
80373
80701
|
// src/commands/marketplace.ts
|
|
80374
80702
|
init_cli();
|
|
80703
|
+
init_server_refusal();
|
|
80375
80704
|
|
|
80376
80705
|
// src/api/marketplace.api.service.ts
|
|
80377
80706
|
init_constants();
|
|
@@ -82330,7 +82659,7 @@ async function listSkillOnMarketplace(marketplaceApi, config, apiKey) {
|
|
|
82330
82659
|
`);
|
|
82331
82660
|
return;
|
|
82332
82661
|
}
|
|
82333
|
-
const skills = agentSkillsResponse.data.skills || [];
|
|
82662
|
+
const skills = (agentSkillsResponse.data.skills || []).filter((skill) => !isSystemOwned(skill));
|
|
82334
82663
|
if (skills.length === 0) {
|
|
82335
82664
|
console.log("\n\u2139\uFE0F No skills found on this agent.");
|
|
82336
82665
|
console.log("\u{1F4A1} Push a skill first using 'lua push skill'.\n");
|
|
@@ -90573,7 +90902,7 @@ init_types();
|
|
|
90573
90902
|
var WEB_APP_TEMPLATE_DIR = "template-web-app";
|
|
90574
90903
|
var PAGES_EXCLUDE_GLOB = "src/apps/*/web";
|
|
90575
90904
|
var NAME_PLACEHOLDER = "__APP_NAME__";
|
|
90576
|
-
function
|
|
90905
|
+
function pagesBundleAgentPane(pagesDir) {
|
|
90577
90906
|
return [
|
|
90578
90907
|
"main.tsx",
|
|
90579
90908
|
"main.jsx"
|
|
@@ -90582,7 +90911,7 @@ function pagesHaveAgentPane(pagesDir) {
|
|
|
90582
90911
|
return fs24.existsSync(file) && fs24.readFileSync(file, "utf8").includes("AgentPaneLayout");
|
|
90583
90912
|
});
|
|
90584
90913
|
}
|
|
90585
|
-
__name(
|
|
90914
|
+
__name(pagesBundleAgentPane, "pagesBundleAgentPane");
|
|
90586
90915
|
function appIdentifier(name) {
|
|
90587
90916
|
return name.replace(/-([a-z0-9])/g, (_, c) => c.toUpperCase());
|
|
90588
90917
|
}
|
|
@@ -90852,8 +91181,11 @@ async function appsDevCommand(name, opts = {}) {
|
|
|
90852
91181
|
});
|
|
90853
91182
|
await server.listen();
|
|
90854
91183
|
origin = server.resolvedUrls?.local?.[0]?.replace(/\/$/, "") ?? "";
|
|
91184
|
+
const bundlesPane = pagesBundleAgentPane(pagesDir);
|
|
90855
91185
|
writeSuccess(`
|
|
90856
91186
|
\u2705 ${name} is running`);
|
|
91187
|
+
const themeWarning = appClientThemeWarning(pagesDir);
|
|
91188
|
+
if (themeWarning) writeInfo(`\u26A0\uFE0F ${themeWarning}`);
|
|
90857
91189
|
writeHintBlock({
|
|
90858
91190
|
headline: "Lua apps dev:",
|
|
90859
91191
|
lines: [
|
|
@@ -90867,8 +91199,14 @@ async function appsDevCommand(name, opts = {}) {
|
|
|
90867
91199
|
},
|
|
90868
91200
|
{
|
|
90869
91201
|
label: "Agent pane:",
|
|
90870
|
-
command: app.agentPane === false ? "off (agentPane: false)" : !
|
|
91202
|
+
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
91203
|
},
|
|
91204
|
+
...app.agentPane !== false && bundlesPane ? [
|
|
91205
|
+
{
|
|
91206
|
+
label: "Bundled pane:",
|
|
91207
|
+
command: `lua apps upgrade ${name} (moves to the platform pane)`
|
|
91208
|
+
}
|
|
91209
|
+
] : [],
|
|
90872
91210
|
{
|
|
90873
91211
|
label: "Stop:",
|
|
90874
91212
|
command: "Ctrl+C"
|
|
@@ -91107,13 +91445,19 @@ var APP_CHAT = "@lua-ai-global/app-chat";
|
|
|
91107
91445
|
var APP_CLIENT = "@lua-ai-global/app-client";
|
|
91108
91446
|
var UI = "@lua-ai-global/ui";
|
|
91109
91447
|
var UPGRADED_PACKAGES = [
|
|
91110
|
-
APP_CHAT,
|
|
91111
91448
|
APP_CLIENT,
|
|
91112
91449
|
UI
|
|
91113
91450
|
];
|
|
91114
|
-
var
|
|
91451
|
+
var PANE_API_CLIENT_RANGE = "~0.0.5";
|
|
91452
|
+
var PANE_COMMENT_PREFIX = "{/* The agent pane:";
|
|
91115
91453
|
var PANE_CSS_COMMENT = "/* The agent pane's styles: after the design system's, on its tokens. */";
|
|
91116
91454
|
var PANE_CSS = `${APP_CHAT}/styles.css`;
|
|
91455
|
+
var THEME_CLIENT_RANGE = "~0.1.0";
|
|
91456
|
+
var TEMPLATE_THEME_LINES = [
|
|
91457
|
+
"// Theme follows the shell: first from the bootstrap, then from the host's `init`.",
|
|
91458
|
+
"document.documentElement.classList.toggle('dark', lua.theme === 'dark');",
|
|
91459
|
+
"lua.onInit((init) => document.documentElement.classList.toggle('dark', init.theme === 'dark'));"
|
|
91460
|
+
];
|
|
91117
91461
|
var KNOWN_COPIED_CLIENTS = /* @__PURE__ */ new Set([
|
|
91118
91462
|
"6dee7fbd9103f2f9d33879b1c83279acf3ff3da974cc76b5e3482a4cbc00dd9c",
|
|
91119
91463
|
"2bf0527634fba64be8e71885dd10044231d4472baaae3982a9b4d6a801fe1195",
|
|
@@ -91218,6 +91562,13 @@ function templateRanges(templateRoot = getPackageRoot()) {
|
|
|
91218
91562
|
return ranges;
|
|
91219
91563
|
}
|
|
91220
91564
|
__name(templateRanges, "templateRanges");
|
|
91565
|
+
function movesToNewerDesign(pkg2, wanted) {
|
|
91566
|
+
const current = pkg2.dependencies?.[UI] ?? pkg2.devDependencies?.[UI];
|
|
91567
|
+
const have = typeof current === "string" ? rangeFloor(current) : void 0;
|
|
91568
|
+
const need = rangeFloor(wanted);
|
|
91569
|
+
return !!have && !!need && (have[0] < need[0] || have[0] === need[0] && have[1] < need[1]);
|
|
91570
|
+
}
|
|
91571
|
+
__name(movesToNewerDesign, "movesToNewerDesign");
|
|
91221
91572
|
function rangeFloor(range2) {
|
|
91222
91573
|
if (range2.includes("||")) return void 0;
|
|
91223
91574
|
const tokens = range2.trim().split(/\s+/);
|
|
@@ -91241,7 +91592,7 @@ function compareFloors(a, b) {
|
|
|
91241
91592
|
return a[0] - b[0] || a[1] - b[1] || a[2] - b[2];
|
|
91242
91593
|
}
|
|
91243
91594
|
__name(compareFloors, "compareFloors");
|
|
91244
|
-
function planPackageJson(source, ranges) {
|
|
91595
|
+
function planPackageJson(source, ranges, remove = []) {
|
|
91245
91596
|
const pkg2 = JSON.parse(source);
|
|
91246
91597
|
const changes = [];
|
|
91247
91598
|
const warnings = [];
|
|
@@ -91262,13 +91613,25 @@ function planPackageJson(source, ranges) {
|
|
|
91262
91613
|
const have = rangeFloor(current);
|
|
91263
91614
|
const need = rangeFloor(wanted);
|
|
91264
91615
|
if (!have || !need) {
|
|
91265
|
-
warnings.push(`${name} is "${current}" in web/package.json; it was kept. The
|
|
91616
|
+
warnings.push(`${name} is "${current}" in web/package.json; it was kept. The upgrade wants ${wanted}.`);
|
|
91266
91617
|
continue;
|
|
91267
91618
|
}
|
|
91268
91619
|
if (compareFloors(have, need) >= 0) continue;
|
|
91269
91620
|
pkg2[section2][name] = wanted;
|
|
91270
91621
|
changes.push(`${name} ${current} \u2192 ${wanted}`);
|
|
91271
91622
|
}
|
|
91623
|
+
for (const name of remove) {
|
|
91624
|
+
let removed = false;
|
|
91625
|
+
for (const section2 of [
|
|
91626
|
+
"dependencies",
|
|
91627
|
+
"devDependencies"
|
|
91628
|
+
]) {
|
|
91629
|
+
if (pkg2[section2]?.[name] === void 0) continue;
|
|
91630
|
+
delete pkg2[section2][name];
|
|
91631
|
+
removed = true;
|
|
91632
|
+
}
|
|
91633
|
+
if (removed) changes.push(`${name} (removed)`);
|
|
91634
|
+
}
|
|
91272
91635
|
if (!changes.length) return {
|
|
91273
91636
|
changes,
|
|
91274
91637
|
warnings
|
|
@@ -91323,15 +91686,20 @@ function rewriteClientImports(file, source, clientFile) {
|
|
|
91323
91686
|
return out;
|
|
91324
91687
|
}
|
|
91325
91688
|
__name(rewriteClientImports, "rewriteClientImports");
|
|
91689
|
+
var THEME_INSTALL_NOTE = `the pages' light/dark and accent now come from ${APP_CLIENT} 0.1, which only npm install brings`;
|
|
91326
91690
|
var MANUAL_PANE_EDIT = [
|
|
91327
|
-
|
|
91328
|
-
|
|
91329
|
-
"
|
|
91330
|
-
"
|
|
91331
|
-
"
|
|
91332
|
-
"
|
|
91333
|
-
|
|
91691
|
+
"<AgentPaneLayout>: replace it with what it wraps; its context prop becomes lua.pane.setContext(...),",
|
|
91692
|
+
` with lua from ${APP_CLIENT} (${PANE_API_CLIENT_RANGE} or later); its other props have no equivalent`,
|
|
91693
|
+
" (the platform pane owns them);",
|
|
91694
|
+
"useAgentPane(): use lua.pane instead (open, close, ask, setContext); it has no isOpen (the Workspace",
|
|
91695
|
+
" owns whether the pane is open);",
|
|
91696
|
+
"<AgentPane>: remove it; the platform pane replaces it (lua.pane.open(), lua.pane.ask(text));",
|
|
91697
|
+
`then npm uninstall ${APP_CHAT} in web/ and remove the @import of its styles from web/src/index.css.`
|
|
91334
91698
|
];
|
|
91699
|
+
var PANE_EXPORTS = /* @__PURE__ */ new Set([
|
|
91700
|
+
"AgentPaneLayout",
|
|
91701
|
+
"useAgentPane"
|
|
91702
|
+
]);
|
|
91335
91703
|
function syntaxErrors(file, source) {
|
|
91336
91704
|
return ts6.transpileModule(source, {
|
|
91337
91705
|
fileName: path32.basename(file).replace(/\.\w+$/, ".tsx"),
|
|
@@ -91345,148 +91713,518 @@ function syntaxErrors(file, source) {
|
|
|
91345
91713
|
}
|
|
91346
91714
|
__name(syntaxErrors, "syntaxErrors");
|
|
91347
91715
|
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
|
-
|
|
91716
|
+
function applySplices(source, splices) {
|
|
91717
|
+
let out = source;
|
|
91718
|
+
const ordered = splices.map((s, i) => ({
|
|
91719
|
+
...s,
|
|
91720
|
+
i
|
|
91721
|
+
})).sort((a, b) => b.start - a.start || b.i - a.i);
|
|
91722
|
+
for (const s of ordered) out = out.slice(0, s.start) + s.text + out.slice(s.end);
|
|
91723
|
+
return out;
|
|
91724
|
+
}
|
|
91725
|
+
__name(applySplices, "applySplices");
|
|
91726
|
+
function indentAt(source, pos) {
|
|
91727
|
+
const before = source.slice(source.lastIndexOf("\n", pos - 1) + 1, pos);
|
|
91728
|
+
return /^[ \t]*$/.test(before) ? before : void 0;
|
|
91729
|
+
}
|
|
91730
|
+
__name(indentAt, "indentAt");
|
|
91731
|
+
function lineSpan(source, start, end) {
|
|
91732
|
+
const rest = /^[ \t]*(\r?\n|$)/.exec(source.slice(end));
|
|
91733
|
+
if (indentAt(source, start) === void 0 || !rest) return [
|
|
91734
|
+
start,
|
|
91735
|
+
end
|
|
91736
|
+
];
|
|
91737
|
+
return [
|
|
91738
|
+
source.lastIndexOf("\n", start - 1) + 1,
|
|
91739
|
+
end + rest[0].length
|
|
91740
|
+
];
|
|
91741
|
+
}
|
|
91742
|
+
__name(lineSpan, "lineSpan");
|
|
91743
|
+
function identifiers(node, out = []) {
|
|
91744
|
+
if (ts6.isIdentifier(node)) out.push(node);
|
|
91745
|
+
ts6.forEachChild(node, (child) => {
|
|
91746
|
+
identifiers(child, out);
|
|
91747
|
+
});
|
|
91748
|
+
return out;
|
|
91749
|
+
}
|
|
91750
|
+
__name(identifiers, "identifiers");
|
|
91751
|
+
function declares(id2) {
|
|
91752
|
+
const p = id2.parent;
|
|
91753
|
+
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;
|
|
91754
|
+
}
|
|
91755
|
+
__name(declares, "declares");
|
|
91756
|
+
function isReference(id2) {
|
|
91757
|
+
const p = id2.parent;
|
|
91758
|
+
if (ts6.isPropertyAccessExpression(p) && p.name === id2) return false;
|
|
91759
|
+
if ((ts6.isPropertyAssignment(p) || ts6.isMethodDeclaration(p) || ts6.isJsxAttribute(p)) && p.name === id2) return false;
|
|
91760
|
+
return true;
|
|
91761
|
+
}
|
|
91762
|
+
__name(isReference, "isReference");
|
|
91763
|
+
function insideImport(node) {
|
|
91764
|
+
for (let n2 = node; n2; n2 = n2.parent) if (ts6.isImportDeclaration(n2)) return true;
|
|
91765
|
+
return false;
|
|
91766
|
+
}
|
|
91767
|
+
__name(insideImport, "insideImport");
|
|
91768
|
+
var importsFrom = /* @__PURE__ */ __name((d, module) => ts6.isImportDeclaration(d) && ts6.isStringLiteral(d.moduleSpecifier) && d.moduleSpecifier.text === module, "importsFrom");
|
|
91769
|
+
function namedImports(d) {
|
|
91770
|
+
const b = d.importClause?.namedBindings;
|
|
91771
|
+
return !d.importClause?.isTypeOnly && b && ts6.isNamedImports(b) ? b : void 0;
|
|
91772
|
+
}
|
|
91773
|
+
__name(namedImports, "namedImports");
|
|
91774
|
+
function chatLocals(sf, exported) {
|
|
91775
|
+
const out = /* @__PURE__ */ new Set();
|
|
91776
|
+
for (const d of sf.statements) {
|
|
91777
|
+
if (!importsFrom(d, APP_CHAT)) continue;
|
|
91778
|
+
for (const e of namedImports(d)?.elements ?? []) {
|
|
91779
|
+
if (!e.isTypeOnly && (e.propertyName ?? e.name).text === exported) out.add(e.name.text);
|
|
91381
91780
|
}
|
|
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"
|
|
91781
|
+
}
|
|
91782
|
+
return out;
|
|
91783
|
+
}
|
|
91784
|
+
__name(chatLocals, "chatLocals");
|
|
91785
|
+
function luaBinding(sf) {
|
|
91786
|
+
for (const d of sf.statements) {
|
|
91787
|
+
if (!importsFrom(d, APP_CLIENT)) continue;
|
|
91788
|
+
const e = namedImports(d)?.elements.find((x) => !x.isTypeOnly && (x.propertyName ?? x.name).text === "lua");
|
|
91789
|
+
if (e) return {
|
|
91790
|
+
local: e.name.text,
|
|
91791
|
+
taken: false
|
|
91396
91792
|
};
|
|
91397
91793
|
}
|
|
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
|
-
|
|
91794
|
+
return {
|
|
91795
|
+
taken: identifiers(sf).some((id2) => id2.text === "lua" && declares(id2))
|
|
91796
|
+
};
|
|
91797
|
+
}
|
|
91798
|
+
__name(luaBinding, "luaBinding");
|
|
91799
|
+
function hookResultUse(sf, call2) {
|
|
91800
|
+
if (call2.arguments.length) return "unknown";
|
|
91801
|
+
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");
|
|
91802
|
+
let node = call2;
|
|
91803
|
+
while (ts6.isParenthesizedExpression(node.parent)) node = node.parent;
|
|
91804
|
+
const p = node.parent;
|
|
91805
|
+
if (ts6.isPropertyAccessExpression(p) && p.expression === node) return p.name.text === "isOpen" ? "isOpen" : "ok";
|
|
91806
|
+
if (!ts6.isVariableDeclaration(p) || p.initializer !== node) return "unknown";
|
|
91807
|
+
if (ts6.isObjectBindingPattern(p.name)) return pattern(p.name);
|
|
91808
|
+
if (!ts6.isIdentifier(p.name)) return "unknown";
|
|
91809
|
+
const name = p.name;
|
|
91810
|
+
let use = "ok";
|
|
91811
|
+
for (const ref of identifiers(sf)) {
|
|
91812
|
+
if (ref === name || ref.text !== name.text || declares(ref) || !isReference(ref)) continue;
|
|
91813
|
+
const q = ref.parent;
|
|
91814
|
+
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";
|
|
91815
|
+
if (here === "isOpen") return "isOpen";
|
|
91816
|
+
if (here === "unknown") use = "unknown";
|
|
91817
|
+
}
|
|
91818
|
+
return use;
|
|
91819
|
+
}
|
|
91820
|
+
__name(hookResultUse, "hookResultUse");
|
|
91821
|
+
function notAtModuleScope(sf, el, expr, statement) {
|
|
91822
|
+
let readsThis = false;
|
|
91823
|
+
const findThis = /* @__PURE__ */ __name((n2) => {
|
|
91824
|
+
if (n2.kind === ts6.SyntaxKind.ThisKeyword) readsThis = true;
|
|
91825
|
+
ts6.forEachChild(n2, findThis);
|
|
91826
|
+
}, "findThis");
|
|
91827
|
+
findThis(expr);
|
|
91828
|
+
if (readsThis) return "its context reads this";
|
|
91829
|
+
const used = new Set(identifiers(expr).filter(isReference).map((i) => i.text));
|
|
91830
|
+
for (let n2 = el.parent; n2 !== sf; n2 = n2.parent) {
|
|
91831
|
+
if (!ts6.isFunctionLike(n2)) continue;
|
|
91832
|
+
const local = /* @__PURE__ */ new Set();
|
|
91833
|
+
const collect2 = /* @__PURE__ */ __name((m) => {
|
|
91834
|
+
if (m === expr) return;
|
|
91835
|
+
if (ts6.isIdentifier(m) && declares(m)) local.add(m.text);
|
|
91836
|
+
ts6.forEachChild(m, collect2);
|
|
91837
|
+
}, "collect");
|
|
91838
|
+
collect2(n2);
|
|
91839
|
+
const hit = [
|
|
91840
|
+
...used
|
|
91841
|
+
].find((u) => local.has(u));
|
|
91842
|
+
if (hit) return `its context reads ${hit}, local to the component`;
|
|
91843
|
+
}
|
|
91844
|
+
const at = statement.getStart(sf);
|
|
91845
|
+
for (const s of sf.statements.filter((t) => t.getStart(sf) >= at)) {
|
|
91846
|
+
const names = ts6.isVariableStatement(s) ? s.declarationList.declarations.flatMap((d) => identifiers(d.name).filter(declares)) : (ts6.isClassDeclaration(s) || ts6.isEnumDeclaration(s)) && s.name ? [
|
|
91847
|
+
s.name
|
|
91848
|
+
] : [];
|
|
91849
|
+
const hit = names.find((n2) => used.has(n2.text));
|
|
91850
|
+
if (hit) return `its context reads ${hit.text}, declared after it`;
|
|
91422
91851
|
}
|
|
91423
|
-
|
|
91424
|
-
|
|
91425
|
-
|
|
91426
|
-
|
|
91427
|
-
|
|
91428
|
-
|
|
91429
|
-
|
|
91430
|
-
|
|
91431
|
-
|
|
91432
|
-
|
|
91433
|
-
|
|
91852
|
+
return void 0;
|
|
91853
|
+
}
|
|
91854
|
+
__name(notAtModuleScope, "notAtModuleScope");
|
|
91855
|
+
function unwrapLayout(sf, source, el) {
|
|
91856
|
+
const kids = el.children.filter((c) => !(ts6.isJsxText(c) && c.containsOnlyTriviaWhiteSpaces));
|
|
91857
|
+
const inJsx = ts6.isJsxElement(el.parent) || ts6.isJsxFragment(el.parent);
|
|
91858
|
+
const only = kids.length === 1 ? kids[0] : void 0;
|
|
91859
|
+
if (!inJsx && !(only && (ts6.isJsxElement(only) || ts6.isJsxSelfClosingElement(only) || ts6.isJsxFragment(only)))) {
|
|
91860
|
+
return [
|
|
91861
|
+
{
|
|
91862
|
+
start: el.openingElement.getStart(sf),
|
|
91863
|
+
end: el.openingElement.getEnd(),
|
|
91864
|
+
text: "<>"
|
|
91865
|
+
},
|
|
91866
|
+
{
|
|
91867
|
+
start: el.closingElement.getStart(sf),
|
|
91868
|
+
end: el.closingElement.getEnd(),
|
|
91869
|
+
text: "</>"
|
|
91870
|
+
}
|
|
91871
|
+
];
|
|
91434
91872
|
}
|
|
91435
|
-
let
|
|
91436
|
-
if (!
|
|
91437
|
-
const
|
|
91438
|
-
|
|
91439
|
-
|
|
91440
|
-
|
|
91441
|
-
|
|
91442
|
-
|
|
91443
|
-
|
|
91444
|
-
|
|
91445
|
-
|
|
91873
|
+
let start = el.getStart(sf);
|
|
91874
|
+
if (!kids.length) {
|
|
91875
|
+
const [s, e] = lineSpan(source, start, el.getEnd());
|
|
91876
|
+
return [
|
|
91877
|
+
{
|
|
91878
|
+
start: s,
|
|
91879
|
+
end: e,
|
|
91880
|
+
text: ""
|
|
91881
|
+
}
|
|
91882
|
+
];
|
|
91883
|
+
}
|
|
91884
|
+
const first = kids[0].getStart(sf);
|
|
91885
|
+
let inner = source.slice(first, kids[kids.length - 1].getEnd());
|
|
91886
|
+
const own = indentAt(source, start);
|
|
91887
|
+
const kid = indentAt(source, first);
|
|
91888
|
+
if (own !== void 0 && kid !== void 0 && kid.length > own.length && kid.startsWith(own)) {
|
|
91889
|
+
const deeper = kid;
|
|
91890
|
+
inner = inner.split("\n").map((line, i) => i > 0 && line.startsWith(deeper) ? own + line.slice(deeper.length) : line).join("\n");
|
|
91891
|
+
}
|
|
91892
|
+
if (inJsx && own !== void 0) {
|
|
91893
|
+
const siblings = el.parent.children.filter((c) => !(ts6.isJsxText(c) && c.containsOnlyTriviaWhiteSpaces));
|
|
91894
|
+
const prev = siblings[siblings.indexOf(el) - 1];
|
|
91895
|
+
if (prev && ts6.isJsxExpression(prev) && !prev.expression && prev.getText(sf).startsWith(PANE_COMMENT_PREFIX) && indentAt(source, prev.getStart(sf)) !== void 0) {
|
|
91896
|
+
start = prev.getStart(sf);
|
|
91446
91897
|
}
|
|
91447
91898
|
}
|
|
91448
|
-
|
|
91899
|
+
return [
|
|
91900
|
+
{
|
|
91901
|
+
start,
|
|
91902
|
+
end: el.getEnd(),
|
|
91903
|
+
text: inner
|
|
91904
|
+
}
|
|
91905
|
+
];
|
|
91906
|
+
}
|
|
91907
|
+
__name(unwrapLayout, "unwrapLayout");
|
|
91908
|
+
function insertBefore(sf, statement, line, eol) {
|
|
91909
|
+
const prev = sf.statements[sf.statements.indexOf(statement) - 1];
|
|
91910
|
+
if (!prev) {
|
|
91911
|
+
const semi2 = statement.getText(sf).trimEnd().endsWith(";") ? ";" : "";
|
|
91449
91912
|
return {
|
|
91450
|
-
|
|
91451
|
-
|
|
91913
|
+
start: statement.getStart(sf),
|
|
91914
|
+
end: statement.getStart(sf),
|
|
91915
|
+
text: `${line}${semi2}${eol}`
|
|
91452
91916
|
};
|
|
91453
91917
|
}
|
|
91918
|
+
const semi = prev.getText(sf).trimEnd().endsWith(";") ? ";" : "";
|
|
91919
|
+
const gap = ts6.isImportDeclaration(prev) ? eol : "";
|
|
91454
91920
|
return {
|
|
91455
|
-
|
|
91456
|
-
|
|
91921
|
+
start: prev.getEnd(),
|
|
91922
|
+
end: prev.getEnd(),
|
|
91923
|
+
text: `${eol}${gap}${line}${semi}`
|
|
91457
91924
|
};
|
|
91458
91925
|
}
|
|
91459
|
-
__name(
|
|
91460
|
-
function
|
|
91461
|
-
|
|
91462
|
-
|
|
91926
|
+
__name(insertBefore, "insertBefore");
|
|
91927
|
+
function tidyImports(file, source, needLua, eol) {
|
|
91928
|
+
const sf = ts6.createSourceFile(file, source, ts6.ScriptTarget.Latest, true, scriptKind(file));
|
|
91929
|
+
const referenced = new Set(identifiers(sf).filter((id2) => !insideImport(id2)).map((id2) => id2.text));
|
|
91930
|
+
const edits = [];
|
|
91931
|
+
let luaPlaced = !needLua || luaBinding(sf).local !== void 0;
|
|
91932
|
+
const luaImport = /* @__PURE__ */ __name((d) => {
|
|
91933
|
+
const quote = d.moduleSpecifier.getText(sf)[0];
|
|
91934
|
+
return `import { lua } from ${quote}${APP_CLIENT}${quote}${d.getText(sf).trimEnd().endsWith(";") ? ";" : ""}`;
|
|
91935
|
+
}, "luaImport");
|
|
91936
|
+
if (!luaPlaced) {
|
|
91937
|
+
const host = sf.statements.find((d) => importsFrom(d, APP_CLIENT) && !!namedImports(d));
|
|
91938
|
+
if (host) {
|
|
91939
|
+
const named = namedImports(host);
|
|
91940
|
+
const last = named.elements[named.elements.length - 1];
|
|
91941
|
+
edits.push(last ? {
|
|
91942
|
+
start: last.getEnd(),
|
|
91943
|
+
end: last.getEnd(),
|
|
91944
|
+
text: ", lua"
|
|
91945
|
+
} : {
|
|
91946
|
+
start: named.getStart(sf),
|
|
91947
|
+
end: named.getEnd(),
|
|
91948
|
+
text: "{ lua }"
|
|
91949
|
+
});
|
|
91950
|
+
luaPlaced = true;
|
|
91951
|
+
}
|
|
91952
|
+
}
|
|
91953
|
+
for (const d of sf.statements) {
|
|
91954
|
+
if (!importsFrom(d, APP_CHAT)) continue;
|
|
91955
|
+
const named = namedImports(d);
|
|
91956
|
+
if (!named) continue;
|
|
91957
|
+
const kept = named.elements.filter((e) => !(PANE_EXPORTS.has((e.propertyName ?? e.name).text) && !referenced.has(e.name.text)));
|
|
91958
|
+
if (kept.length === named.elements.length) continue;
|
|
91959
|
+
if (kept.length) {
|
|
91960
|
+
edits.push({
|
|
91961
|
+
start: named.getStart(sf),
|
|
91962
|
+
end: named.getEnd(),
|
|
91963
|
+
text: `{ ${kept.map((e) => e.getText(sf)).join(", ")} }`
|
|
91964
|
+
});
|
|
91965
|
+
} else if (d.importClause.name) {
|
|
91966
|
+
edits.push({
|
|
91967
|
+
start: d.importClause.name.getEnd(),
|
|
91968
|
+
end: named.getEnd(),
|
|
91969
|
+
text: ""
|
|
91970
|
+
});
|
|
91971
|
+
} else if (!luaPlaced) {
|
|
91972
|
+
edits.push({
|
|
91973
|
+
start: d.getStart(sf),
|
|
91974
|
+
end: d.getEnd(),
|
|
91975
|
+
text: luaImport(d)
|
|
91976
|
+
});
|
|
91977
|
+
luaPlaced = true;
|
|
91978
|
+
} else {
|
|
91979
|
+
const [start, end] = lineSpan(source, d.getStart(sf), d.getEnd());
|
|
91980
|
+
edits.push({
|
|
91981
|
+
start,
|
|
91982
|
+
end,
|
|
91983
|
+
text: ""
|
|
91984
|
+
});
|
|
91985
|
+
}
|
|
91986
|
+
}
|
|
91987
|
+
if (!luaPlaced) {
|
|
91988
|
+
const imports = sf.statements.filter(ts6.isImportDeclaration);
|
|
91989
|
+
const anchor = imports.filter((d) => d.importClause).at(-1) ?? imports.at(-1);
|
|
91990
|
+
edits.push(anchor ? {
|
|
91991
|
+
start: anchor.getEnd(),
|
|
91992
|
+
end: anchor.getEnd(),
|
|
91993
|
+
text: eol + luaImport(anchor)
|
|
91994
|
+
} : {
|
|
91995
|
+
start: 0,
|
|
91996
|
+
end: 0,
|
|
91997
|
+
text: `import { lua } from '${APP_CLIENT}';${eol}`
|
|
91998
|
+
});
|
|
91999
|
+
}
|
|
92000
|
+
return applySplices(source, edits);
|
|
92001
|
+
}
|
|
92002
|
+
__name(tidyImports, "tidyImports");
|
|
92003
|
+
function removeAgentPane(file, source) {
|
|
92004
|
+
if (!source.includes(APP_CHAT)) return {
|
|
92005
|
+
status: "none"
|
|
91463
92006
|
};
|
|
92007
|
+
const parse = /* @__PURE__ */ __name((text2) => ts6.createSourceFile(file, text2, ts6.ScriptTarget.Latest, true, scriptKind(file)), "parse");
|
|
92008
|
+
const sf = parse(source);
|
|
92009
|
+
const lua = luaBinding(sf);
|
|
92010
|
+
const luaName = lua.local ?? "lua";
|
|
91464
92011
|
const eol = source.includes("\r\n") ? "\r\n" : "\n";
|
|
91465
|
-
const
|
|
91466
|
-
|
|
91467
|
-
|
|
91468
|
-
|
|
91469
|
-
|
|
91470
|
-
|
|
91471
|
-
|
|
91472
|
-
|
|
91473
|
-
|
|
91474
|
-
|
|
91475
|
-
|
|
91476
|
-
|
|
92012
|
+
const analyse = /* @__PURE__ */ __name((sf2) => {
|
|
92013
|
+
const layouts = chatLocals(sf2, "AgentPaneLayout");
|
|
92014
|
+
const hooks = chatLocals(sf2, "useAgentPane");
|
|
92015
|
+
const panes = chatLocals(sf2, "AgentPane");
|
|
92016
|
+
const reasons = [];
|
|
92017
|
+
const elements = [];
|
|
92018
|
+
const contexts = [];
|
|
92019
|
+
const calls = [];
|
|
92020
|
+
const top = /* @__PURE__ */ __name((n2) => {
|
|
92021
|
+
while (n2.parent !== sf2) n2 = n2.parent;
|
|
92022
|
+
return n2;
|
|
92023
|
+
}, "top");
|
|
92024
|
+
const layout = /* @__PURE__ */ __name((tag, el) => {
|
|
92025
|
+
for (let n2 = el.parent; n2 !== sf2; n2 = n2.parent) {
|
|
92026
|
+
if (ts6.isJsxElement(n2) && layouts.has(tagName2(sf2, n2))) {
|
|
92027
|
+
reasons.push(`<${tag}> sits inside another`);
|
|
92028
|
+
return;
|
|
92029
|
+
}
|
|
92030
|
+
}
|
|
92031
|
+
const attrs = el.openingElement.attributes.properties;
|
|
92032
|
+
if (!attrs.length) {
|
|
92033
|
+
elements.push(el);
|
|
92034
|
+
return;
|
|
92035
|
+
}
|
|
92036
|
+
const attr = attrs[0];
|
|
92037
|
+
if (attrs.length > 1 || !ts6.isJsxAttribute(attr) || attr.name.getText(sf2) !== "context") {
|
|
92038
|
+
const names = attrs.map((a) => ts6.isJsxAttribute(a) ? a.name.getText(sf2) : "{...}");
|
|
92039
|
+
reasons.push(`<${tag}> has props (${names.join(", ")}): context becomes lua.pane.setContext(...), the others have no equivalent (the platform pane owns them)`);
|
|
92040
|
+
return;
|
|
92041
|
+
}
|
|
92042
|
+
const init3 = attr.initializer;
|
|
92043
|
+
const expr = init3 && (ts6.isStringLiteral(init3) ? init3 : ts6.isJsxExpression(init3) ? init3.expression : void 0);
|
|
92044
|
+
if (init3 && !expr) {
|
|
92045
|
+
reasons.push(`<${tag}>'s context is not an expression this can move`);
|
|
92046
|
+
return;
|
|
92047
|
+
}
|
|
92048
|
+
const statement = top(el);
|
|
92049
|
+
const why = expr && notAtModuleScope(sf2, el, expr, statement);
|
|
92050
|
+
if (why) {
|
|
92051
|
+
reasons.push(`<${tag} context>: ${why}, so call lua.pane.setContext(...) where it is in scope`);
|
|
92052
|
+
return;
|
|
92053
|
+
}
|
|
92054
|
+
contexts.push({
|
|
92055
|
+
text: expr ? expr.getText(sf2) : "true",
|
|
92056
|
+
statement
|
|
92057
|
+
});
|
|
92058
|
+
elements.push(el);
|
|
92059
|
+
}, "layout");
|
|
92060
|
+
const visit = /* @__PURE__ */ __name((node) => {
|
|
92061
|
+
if (ts6.isJsxElement(node) || ts6.isJsxSelfClosingElement(node)) {
|
|
92062
|
+
const tag = tagName2(sf2, node);
|
|
92063
|
+
if (panes.has(tag)) {
|
|
92064
|
+
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)`);
|
|
92065
|
+
} else if (layouts.has(tag)) {
|
|
92066
|
+
if (ts6.isJsxElement(node)) layout(tag, node);
|
|
92067
|
+
else reasons.push(`<${tag} /> wraps nothing`);
|
|
92068
|
+
}
|
|
92069
|
+
}
|
|
92070
|
+
if (ts6.isCallExpression(node) && ts6.isIdentifier(node.expression) && hooks.has(node.expression.text)) {
|
|
92071
|
+
const use = hookResultUse(sf2, node);
|
|
92072
|
+
const hook = node.expression.text;
|
|
92073
|
+
if (use === "isOpen") {
|
|
92074
|
+
reasons.push(`it reads isOpen from ${hook}() (lua.pane has none: the Workspace owns whether the pane is open)`);
|
|
92075
|
+
} else if (use === "unknown") {
|
|
92076
|
+
reasons.push(`it uses ${hook}()'s result in a way this does not follow`);
|
|
92077
|
+
} else calls.push(node);
|
|
92078
|
+
}
|
|
92079
|
+
ts6.forEachChild(node, visit);
|
|
92080
|
+
}, "visit");
|
|
92081
|
+
visit(sf2);
|
|
92082
|
+
return {
|
|
92083
|
+
reasons: [
|
|
92084
|
+
...new Set(reasons)
|
|
92085
|
+
],
|
|
92086
|
+
elements,
|
|
92087
|
+
contexts,
|
|
92088
|
+
calls
|
|
92089
|
+
};
|
|
92090
|
+
}, "analyse");
|
|
92091
|
+
const found = analyse(sf);
|
|
92092
|
+
const needLua = found.calls.length > 0 || found.contexts.length > 0;
|
|
92093
|
+
if (needLua && lua.taken) found.reasons.push("lua already names something else here, so lua.pane cannot be used");
|
|
92094
|
+
if (found.reasons.length) return {
|
|
92095
|
+
status: "manual",
|
|
92096
|
+
reasons: found.reasons
|
|
92097
|
+
};
|
|
92098
|
+
const step1 = applySplices(source, found.calls.map((c) => ({
|
|
92099
|
+
start: c.getStart(sf),
|
|
92100
|
+
end: c.getEnd(),
|
|
92101
|
+
text: `${luaName}.pane`
|
|
92102
|
+
})));
|
|
92103
|
+
const sf1 = parse(step1);
|
|
92104
|
+
const again = analyse(sf1);
|
|
92105
|
+
const step22 = applySplices(step1, [
|
|
92106
|
+
...again.elements.flatMap((el) => unwrapLayout(sf1, step1, el)),
|
|
92107
|
+
...again.contexts.map(({ text: text2, statement }) => insertBefore(sf1, statement, `${luaName}.pane.setContext(${text2})`, eol))
|
|
92108
|
+
]);
|
|
92109
|
+
const out = tidyImports(file, step22, needLua, eol);
|
|
92110
|
+
if (out === source) return {
|
|
92111
|
+
status: "none"
|
|
92112
|
+
};
|
|
92113
|
+
if (syntaxErrors(file, out) > syntaxErrors(file, source)) {
|
|
91477
92114
|
return {
|
|
91478
|
-
status: "
|
|
91479
|
-
|
|
91480
|
-
|
|
92115
|
+
status: "manual",
|
|
92116
|
+
reasons: [
|
|
92117
|
+
"the edit would not parse"
|
|
92118
|
+
]
|
|
91481
92119
|
};
|
|
91482
92120
|
}
|
|
92121
|
+
const summary = [
|
|
92122
|
+
...found.elements.length ? [
|
|
92123
|
+
"<AgentPaneLayout> removed (the platform pane replaces it)"
|
|
92124
|
+
] : [],
|
|
92125
|
+
...found.contexts.length ? [
|
|
92126
|
+
`its context \u2192 ${luaName}.pane.setContext(...)`
|
|
92127
|
+
] : [],
|
|
92128
|
+
...found.calls.length ? [
|
|
92129
|
+
`useAgentPane() \u2192 ${luaName}.pane`
|
|
92130
|
+
] : []
|
|
92131
|
+
];
|
|
91483
92132
|
return {
|
|
91484
|
-
status: "
|
|
91485
|
-
content:
|
|
91486
|
-
|
|
92133
|
+
status: "edited",
|
|
92134
|
+
content: out,
|
|
92135
|
+
summary: summary.length ? summary : [
|
|
92136
|
+
`unused import from ${APP_CHAT} removed`
|
|
92137
|
+
],
|
|
92138
|
+
usesPaneApi: needLua
|
|
91487
92139
|
};
|
|
91488
92140
|
}
|
|
91489
|
-
__name(
|
|
92141
|
+
__name(removeAgentPane, "removeAgentPane");
|
|
92142
|
+
function chatReferences(file, source) {
|
|
92143
|
+
if (!source.includes(APP_CHAT)) return {
|
|
92144
|
+
uses: [],
|
|
92145
|
+
styles: false
|
|
92146
|
+
};
|
|
92147
|
+
const sf = ts6.createSourceFile(file, source, ts6.ScriptTarget.Latest, true, scriptKind(file));
|
|
92148
|
+
const uses = /* @__PURE__ */ new Set();
|
|
92149
|
+
let styles = false;
|
|
92150
|
+
const fromChat = /* @__PURE__ */ __name((e) => !!e && ts6.isStringLiteral(e) && (e.text === APP_CHAT || e.text.startsWith(`${APP_CHAT}/`)), "fromChat");
|
|
92151
|
+
const visit = /* @__PURE__ */ __name((node) => {
|
|
92152
|
+
if (ts6.isImportDeclaration(node) && fromChat(node.moduleSpecifier)) {
|
|
92153
|
+
const clause = node.importClause;
|
|
92154
|
+
const b = clause?.namedBindings;
|
|
92155
|
+
if (!clause) {
|
|
92156
|
+
if (node.moduleSpecifier.text === PANE_CSS) styles = true;
|
|
92157
|
+
else uses.add(node.moduleSpecifier.text);
|
|
92158
|
+
} else {
|
|
92159
|
+
if (clause.name) uses.add(clause.name.text);
|
|
92160
|
+
if (b && ts6.isNamespaceImport(b)) uses.add(`* as ${b.name.text}`);
|
|
92161
|
+
if (b && ts6.isNamedImports(b)) for (const e of b.elements) uses.add((e.propertyName ?? e.name).text);
|
|
92162
|
+
if (!clause.name && b && ts6.isNamedImports(b) && !b.elements.length) uses.add(node.moduleSpecifier.text);
|
|
92163
|
+
}
|
|
92164
|
+
} else if (ts6.isExportDeclaration(node) && fromChat(node.moduleSpecifier)) {
|
|
92165
|
+
uses.add(`export \u2026 from '${node.moduleSpecifier.text}'`);
|
|
92166
|
+
} else if (ts6.isCallExpression(node) && node.expression.kind === ts6.SyntaxKind.ImportKeyword && fromChat(node.arguments[0])) {
|
|
92167
|
+
uses.add(`import('${node.arguments[0].text}')`);
|
|
92168
|
+
}
|
|
92169
|
+
ts6.forEachChild(node, visit);
|
|
92170
|
+
}, "visit");
|
|
92171
|
+
visit(sf);
|
|
92172
|
+
return {
|
|
92173
|
+
uses: [
|
|
92174
|
+
...uses
|
|
92175
|
+
],
|
|
92176
|
+
styles
|
|
92177
|
+
};
|
|
92178
|
+
}
|
|
92179
|
+
__name(chatReferences, "chatReferences");
|
|
92180
|
+
function dropChatStyleImports(file, source) {
|
|
92181
|
+
const sf = ts6.createSourceFile(file, source, ts6.ScriptTarget.Latest, true, scriptKind(file));
|
|
92182
|
+
const edits = sf.statements.filter((d) => importsFrom(d, PANE_CSS) && !d.importClause).map((d) => {
|
|
92183
|
+
const [start, end] = lineSpan(source, d.getStart(sf), d.getEnd());
|
|
92184
|
+
return {
|
|
92185
|
+
start,
|
|
92186
|
+
end,
|
|
92187
|
+
text: ""
|
|
92188
|
+
};
|
|
92189
|
+
});
|
|
92190
|
+
return edits.length ? applySplices(source, edits) : null;
|
|
92191
|
+
}
|
|
92192
|
+
__name(dropChatStyleImports, "dropChatStyleImports");
|
|
92193
|
+
function removePaneStyles(source) {
|
|
92194
|
+
const re = /^[ \t]*@import\s+(?:url\(\s*)?(['"])@lua-ai-global\/app-chat\/styles\.css\1[^;\n]*;[^\n]*(?:\n|$)/m;
|
|
92195
|
+
let out = source;
|
|
92196
|
+
for (let m = re.exec(out); m; m = re.exec(out)) {
|
|
92197
|
+
let start = m.index;
|
|
92198
|
+
if (start > 0) {
|
|
92199
|
+
const above = out.lastIndexOf("\n", start - 2) + 1;
|
|
92200
|
+
if (out.slice(above, start).trim() === PANE_CSS_COMMENT) start = above;
|
|
92201
|
+
}
|
|
92202
|
+
out = out.slice(0, start) + out.slice(m.index + m[0].length);
|
|
92203
|
+
}
|
|
92204
|
+
return out === source ? null : out;
|
|
92205
|
+
}
|
|
92206
|
+
__name(removePaneStyles, "removePaneStyles");
|
|
92207
|
+
var escapeRegExp = /* @__PURE__ */ __name((s) => s.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"), "escapeRegExp");
|
|
92208
|
+
function whitespaceInsensitive(lines) {
|
|
92209
|
+
const anySpace = "[ \\t]*";
|
|
92210
|
+
const line = /* @__PURE__ */ __name((text2) => anySpace + [
|
|
92211
|
+
...text2.replace(/\s+/g, "")
|
|
92212
|
+
].map(escapeRegExp).join(anySpace) + anySpace, "line");
|
|
92213
|
+
return new RegExp(`^${lines.map(line).join("\\r?\\n")}\\r?\\n`, "m");
|
|
92214
|
+
}
|
|
92215
|
+
__name(whitespaceInsensitive, "whitespaceInsensitive");
|
|
92216
|
+
var THEME_BLOCK = whitespaceInsensitive(TEMPLATE_THEME_LINES);
|
|
92217
|
+
function removeThemeLines(file, source) {
|
|
92218
|
+
const match = THEME_BLOCK.exec(source);
|
|
92219
|
+
if (!match) return null;
|
|
92220
|
+
const end = match.index + match[0].length;
|
|
92221
|
+
const blank = /^[ \t]*\r?\n/.exec(source.slice(end))?.[0].length ?? 0;
|
|
92222
|
+
const out = source.slice(0, match.index) + source.slice(end + blank);
|
|
92223
|
+
const sf = ts6.createSourceFile(file, out, ts6.ScriptTarget.Latest, true, scriptKind(file));
|
|
92224
|
+
if (luaBinding(sf).local !== "lua") return null;
|
|
92225
|
+
return identifiers(sf).some((id2) => id2.text === "lua" && !insideImport(id2) && isReference(id2)) ? out : null;
|
|
92226
|
+
}
|
|
92227
|
+
__name(removeThemeLines, "removeThemeLines");
|
|
91490
92228
|
function planWebAppUpgrade(target, templateRoot = getPackageRoot()) {
|
|
91491
92229
|
const { pagesDir } = target;
|
|
91492
92230
|
const contents = /* @__PURE__ */ new Map();
|
|
@@ -91501,18 +92239,7 @@ function planWebAppUpgrade(target, templateRoot = getPackageRoot()) {
|
|
|
91501
92239
|
summary
|
|
91502
92240
|
]);
|
|
91503
92241
|
}, "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
|
-
}
|
|
92242
|
+
const inWeb = /* @__PURE__ */ __name((file) => `web/${path32.relative(pagesDir, file).split(path32.sep).join("/")}`, "inWeb");
|
|
91516
92243
|
const srcDir = path32.join(pagesDir, "src");
|
|
91517
92244
|
const clientFile = path32.join(srcDir, "lua", "client.ts");
|
|
91518
92245
|
let clientKept = false;
|
|
@@ -91529,47 +92256,117 @@ function planWebAppUpgrade(target, templateRoot = getPackageRoot()) {
|
|
|
91529
92256
|
manual.push([
|
|
91530
92257
|
"web/src/lua/client.ts is the copied app client, edited since `lua apps new` wrote it, so it was kept.",
|
|
91531
92258
|
` 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)."
|
|
92259
|
+
" change of yours the package lacks, delete web/src/lua/client.ts, then run lua apps upgrade again."
|
|
91534
92260
|
]);
|
|
91535
92261
|
}
|
|
91536
92262
|
}
|
|
92263
|
+
let usesPaneApi = false;
|
|
92264
|
+
let paneRemoved = false;
|
|
92265
|
+
const stillImporting = [];
|
|
92266
|
+
const styleImporters = [];
|
|
92267
|
+
const leftAlone = /* @__PURE__ */ new Set();
|
|
91537
92268
|
if (!clientKept) {
|
|
91538
|
-
const
|
|
91539
|
-
|
|
91540
|
-
|
|
91541
|
-
|
|
91542
|
-
|
|
91543
|
-
|
|
91544
|
-
|
|
91545
|
-
manual
|
|
91546
|
-
|
|
91547
|
-
|
|
91548
|
-
|
|
92269
|
+
for (const file of sourceFiles(srcDir)) {
|
|
92270
|
+
if (contents.get(file) === null) continue;
|
|
92271
|
+
const edit = removeAgentPane(file, read(file));
|
|
92272
|
+
if (edit.status === "edited") {
|
|
92273
|
+
change(file, edit.content, edit.summary.join("; "));
|
|
92274
|
+
usesPaneApi ||= edit.usesPaneApi;
|
|
92275
|
+
paneRemoved = true;
|
|
92276
|
+
} else if (edit.status === "manual") {
|
|
92277
|
+
manual.push([
|
|
92278
|
+
`${inWeb(file)} was not edited: ${edit.reasons.join("; ")}.`
|
|
92279
|
+
]);
|
|
92280
|
+
leftAlone.add(file);
|
|
92281
|
+
}
|
|
92282
|
+
const refs = chatReferences(file, read(file));
|
|
92283
|
+
if (refs.uses.length) stillImporting.push(`${inWeb(file)} (${refs.uses.join(", ")})`);
|
|
92284
|
+
if (refs.styles) styleImporters.push(file);
|
|
92285
|
+
}
|
|
92286
|
+
}
|
|
92287
|
+
const pkgFile = path32.join(pagesDir, "package.json");
|
|
92288
|
+
const pkgSource = fs26.readFileSync(pkgFile, "utf8");
|
|
92289
|
+
const ranges = templateRanges(templateRoot);
|
|
92290
|
+
const clientFloor = rangeFloor(ranges[APP_CLIENT]);
|
|
92291
|
+
if (usesPaneApi && (!clientFloor || compareFloors(clientFloor, rangeFloor(PANE_API_CLIENT_RANGE)) < 0)) {
|
|
92292
|
+
ranges[APP_CLIENT] = PANE_API_CLIENT_RANGE;
|
|
92293
|
+
}
|
|
92294
|
+
let pkg2;
|
|
92295
|
+
try {
|
|
92296
|
+
pkg2 = JSON.parse(pkgSource);
|
|
92297
|
+
} catch (error) {
|
|
92298
|
+
if (!(error instanceof SyntaxError)) throw error;
|
|
92299
|
+
}
|
|
92300
|
+
const hasChat = !!pkg2 && [
|
|
92301
|
+
pkg2.dependencies,
|
|
92302
|
+
pkg2.devDependencies
|
|
92303
|
+
].some((d) => d?.[APP_CHAT] !== void 0);
|
|
92304
|
+
const dropChat = hasChat && !clientKept && !stillImporting.length;
|
|
92305
|
+
const designChanged = !!pkg2 && movesToNewerDesign(pkg2, ranges[UI]);
|
|
92306
|
+
if (pkg2) {
|
|
92307
|
+
const plan = planPackageJson(pkgSource, ranges, dropChat ? [
|
|
92308
|
+
APP_CHAT
|
|
92309
|
+
] : []);
|
|
92310
|
+
if (plan.content) change(pkgFile, plan.content, plan.changes.join(", "));
|
|
92311
|
+
warnings.push(...plan.warnings);
|
|
92312
|
+
} else {
|
|
92313
|
+
manual.push([
|
|
92314
|
+
"web/package.json is not plain JSON, so it was left as is. In web/:",
|
|
92315
|
+
` npm i ${UPGRADED_PACKAGES.map((n2) => `${n2}@"${ranges[n2]}"`).join(" ")}`,
|
|
92316
|
+
...pkgSource.includes(APP_CHAT) && !stillImporting.length ? [
|
|
92317
|
+
` npm uninstall ${APP_CHAT} (and remove the @import of its styles from web/src/index.css)`
|
|
92318
|
+
] : []
|
|
92319
|
+
]);
|
|
92320
|
+
}
|
|
92321
|
+
if (hasChat && stillImporting.length) {
|
|
92322
|
+
manual.push([
|
|
92323
|
+
`${APP_CHAT} was kept in web/package.json: ${stillImporting.join(", ")} still ${stillImporting.length === 1 ? "imports" : "import"} it. By hand,`,
|
|
92324
|
+
...MANUAL_PANE_EDIT.map((l) => ` ${l}`)
|
|
92325
|
+
]);
|
|
92326
|
+
}
|
|
92327
|
+
if (dropChat) {
|
|
92328
|
+
for (const file of styleImporters) {
|
|
92329
|
+
const next = dropChatStyleImports(file, read(file));
|
|
92330
|
+
if (next !== null) change(file, next, `import of ${PANE_CSS} removed`);
|
|
91549
92331
|
}
|
|
91550
92332
|
const cssFile = path32.join(srcDir, "index.css");
|
|
91551
|
-
|
|
91552
|
-
|
|
91553
|
-
|
|
91554
|
-
|
|
91555
|
-
|
|
91556
|
-
|
|
91557
|
-
|
|
91558
|
-
|
|
91559
|
-
|
|
92333
|
+
const css = fs26.existsSync(cssFile) ? removePaneStyles(read(cssFile)) : null;
|
|
92334
|
+
if (css !== null) change(cssFile, css, `@import '${PANE_CSS}' removed`);
|
|
92335
|
+
paneRemoved = true;
|
|
92336
|
+
}
|
|
92337
|
+
const mainFile = path32.join(srcDir, "main.tsx");
|
|
92338
|
+
let themeRemoved = false;
|
|
92339
|
+
if (!clientKept && !leftAlone.has(mainFile) && fs26.existsSync(mainFile)) {
|
|
92340
|
+
let planned;
|
|
92341
|
+
try {
|
|
92342
|
+
planned = JSON.parse(contents.get(pkgFile) ?? pkgSource);
|
|
92343
|
+
} catch (error) {
|
|
92344
|
+
if (!(error instanceof SyntaxError)) throw error;
|
|
92345
|
+
}
|
|
92346
|
+
const range2 = planned?.dependencies?.[APP_CLIENT] ?? planned?.devDependencies?.[APP_CLIENT];
|
|
92347
|
+
const floor = typeof range2 === "string" ? rangeFloor(range2) : void 0;
|
|
92348
|
+
if (floor && compareFloors(floor, rangeFloor(THEME_CLIENT_RANGE)) >= 0) {
|
|
92349
|
+
const next = removeThemeLines(mainFile, read(mainFile));
|
|
92350
|
+
if (next !== null) {
|
|
92351
|
+
change(mainFile, next, "theme lines removed (app-client applies the shell's theme)");
|
|
92352
|
+
themeRemoved = true;
|
|
92353
|
+
}
|
|
91560
92354
|
}
|
|
91561
92355
|
}
|
|
91562
92356
|
return {
|
|
91563
92357
|
target,
|
|
91564
92358
|
changes: [
|
|
91565
92359
|
...contents.entries()
|
|
91566
|
-
].map(([file, content]) => ({
|
|
92360
|
+
].sort(([a], [b]) => Number(b === pkgFile) - Number(a === pkgFile)).map(([file, content]) => ({
|
|
91567
92361
|
file,
|
|
91568
92362
|
content,
|
|
91569
92363
|
summary: summaries.get(file).join("; ")
|
|
91570
92364
|
})),
|
|
91571
92365
|
warnings,
|
|
91572
|
-
manual
|
|
92366
|
+
manual,
|
|
92367
|
+
paneRemoved,
|
|
92368
|
+
designChanged,
|
|
92369
|
+
themeRemoved
|
|
91573
92370
|
};
|
|
91574
92371
|
}
|
|
91575
92372
|
__name(planWebAppUpgrade, "planWebAppUpgrade");
|
|
@@ -91631,6 +92428,12 @@ async function appsUpgradeCommand(name, opts = {}, deps = {}) {
|
|
|
91631
92428
|
for (const c of plan.changes) {
|
|
91632
92429
|
writeInfo(` ${c.content === null ? "delete" : "update"} ${rel(c.file).padEnd(width)} ${c.summary}`);
|
|
91633
92430
|
}
|
|
92431
|
+
if (plan.designChanged) {
|
|
92432
|
+
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.`);
|
|
92433
|
+
}
|
|
92434
|
+
if (plan.paneRemoved) {
|
|
92435
|
+
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.");
|
|
92436
|
+
}
|
|
91634
92437
|
printLeftovers();
|
|
91635
92438
|
if (opts.dryRun) {
|
|
91636
92439
|
writeInfo("\nDry run: nothing was written.");
|
|
@@ -91667,21 +92470,24 @@ async function appsUpgradeCommand(name, opts = {}, deps = {}) {
|
|
|
91667
92470
|
installed = status === 0;
|
|
91668
92471
|
if (!installed) {
|
|
91669
92472
|
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`
|
|
92473
|
+
hint: `The files are already upgraded; only the install is missing. Run: cd ${pagesRel} && npm install` + (plan.themeRemoved ? ` (${THEME_INSTALL_NOTE}).` : "")
|
|
91671
92474
|
});
|
|
91672
92475
|
}
|
|
91673
92476
|
}
|
|
92477
|
+
if (opts.skipInstall && plan.themeRemoved) {
|
|
92478
|
+
writeInfo(` \u26A0\uFE0F Run npm install in ${pagesRel} before lua apps dev or lua push: ${THEME_INSTALL_NOTE}.`);
|
|
92479
|
+
}
|
|
91674
92480
|
writeHintBlock({
|
|
91675
92481
|
headline: "Next:",
|
|
91676
92482
|
lines: [
|
|
91677
92483
|
...opts.skipInstall ? [
|
|
91678
92484
|
{
|
|
91679
|
-
label: "Install pages:",
|
|
92485
|
+
label: plan.themeRemoved ? "Install pages (required):" : "Install pages:",
|
|
91680
92486
|
command: `cd ${pagesRel} && npm install`
|
|
91681
92487
|
}
|
|
91682
92488
|
] : [],
|
|
91683
92489
|
{
|
|
91684
|
-
label:
|
|
92490
|
+
label: "Run locally:",
|
|
91685
92491
|
command: `lua apps dev ${name}`
|
|
91686
92492
|
},
|
|
91687
92493
|
{
|
|
@@ -93389,18 +94195,27 @@ Examples:
|
|
|
93389
94195
|
$ lua apps delete hello --ci --code 123456 Delete with the emailed code
|
|
93390
94196
|
$ lua apps delete hello --agent agent_123 Outside the agent's project
|
|
93391
94197
|
`).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", `
|
|
94198
|
+
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
94199
|
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
94200
|
web/src/lua/ the copied app client (apps made before the package) is
|
|
93397
94201
|
deleted and its imports point at @lua-ai-global/app-client,
|
|
93398
94202
|
only when it is unchanged; an edited copy is left to you
|
|
93399
|
-
web/src
|
|
93400
|
-
|
|
93401
|
-
|
|
93402
|
-
|
|
93403
|
-
|
|
94203
|
+
web/src/** the bundled agent pane comes out (the platform's pane, which
|
|
94204
|
+
the gateway injects, replaces it): <AgentPaneLayout> gives way
|
|
94205
|
+
to what it wraps (a context prop becomes lua.pane.setContext),
|
|
94206
|
+
useAgentPane() becomes lua.pane from @lua-ai-global/app-client
|
|
94207
|
+
web/package.json app-client and ui at least at the template's ranges
|
|
94208
|
+
(app-client ~0.0.5 once lua.pane is used; a newer range of
|
|
94209
|
+
yours is kept); @lua-ai-global/app-chat removed once nothing
|
|
94210
|
+
imports it
|
|
94211
|
+
web/src/index.css the @import of app-chat's styles, with the dependency
|
|
94212
|
+
web/src/main.tsx the old template's .dark toggle (app-client 0.1+ applies the
|
|
94213
|
+
shell's theme, density and accent itself), only when it is
|
|
94214
|
+
exactly the template's lines
|
|
94215
|
+
A file it cannot rewrite (other props, isOpen, <AgentPane>) is not edited: the
|
|
94216
|
+
steps are printed, and app-chat stays while a file imports it. Run it again and
|
|
94217
|
+
it says the app is up to date. It asks before writing when both stdin and stdout
|
|
94218
|
+
are terminals and --ci is off; --force (or --ci) applies without asking.
|
|
93404
94219
|
With agentPane: false in defineWebApp the pages are upgraded, and the pane stays
|
|
93405
94220
|
off until you remove it.
|
|
93406
94221
|
|