@wayai/cli 0.3.130 → 0.3.131

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -5013,44 +5013,6 @@ function unprovenRunCount(counts) {
5013
5013
  function terminalRunCount(counts) {
5014
5014
  return counts.successful_runs + counts.failed_runs;
5015
5015
  }
5016
- function isSafeTemplatePath(path31) {
5017
- if (path31.length === 0 || path31.length > 300) return false;
5018
- if (path31.startsWith("/") || path31.includes("\\")) return false;
5019
- const segments = path31.split("/");
5020
- return segments.every(
5021
- (seg) => seg.length > 0 && seg !== "." && seg !== ".." && /^[A-Za-z0-9._-]+$/.test(seg)
5022
- );
5023
- }
5024
- function dropTemplateKeys(value, drop) {
5025
- if (Array.isArray(value)) return value.map((v) => dropTemplateKeys(v, drop));
5026
- if (isPlainObject(value)) {
5027
- const out = {};
5028
- for (const [key, child] of Object.entries(value)) {
5029
- if (drop.has(key)) continue;
5030
- out[key] = TEMPLATE_OPAQUE_BLOB_KEYS.has(key) ? child : dropTemplateKeys(child, drop);
5031
- }
5032
- return out;
5033
- }
5034
- return value;
5035
- }
5036
- function stripTemplateInstanceIds(value) {
5037
- return dropTemplateKeys(value, TEMPLATE_INSTANCE_ID_KEYS);
5038
- }
5039
- function excludeTemplateAuthorData(value) {
5040
- return dropTemplateKeys(value, TEMPLATE_AUTHOR_DATA_KEYS);
5041
- }
5042
- function isPlainObject(value) {
5043
- if (value === null || typeof value !== "object") return false;
5044
- const proto = Object.getPrototypeOf(value);
5045
- return proto === Object.prototype || proto === null;
5046
- }
5047
- function isSanitizableSliceFile(path31) {
5048
- if (!/\.ya?ml$/i.test(path31)) return false;
5049
- return path31 !== "resources" && !path31.startsWith("resources/");
5050
- }
5051
- function distinctUsesBackends(uses) {
5052
- return [...new Set((uses ?? []).map((u) => u.backend))];
5053
- }
5054
5016
  function refineHubAsCodeCustomTools(config, ctx) {
5055
5017
  const agents = config.agents;
5056
5018
  if (!Array.isArray(agents)) return;
@@ -5337,7 +5299,45 @@ function refineHubAsCodeDelegation(config, ctx) {
5337
5299
  });
5338
5300
  });
5339
5301
  }
5340
- var uuidSchema, paginationSchema, timestampSchema, idParamSchema, clientOptionalString, clientOptionalBoolean, clientOptionalNumber, messageAttachment, MAX_MESSAGE_BODY_BYTES, MAX_ATTACHMENTS_PER_MESSAGE, MAX_AUDIO_FILE_BASE64_BYTES, primaryRegionSchema, placementSourceSchema, orgIdParam, orgAdminIdParam, createOrganizationBody, updateOrganizationBody, addOrgAdminBody, AUTH_TYPE, ORG_CREDENTIAL_AUTH_TYPES, AUTH_TYPE_DISPLAY, LEGACY_AUTH_TYPE_MAP, VALID_AUTH_TYPES, AGENT_ROLES, SAFE_USER_ID_REGEX, SUPPORTED_LOCALES, SUMMARIZATION_THRESHOLD_MIN, SUMMARIZATION_THRESHOLD_MAX, summarizationThresholdField, monitorConfigField, agentIdParam, listAgentsQuery, agentConnectionsQuery, createAgentBody, updateAgentBody, AGENT_PARAMETER_TYPES, AGENT_PARAMETER_NAME_REGEX, agentParameterCreateSchema, MAX_AGENT_PARAMETERS_PER_REQUEST, createAgentParametersBody, SLUG_REGEX, slugSchema, INVISIBLE_NAME_CHARS, MAX_KANBAN_STATUSES, MAX_FOLLOWUPS_PER_STATUS, MAX_LANES, MAX_ADDITIONAL_CONTEXT_SCHEMA_BYTES, RESERVED_TEMPLATE_DUMP_NAME, kanbanStatusSlugSchema, followupSchema, MAX_OUTCOMES_PER_STATUS, kanbanOutcomeSchema, EXCLUSIVE_FLAG_PAIRS, kanbanStatusSchema, kanbanStatusesArraySchema, laneSchema, lanesArraySchema, hubIdParam, hubAdminIdParam, hubUserIdParam, hubIdentityIdParam, hubTeamIdParam, hubTeamUserDeleteParam, hubSchemaQuery, PREVIEW_LABEL_MAX_LENGTH, MAX_ENDED_INDEX_RETENTION_DAYS, previewLabelField, createHubBody, updateHubBody, addHubAdminBody, addHubIdentityAuthorizationBody, contactDecisionBody, approveContactBody, listContactAccessQuery, createHubTeamBody, updateHubTeamBody, addHubTeamUserBody, reassignHubUserBody, replicatePreviewBody, updateChannelTestIdentitiesBody, claimCodeChannelParam, claimCodeDeleteParam, connectionIdParam, connectorIdParam, listConnectionsQuery, deleteConnectionQuery, addConnectionBody, editConnectionBody, PRODUCTION_DIRECT_FIELDS, setProductionCredentialBody, registerWhatsappQuery, registerWhatsappBody, retryProvisioningQuery, resendDomainStatusQuery, PLACEHOLDER_TOKENS, ALLOWED_TYPES, SUBSCHEMA_OBJECT_KEYWORDS, SUBSCHEMA_LIST_KEYWORDS, SUBSCHEMA_MAP_KEYWORDS, MAX_SCHEMA_DEPTH, toolIdParam, listToolsQuery, toolAgentQuery, deleteToolQuery, toolConnectionsQuery, nativeToolIdSchema, CONTEXT_BOUNDARIES, contextBoundarySchema, addNativeToolBody, addMcpToolBody, createCustomToolBody, updateCustomToolBody, updateToolExecutionConfigBody, initialValueCreateSchema, initialValueUpdateSchema, stateIdParam, listStatesQuery, stateNameSchema, createStateBody, updateStateBody, reorderStatesBody, variantAiModeSchema, experimentStatusSchema, overlayUpdateSchema, experimentIdParam, variantIdParam, listExperimentsQuery, listVariantsQuery, listOverridesQuery, deleteOverrideQuery, createExperimentBody, updateExperimentBody, setExperimentStatusBody, createVariantBody, updateVariantBody, upsertOverrideBody, orgTagIdParam, listOrgTagsQuery, createOrgTagBody, updateOrgTagBody, orgCredentialIdParam, listOrgCredentialsQuery, createOrgCredentialBody, updateOrgCredentialBody, orgResourceIdParam, orgResourceFileIdParam, orgResourceFolderIdParam, hubOrgResourceParam, listOrgResourcesQuery, orgIdQuery, createOrgResourceBody, updateOrgResourceBody, createOrgResourceFolderBody, updateOrgResourceFolderBody, uploadOrgResourceFileBody, updateOrgResourceFileBody, uploadOrgSkillZipBody, linkOrgResourceBody, resourceIdParam, listResourcesQuery, createResourceBody, updateResourceBody, syncSkillsBody, resourceFileIdParam, listResourceFilesQuery, createResourceFileBody, updateResourceFileBody, uploadResourceFileBody, uploadSkillZipBody, resourceFolderIdParam, listResourceFoldersQuery, createResourceFolderBody, updateResourceFolderBody, agentResourceQuery, hubResourceQuery, linkAgentResourceBody, updateAgentResourceBody, unlinkAgentResourceQuery, navItemSchema, hubCountResetBody, navItemCountResetBody, typingBody, analyticsHubIdParam, analyticsVariableIdParam, updateVariablePinBody, updateAnalyticsViewBody, NUMERIC_FILTER_OPS, TEXT_FILTER_OPS, CATEGORICAL_FILTER_OPS, VARIABLE_FILTER_OPS, STRUCTURED_QUERY_OPS, STRUCTURED_QUERY_AGGREGATIONS, filterValueSchema, conversationsBody, analyticsConversationIdParam, messagesQuery, conversationDetailDataQuery, analyticsDataBody, structuredQueryBody, analyticsSqlBody, analyticsSqlTable, analyticsSqlSchemaQuery, EVAL_PACING_PRESET_NAMES, PACING_INTERVAL_MIN_MS, PACING_INTERVAL_MAX_MS, EVAL_MAX_RUNS_PER_SCENARIO, EVAL_RUN_DEADLINE_MIN_MS, EVAL_RUN_DEADLINE_MAX_MS, ISO_UTC_RE, paginationSchema2, evalIdParam, sessionIdParam, scenarioSetIdParam, hubIdQuery, evalDateContextSchema, EVAL_FIXTURE_NAME_MAX_LENGTH, evalFixtureOverrideSchema, runSessionQuery, EVAL_INPUT_ROLES, EVAL_INPUT_ROLE_LIST, ROLE_ECHO_MAX, EVAL_INITIAL_STATE_SCOPES, MAX_INITIAL_STATE_ENTRIES, evalInitialStateEntry, createEvalBody, updateEvalBody, getEvalsQuery, toggleEvalBody, bulkToggleEvalsBody, pacingConfigSchema, EVAL_MAX_SELECTED_SCENARIOS, evalScenarioSelectionEntrySchema, evalScenarioSelectionSchema, sessionConfigSchema, createSessionBody, getSessionsQuery, getSessionResultsQuery, getSessionRunsQuery, evalAnalyticsQuery, getSessionCostQuery, compareSessionsQuery, evalsSqlBody, evalsSqlSchemaQuery, exportResultsQuery, validateEvalBody, hubAgentsQuery, createScenarioSetBody, updateScenarioSetBody, scenarioSetsHubQuery, createScenarioFromConversationBody, createJourneyFromConversationBody, EVAL_ATTACHMENT_HASH_REGEX, evalAttachmentRef, turnMayCarryAttachments, ATTACHMENTS_USER_ONLY_MESSAGE, journeyIdParam, journeyToolCallSchema, journeyTurnSchema, journeyStepOverrideSchema, fixtureField, createJourneyBody, updateJourneyBody, evalSessionConfigResponseSchema, evalSessionResponseSchema, seedReleaseStatusSchema, EVAL_SESSION_NOT_QUIESCENT, getConversationsQuery, getMessagesQuery, appMessageSenderType, appMessageReceiverType, apiChannelMessage, apiChannelMessageBody, appMessageBody, appMessageResponse, updateUserBody, updateProfileBody, pathnameRegex, updatePreferencesBody, registerPushTokenBody, deletePushTokenQuery, activityQuery, deletionModeSchema, deletionRequestBody, templateLocaleSchema, TEMPLATE_SLUG_REGEX, templateSlugSchema, templateStatusSchema, templateFileMapSchema, TEMPLATE_INSTANCE_ID_KEYS, TEMPLATE_OPAQUE_BLOB_KEYS, TEMPLATE_AUTHOR_DATA_KEYS, templateTextSchema, templateUsesEntrySchema, templateUsesSchema, templateYamlLocaleEntry, templateYamlWayaiBlock, templateTagsSchema, templateYamlSchema, templateHeroSchema, templatePushLocaleSchema, templatePushBody, templateListQuery, templateSlugParam, templateDetailQuery, courseQuizScoreSchema, upsertCourseLessonBody, linkCourseCapstoneBody, archiveHubIdParam, archiveConversationParams, archiveListQuery, archiveMessageObservabilityParams, conversationIdParam, claimBody, releaseBody, transferBody, closeBody, additionalContextPayloadSchema, kanbanUpdateBody, annotateConversationBody, observabilityParams, observabilityListParams, deleteUserConversationsBody, deleteUserConversationsResponse, sendMessageBody, listConversationsQuery, flagSourceSchema, getConversationsResponse, getConversationDetailParams, getConversationDetailQuery, getConversationDetailResponse, listWhatsAppTemplatesQuery, sendWhatsAppTemplateBody, copilotSuggestBody, copilotSuggestResponse, CONSULT_THREAD_STATUSES, consultThreadStatus, CONSULT_THREAD_TITLE_MAX, consultThreadTitle, consultThreadSummary, listConsultThreadsQuery, listConsultThreadsResponse, createConsultThreadBody, createConsultThreadResponse, consultThreadIdParam, updateConsultThreadBody, updateConsultThreadResponse, CONSULT_AWAIT_TIMEOUT_MS, billingOrgIdParam, subscriptionItemParams, spendCapBody, growthPacksBody, portalSessionBody, checkoutSessionBody, updateBillingCurrencyBody, invoicesQuery, downloadBody, uploadQuery, signUrlBody, outboundSchemaQuery, templateIdParam, listTemplatesQuery, deleteTemplateQuery, templateStatusQuery, createTemplateBody, updateTemplateBody, submitTemplateBody, testTemplateBody, contactIdParam, listContactsQuery, createContactBody, updateContactBody, listIdParam, listListsQuery, listListContactsQuery, createListBody, updateListBody, addListContactsBody, removeListContactsBody, scheduleIdParam, listSchedulesQuery, listExecutionsQuery, createScheduleBody, updateScheduleBody, MAX_RESOURCE_FILE_SIZE, MAX_10MB_BASE64_ENCODED_BYTES, MAX_EVAL_ATTACHMENT_ENCODED_BYTES, MAX_EVAL_ATTACHMENT_CARRIERS, MAX_EVAL_ATTACHMENT_AGGREGATE_ENCODED_BYTES, MAX_RESOURCE_ENCODED_BYTES, MAX_HUB_AS_CODE_RESOURCES, MAX_HUB_AS_CODE_RESOURCE_FILES, MAX_RESOURCE_AGGREGATE_ENCODED_BYTES, MAX_CI_CONFIG_BODY_BYTES, hubAsCodeStateSchema, hubAsCodeResourceFileSchema, hubAsCodeResourceSchema, uuidPattern, ciUuidSchema, boundedHubAsCodeResourcesSchema, hubAsCodeConfigSchema, ciPullHubIdParam, ciBranchParam, ciPullQuery, ciHubsQuery, ciLookupQuery, ciBranchesQuery, ciSyncBody, ciPushBody, ciDiffBody, ciPublishBody, ciPublishPreviewBody, ciSyncMcpBody, ciOrgResourcesParam, orgResourcesConfigSchema, ciOrgResourcesPushBody, ciOrgResourcesDiffBody, CI_APPLY_ENTITY_KINDS, CI_APPLY_OPERATIONS, ciApplyErrorBaseSchema, ciApplyErrorSchema, ciSyncCountSchema, ciSyncChangesSchema, ciSyncWarningSchema, ciSyncResponseSchema, adminOrgIdParam, adminOrgAdminIdParam, adminUserIdParam, adminPlanIdParam, adminOrganizationsQuery, adminUserSearchQuery, kanbanSlugMigrationQuery, adjustQuotaBody, updatePlanBody, addAdminUserBody, updatePlatformConfigBody, updateFreeOrgLimitBody, adminScopedTargetBody, updatePricingPlanBody, dataExplorerSearchQuery, dataExplorerOrgIdParam, dataExplorerHubIdParam, dataExplorerConvIdParam, dataExplorerDoInstancesQuery, dataExplorerNsIdParam, dataExplorerKvKeysBody, dataExplorerKvKeyBody, uuidOrHexId, dataExplorerDeleteOrgParam, dataExplorerDeleteHubParam, dataExplorerDeleteConvParam, dataExplorerDeleteUserParam, dataExplorerDeleteQuery, dataExplorerKvDeleteBody, pitrDoNamespace, pitrBookmarkParam, pitrRestoreBody, healthSamplingTriggerBody, dataExplorerDebugDoType, DEBUG_READ_MAX_LIMIT, DEBUG_READ_DEFAULT_LIMIT, DEBUG_DO_HEX_PREFIX, debugDoEntityId, debugTableName, dataExplorerDebugTablesParam, dataExplorerDebugRowsParam, dataExplorerDebugRowsQuery, dataExplorerDebugAnalyticsTable, debugUuid, dataExplorerDebugAnalyticsRowsParam, dataExplorerDebugAnalyticsRowsQuery, debugHubConvParam, debugMessageIdQuery, sandboxEgressPolicy, SANDBOX_EXEC_MAX_CMD_LENGTH, SANDBOX_EXEC_MAX_ALLOWLIST, SANDBOX_EXEC_MAX_TIMEOUT_MS, adminSandboxExecBody, whatsappCallbackBody, authMeResponse, wsTicketResponse, sessionCheckResponse, logoutResponse, magicCodeSendBody, magicCodeSendResponse, magicCodeVerifyBody, magicCodeVerifyResponse, passwordLoginBody, browserParams, browserFoldersQuery, browserFilesQuery, stateOperationBody, conversationListResourcesQuery, conversationReadResourceQuery, listPendingSchedulesQuery, listHubAggregateSchedulesQuery, reportSourceSchema, intakeReportSourceSchema, reportClassificationSchema, reportStatusSchema, reportLocaleSchema, reportMessageAuthorRoleSchema, reportMessageSchema, sentryRefStatusSchema, createReportBody, editReportBody, reporterReportSummarySchema, reporterListResponseSchema, getReportResponseSchema, reporterTransitionResponseSchema, contestReportBody, reporterListQuery, listReportsQuery, GITHUB_ISSUE_URL_REGEX, githubIssueUrlSchema, transitionReportBody, groupReportsBody, holdReportBody, clickhouseReadyResponse, bootstrapQuery, requestSnapshotChunkMessage, MAX_NAME_LENGTH, MAX_VALUE_LENGTH, MAX_TAGS, MAX_TAG_LENGTH, MAX_SCOPE_HUBS, MAX_SCOPE_TAGS, vaultSecretScopeSchema, vaultCreateBody, vaultUpdateBody, PERMISSIONS, MAX_NAME_LENGTH2, MAX_HUBS_PER_GRANT, MAX_HUB_TAGS_PER_GRANT, MAX_GRANTS, permissionEnum, grantScopeSchema, grantSchema, createTokenBody, tokenOrgIdParam, tokenGrantScopeSchema, tokenGrantSchema, tokenMetadataSchema, listTokensResponse, createTokenResponse, orgTokenSummarySchema, listOrgTokensResponse, invitePreviewQuery, invitePreviewResponse, discordTier, discordBillingCycle, discordMetadata, discordOAuthStartResponse, discordOAuthFinalizeBody, discordOAuthFinalizeResponse, discordDisconnectResponse, jsonSchemaSchema, hubUserIdentity, stateValueEntry, getHubUserContextResponse, updateHubUserBody, updateHubUserResponse, unlockHubUserNameResponse, stateResetParams, stateResetResponse, hubAlertsParam, hubAlertSeverity, hubAlert, hubAlertsListResponse, noticeSeveritySchema, noticeStatusSchema, NOTICE_SCOPE_REGEX, noticeScopeSchema, noticeLinkSchema, createNoticeBody, updateNoticeBody, listNoticesQuery, noticeIdParamSchema, ADMIN_SKILL_NAME_REGEX, adminSkillNameParam;
5302
+ function isSafeTemplatePath(path31) {
5303
+ if (path31.length === 0 || path31.length > 300) return false;
5304
+ if (path31.startsWith("/") || path31.includes("\\")) return false;
5305
+ const segments = path31.split("/");
5306
+ return segments.every(
5307
+ (seg) => seg.length > 0 && seg !== "." && seg !== ".." && /^[A-Za-z0-9._-]+$/.test(seg)
5308
+ );
5309
+ }
5310
+ function dropTemplateKeys(value, drop) {
5311
+ if (Array.isArray(value)) return value.map((v) => dropTemplateKeys(v, drop));
5312
+ if (isPlainObject(value)) {
5313
+ const out = {};
5314
+ for (const [key, child] of Object.entries(value)) {
5315
+ if (drop.has(key)) continue;
5316
+ out[key] = TEMPLATE_OPAQUE_BLOB_KEYS.has(key) ? child : dropTemplateKeys(child, drop);
5317
+ }
5318
+ return out;
5319
+ }
5320
+ return value;
5321
+ }
5322
+ function stripTemplateInstanceIds(value) {
5323
+ return dropTemplateKeys(value, TEMPLATE_INSTANCE_ID_KEYS);
5324
+ }
5325
+ function excludeTemplateAuthorData(value) {
5326
+ return dropTemplateKeys(value, TEMPLATE_AUTHOR_DATA_KEYS);
5327
+ }
5328
+ function isPlainObject(value) {
5329
+ if (value === null || typeof value !== "object") return false;
5330
+ const proto = Object.getPrototypeOf(value);
5331
+ return proto === Object.prototype || proto === null;
5332
+ }
5333
+ function isSanitizableSliceFile(path31) {
5334
+ if (!/\.ya?ml$/i.test(path31)) return false;
5335
+ return path31 !== "resources" && !path31.startsWith("resources/");
5336
+ }
5337
+ function distinctUsesBackends(uses) {
5338
+ return [...new Set((uses ?? []).map((u) => u.backend))];
5339
+ }
5340
+ var uuidSchema, paginationSchema, timestampSchema, idParamSchema, clientOptionalString, clientOptionalBoolean, clientOptionalNumber, messageAttachment, MAX_MESSAGE_BODY_BYTES, MAX_ATTACHMENTS_PER_MESSAGE, MAX_AUDIO_FILE_BASE64_BYTES, primaryRegionSchema, placementSourceSchema, orgIdParam, orgAdminIdParam, createOrganizationBody, updateOrganizationBody, addOrgAdminBody, AUTH_TYPE, ORG_CREDENTIAL_AUTH_TYPES, AUTH_TYPE_DISPLAY, LEGACY_AUTH_TYPE_MAP, VALID_AUTH_TYPES, AGENT_ROLES, SAFE_USER_ID_REGEX, SUPPORTED_LOCALES, SUMMARIZATION_THRESHOLD_MIN, SUMMARIZATION_THRESHOLD_MAX, PREVIOUS_CONVERSATIONS_MAX, previousConversationsCountField, summarizationThresholdField, monitorConfigField, agentIdParam, listAgentsQuery, agentConnectionsQuery, createAgentBody, updateAgentBody, AGENT_PARAMETER_TYPES, AGENT_PARAMETER_NAME_REGEX, agentParameterCreateSchema, MAX_AGENT_PARAMETERS_PER_REQUEST, createAgentParametersBody, SLUG_REGEX, slugSchema, INVISIBLE_NAME_CHARS, MAX_KANBAN_STATUSES, MAX_FOLLOWUPS_PER_STATUS, MAX_LANES, MAX_ADDITIONAL_CONTEXT_SCHEMA_BYTES, RESERVED_TEMPLATE_DUMP_NAME, kanbanStatusSlugSchema, followupSchema, MAX_OUTCOMES_PER_STATUS, kanbanOutcomeSchema, EXCLUSIVE_FLAG_PAIRS, kanbanStatusSchema, kanbanStatusesArraySchema, laneSchema, lanesArraySchema, hubIdParam, hubAdminIdParam, hubUserIdParam, hubIdentityIdParam, hubTeamIdParam, hubTeamUserDeleteParam, hubSchemaQuery, PREVIEW_LABEL_MAX_LENGTH, MAX_ENDED_INDEX_RETENTION_DAYS, previewLabelField, createHubBody, updateHubBody, addHubAdminBody, addHubIdentityAuthorizationBody, contactDecisionBody, approveContactBody, listContactAccessQuery, createHubTeamBody, updateHubTeamBody, addHubTeamUserBody, reassignHubUserBody, replicatePreviewBody, updateChannelTestIdentitiesBody, claimCodeChannelParam, claimCodeDeleteParam, connectionIdParam, connectorIdParam, listConnectionsQuery, deleteConnectionQuery, addConnectionBody, editConnectionBody, PRODUCTION_DIRECT_FIELDS, setProductionCredentialBody, registerWhatsappQuery, registerWhatsappBody, retryProvisioningQuery, resendDomainStatusQuery, PLACEHOLDER_TOKENS, ALLOWED_TYPES, SUBSCHEMA_OBJECT_KEYWORDS, SUBSCHEMA_LIST_KEYWORDS, SUBSCHEMA_MAP_KEYWORDS, MAX_SCHEMA_DEPTH, toolIdParam, listToolsQuery, toolAgentQuery, deleteToolQuery, toolConnectionsQuery, nativeToolIdSchema, CONTEXT_BOUNDARIES, contextBoundarySchema, addNativeToolBody, addMcpToolBody, createCustomToolBody, updateCustomToolBody, updateToolExecutionConfigBody, initialValueCreateSchema, initialValueUpdateSchema, stateIdParam, listStatesQuery, stateNameSchema, createStateBody, updateStateBody, reorderStatesBody, variantAiModeSchema, experimentStatusSchema, overlayUpdateSchema, experimentIdParam, variantIdParam, listExperimentsQuery, listVariantsQuery, listOverridesQuery, deleteOverrideQuery, createExperimentBody, updateExperimentBody, setExperimentStatusBody, createVariantBody, updateVariantBody, upsertOverrideBody, orgTagIdParam, listOrgTagsQuery, createOrgTagBody, updateOrgTagBody, orgCredentialIdParam, listOrgCredentialsQuery, createOrgCredentialBody, updateOrgCredentialBody, orgResourceIdParam, orgResourceFileIdParam, orgResourceFolderIdParam, hubOrgResourceParam, listOrgResourcesQuery, orgIdQuery, createOrgResourceBody, updateOrgResourceBody, createOrgResourceFolderBody, updateOrgResourceFolderBody, uploadOrgResourceFileBody, updateOrgResourceFileBody, uploadOrgSkillZipBody, linkOrgResourceBody, resourceIdParam, listResourcesQuery, createResourceBody, updateResourceBody, syncSkillsBody, resourceFileIdParam, listResourceFilesQuery, createResourceFileBody, updateResourceFileBody, uploadResourceFileBody, uploadSkillZipBody, resourceFolderIdParam, listResourceFoldersQuery, createResourceFolderBody, updateResourceFolderBody, agentResourceQuery, hubResourceQuery, linkAgentResourceBody, updateAgentResourceBody, unlinkAgentResourceQuery, navItemSchema, hubCountResetBody, navItemCountResetBody, typingBody, analyticsHubIdParam, analyticsVariableIdParam, updateVariablePinBody, updateAnalyticsViewBody, NUMERIC_FILTER_OPS, TEXT_FILTER_OPS, CATEGORICAL_FILTER_OPS, VARIABLE_FILTER_OPS, STRUCTURED_QUERY_OPS, STRUCTURED_QUERY_AGGREGATIONS, filterValueSchema, conversationsBody, analyticsConversationIdParam, messagesQuery, conversationDetailDataQuery, analyticsDataBody, structuredQueryBody, analyticsSqlBody, analyticsSqlTable, analyticsSqlSchemaQuery, EVAL_PACING_PRESET_NAMES, PACING_INTERVAL_MIN_MS, PACING_INTERVAL_MAX_MS, EVAL_MAX_RUNS_PER_SCENARIO, EVAL_RUN_DEADLINE_MIN_MS, EVAL_RUN_DEADLINE_MAX_MS, ISO_UTC_RE, paginationSchema2, evalIdParam, sessionIdParam, scenarioSetIdParam, hubIdQuery, evalDateContextSchema, EVAL_FIXTURE_NAME_MAX_LENGTH, evalFixtureOverrideSchema, runSessionQuery, EVAL_INPUT_ROLES, EVAL_INPUT_ROLE_LIST, ROLE_ECHO_MAX, EVAL_INITIAL_STATE_SCOPES, MAX_INITIAL_STATE_ENTRIES, evalInitialStateEntry, createEvalBody, updateEvalBody, getEvalsQuery, toggleEvalBody, bulkToggleEvalsBody, pacingConfigSchema, EVAL_MAX_SELECTED_SCENARIOS, evalScenarioSelectionEntrySchema, evalScenarioSelectionSchema, sessionConfigSchema, createSessionBody, getSessionsQuery, getSessionResultsQuery, getSessionRunsQuery, evalAnalyticsQuery, getSessionCostQuery, compareSessionsQuery, evalsSqlBody, evalsSqlSchemaQuery, exportResultsQuery, validateEvalBody, hubAgentsQuery, createScenarioSetBody, updateScenarioSetBody, scenarioSetsHubQuery, createScenarioFromConversationBody, createJourneyFromConversationBody, EVAL_ATTACHMENT_HASH_REGEX, evalAttachmentRef, turnMayCarryAttachments, ATTACHMENTS_USER_ONLY_MESSAGE, journeyIdParam, journeyToolCallSchema, journeyTurnSchema, journeyStepOverrideSchema, fixtureField, createJourneyBody, updateJourneyBody, evalSessionConfigResponseSchema, evalSessionResponseSchema, seedReleaseStatusSchema, EVAL_SESSION_NOT_QUIESCENT, getConversationsQuery, getMessagesQuery, appMessageSenderType, appMessageReceiverType, apiChannelMessage, apiChannelMessageBody, appMessageBody, appMessageResponse, updateUserBody, updateProfileBody, pathnameRegex, updatePreferencesBody, registerPushTokenBody, deletePushTokenQuery, activityQuery, deletionModeSchema, deletionRequestBody, archiveHubIdParam, archiveConversationParams, archiveListQuery, archiveMessageObservabilityParams, conversationIdParam, claimBody, releaseBody, transferBody, closeBody, additionalContextPayloadSchema, kanbanUpdateBody, annotateConversationBody, observabilityParams, observabilityListParams, deleteUserConversationsBody, deleteUserConversationsResponse, sendMessageBody, listConversationsQuery, flagSourceSchema, getConversationsResponse, getConversationDetailParams, getConversationDetailQuery, getConversationDetailResponse, listWhatsAppTemplatesQuery, sendWhatsAppTemplateBody, copilotSuggestBody, copilotSuggestResponse, CONSULT_THREAD_STATUSES, consultThreadStatus, CONSULT_THREAD_TITLE_MAX, consultThreadTitle, consultThreadSummary, listConsultThreadsQuery, listConsultThreadsResponse, createConsultThreadBody, createConsultThreadResponse, consultThreadIdParam, updateConsultThreadBody, updateConsultThreadResponse, CONSULT_AWAIT_TIMEOUT_MS, billingOrgIdParam, subscriptionItemParams, spendCapBody, growthPacksBody, portalSessionBody, checkoutSessionBody, updateBillingCurrencyBody, invoicesQuery, downloadBody, uploadQuery, signUrlBody, outboundSchemaQuery, templateIdParam, listTemplatesQuery, deleteTemplateQuery, templateStatusQuery, createTemplateBody, updateTemplateBody, submitTemplateBody, testTemplateBody, contactIdParam, listContactsQuery, createContactBody, updateContactBody, listIdParam, listListsQuery, listListContactsQuery, createListBody, updateListBody, addListContactsBody, removeListContactsBody, scheduleIdParam, listSchedulesQuery, listExecutionsQuery, createScheduleBody, updateScheduleBody, MAX_RESOURCE_FILE_SIZE, MAX_10MB_BASE64_ENCODED_BYTES, MAX_EVAL_ATTACHMENT_ENCODED_BYTES, MAX_EVAL_ATTACHMENT_CARRIERS, MAX_EVAL_ATTACHMENT_AGGREGATE_ENCODED_BYTES, MAX_RESOURCE_ENCODED_BYTES, MAX_HUB_AS_CODE_RESOURCES, MAX_HUB_AS_CODE_RESOURCE_FILES, MAX_RESOURCE_AGGREGATE_ENCODED_BYTES, MAX_CI_CONFIG_BODY_BYTES, hubAsCodeStateSchema, hubAsCodeResourceFileSchema, hubAsCodeResourceSchema, uuidPattern, ciUuidSchema, boundedHubAsCodeResourcesSchema, hubAsCodeConfigSchema, ciPullHubIdParam, ciBranchParam, ciPullQuery, ciHubsQuery, ciLookupQuery, ciBranchesQuery, ciSyncBody, ciPushBody, ciDiffBody, ciPublishBody, ciPublishPreviewBody, ciSyncMcpBody, ciOrgResourcesParam, orgResourcesConfigSchema, ciOrgResourcesPushBody, ciOrgResourcesDiffBody, CI_APPLY_ENTITY_KINDS, CI_APPLY_OPERATIONS, ciApplyErrorBaseSchema, ciApplyErrorSchema, ciSyncCountSchema, ciSyncChangesSchema, ciSyncWarningSchema, ciSyncResponseSchema, adminOrgIdParam, adminOrgAdminIdParam, adminUserIdParam, adminPlanIdParam, adminOrganizationsQuery, adminUserSearchQuery, kanbanSlugMigrationQuery, adjustQuotaBody, updatePlanBody, addAdminUserBody, updatePlatformConfigBody, updateFreeOrgLimitBody, adminScopedTargetBody, updatePricingPlanBody, dataExplorerSearchQuery, dataExplorerOrgIdParam, dataExplorerHubIdParam, dataExplorerConvIdParam, dataExplorerDoInstancesQuery, dataExplorerNsIdParam, dataExplorerKvKeysBody, dataExplorerKvKeyBody, uuidOrHexId, dataExplorerDeleteOrgParam, dataExplorerDeleteHubParam, dataExplorerDeleteConvParam, dataExplorerDeleteUserParam, dataExplorerDeleteQuery, dataExplorerKvDeleteBody, pitrDoNamespace, pitrBookmarkParam, pitrRestoreBody, healthSamplingTriggerBody, dataExplorerDebugDoType, DEBUG_READ_MAX_LIMIT, DEBUG_READ_DEFAULT_LIMIT, DEBUG_DO_HEX_PREFIX, debugDoEntityId, debugTableName, dataExplorerDebugTablesParam, dataExplorerDebugRowsParam, dataExplorerDebugRowsQuery, dataExplorerDebugAnalyticsTable, debugUuid, dataExplorerDebugAnalyticsRowsParam, dataExplorerDebugAnalyticsRowsQuery, debugHubConvParam, debugMessageIdQuery, sandboxEgressPolicy, SANDBOX_EXEC_MAX_CMD_LENGTH, SANDBOX_EXEC_MAX_ALLOWLIST, SANDBOX_EXEC_MAX_TIMEOUT_MS, adminSandboxExecBody, whatsappCallbackBody, authMeResponse, wsTicketResponse, sessionCheckResponse, logoutResponse, magicCodeSendBody, magicCodeSendResponse, magicCodeVerifyBody, magicCodeVerifyResponse, passwordLoginBody, browserParams, browserFoldersQuery, browserFilesQuery, stateOperationBody, conversationListResourcesQuery, conversationReadResourceQuery, listPendingSchedulesQuery, listHubAggregateSchedulesQuery, reportSourceSchema, intakeReportSourceSchema, reportClassificationSchema, reportStatusSchema, reportLocaleSchema, reportMessageAuthorRoleSchema, reportMessageSchema, sentryRefStatusSchema, createReportBody, editReportBody, reporterReportSummarySchema, reporterListResponseSchema, getReportResponseSchema, reporterTransitionResponseSchema, contestReportBody, reporterListQuery, listReportsQuery, GITHUB_ISSUE_URL_REGEX, githubIssueUrlSchema, transitionReportBody, groupReportsBody, holdReportBody, clickhouseReadyResponse, bootstrapQuery, requestSnapshotChunkMessage, MAX_NAME_LENGTH, MAX_VALUE_LENGTH, MAX_TAGS, MAX_TAG_LENGTH, MAX_SCOPE_HUBS, MAX_SCOPE_TAGS, vaultSecretScopeSchema, vaultCreateBody, vaultUpdateBody, PERMISSIONS, MAX_NAME_LENGTH2, MAX_HUBS_PER_GRANT, MAX_HUB_TAGS_PER_GRANT, MAX_GRANTS, permissionEnum, grantScopeSchema, grantSchema, createTokenBody, tokenOrgIdParam, tokenGrantScopeSchema, tokenGrantSchema, tokenMetadataSchema, listTokensResponse, createTokenResponse, orgTokenSummarySchema, listOrgTokensResponse, invitePreviewQuery, invitePreviewResponse, discordTier, discordBillingCycle, discordMetadata, discordOAuthStartResponse, discordOAuthFinalizeBody, discordOAuthFinalizeResponse, discordDisconnectResponse, jsonSchemaSchema, hubUserIdentity, stateValueEntry, getHubUserContextResponse, updateHubUserBody, updateHubUserResponse, unlockHubUserNameResponse, stateResetParams, stateResetResponse, hubAlertsParam, hubAlertSeverity, hubAlert, hubAlertsListResponse, noticeSeveritySchema, noticeStatusSchema, NOTICE_SCOPE_REGEX, noticeScopeSchema, noticeLinkSchema, createNoticeBody, updateNoticeBody, listNoticesQuery, noticeIdParamSchema, templateLocaleSchema, TEMPLATE_SLUG_REGEX, templateSlugSchema, templateStatusSchema, templateFileMapSchema, TEMPLATE_INSTANCE_ID_KEYS, TEMPLATE_OPAQUE_BLOB_KEYS, TEMPLATE_AUTHOR_DATA_KEYS, templateTextSchema, templateUsesEntrySchema, templateUsesSchema, templateYamlLocaleEntry, templateYamlWayaiBlock, templateTagsSchema, templateYamlSchema, templateHeroSchema, templatePushLocaleSchema, templatePushBody, templateListQuery, templateSlugParam, templateDetailQuery, ADMIN_SKILL_NAME_REGEX, adminSkillNameParam;
5341
5341
  var init_contracts = __esm({
5342
5342
  "../../packages/core/dist/contracts/index.js"() {
5343
5343
  "use strict";
@@ -5391,7 +5391,6 @@ var init_contracts = __esm({
5391
5391
  init_zod();
5392
5392
  init_zod();
5393
5393
  init_zod();
5394
- init_zod();
5395
5394
  uuidSchema = external_exports.string().uuid();
5396
5395
  paginationSchema = external_exports.object({
5397
5396
  limit: external_exports.coerce.number().int().min(1).max(100).default(50),
@@ -5512,6 +5511,8 @@ var init_contracts = __esm({
5512
5511
  SUPPORTED_LOCALES = ["en", "pt", "es"];
5513
5512
  SUMMARIZATION_THRESHOLD_MIN = 1e3;
5514
5513
  SUMMARIZATION_THRESHOLD_MAX = 1e6;
5514
+ PREVIOUS_CONVERSATIONS_MAX = 20;
5515
+ previousConversationsCountField = external_exports.number().int().min(0).max(PREVIOUS_CONVERSATIONS_MAX).nullable().optional();
5515
5516
  summarizationThresholdField = external_exports.number().int().min(SUMMARIZATION_THRESHOLD_MIN).max(SUMMARIZATION_THRESHOLD_MAX).nullable().optional();
5516
5517
  monitorConfigField = external_exports.object({
5517
5518
  delay_seconds: external_exports.number().int().min(10),
@@ -5538,11 +5539,13 @@ var init_contracts = __esm({
5538
5539
  agent_role: external_exports.enum(AGENT_ROLES),
5539
5540
  additional_context_template: external_exports.string().max(2e4).optional(),
5540
5541
  summarization_threshold_tokens: summarizationThresholdField,
5542
+ previous_conversations_count: previousConversationsCountField,
5541
5543
  monitor_config: monitorConfigField
5542
5544
  }).passthrough();
5543
5545
  updateAgentBody = external_exports.object({
5544
5546
  additional_context_template: external_exports.string().max(2e4).optional(),
5545
5547
  summarization_threshold_tokens: summarizationThresholdField,
5548
+ previous_conversations_count: previousConversationsCountField,
5546
5549
  monitor_config: monitorConfigField
5547
5550
  }).passthrough();
5548
5551
  AGENT_PARAMETER_TYPES = ["string", "number", "boolean", "integer", "enum"];
@@ -7091,153 +7094,6 @@ var init_contracts = __esm({
7091
7094
  /** Type-to-confirm value; must equal the user's email (constant-time compared). */
7092
7095
  email_confirmation: external_exports.string().min(1).max(320)
7093
7096
  });
7094
- templateLocaleSchema = external_exports.enum(SUPPORTED_LOCALES);
7095
- TEMPLATE_SLUG_REGEX = /^[a-z0-9][a-z0-9-]{0,62}$/;
7096
- templateSlugSchema = external_exports.string().regex(TEMPLATE_SLUG_REGEX, "slug must be lowercase alphanumeric with hyphens (max 63)");
7097
- templateStatusSchema = external_exports.enum(["published", "draft", "internal"]);
7098
- templateFileMapSchema = external_exports.record(external_exports.string()).refine((m) => Object.keys(m).every(isSafeTemplatePath), {
7099
- message: 'file map contains an unsafe path (no absolute paths, "..", or backslashes)'
7100
- });
7101
- TEMPLATE_INSTANCE_ID_KEYS = /* @__PURE__ */ new Set([
7102
- // Top-level hub instance metadata (hub.yaml) — set by `wayai pull`, never authored.
7103
- "hub_id",
7104
- "hub_environment",
7105
- "preview_label",
7106
- "branch_name",
7107
- // Per-entity row id + cross-entity reference UUIDs (each has a portable name twin).
7108
- "id",
7109
- "connection_id",
7110
- "target_id",
7111
- "agent_id",
7112
- "resource_id",
7113
- "list_id",
7114
- // Account-scoped Meta WhatsApp template id (name twin: `template_whatsapp`).
7115
- "template_whatsapp_id"
7116
- ]);
7117
- TEMPLATE_OPAQUE_BLOB_KEYS = /* @__PURE__ */ new Set([
7118
- "settings",
7119
- // agent + connection connector settings
7120
- "schema_json",
7121
- // agent response_format JSON Schema
7122
- "json_schema",
7123
- // state JSON Schema
7124
- "initial_value",
7125
- // state seed value
7126
- "additional_context_schema",
7127
- // kanban-status transition-form schema
7128
- "config",
7129
- // custom-tool OpenAI function schema
7130
- "headers",
7131
- "query_params",
7132
- "body_params",
7133
- // custom-tool HTTP shaping
7134
- "mappings",
7135
- // composed-tool argument mappings
7136
- "input",
7137
- "expected",
7138
- "history",
7139
- // eval message fixtures (tool_calls carry their own `id`)
7140
- "transcript",
7141
- "step_config"
7142
- // journey fixtures (transcript carries `step_id`; step_config is keyed by it)
7143
- ]);
7144
- TEMPLATE_AUTHOR_DATA_KEYS = /* @__PURE__ */ new Set([
7145
- // Outbound campaign subsystem (hub.yaml top-level). `outbound_contacts` is the
7146
- // author's real leads — `phone`/`email`/`instagram_sid` + the required `name` are
7147
- // GDPR-grade PII. `outbound_lists` group those contacts by real name. `outbound_schedules`
7148
- // bind to the (now-absent) lists and carry the author's campaign cadence + message
7149
- // copy — operationally tied to the author's customers; a consumer builds their own.
7150
- "outbound_contacts",
7151
- "outbound_lists",
7152
- "outbound_schedules",
7153
- // Account-scoped channel identifier on a connection (Twilio SID / WhatsApp number /
7154
- // IG username / from-email, per connector). The connection stays as portable
7155
- // structure re-bound by name on push; this author-account value carries no blueprint
7156
- // value. A dedicated top-level column — never nested in the `settings` opaque blob.
7157
- "account_sid"
7158
- ]);
7159
- templateTextSchema = external_exports.object({
7160
- metaTitle: external_exports.string().min(1).max(200),
7161
- metaDescription: external_exports.string().max(1e3).default("")
7162
- });
7163
- templateUsesEntrySchema = external_exports.object({
7164
- backend: templateSlugSchema,
7165
- endpoint: templateSlugSchema
7166
- });
7167
- templateUsesSchema = external_exports.array(templateUsesEntrySchema).max(24).default([]);
7168
- templateYamlLocaleEntry = templateTextSchema.extend({ source: external_exports.string().min(1) });
7169
- templateYamlWayaiBlock = external_exports.object({
7170
- installCommand: external_exports.string().min(1).max(300),
7171
- locales: external_exports.record(templateLocaleSchema, templateYamlLocaleEntry)
7172
- });
7173
- templateTagsSchema = external_exports.array(external_exports.string().min(1).max(30)).max(12).default([]).transform((tags) => [...new Set(tags.map((t) => t.trim().toLowerCase()).filter(Boolean))]);
7174
- templateYamlSchema = external_exports.object({
7175
- slug: templateSlugSchema,
7176
- category: external_exports.string().min(1).max(60),
7177
- tags: templateTagsSchema,
7178
- status: templateStatusSchema.default("draft"),
7179
- order: external_exports.number().int().min(0).max(1e5).optional(),
7180
- defaultLocale: templateLocaleSchema,
7181
- hero: external_exports.string().optional(),
7182
- // relative path to a hero image inside the template folder
7183
- // The Rekor backend(s) this channel runs on (gh #2955). Locale-agnostic. The
7184
- // cross-link + MCP endpoint are derived from each entry's slugs, never authored.
7185
- uses: templateUsesSchema,
7186
- // A WayAI template IS a WayAI channel — the wayai slice is required. (The old
7187
- // Rekor-only store entry is gone: a pure Rekor backend lives only in Rekor's store.)
7188
- wayai: templateYamlWayaiBlock
7189
- }).refine((c) => Boolean(c.wayai.locales[c.defaultLocale]), {
7190
- message: "`wayai.locales` must include the defaultLocale"
7191
- });
7192
- templateHeroSchema = external_exports.object({
7193
- filename: external_exports.string().min(1).max(200).regex(/\.(png|jpe?g|webp|gif)$/i, "hero must be a raster image (png/jpg/webp/gif)"),
7194
- dataBase64: external_exports.string().min(1).max(8e6)
7195
- });
7196
- templatePushLocaleSchema = external_exports.object({
7197
- wayai: templateTextSchema.optional(),
7198
- readmeMarkdown: external_exports.string().default(""),
7199
- wayaiFiles: templateFileMapSchema.optional()
7200
- });
7201
- templatePushBody = external_exports.object({
7202
- slug: templateSlugSchema,
7203
- defaultLocale: templateLocaleSchema,
7204
- common: external_exports.object({
7205
- category: external_exports.string().min(1).max(60),
7206
- tags: templateTagsSchema,
7207
- status: templateStatusSchema,
7208
- order: external_exports.number().int().min(0).max(1e5).default(0),
7209
- // The WayAI install command (a WayAI template always has a wayai side). Kept
7210
- // optional on the wire so a malformed manifest 400s on the field, not the body.
7211
- installCommand: external_exports.string().min(1).max(300).optional(),
7212
- hero: templateHeroSchema.optional(),
7213
- // The channel→backend edge (gh #2955), locale-agnostic.
7214
- uses: templateUsesSchema
7215
- }),
7216
- locales: external_exports.record(templateLocaleSchema, templatePushLocaleSchema)
7217
- }).refine((b) => Boolean(b.locales[b.defaultLocale]), {
7218
- message: "`locales` must include the defaultLocale"
7219
- });
7220
- templateListQuery = external_exports.object({ locale: templateLocaleSchema.optional() });
7221
- templateSlugParam = external_exports.object({ slug: templateSlugSchema });
7222
- templateDetailQuery = external_exports.object({ locale: templateLocaleSchema.optional() });
7223
- courseQuizScoreSchema = external_exports.object({
7224
- correct: external_exports.number().int().min(0).max(50),
7225
- total: external_exports.number().int().min(1).max(50),
7226
- /** Chosen choice index per question; -1 = unanswered. */
7227
- answers: external_exports.array(external_exports.number().int().min(-1).max(50)).max(50).optional()
7228
- });
7229
- upsertCourseLessonBody = external_exports.object({
7230
- quiz_passed: external_exports.boolean().optional(),
7231
- quiz_score: courseQuizScoreSchema.optional(),
7232
- content_version: external_exports.number().int().min(1)
7233
- }).strict();
7234
- linkCourseCapstoneBody = external_exports.object({
7235
- hub_id: external_exports.string().min(1).max(128),
7236
- // A capstone's slug IS a canonical template slug — reuse the one validator
7237
- // the template pipeline (CLI, admin, gallery) already enforces, so course
7238
- // linking can't drift from how real template slugs are shaped.
7239
- template_slug: templateSlugSchema.optional()
7240
- }).strict();
7241
7097
  archiveHubIdParam = external_exports.object({
7242
7098
  hubId: external_exports.string().uuid()
7243
7099
  });
@@ -8710,6 +8566,135 @@ var init_contracts = __esm({
8710
8566
  offset: external_exports.coerce.number().int().min(0).optional()
8711
8567
  });
8712
8568
  noticeIdParamSchema = external_exports.object({ id: external_exports.string().min(1) });
8569
+ templateLocaleSchema = external_exports.enum(SUPPORTED_LOCALES);
8570
+ TEMPLATE_SLUG_REGEX = /^[a-z0-9][a-z0-9-]{0,62}$/;
8571
+ templateSlugSchema = external_exports.string().regex(TEMPLATE_SLUG_REGEX, "slug must be lowercase alphanumeric with hyphens (max 63)");
8572
+ templateStatusSchema = external_exports.enum(["published", "draft", "internal"]);
8573
+ templateFileMapSchema = external_exports.record(external_exports.string()).refine((m) => Object.keys(m).every(isSafeTemplatePath), {
8574
+ message: 'file map contains an unsafe path (no absolute paths, "..", or backslashes)'
8575
+ });
8576
+ TEMPLATE_INSTANCE_ID_KEYS = /* @__PURE__ */ new Set([
8577
+ // Top-level hub instance metadata (hub.yaml) — set by `wayai pull`, never authored.
8578
+ "hub_id",
8579
+ "hub_environment",
8580
+ "preview_label",
8581
+ "branch_name",
8582
+ // Per-entity row id + cross-entity reference UUIDs (each has a portable name twin).
8583
+ "id",
8584
+ "connection_id",
8585
+ "target_id",
8586
+ "agent_id",
8587
+ "resource_id",
8588
+ "list_id",
8589
+ // Account-scoped Meta WhatsApp template id (name twin: `template_whatsapp`).
8590
+ "template_whatsapp_id"
8591
+ ]);
8592
+ TEMPLATE_OPAQUE_BLOB_KEYS = /* @__PURE__ */ new Set([
8593
+ "settings",
8594
+ // agent + connection connector settings
8595
+ "schema_json",
8596
+ // agent response_format JSON Schema
8597
+ "json_schema",
8598
+ // state JSON Schema
8599
+ "initial_value",
8600
+ // state seed value
8601
+ "additional_context_schema",
8602
+ // kanban-status transition-form schema
8603
+ "config",
8604
+ // custom-tool OpenAI function schema
8605
+ "headers",
8606
+ "query_params",
8607
+ "body_params",
8608
+ // custom-tool HTTP shaping
8609
+ "mappings",
8610
+ // composed-tool argument mappings
8611
+ "input",
8612
+ "expected",
8613
+ "history",
8614
+ // eval message fixtures (tool_calls carry their own `id`)
8615
+ "transcript",
8616
+ "step_config"
8617
+ // journey fixtures (transcript carries `step_id`; step_config is keyed by it)
8618
+ ]);
8619
+ TEMPLATE_AUTHOR_DATA_KEYS = /* @__PURE__ */ new Set([
8620
+ // Outbound campaign subsystem (hub.yaml top-level). `outbound_contacts` is the
8621
+ // author's real leads — `phone`/`email`/`instagram_sid` + the required `name` are
8622
+ // GDPR-grade PII. `outbound_lists` group those contacts by real name. `outbound_schedules`
8623
+ // bind to the (now-absent) lists and carry the author's campaign cadence + message
8624
+ // copy — operationally tied to the author's customers; a consumer builds their own.
8625
+ "outbound_contacts",
8626
+ "outbound_lists",
8627
+ "outbound_schedules",
8628
+ // Account-scoped channel identifier on a connection (Twilio SID / WhatsApp number /
8629
+ // IG username / from-email, per connector). The connection stays as portable
8630
+ // structure re-bound by name on push; this author-account value carries no blueprint
8631
+ // value. A dedicated top-level column — never nested in the `settings` opaque blob.
8632
+ "account_sid"
8633
+ ]);
8634
+ templateTextSchema = external_exports.object({
8635
+ metaTitle: external_exports.string().min(1).max(200),
8636
+ metaDescription: external_exports.string().max(1e3).default("")
8637
+ });
8638
+ templateUsesEntrySchema = external_exports.object({
8639
+ backend: templateSlugSchema,
8640
+ endpoint: templateSlugSchema
8641
+ });
8642
+ templateUsesSchema = external_exports.array(templateUsesEntrySchema).max(24).default([]);
8643
+ templateYamlLocaleEntry = templateTextSchema.extend({ source: external_exports.string().min(1) });
8644
+ templateYamlWayaiBlock = external_exports.object({
8645
+ installCommand: external_exports.string().min(1).max(300),
8646
+ locales: external_exports.record(templateLocaleSchema, templateYamlLocaleEntry)
8647
+ });
8648
+ templateTagsSchema = external_exports.array(external_exports.string().min(1).max(30)).max(12).default([]).transform((tags) => [...new Set(tags.map((t) => t.trim().toLowerCase()).filter(Boolean))]);
8649
+ templateYamlSchema = external_exports.object({
8650
+ slug: templateSlugSchema,
8651
+ category: external_exports.string().min(1).max(60),
8652
+ tags: templateTagsSchema,
8653
+ status: templateStatusSchema.default("draft"),
8654
+ order: external_exports.number().int().min(0).max(1e5).optional(),
8655
+ defaultLocale: templateLocaleSchema,
8656
+ hero: external_exports.string().optional(),
8657
+ // relative path to a hero image inside the template folder
8658
+ // The Rekor backend(s) this channel runs on (gh #2955). Locale-agnostic. The
8659
+ // cross-link + MCP endpoint are derived from each entry's slugs, never authored.
8660
+ uses: templateUsesSchema,
8661
+ // A WayAI template IS a WayAI channel — the wayai slice is required. (The old
8662
+ // Rekor-only store entry is gone: a pure Rekor backend lives only in Rekor's store.)
8663
+ wayai: templateYamlWayaiBlock
8664
+ }).refine((c) => Boolean(c.wayai.locales[c.defaultLocale]), {
8665
+ message: "`wayai.locales` must include the defaultLocale"
8666
+ });
8667
+ templateHeroSchema = external_exports.object({
8668
+ filename: external_exports.string().min(1).max(200).regex(/\.(png|jpe?g|webp|gif)$/i, "hero must be a raster image (png/jpg/webp/gif)"),
8669
+ dataBase64: external_exports.string().min(1).max(8e6)
8670
+ });
8671
+ templatePushLocaleSchema = external_exports.object({
8672
+ wayai: templateTextSchema.optional(),
8673
+ readmeMarkdown: external_exports.string().default(""),
8674
+ wayaiFiles: templateFileMapSchema.optional()
8675
+ });
8676
+ templatePushBody = external_exports.object({
8677
+ slug: templateSlugSchema,
8678
+ defaultLocale: templateLocaleSchema,
8679
+ common: external_exports.object({
8680
+ category: external_exports.string().min(1).max(60),
8681
+ tags: templateTagsSchema,
8682
+ status: templateStatusSchema,
8683
+ order: external_exports.number().int().min(0).max(1e5).default(0),
8684
+ // The WayAI install command (a WayAI template always has a wayai side). Kept
8685
+ // optional on the wire so a malformed manifest 400s on the field, not the body.
8686
+ installCommand: external_exports.string().min(1).max(300).optional(),
8687
+ hero: templateHeroSchema.optional(),
8688
+ // The channel→backend edge (gh #2955), locale-agnostic.
8689
+ uses: templateUsesSchema
8690
+ }),
8691
+ locales: external_exports.record(templateLocaleSchema, templatePushLocaleSchema)
8692
+ }).refine((b) => Boolean(b.locales[b.defaultLocale]), {
8693
+ message: "`locales` must include the defaultLocale"
8694
+ });
8695
+ templateListQuery = external_exports.object({ locale: templateLocaleSchema.optional() });
8696
+ templateSlugParam = external_exports.object({ slug: templateSlugSchema });
8697
+ templateDetailQuery = external_exports.object({ locale: templateLocaleSchema.optional() });
8713
8698
  ADMIN_SKILL_NAME_REGEX = /^[a-z0-9][a-z0-9-]{0,63}$/;
8714
8699
  adminSkillNameParam = external_exports.object({
8715
8700
  name: external_exports.string().regex(ADMIN_SKILL_NAME_REGEX, "invalid skill name")
@@ -9862,14 +9847,6 @@ function collectTurnAttachmentHashes2(turn) {
9862
9847
  }
9863
9848
  return hashes;
9864
9849
  }
9865
- function isSafeTemplatePath2(path31) {
9866
- if (path31.length === 0 || path31.length > 300) return false;
9867
- if (path31.startsWith("/") || path31.includes("\\")) return false;
9868
- const segments = path31.split("/");
9869
- return segments.every(
9870
- (seg) => seg.length > 0 && seg !== "." && seg !== ".." && /^[A-Za-z0-9._-]+$/.test(seg)
9871
- );
9872
- }
9873
9850
  function foldDiacritics(input) {
9874
9851
  return input.normalize("NFKD").replace(/[̀-ͯ]/g, "");
9875
9852
  }
@@ -10182,6 +10159,14 @@ function refineHubAsCodeDelegation2(config, ctx) {
10182
10159
  });
10183
10160
  });
10184
10161
  }
10162
+ function isSafeTemplatePath2(path31) {
10163
+ if (path31.length === 0 || path31.length > 300) return false;
10164
+ if (path31.startsWith("/") || path31.includes("\\")) return false;
10165
+ const segments = path31.split("/");
10166
+ return segments.every(
10167
+ (seg) => seg.length > 0 && seg !== "." && seg !== ".." && /^[A-Za-z0-9._-]+$/.test(seg)
10168
+ );
10169
+ }
10185
10170
  function identifyTokenType(token) {
10186
10171
  if (token.startsWith("way_")) return "way_token";
10187
10172
  if (token.startsWith("eyJ")) return "jwt";
@@ -10221,7 +10206,7 @@ function findStepBoundaries(transcript) {
10221
10206
  }
10222
10207
  return out;
10223
10208
  }
10224
- var UUID_RE, HEX_RE, WORKOS_ID_RE, OPAQUE_SECRET_RE, BASE64_SECRET_RE, BASE64_MARKER_RE, TOKEN_RE, SENSITIVE_FIELDS, SENSITIVE_KEY_ALTERNATION, SENSITIVE_KEY_PATTERN, JSON_CREDENTIAL_RE, QUERY_CREDENTIAL_RE, REDACTED, PROVIDER_TOKEN_RE, APP_ERROR_BRAND, AppError, LLM_RATE_LIMIT_BRAND, LlmRateLimitError, LLM_PROVIDER_HTTP_BRAND, LlmProviderHttpError, LLM_PROVIDER_CONTENT_BRAND, LlmProviderContentError, LLM_PROVIDER_TIMEOUT_BRAND, LlmProviderTimeoutError, ExternalServiceError, CHANNEL_PROVIDER_HTTP_BRAND, ChannelProviderHttpError, MEDIA_PROVIDER_HTTP_BRAND, MediaProviderHttpError, AUTH_TYPE2, ORG_CREDENTIAL_AUTH_TYPES2, AUTH_TYPE_DISPLAY2, LEGACY_AUTH_TYPE_MAP2, VALID_AUTH_TYPES2, AGENT_ROLES2, SAFE_USER_ID_REGEX2, SUPPORTED_LOCALES2, uuidSchema2, paginationSchema3, timestampSchema2, idParamSchema2, clientOptionalString2, clientOptionalBoolean2, clientOptionalNumber2, messageAttachment2, MAX_MESSAGE_BODY_BYTES2, MAX_ATTACHMENTS_PER_MESSAGE2, MAX_AUDIO_FILE_BASE64_BYTES2, primaryRegionSchema2, placementSourceSchema2, orgIdParam2, orgAdminIdParam2, createOrganizationBody2, updateOrganizationBody2, addOrgAdminBody2, SUMMARIZATION_THRESHOLD_MIN2, SUMMARIZATION_THRESHOLD_MAX2, summarizationThresholdField2, monitorConfigField2, agentIdParam2, listAgentsQuery2, agentConnectionsQuery2, createAgentBody2, updateAgentBody2, AGENT_PARAMETER_TYPES2, AGENT_PARAMETER_NAME_REGEX2, agentParameterCreateSchema2, MAX_AGENT_PARAMETERS_PER_REQUEST2, createAgentParametersBody2, SLUG_REGEX2, slugSchema2, INVISIBLE_NAME_CHARS2, MAX_KANBAN_STATUSES2, MAX_FOLLOWUPS_PER_STATUS2, MAX_LANES2, MAX_ADDITIONAL_CONTEXT_SCHEMA_BYTES2, RESERVED_TEMPLATE_DUMP_NAME2, kanbanStatusSlugSchema2, followupSchema2, MAX_OUTCOMES_PER_STATUS2, kanbanOutcomeSchema2, EXCLUSIVE_FLAG_PAIRS2, kanbanStatusSchema2, kanbanStatusesArraySchema2, laneSchema2, lanesArraySchema2, hubIdParam2, hubAdminIdParam2, hubUserIdParam2, hubIdentityIdParam2, hubTeamIdParam2, hubTeamUserDeleteParam2, hubSchemaQuery2, PREVIEW_LABEL_MAX_LENGTH2, MAX_ENDED_INDEX_RETENTION_DAYS2, previewLabelField2, createHubBody2, updateHubBody2, addHubAdminBody2, addHubIdentityAuthorizationBody2, contactDecisionBody2, approveContactBody2, listContactAccessQuery2, createHubTeamBody2, updateHubTeamBody2, addHubTeamUserBody2, reassignHubUserBody2, replicatePreviewBody2, updateChannelTestIdentitiesBody2, claimCodeChannelParam2, claimCodeDeleteParam2, connectionIdParam2, connectorIdParam2, listConnectionsQuery2, deleteConnectionQuery2, addConnectionBody2, editConnectionBody2, PRODUCTION_DIRECT_FIELDS2, setProductionCredentialBody2, registerWhatsappQuery2, registerWhatsappBody2, retryProvisioningQuery2, resendDomainStatusQuery2, PLACEHOLDER_TOKENS2, ALLOWED_TYPES2, SUBSCHEMA_OBJECT_KEYWORDS2, SUBSCHEMA_LIST_KEYWORDS2, SUBSCHEMA_MAP_KEYWORDS2, MAX_SCHEMA_DEPTH2, toolIdParam2, listToolsQuery2, toolAgentQuery2, deleteToolQuery2, toolConnectionsQuery2, nativeToolIdSchema2, CONTEXT_BOUNDARIES2, contextBoundarySchema2, addNativeToolBody2, addMcpToolBody2, createCustomToolBody2, updateCustomToolBody2, updateToolExecutionConfigBody2, initialValueCreateSchema2, initialValueUpdateSchema2, stateIdParam2, listStatesQuery2, stateNameSchema2, createStateBody2, updateStateBody2, reorderStatesBody2, variantAiModeSchema2, experimentStatusSchema2, overlayUpdateSchema2, experimentIdParam2, variantIdParam2, listExperimentsQuery2, listVariantsQuery2, listOverridesQuery2, deleteOverrideQuery2, createExperimentBody2, updateExperimentBody2, setExperimentStatusBody2, createVariantBody2, updateVariantBody2, upsertOverrideBody2, orgTagIdParam2, listOrgTagsQuery2, createOrgTagBody2, updateOrgTagBody2, orgCredentialIdParam2, listOrgCredentialsQuery2, createOrgCredentialBody2, updateOrgCredentialBody2, orgResourceIdParam2, orgResourceFileIdParam2, orgResourceFolderIdParam2, hubOrgResourceParam2, listOrgResourcesQuery2, orgIdQuery2, createOrgResourceBody2, updateOrgResourceBody2, createOrgResourceFolderBody2, updateOrgResourceFolderBody2, uploadOrgResourceFileBody2, updateOrgResourceFileBody2, uploadOrgSkillZipBody2, linkOrgResourceBody2, resourceIdParam2, listResourcesQuery2, createResourceBody2, updateResourceBody2, syncSkillsBody2, resourceFileIdParam2, listResourceFilesQuery2, createResourceFileBody2, updateResourceFileBody2, uploadResourceFileBody2, uploadSkillZipBody2, resourceFolderIdParam2, listResourceFoldersQuery2, createResourceFolderBody2, updateResourceFolderBody2, agentResourceQuery2, hubResourceQuery2, linkAgentResourceBody2, updateAgentResourceBody2, unlinkAgentResourceQuery2, navItemSchema2, hubCountResetBody2, navItemCountResetBody2, typingBody2, analyticsHubIdParam2, analyticsVariableIdParam2, updateVariablePinBody2, updateAnalyticsViewBody2, NUMERIC_FILTER_OPS2, TEXT_FILTER_OPS2, CATEGORICAL_FILTER_OPS2, VARIABLE_FILTER_OPS2, STRUCTURED_QUERY_OPS2, STRUCTURED_QUERY_AGGREGATIONS2, filterValueSchema2, conversationsBody2, analyticsConversationIdParam2, messagesQuery2, conversationDetailDataQuery2, analyticsDataBody2, structuredQueryBody2, analyticsSqlBody2, analyticsSqlTable2, analyticsSqlSchemaQuery2, EVAL_PACING_PRESET_NAMES2, PACING_INTERVAL_MIN_MS2, PACING_INTERVAL_MAX_MS2, EVAL_MAX_RUNS_PER_SCENARIO2, EVAL_RUN_DEADLINE_MIN_MS2, EVAL_RUN_DEADLINE_MAX_MS2, ISO_UTC_RE2, paginationSchema22, evalIdParam2, sessionIdParam2, scenarioSetIdParam2, hubIdQuery2, evalDateContextSchema2, EVAL_FIXTURE_NAME_MAX_LENGTH2, evalFixtureOverrideSchema2, runSessionQuery2, EVAL_INPUT_ROLES2, EVAL_INPUT_ROLE_LIST2, ROLE_ECHO_MAX2, EVAL_INITIAL_STATE_SCOPES2, MAX_INITIAL_STATE_ENTRIES2, evalInitialStateEntry2, createEvalBody2, updateEvalBody2, getEvalsQuery2, toggleEvalBody2, bulkToggleEvalsBody2, pacingConfigSchema2, EVAL_MAX_SELECTED_SCENARIOS2, evalScenarioSelectionEntrySchema2, evalScenarioSelectionSchema2, sessionConfigSchema2, createSessionBody2, getSessionsQuery2, getSessionResultsQuery2, getSessionRunsQuery2, evalAnalyticsQuery2, getSessionCostQuery2, compareSessionsQuery2, evalsSqlBody2, evalsSqlSchemaQuery2, exportResultsQuery2, validateEvalBody2, hubAgentsQuery2, createScenarioSetBody2, updateScenarioSetBody2, scenarioSetsHubQuery2, createScenarioFromConversationBody2, createJourneyFromConversationBody2, EVAL_ATTACHMENT_HASH_REGEX2, evalAttachmentRef2, turnMayCarryAttachments2, ATTACHMENTS_USER_ONLY_MESSAGE2, journeyIdParam2, journeyToolCallSchema2, journeyTurnSchema2, journeyStepOverrideSchema2, fixtureField2, createJourneyBody2, updateJourneyBody2, evalSessionConfigResponseSchema2, evalSessionResponseSchema2, seedReleaseStatusSchema2, getConversationsQuery2, getMessagesQuery2, appMessageSenderType2, appMessageReceiverType2, apiChannelMessage2, apiChannelMessageBody2, appMessageBody2, appMessageResponse2, updateUserBody2, updateProfileBody2, pathnameRegex2, updatePreferencesBody2, registerPushTokenBody2, deletePushTokenQuery2, activityQuery2, deletionModeSchema2, deletionRequestBody2, templateLocaleSchema2, TEMPLATE_SLUG_REGEX2, templateSlugSchema2, templateStatusSchema2, templateFileMapSchema2, templateTextSchema2, templateUsesEntrySchema2, templateUsesSchema2, templateYamlLocaleEntry2, templateYamlWayaiBlock2, templateTagsSchema2, templateYamlSchema2, templateHeroSchema2, templatePushLocaleSchema2, templatePushBody2, templateListQuery2, templateSlugParam2, templateDetailQuery2, courseQuizScoreSchema2, upsertCourseLessonBody2, linkCourseCapstoneBody2, archiveHubIdParam2, archiveConversationParams2, archiveListQuery2, archiveMessageObservabilityParams2, conversationIdParam2, claimBody2, releaseBody2, transferBody2, closeBody2, additionalContextPayloadSchema2, kanbanUpdateBody2, annotateConversationBody2, observabilityParams2, observabilityListParams2, deleteUserConversationsBody2, deleteUserConversationsResponse2, sendMessageBody2, listConversationsQuery2, flagSourceSchema2, getConversationsResponse2, getConversationDetailParams2, getConversationDetailQuery2, getConversationDetailResponse2, listWhatsAppTemplatesQuery2, sendWhatsAppTemplateBody2, copilotSuggestBody2, copilotSuggestResponse2, CONSULT_THREAD_STATUSES2, consultThreadStatus2, CONSULT_THREAD_TITLE_MAX2, consultThreadTitle2, consultThreadSummary2, listConsultThreadsQuery2, listConsultThreadsResponse2, createConsultThreadBody2, createConsultThreadResponse2, consultThreadIdParam2, updateConsultThreadBody2, updateConsultThreadResponse2, CONSULT_AWAIT_TIMEOUT_MS2, billingOrgIdParam2, subscriptionItemParams2, spendCapBody2, growthPacksBody2, portalSessionBody2, checkoutSessionBody2, updateBillingCurrencyBody2, invoicesQuery2, downloadBody2, uploadQuery2, signUrlBody2, outboundSchemaQuery2, templateIdParam2, listTemplatesQuery2, deleteTemplateQuery2, templateStatusQuery2, createTemplateBody2, updateTemplateBody2, submitTemplateBody2, testTemplateBody2, contactIdParam2, listContactsQuery2, createContactBody2, updateContactBody2, listIdParam2, listListsQuery2, listListContactsQuery2, createListBody2, updateListBody2, addListContactsBody2, removeListContactsBody2, scheduleIdParam2, listSchedulesQuery2, listExecutionsQuery2, createScheduleBody2, updateScheduleBody2, MAX_RESOURCE_FILE_SIZE2, MAX_10MB_BASE64_ENCODED_BYTES2, MAX_EVAL_ATTACHMENT_ENCODED_BYTES2, MAX_EVAL_ATTACHMENT_CARRIERS2, MAX_EVAL_ATTACHMENT_AGGREGATE_ENCODED_BYTES2, MAX_RESOURCE_ENCODED_BYTES2, MAX_HUB_AS_CODE_RESOURCES2, MAX_HUB_AS_CODE_RESOURCE_FILES2, MAX_RESOURCE_AGGREGATE_ENCODED_BYTES2, MAX_CI_CONFIG_BODY_BYTES2, hubAsCodeStateSchema2, hubAsCodeResourceFileSchema2, hubAsCodeResourceSchema2, uuidPattern2, ciUuidSchema2, boundedHubAsCodeResourcesSchema2, hubAsCodeConfigSchema2, ciPullHubIdParam2, ciBranchParam2, ciPullQuery2, ciHubsQuery2, ciLookupQuery2, ciBranchesQuery2, ciSyncBody2, ciPushBody2, ciDiffBody2, ciPublishBody2, ciPublishPreviewBody2, ciSyncMcpBody2, ciOrgResourcesParam2, orgResourcesConfigSchema2, ciOrgResourcesPushBody2, ciOrgResourcesDiffBody2, CI_APPLY_ENTITY_KINDS2, CI_APPLY_OPERATIONS2, ciApplyErrorBaseSchema2, ciApplyErrorSchema2, ciSyncCountSchema2, ciSyncChangesSchema2, ciSyncWarningSchema2, ciSyncResponseSchema2, adminOrgIdParam2, adminOrgAdminIdParam2, adminUserIdParam2, adminPlanIdParam2, adminOrganizationsQuery2, adminUserSearchQuery2, kanbanSlugMigrationQuery2, adjustQuotaBody2, updatePlanBody2, addAdminUserBody2, updatePlatformConfigBody2, updateFreeOrgLimitBody2, adminScopedTargetBody2, updatePricingPlanBody2, dataExplorerSearchQuery2, dataExplorerOrgIdParam2, dataExplorerHubIdParam2, dataExplorerConvIdParam2, dataExplorerDoInstancesQuery2, dataExplorerNsIdParam2, dataExplorerKvKeysBody2, dataExplorerKvKeyBody2, uuidOrHexId2, dataExplorerDeleteOrgParam2, dataExplorerDeleteHubParam2, dataExplorerDeleteConvParam2, dataExplorerDeleteUserParam2, dataExplorerDeleteQuery2, dataExplorerKvDeleteBody2, pitrDoNamespace2, pitrBookmarkParam2, pitrRestoreBody2, healthSamplingTriggerBody2, dataExplorerDebugDoType2, DEBUG_READ_MAX_LIMIT2, DEBUG_READ_DEFAULT_LIMIT2, DEBUG_DO_HEX_PREFIX2, debugDoEntityId2, debugTableName2, dataExplorerDebugTablesParam2, dataExplorerDebugRowsParam2, dataExplorerDebugRowsQuery2, dataExplorerDebugAnalyticsTable2, debugUuid2, dataExplorerDebugAnalyticsRowsParam2, dataExplorerDebugAnalyticsRowsQuery2, debugHubConvParam2, debugMessageIdQuery2, sandboxEgressPolicy2, SANDBOX_EXEC_MAX_CMD_LENGTH2, SANDBOX_EXEC_MAX_ALLOWLIST2, SANDBOX_EXEC_MAX_TIMEOUT_MS2, adminSandboxExecBody2, whatsappCallbackBody2, authMeResponse2, wsTicketResponse2, sessionCheckResponse2, logoutResponse2, magicCodeSendBody2, magicCodeSendResponse2, magicCodeVerifyBody2, magicCodeVerifyResponse2, passwordLoginBody2, browserParams2, browserFoldersQuery2, browserFilesQuery2, stateOperationBody2, conversationListResourcesQuery2, conversationReadResourceQuery2, listPendingSchedulesQuery2, listHubAggregateSchedulesQuery2, reportSourceSchema2, intakeReportSourceSchema2, reportClassificationSchema2, reportStatusSchema2, reportLocaleSchema2, reportMessageAuthorRoleSchema2, reportMessageSchema2, sentryRefStatusSchema2, createReportBody2, editReportBody2, reporterReportSummarySchema2, reporterListResponseSchema2, getReportResponseSchema2, reporterTransitionResponseSchema2, contestReportBody2, reporterListQuery2, listReportsQuery2, GITHUB_ISSUE_URL_REGEX2, githubIssueUrlSchema2, transitionReportBody2, groupReportsBody2, holdReportBody2, clickhouseReadyResponse2, bootstrapQuery2, requestSnapshotChunkMessage2, MAX_NAME_LENGTH3, MAX_VALUE_LENGTH2, MAX_TAGS2, MAX_TAG_LENGTH2, MAX_SCOPE_HUBS2, MAX_SCOPE_TAGS2, vaultSecretScopeSchema2, vaultCreateBody2, vaultUpdateBody2, PERMISSIONS2, MAX_NAME_LENGTH22, MAX_HUBS_PER_GRANT2, MAX_HUB_TAGS_PER_GRANT2, MAX_GRANTS2, permissionEnum2, grantScopeSchema2, grantSchema2, createTokenBody2, tokenOrgIdParam2, tokenGrantScopeSchema2, tokenGrantSchema2, tokenMetadataSchema2, listTokensResponse2, createTokenResponse2, orgTokenSummarySchema2, listOrgTokensResponse2, invitePreviewQuery2, invitePreviewResponse2, discordTier2, discordBillingCycle2, discordMetadata2, discordOAuthStartResponse2, discordOAuthFinalizeBody2, discordOAuthFinalizeResponse2, discordDisconnectResponse2, jsonSchemaSchema2, hubUserIdentity2, stateValueEntry2, getHubUserContextResponse2, updateHubUserBody2, updateHubUserResponse2, unlockHubUserNameResponse2, stateResetParams2, stateResetResponse2, hubAlertsParam2, hubAlertSeverity2, hubAlert2, hubAlertsListResponse2, noticeSeveritySchema2, noticeStatusSchema2, NOTICE_SCOPE_REGEX2, noticeScopeSchema2, noticeLinkSchema2, createNoticeBody2, updateNoticeBody2, listNoticesQuery2, noticeIdParamSchema2, ADMIN_SKILL_NAME_REGEX2, adminSkillNameParam2, WAYAI_WORKSPACE_LAYOUT;
10209
+ var UUID_RE, HEX_RE, WORKOS_ID_RE, OPAQUE_SECRET_RE, BASE64_SECRET_RE, BASE64_MARKER_RE, TOKEN_RE, SENSITIVE_FIELDS, SENSITIVE_KEY_ALTERNATION, SENSITIVE_KEY_PATTERN, JSON_CREDENTIAL_RE, QUERY_CREDENTIAL_RE, REDACTED, PROVIDER_TOKEN_RE, APP_ERROR_BRAND, AppError, LLM_RATE_LIMIT_BRAND, LlmRateLimitError, LLM_PROVIDER_HTTP_BRAND, LlmProviderHttpError, LLM_PROVIDER_CONTENT_BRAND, LlmProviderContentError, LLM_PROVIDER_TIMEOUT_BRAND, LlmProviderTimeoutError, ExternalServiceError, CHANNEL_PROVIDER_HTTP_BRAND, ChannelProviderHttpError, MEDIA_PROVIDER_HTTP_BRAND, MediaProviderHttpError, AUTH_TYPE2, ORG_CREDENTIAL_AUTH_TYPES2, AUTH_TYPE_DISPLAY2, LEGACY_AUTH_TYPE_MAP2, VALID_AUTH_TYPES2, AGENT_ROLES2, SAFE_USER_ID_REGEX2, SUPPORTED_LOCALES2, uuidSchema2, paginationSchema3, timestampSchema2, idParamSchema2, clientOptionalString2, clientOptionalBoolean2, clientOptionalNumber2, messageAttachment2, MAX_MESSAGE_BODY_BYTES2, MAX_ATTACHMENTS_PER_MESSAGE2, MAX_AUDIO_FILE_BASE64_BYTES2, primaryRegionSchema2, placementSourceSchema2, orgIdParam2, orgAdminIdParam2, createOrganizationBody2, updateOrganizationBody2, addOrgAdminBody2, SUMMARIZATION_THRESHOLD_MIN2, SUMMARIZATION_THRESHOLD_MAX2, PREVIOUS_CONVERSATIONS_MAX2, previousConversationsCountField2, summarizationThresholdField2, monitorConfigField2, agentIdParam2, listAgentsQuery2, agentConnectionsQuery2, createAgentBody2, updateAgentBody2, AGENT_PARAMETER_TYPES2, AGENT_PARAMETER_NAME_REGEX2, agentParameterCreateSchema2, MAX_AGENT_PARAMETERS_PER_REQUEST2, createAgentParametersBody2, SLUG_REGEX2, slugSchema2, INVISIBLE_NAME_CHARS2, MAX_KANBAN_STATUSES2, MAX_FOLLOWUPS_PER_STATUS2, MAX_LANES2, MAX_ADDITIONAL_CONTEXT_SCHEMA_BYTES2, RESERVED_TEMPLATE_DUMP_NAME2, kanbanStatusSlugSchema2, followupSchema2, MAX_OUTCOMES_PER_STATUS2, kanbanOutcomeSchema2, EXCLUSIVE_FLAG_PAIRS2, kanbanStatusSchema2, kanbanStatusesArraySchema2, laneSchema2, lanesArraySchema2, hubIdParam2, hubAdminIdParam2, hubUserIdParam2, hubIdentityIdParam2, hubTeamIdParam2, hubTeamUserDeleteParam2, hubSchemaQuery2, PREVIEW_LABEL_MAX_LENGTH2, MAX_ENDED_INDEX_RETENTION_DAYS2, previewLabelField2, createHubBody2, updateHubBody2, addHubAdminBody2, addHubIdentityAuthorizationBody2, contactDecisionBody2, approveContactBody2, listContactAccessQuery2, createHubTeamBody2, updateHubTeamBody2, addHubTeamUserBody2, reassignHubUserBody2, replicatePreviewBody2, updateChannelTestIdentitiesBody2, claimCodeChannelParam2, claimCodeDeleteParam2, connectionIdParam2, connectorIdParam2, listConnectionsQuery2, deleteConnectionQuery2, addConnectionBody2, editConnectionBody2, PRODUCTION_DIRECT_FIELDS2, setProductionCredentialBody2, registerWhatsappQuery2, registerWhatsappBody2, retryProvisioningQuery2, resendDomainStatusQuery2, PLACEHOLDER_TOKENS2, ALLOWED_TYPES2, SUBSCHEMA_OBJECT_KEYWORDS2, SUBSCHEMA_LIST_KEYWORDS2, SUBSCHEMA_MAP_KEYWORDS2, MAX_SCHEMA_DEPTH2, toolIdParam2, listToolsQuery2, toolAgentQuery2, deleteToolQuery2, toolConnectionsQuery2, nativeToolIdSchema2, CONTEXT_BOUNDARIES2, contextBoundarySchema2, addNativeToolBody2, addMcpToolBody2, createCustomToolBody2, updateCustomToolBody2, updateToolExecutionConfigBody2, initialValueCreateSchema2, initialValueUpdateSchema2, stateIdParam2, listStatesQuery2, stateNameSchema2, createStateBody2, updateStateBody2, reorderStatesBody2, variantAiModeSchema2, experimentStatusSchema2, overlayUpdateSchema2, experimentIdParam2, variantIdParam2, listExperimentsQuery2, listVariantsQuery2, listOverridesQuery2, deleteOverrideQuery2, createExperimentBody2, updateExperimentBody2, setExperimentStatusBody2, createVariantBody2, updateVariantBody2, upsertOverrideBody2, orgTagIdParam2, listOrgTagsQuery2, createOrgTagBody2, updateOrgTagBody2, orgCredentialIdParam2, listOrgCredentialsQuery2, createOrgCredentialBody2, updateOrgCredentialBody2, orgResourceIdParam2, orgResourceFileIdParam2, orgResourceFolderIdParam2, hubOrgResourceParam2, listOrgResourcesQuery2, orgIdQuery2, createOrgResourceBody2, updateOrgResourceBody2, createOrgResourceFolderBody2, updateOrgResourceFolderBody2, uploadOrgResourceFileBody2, updateOrgResourceFileBody2, uploadOrgSkillZipBody2, linkOrgResourceBody2, resourceIdParam2, listResourcesQuery2, createResourceBody2, updateResourceBody2, syncSkillsBody2, resourceFileIdParam2, listResourceFilesQuery2, createResourceFileBody2, updateResourceFileBody2, uploadResourceFileBody2, uploadSkillZipBody2, resourceFolderIdParam2, listResourceFoldersQuery2, createResourceFolderBody2, updateResourceFolderBody2, agentResourceQuery2, hubResourceQuery2, linkAgentResourceBody2, updateAgentResourceBody2, unlinkAgentResourceQuery2, navItemSchema2, hubCountResetBody2, navItemCountResetBody2, typingBody2, analyticsHubIdParam2, analyticsVariableIdParam2, updateVariablePinBody2, updateAnalyticsViewBody2, NUMERIC_FILTER_OPS2, TEXT_FILTER_OPS2, CATEGORICAL_FILTER_OPS2, VARIABLE_FILTER_OPS2, STRUCTURED_QUERY_OPS2, STRUCTURED_QUERY_AGGREGATIONS2, filterValueSchema2, conversationsBody2, analyticsConversationIdParam2, messagesQuery2, conversationDetailDataQuery2, analyticsDataBody2, structuredQueryBody2, analyticsSqlBody2, analyticsSqlTable2, analyticsSqlSchemaQuery2, EVAL_PACING_PRESET_NAMES2, PACING_INTERVAL_MIN_MS2, PACING_INTERVAL_MAX_MS2, EVAL_MAX_RUNS_PER_SCENARIO2, EVAL_RUN_DEADLINE_MIN_MS2, EVAL_RUN_DEADLINE_MAX_MS2, ISO_UTC_RE2, paginationSchema22, evalIdParam2, sessionIdParam2, scenarioSetIdParam2, hubIdQuery2, evalDateContextSchema2, EVAL_FIXTURE_NAME_MAX_LENGTH2, evalFixtureOverrideSchema2, runSessionQuery2, EVAL_INPUT_ROLES2, EVAL_INPUT_ROLE_LIST2, ROLE_ECHO_MAX2, EVAL_INITIAL_STATE_SCOPES2, MAX_INITIAL_STATE_ENTRIES2, evalInitialStateEntry2, createEvalBody2, updateEvalBody2, getEvalsQuery2, toggleEvalBody2, bulkToggleEvalsBody2, pacingConfigSchema2, EVAL_MAX_SELECTED_SCENARIOS2, evalScenarioSelectionEntrySchema2, evalScenarioSelectionSchema2, sessionConfigSchema2, createSessionBody2, getSessionsQuery2, getSessionResultsQuery2, getSessionRunsQuery2, evalAnalyticsQuery2, getSessionCostQuery2, compareSessionsQuery2, evalsSqlBody2, evalsSqlSchemaQuery2, exportResultsQuery2, validateEvalBody2, hubAgentsQuery2, createScenarioSetBody2, updateScenarioSetBody2, scenarioSetsHubQuery2, createScenarioFromConversationBody2, createJourneyFromConversationBody2, EVAL_ATTACHMENT_HASH_REGEX2, evalAttachmentRef2, turnMayCarryAttachments2, ATTACHMENTS_USER_ONLY_MESSAGE2, journeyIdParam2, journeyToolCallSchema2, journeyTurnSchema2, journeyStepOverrideSchema2, fixtureField2, createJourneyBody2, updateJourneyBody2, evalSessionConfigResponseSchema2, evalSessionResponseSchema2, seedReleaseStatusSchema2, getConversationsQuery2, getMessagesQuery2, appMessageSenderType2, appMessageReceiverType2, apiChannelMessage2, apiChannelMessageBody2, appMessageBody2, appMessageResponse2, updateUserBody2, updateProfileBody2, pathnameRegex2, updatePreferencesBody2, registerPushTokenBody2, deletePushTokenQuery2, activityQuery2, deletionModeSchema2, deletionRequestBody2, archiveHubIdParam2, archiveConversationParams2, archiveListQuery2, archiveMessageObservabilityParams2, conversationIdParam2, claimBody2, releaseBody2, transferBody2, closeBody2, additionalContextPayloadSchema2, kanbanUpdateBody2, annotateConversationBody2, observabilityParams2, observabilityListParams2, deleteUserConversationsBody2, deleteUserConversationsResponse2, sendMessageBody2, listConversationsQuery2, flagSourceSchema2, getConversationsResponse2, getConversationDetailParams2, getConversationDetailQuery2, getConversationDetailResponse2, listWhatsAppTemplatesQuery2, sendWhatsAppTemplateBody2, copilotSuggestBody2, copilotSuggestResponse2, CONSULT_THREAD_STATUSES2, consultThreadStatus2, CONSULT_THREAD_TITLE_MAX2, consultThreadTitle2, consultThreadSummary2, listConsultThreadsQuery2, listConsultThreadsResponse2, createConsultThreadBody2, createConsultThreadResponse2, consultThreadIdParam2, updateConsultThreadBody2, updateConsultThreadResponse2, CONSULT_AWAIT_TIMEOUT_MS2, billingOrgIdParam2, subscriptionItemParams2, spendCapBody2, growthPacksBody2, portalSessionBody2, checkoutSessionBody2, updateBillingCurrencyBody2, invoicesQuery2, downloadBody2, uploadQuery2, signUrlBody2, outboundSchemaQuery2, templateIdParam2, listTemplatesQuery2, deleteTemplateQuery2, templateStatusQuery2, createTemplateBody2, updateTemplateBody2, submitTemplateBody2, testTemplateBody2, contactIdParam2, listContactsQuery2, createContactBody2, updateContactBody2, listIdParam2, listListsQuery2, listListContactsQuery2, createListBody2, updateListBody2, addListContactsBody2, removeListContactsBody2, scheduleIdParam2, listSchedulesQuery2, listExecutionsQuery2, createScheduleBody2, updateScheduleBody2, MAX_RESOURCE_FILE_SIZE2, MAX_10MB_BASE64_ENCODED_BYTES2, MAX_EVAL_ATTACHMENT_ENCODED_BYTES2, MAX_EVAL_ATTACHMENT_CARRIERS2, MAX_EVAL_ATTACHMENT_AGGREGATE_ENCODED_BYTES2, MAX_RESOURCE_ENCODED_BYTES2, MAX_HUB_AS_CODE_RESOURCES2, MAX_HUB_AS_CODE_RESOURCE_FILES2, MAX_RESOURCE_AGGREGATE_ENCODED_BYTES2, MAX_CI_CONFIG_BODY_BYTES2, hubAsCodeStateSchema2, hubAsCodeResourceFileSchema2, hubAsCodeResourceSchema2, uuidPattern2, ciUuidSchema2, boundedHubAsCodeResourcesSchema2, hubAsCodeConfigSchema2, ciPullHubIdParam2, ciBranchParam2, ciPullQuery2, ciHubsQuery2, ciLookupQuery2, ciBranchesQuery2, ciSyncBody2, ciPushBody2, ciDiffBody2, ciPublishBody2, ciPublishPreviewBody2, ciSyncMcpBody2, ciOrgResourcesParam2, orgResourcesConfigSchema2, ciOrgResourcesPushBody2, ciOrgResourcesDiffBody2, CI_APPLY_ENTITY_KINDS2, CI_APPLY_OPERATIONS2, ciApplyErrorBaseSchema2, ciApplyErrorSchema2, ciSyncCountSchema2, ciSyncChangesSchema2, ciSyncWarningSchema2, ciSyncResponseSchema2, adminOrgIdParam2, adminOrgAdminIdParam2, adminUserIdParam2, adminPlanIdParam2, adminOrganizationsQuery2, adminUserSearchQuery2, kanbanSlugMigrationQuery2, adjustQuotaBody2, updatePlanBody2, addAdminUserBody2, updatePlatformConfigBody2, updateFreeOrgLimitBody2, adminScopedTargetBody2, updatePricingPlanBody2, dataExplorerSearchQuery2, dataExplorerOrgIdParam2, dataExplorerHubIdParam2, dataExplorerConvIdParam2, dataExplorerDoInstancesQuery2, dataExplorerNsIdParam2, dataExplorerKvKeysBody2, dataExplorerKvKeyBody2, uuidOrHexId2, dataExplorerDeleteOrgParam2, dataExplorerDeleteHubParam2, dataExplorerDeleteConvParam2, dataExplorerDeleteUserParam2, dataExplorerDeleteQuery2, dataExplorerKvDeleteBody2, pitrDoNamespace2, pitrBookmarkParam2, pitrRestoreBody2, healthSamplingTriggerBody2, dataExplorerDebugDoType2, DEBUG_READ_MAX_LIMIT2, DEBUG_READ_DEFAULT_LIMIT2, DEBUG_DO_HEX_PREFIX2, debugDoEntityId2, debugTableName2, dataExplorerDebugTablesParam2, dataExplorerDebugRowsParam2, dataExplorerDebugRowsQuery2, dataExplorerDebugAnalyticsTable2, debugUuid2, dataExplorerDebugAnalyticsRowsParam2, dataExplorerDebugAnalyticsRowsQuery2, debugHubConvParam2, debugMessageIdQuery2, sandboxEgressPolicy2, SANDBOX_EXEC_MAX_CMD_LENGTH2, SANDBOX_EXEC_MAX_ALLOWLIST2, SANDBOX_EXEC_MAX_TIMEOUT_MS2, adminSandboxExecBody2, whatsappCallbackBody2, authMeResponse2, wsTicketResponse2, sessionCheckResponse2, logoutResponse2, magicCodeSendBody2, magicCodeSendResponse2, magicCodeVerifyBody2, magicCodeVerifyResponse2, passwordLoginBody2, browserParams2, browserFoldersQuery2, browserFilesQuery2, stateOperationBody2, conversationListResourcesQuery2, conversationReadResourceQuery2, listPendingSchedulesQuery2, listHubAggregateSchedulesQuery2, reportSourceSchema2, intakeReportSourceSchema2, reportClassificationSchema2, reportStatusSchema2, reportLocaleSchema2, reportMessageAuthorRoleSchema2, reportMessageSchema2, sentryRefStatusSchema2, createReportBody2, editReportBody2, reporterReportSummarySchema2, reporterListResponseSchema2, getReportResponseSchema2, reporterTransitionResponseSchema2, contestReportBody2, reporterListQuery2, listReportsQuery2, GITHUB_ISSUE_URL_REGEX2, githubIssueUrlSchema2, transitionReportBody2, groupReportsBody2, holdReportBody2, clickhouseReadyResponse2, bootstrapQuery2, requestSnapshotChunkMessage2, MAX_NAME_LENGTH3, MAX_VALUE_LENGTH2, MAX_TAGS2, MAX_TAG_LENGTH2, MAX_SCOPE_HUBS2, MAX_SCOPE_TAGS2, vaultSecretScopeSchema2, vaultCreateBody2, vaultUpdateBody2, PERMISSIONS2, MAX_NAME_LENGTH22, MAX_HUBS_PER_GRANT2, MAX_HUB_TAGS_PER_GRANT2, MAX_GRANTS2, permissionEnum2, grantScopeSchema2, grantSchema2, createTokenBody2, tokenOrgIdParam2, tokenGrantScopeSchema2, tokenGrantSchema2, tokenMetadataSchema2, listTokensResponse2, createTokenResponse2, orgTokenSummarySchema2, listOrgTokensResponse2, invitePreviewQuery2, invitePreviewResponse2, discordTier2, discordBillingCycle2, discordMetadata2, discordOAuthStartResponse2, discordOAuthFinalizeBody2, discordOAuthFinalizeResponse2, discordDisconnectResponse2, jsonSchemaSchema2, hubUserIdentity2, stateValueEntry2, getHubUserContextResponse2, updateHubUserBody2, updateHubUserResponse2, unlockHubUserNameResponse2, stateResetParams2, stateResetResponse2, hubAlertsParam2, hubAlertSeverity2, hubAlert2, hubAlertsListResponse2, noticeSeveritySchema2, noticeStatusSchema2, NOTICE_SCOPE_REGEX2, noticeScopeSchema2, noticeLinkSchema2, createNoticeBody2, updateNoticeBody2, listNoticesQuery2, noticeIdParamSchema2, templateLocaleSchema2, TEMPLATE_SLUG_REGEX2, templateSlugSchema2, templateStatusSchema2, templateFileMapSchema2, templateTextSchema2, templateUsesEntrySchema2, templateUsesSchema2, templateYamlLocaleEntry2, templateYamlWayaiBlock2, templateTagsSchema2, templateYamlSchema2, templateHeroSchema2, templatePushLocaleSchema2, templatePushBody2, templateListQuery2, templateSlugParam2, templateDetailQuery2, ADMIN_SKILL_NAME_REGEX2, adminSkillNameParam2, WAYAI_WORKSPACE_LAYOUT;
10225
10210
  var init_dist = __esm({
10226
10211
  "../../packages/core/dist/index.js"() {
10227
10212
  "use strict";
@@ -10275,7 +10260,6 @@ var init_dist = __esm({
10275
10260
  init_zod();
10276
10261
  init_zod();
10277
10262
  init_zod();
10278
- init_zod();
10279
10263
  UUID_RE = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
10280
10264
  HEX_RE = /^[0-9a-f]{16,}$/;
10281
10265
  WORKOS_ID_RE = /^(?:user|org)_[0-9A-HJKMNP-TV-Z]{26}$/;
@@ -10553,6 +10537,8 @@ var init_dist = __esm({
10553
10537
  });
10554
10538
  SUMMARIZATION_THRESHOLD_MIN2 = 1e3;
10555
10539
  SUMMARIZATION_THRESHOLD_MAX2 = 1e6;
10540
+ PREVIOUS_CONVERSATIONS_MAX2 = 20;
10541
+ previousConversationsCountField2 = external_exports.number().int().min(0).max(PREVIOUS_CONVERSATIONS_MAX2).nullable().optional();
10556
10542
  summarizationThresholdField2 = external_exports.number().int().min(SUMMARIZATION_THRESHOLD_MIN2).max(SUMMARIZATION_THRESHOLD_MAX2).nullable().optional();
10557
10543
  monitorConfigField2 = external_exports.object({
10558
10544
  delay_seconds: external_exports.number().int().min(10),
@@ -10579,11 +10565,13 @@ var init_dist = __esm({
10579
10565
  agent_role: external_exports.enum(AGENT_ROLES2),
10580
10566
  additional_context_template: external_exports.string().max(2e4).optional(),
10581
10567
  summarization_threshold_tokens: summarizationThresholdField2,
10568
+ previous_conversations_count: previousConversationsCountField2,
10582
10569
  monitor_config: monitorConfigField2
10583
10570
  }).passthrough();
10584
10571
  updateAgentBody2 = external_exports.object({
10585
10572
  additional_context_template: external_exports.string().max(2e4).optional(),
10586
10573
  summarization_threshold_tokens: summarizationThresholdField2,
10574
+ previous_conversations_count: previousConversationsCountField2,
10587
10575
  monitor_config: monitorConfigField2
10588
10576
  }).passthrough();
10589
10577
  AGENT_PARAMETER_TYPES2 = ["string", "number", "boolean", "integer", "enum"];
@@ -12131,95 +12119,6 @@ var init_dist = __esm({
12131
12119
  /** Type-to-confirm value; must equal the user's email (constant-time compared). */
12132
12120
  email_confirmation: external_exports.string().min(1).max(320)
12133
12121
  });
12134
- templateLocaleSchema2 = external_exports.enum(SUPPORTED_LOCALES2);
12135
- TEMPLATE_SLUG_REGEX2 = /^[a-z0-9][a-z0-9-]{0,62}$/;
12136
- templateSlugSchema2 = external_exports.string().regex(TEMPLATE_SLUG_REGEX2, "slug must be lowercase alphanumeric with hyphens (max 63)");
12137
- templateStatusSchema2 = external_exports.enum(["published", "draft", "internal"]);
12138
- templateFileMapSchema2 = external_exports.record(external_exports.string()).refine((m) => Object.keys(m).every(isSafeTemplatePath2), {
12139
- message: 'file map contains an unsafe path (no absolute paths, "..", or backslashes)'
12140
- });
12141
- templateTextSchema2 = external_exports.object({
12142
- metaTitle: external_exports.string().min(1).max(200),
12143
- metaDescription: external_exports.string().max(1e3).default("")
12144
- });
12145
- templateUsesEntrySchema2 = external_exports.object({
12146
- backend: templateSlugSchema2,
12147
- endpoint: templateSlugSchema2
12148
- });
12149
- templateUsesSchema2 = external_exports.array(templateUsesEntrySchema2).max(24).default([]);
12150
- templateYamlLocaleEntry2 = templateTextSchema2.extend({ source: external_exports.string().min(1) });
12151
- templateYamlWayaiBlock2 = external_exports.object({
12152
- installCommand: external_exports.string().min(1).max(300),
12153
- locales: external_exports.record(templateLocaleSchema2, templateYamlLocaleEntry2)
12154
- });
12155
- templateTagsSchema2 = external_exports.array(external_exports.string().min(1).max(30)).max(12).default([]).transform((tags) => [...new Set(tags.map((t) => t.trim().toLowerCase()).filter(Boolean))]);
12156
- templateYamlSchema2 = external_exports.object({
12157
- slug: templateSlugSchema2,
12158
- category: external_exports.string().min(1).max(60),
12159
- tags: templateTagsSchema2,
12160
- status: templateStatusSchema2.default("draft"),
12161
- order: external_exports.number().int().min(0).max(1e5).optional(),
12162
- defaultLocale: templateLocaleSchema2,
12163
- hero: external_exports.string().optional(),
12164
- // relative path to a hero image inside the template folder
12165
- // The Rekor backend(s) this channel runs on (gh #2955). Locale-agnostic. The
12166
- // cross-link + MCP endpoint are derived from each entry's slugs, never authored.
12167
- uses: templateUsesSchema2,
12168
- // A WayAI template IS a WayAI channel — the wayai slice is required. (The old
12169
- // Rekor-only store entry is gone: a pure Rekor backend lives only in Rekor's store.)
12170
- wayai: templateYamlWayaiBlock2
12171
- }).refine((c) => Boolean(c.wayai.locales[c.defaultLocale]), {
12172
- message: "`wayai.locales` must include the defaultLocale"
12173
- });
12174
- templateHeroSchema2 = external_exports.object({
12175
- filename: external_exports.string().min(1).max(200).regex(/\.(png|jpe?g|webp|gif)$/i, "hero must be a raster image (png/jpg/webp/gif)"),
12176
- dataBase64: external_exports.string().min(1).max(8e6)
12177
- });
12178
- templatePushLocaleSchema2 = external_exports.object({
12179
- wayai: templateTextSchema2.optional(),
12180
- readmeMarkdown: external_exports.string().default(""),
12181
- wayaiFiles: templateFileMapSchema2.optional()
12182
- });
12183
- templatePushBody2 = external_exports.object({
12184
- slug: templateSlugSchema2,
12185
- defaultLocale: templateLocaleSchema2,
12186
- common: external_exports.object({
12187
- category: external_exports.string().min(1).max(60),
12188
- tags: templateTagsSchema2,
12189
- status: templateStatusSchema2,
12190
- order: external_exports.number().int().min(0).max(1e5).default(0),
12191
- // The WayAI install command (a WayAI template always has a wayai side). Kept
12192
- // optional on the wire so a malformed manifest 400s on the field, not the body.
12193
- installCommand: external_exports.string().min(1).max(300).optional(),
12194
- hero: templateHeroSchema2.optional(),
12195
- // The channel→backend edge (gh #2955), locale-agnostic.
12196
- uses: templateUsesSchema2
12197
- }),
12198
- locales: external_exports.record(templateLocaleSchema2, templatePushLocaleSchema2)
12199
- }).refine((b) => Boolean(b.locales[b.defaultLocale]), {
12200
- message: "`locales` must include the defaultLocale"
12201
- });
12202
- templateListQuery2 = external_exports.object({ locale: templateLocaleSchema2.optional() });
12203
- templateSlugParam2 = external_exports.object({ slug: templateSlugSchema2 });
12204
- templateDetailQuery2 = external_exports.object({ locale: templateLocaleSchema2.optional() });
12205
- courseQuizScoreSchema2 = external_exports.object({
12206
- correct: external_exports.number().int().min(0).max(50),
12207
- total: external_exports.number().int().min(1).max(50),
12208
- /** Chosen choice index per question; -1 = unanswered. */
12209
- answers: external_exports.array(external_exports.number().int().min(-1).max(50)).max(50).optional()
12210
- });
12211
- upsertCourseLessonBody2 = external_exports.object({
12212
- quiz_passed: external_exports.boolean().optional(),
12213
- quiz_score: courseQuizScoreSchema2.optional(),
12214
- content_version: external_exports.number().int().min(1)
12215
- }).strict();
12216
- linkCourseCapstoneBody2 = external_exports.object({
12217
- hub_id: external_exports.string().min(1).max(128),
12218
- // A capstone's slug IS a canonical template slug — reuse the one validator
12219
- // the template pipeline (CLI, admin, gallery) already enforces, so course
12220
- // linking can't drift from how real template slugs are shaped.
12221
- template_slug: templateSlugSchema2.optional()
12222
- }).strict();
12223
12122
  archiveHubIdParam2 = external_exports.object({
12224
12123
  hubId: external_exports.string().uuid()
12225
12124
  });
@@ -13692,6 +13591,77 @@ var init_dist = __esm({
13692
13591
  offset: external_exports.coerce.number().int().min(0).optional()
13693
13592
  });
13694
13593
  noticeIdParamSchema2 = external_exports.object({ id: external_exports.string().min(1) });
13594
+ templateLocaleSchema2 = external_exports.enum(SUPPORTED_LOCALES2);
13595
+ TEMPLATE_SLUG_REGEX2 = /^[a-z0-9][a-z0-9-]{0,62}$/;
13596
+ templateSlugSchema2 = external_exports.string().regex(TEMPLATE_SLUG_REGEX2, "slug must be lowercase alphanumeric with hyphens (max 63)");
13597
+ templateStatusSchema2 = external_exports.enum(["published", "draft", "internal"]);
13598
+ templateFileMapSchema2 = external_exports.record(external_exports.string()).refine((m) => Object.keys(m).every(isSafeTemplatePath2), {
13599
+ message: 'file map contains an unsafe path (no absolute paths, "..", or backslashes)'
13600
+ });
13601
+ templateTextSchema2 = external_exports.object({
13602
+ metaTitle: external_exports.string().min(1).max(200),
13603
+ metaDescription: external_exports.string().max(1e3).default("")
13604
+ });
13605
+ templateUsesEntrySchema2 = external_exports.object({
13606
+ backend: templateSlugSchema2,
13607
+ endpoint: templateSlugSchema2
13608
+ });
13609
+ templateUsesSchema2 = external_exports.array(templateUsesEntrySchema2).max(24).default([]);
13610
+ templateYamlLocaleEntry2 = templateTextSchema2.extend({ source: external_exports.string().min(1) });
13611
+ templateYamlWayaiBlock2 = external_exports.object({
13612
+ installCommand: external_exports.string().min(1).max(300),
13613
+ locales: external_exports.record(templateLocaleSchema2, templateYamlLocaleEntry2)
13614
+ });
13615
+ templateTagsSchema2 = external_exports.array(external_exports.string().min(1).max(30)).max(12).default([]).transform((tags) => [...new Set(tags.map((t) => t.trim().toLowerCase()).filter(Boolean))]);
13616
+ templateYamlSchema2 = external_exports.object({
13617
+ slug: templateSlugSchema2,
13618
+ category: external_exports.string().min(1).max(60),
13619
+ tags: templateTagsSchema2,
13620
+ status: templateStatusSchema2.default("draft"),
13621
+ order: external_exports.number().int().min(0).max(1e5).optional(),
13622
+ defaultLocale: templateLocaleSchema2,
13623
+ hero: external_exports.string().optional(),
13624
+ // relative path to a hero image inside the template folder
13625
+ // The Rekor backend(s) this channel runs on (gh #2955). Locale-agnostic. The
13626
+ // cross-link + MCP endpoint are derived from each entry's slugs, never authored.
13627
+ uses: templateUsesSchema2,
13628
+ // A WayAI template IS a WayAI channel — the wayai slice is required. (The old
13629
+ // Rekor-only store entry is gone: a pure Rekor backend lives only in Rekor's store.)
13630
+ wayai: templateYamlWayaiBlock2
13631
+ }).refine((c) => Boolean(c.wayai.locales[c.defaultLocale]), {
13632
+ message: "`wayai.locales` must include the defaultLocale"
13633
+ });
13634
+ templateHeroSchema2 = external_exports.object({
13635
+ filename: external_exports.string().min(1).max(200).regex(/\.(png|jpe?g|webp|gif)$/i, "hero must be a raster image (png/jpg/webp/gif)"),
13636
+ dataBase64: external_exports.string().min(1).max(8e6)
13637
+ });
13638
+ templatePushLocaleSchema2 = external_exports.object({
13639
+ wayai: templateTextSchema2.optional(),
13640
+ readmeMarkdown: external_exports.string().default(""),
13641
+ wayaiFiles: templateFileMapSchema2.optional()
13642
+ });
13643
+ templatePushBody2 = external_exports.object({
13644
+ slug: templateSlugSchema2,
13645
+ defaultLocale: templateLocaleSchema2,
13646
+ common: external_exports.object({
13647
+ category: external_exports.string().min(1).max(60),
13648
+ tags: templateTagsSchema2,
13649
+ status: templateStatusSchema2,
13650
+ order: external_exports.number().int().min(0).max(1e5).default(0),
13651
+ // The WayAI install command (a WayAI template always has a wayai side). Kept
13652
+ // optional on the wire so a malformed manifest 400s on the field, not the body.
13653
+ installCommand: external_exports.string().min(1).max(300).optional(),
13654
+ hero: templateHeroSchema2.optional(),
13655
+ // The channel→backend edge (gh #2955), locale-agnostic.
13656
+ uses: templateUsesSchema2
13657
+ }),
13658
+ locales: external_exports.record(templateLocaleSchema2, templatePushLocaleSchema2)
13659
+ }).refine((b) => Boolean(b.locales[b.defaultLocale]), {
13660
+ message: "`locales` must include the defaultLocale"
13661
+ });
13662
+ templateListQuery2 = external_exports.object({ locale: templateLocaleSchema2.optional() });
13663
+ templateSlugParam2 = external_exports.object({ slug: templateSlugSchema2 });
13664
+ templateDetailQuery2 = external_exports.object({ locale: templateLocaleSchema2.optional() });
13695
13665
  ADMIN_SKILL_NAME_REGEX2 = /^[a-z0-9][a-z0-9-]{0,63}$/;
13696
13666
  adminSkillNameParam2 = external_exports.object({
13697
13667
  name: external_exports.string().regex(ADMIN_SKILL_NAME_REGEX2, "invalid skill name")