@wayai/cli 0.3.129 → 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
@@ -5004,43 +5004,14 @@ function collectTurnAttachmentHashes(turn) {
5004
5004
  }
5005
5005
  return hashes;
5006
5006
  }
5007
- function isSafeTemplatePath(path31) {
5008
- if (path31.length === 0 || path31.length > 300) return false;
5009
- if (path31.startsWith("/") || path31.includes("\\")) return false;
5010
- const segments = path31.split("/");
5011
- return segments.every(
5012
- (seg) => seg.length > 0 && seg !== "." && seg !== ".." && /^[A-Za-z0-9._-]+$/.test(seg)
5013
- );
5014
- }
5015
- function dropTemplateKeys(value, drop) {
5016
- if (Array.isArray(value)) return value.map((v) => dropTemplateKeys(v, drop));
5017
- if (isPlainObject(value)) {
5018
- const out = {};
5019
- for (const [key, child] of Object.entries(value)) {
5020
- if (drop.has(key)) continue;
5021
- out[key] = TEMPLATE_OPAQUE_BLOB_KEYS.has(key) ? child : dropTemplateKeys(child, drop);
5022
- }
5023
- return out;
5024
- }
5025
- return value;
5026
- }
5027
- function stripTemplateInstanceIds(value) {
5028
- return dropTemplateKeys(value, TEMPLATE_INSTANCE_ID_KEYS);
5029
- }
5030
- function excludeTemplateAuthorData(value) {
5031
- return dropTemplateKeys(value, TEMPLATE_AUTHOR_DATA_KEYS);
5032
- }
5033
- function isPlainObject(value) {
5034
- if (value === null || typeof value !== "object") return false;
5035
- const proto = Object.getPrototypeOf(value);
5036
- return proto === Object.prototype || proto === null;
5007
+ function evaluatedRunCount(counts) {
5008
+ return counts.successful_runs + (counts.assertion_failure_runs ?? counts.failed_runs);
5037
5009
  }
5038
- function isSanitizableSliceFile(path31) {
5039
- if (!/\.ya?ml$/i.test(path31)) return false;
5040
- return path31 !== "resources" && !path31.startsWith("resources/");
5010
+ function unprovenRunCount(counts) {
5011
+ return (counts.errored_runs ?? 0) + (counts.invalid_runs ?? 0);
5041
5012
  }
5042
- function distinctUsesBackends(uses) {
5043
- return [...new Set((uses ?? []).map((u) => u.backend))];
5013
+ function terminalRunCount(counts) {
5014
+ return counts.successful_runs + counts.failed_runs;
5044
5015
  }
5045
5016
  function refineHubAsCodeCustomTools(config, ctx) {
5046
5017
  const agents = config.agents;
@@ -5328,7 +5299,45 @@ function refineHubAsCodeDelegation(config, ctx) {
5328
5299
  });
5329
5300
  });
5330
5301
  }
5331
- 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;
5332
5341
  var init_contracts = __esm({
5333
5342
  "../../packages/core/dist/contracts/index.js"() {
5334
5343
  "use strict";
@@ -5382,7 +5391,6 @@ var init_contracts = __esm({
5382
5391
  init_zod();
5383
5392
  init_zod();
5384
5393
  init_zod();
5385
- init_zod();
5386
5394
  uuidSchema = external_exports.string().uuid();
5387
5395
  paginationSchema = external_exports.object({
5388
5396
  limit: external_exports.coerce.number().int().min(1).max(100).default(50),
@@ -5503,6 +5511,8 @@ var init_contracts = __esm({
5503
5511
  SUPPORTED_LOCALES = ["en", "pt", "es"];
5504
5512
  SUMMARIZATION_THRESHOLD_MIN = 1e3;
5505
5513
  SUMMARIZATION_THRESHOLD_MAX = 1e6;
5514
+ PREVIOUS_CONVERSATIONS_MAX = 20;
5515
+ previousConversationsCountField = external_exports.number().int().min(0).max(PREVIOUS_CONVERSATIONS_MAX).nullable().optional();
5506
5516
  summarizationThresholdField = external_exports.number().int().min(SUMMARIZATION_THRESHOLD_MIN).max(SUMMARIZATION_THRESHOLD_MAX).nullable().optional();
5507
5517
  monitorConfigField = external_exports.object({
5508
5518
  delay_seconds: external_exports.number().int().min(10),
@@ -5529,11 +5539,13 @@ var init_contracts = __esm({
5529
5539
  agent_role: external_exports.enum(AGENT_ROLES),
5530
5540
  additional_context_template: external_exports.string().max(2e4).optional(),
5531
5541
  summarization_threshold_tokens: summarizationThresholdField,
5542
+ previous_conversations_count: previousConversationsCountField,
5532
5543
  monitor_config: monitorConfigField
5533
5544
  }).passthrough();
5534
5545
  updateAgentBody = external_exports.object({
5535
5546
  additional_context_template: external_exports.string().max(2e4).optional(),
5536
5547
  summarization_threshold_tokens: summarizationThresholdField,
5548
+ previous_conversations_count: previousConversationsCountField,
5537
5549
  monitor_config: monitorConfigField
5538
5550
  }).passthrough();
5539
5551
  AGENT_PARAMETER_TYPES = ["string", "number", "boolean", "integer", "enum"];
@@ -6869,7 +6881,17 @@ var init_contracts = __esm({
6869
6881
  total_evals: external_exports.number(),
6870
6882
  total_runs: external_exports.number(),
6871
6883
  successful_runs: external_exports.number(),
6884
+ /**
6885
+ * Every terminal run that did NOT pass, whatever the reason. Unchanged
6886
+ * meaning — deliberately NOT narrowed to behavioral misses, so a released CLI
6887
+ * that predates the split cannot read an infrastructure wipeout as a clean
6888
+ * sweep. Use `assertion_failure_runs` for the narrow count.
6889
+ */
6872
6890
  failed_runs: external_exports.number(),
6891
+ /** The `failed_runs` breakdown by cause (see `EvalRunOutcomeKind`); sums to it. */
6892
+ assertion_failure_runs: external_exports.number(),
6893
+ errored_runs: external_exports.number(),
6894
+ invalid_runs: external_exports.number(),
6873
6895
  created_by: external_exports.string(),
6874
6896
  /** Optional — sessions created pre-PR2 may not have this. */
6875
6897
  scenario_set_id: external_exports.string().nullable().optional(),
@@ -7072,153 +7094,6 @@ var init_contracts = __esm({
7072
7094
  /** Type-to-confirm value; must equal the user's email (constant-time compared). */
7073
7095
  email_confirmation: external_exports.string().min(1).max(320)
7074
7096
  });
7075
- templateLocaleSchema = external_exports.enum(SUPPORTED_LOCALES);
7076
- TEMPLATE_SLUG_REGEX = /^[a-z0-9][a-z0-9-]{0,62}$/;
7077
- templateSlugSchema = external_exports.string().regex(TEMPLATE_SLUG_REGEX, "slug must be lowercase alphanumeric with hyphens (max 63)");
7078
- templateStatusSchema = external_exports.enum(["published", "draft", "internal"]);
7079
- templateFileMapSchema = external_exports.record(external_exports.string()).refine((m) => Object.keys(m).every(isSafeTemplatePath), {
7080
- message: 'file map contains an unsafe path (no absolute paths, "..", or backslashes)'
7081
- });
7082
- TEMPLATE_INSTANCE_ID_KEYS = /* @__PURE__ */ new Set([
7083
- // Top-level hub instance metadata (hub.yaml) — set by `wayai pull`, never authored.
7084
- "hub_id",
7085
- "hub_environment",
7086
- "preview_label",
7087
- "branch_name",
7088
- // Per-entity row id + cross-entity reference UUIDs (each has a portable name twin).
7089
- "id",
7090
- "connection_id",
7091
- "target_id",
7092
- "agent_id",
7093
- "resource_id",
7094
- "list_id",
7095
- // Account-scoped Meta WhatsApp template id (name twin: `template_whatsapp`).
7096
- "template_whatsapp_id"
7097
- ]);
7098
- TEMPLATE_OPAQUE_BLOB_KEYS = /* @__PURE__ */ new Set([
7099
- "settings",
7100
- // agent + connection connector settings
7101
- "schema_json",
7102
- // agent response_format JSON Schema
7103
- "json_schema",
7104
- // state JSON Schema
7105
- "initial_value",
7106
- // state seed value
7107
- "additional_context_schema",
7108
- // kanban-status transition-form schema
7109
- "config",
7110
- // custom-tool OpenAI function schema
7111
- "headers",
7112
- "query_params",
7113
- "body_params",
7114
- // custom-tool HTTP shaping
7115
- "mappings",
7116
- // composed-tool argument mappings
7117
- "input",
7118
- "expected",
7119
- "history",
7120
- // eval message fixtures (tool_calls carry their own `id`)
7121
- "transcript",
7122
- "step_config"
7123
- // journey fixtures (transcript carries `step_id`; step_config is keyed by it)
7124
- ]);
7125
- TEMPLATE_AUTHOR_DATA_KEYS = /* @__PURE__ */ new Set([
7126
- // Outbound campaign subsystem (hub.yaml top-level). `outbound_contacts` is the
7127
- // author's real leads — `phone`/`email`/`instagram_sid` + the required `name` are
7128
- // GDPR-grade PII. `outbound_lists` group those contacts by real name. `outbound_schedules`
7129
- // bind to the (now-absent) lists and carry the author's campaign cadence + message
7130
- // copy — operationally tied to the author's customers; a consumer builds their own.
7131
- "outbound_contacts",
7132
- "outbound_lists",
7133
- "outbound_schedules",
7134
- // Account-scoped channel identifier on a connection (Twilio SID / WhatsApp number /
7135
- // IG username / from-email, per connector). The connection stays as portable
7136
- // structure re-bound by name on push; this author-account value carries no blueprint
7137
- // value. A dedicated top-level column — never nested in the `settings` opaque blob.
7138
- "account_sid"
7139
- ]);
7140
- templateTextSchema = external_exports.object({
7141
- metaTitle: external_exports.string().min(1).max(200),
7142
- metaDescription: external_exports.string().max(1e3).default("")
7143
- });
7144
- templateUsesEntrySchema = external_exports.object({
7145
- backend: templateSlugSchema,
7146
- endpoint: templateSlugSchema
7147
- });
7148
- templateUsesSchema = external_exports.array(templateUsesEntrySchema).max(24).default([]);
7149
- templateYamlLocaleEntry = templateTextSchema.extend({ source: external_exports.string().min(1) });
7150
- templateYamlWayaiBlock = external_exports.object({
7151
- installCommand: external_exports.string().min(1).max(300),
7152
- locales: external_exports.record(templateLocaleSchema, templateYamlLocaleEntry)
7153
- });
7154
- 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))]);
7155
- templateYamlSchema = external_exports.object({
7156
- slug: templateSlugSchema,
7157
- category: external_exports.string().min(1).max(60),
7158
- tags: templateTagsSchema,
7159
- status: templateStatusSchema.default("draft"),
7160
- order: external_exports.number().int().min(0).max(1e5).optional(),
7161
- defaultLocale: templateLocaleSchema,
7162
- hero: external_exports.string().optional(),
7163
- // relative path to a hero image inside the template folder
7164
- // The Rekor backend(s) this channel runs on (gh #2955). Locale-agnostic. The
7165
- // cross-link + MCP endpoint are derived from each entry's slugs, never authored.
7166
- uses: templateUsesSchema,
7167
- // A WayAI template IS a WayAI channel — the wayai slice is required. (The old
7168
- // Rekor-only store entry is gone: a pure Rekor backend lives only in Rekor's store.)
7169
- wayai: templateYamlWayaiBlock
7170
- }).refine((c) => Boolean(c.wayai.locales[c.defaultLocale]), {
7171
- message: "`wayai.locales` must include the defaultLocale"
7172
- });
7173
- templateHeroSchema = external_exports.object({
7174
- 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)"),
7175
- dataBase64: external_exports.string().min(1).max(8e6)
7176
- });
7177
- templatePushLocaleSchema = external_exports.object({
7178
- wayai: templateTextSchema.optional(),
7179
- readmeMarkdown: external_exports.string().default(""),
7180
- wayaiFiles: templateFileMapSchema.optional()
7181
- });
7182
- templatePushBody = external_exports.object({
7183
- slug: templateSlugSchema,
7184
- defaultLocale: templateLocaleSchema,
7185
- common: external_exports.object({
7186
- category: external_exports.string().min(1).max(60),
7187
- tags: templateTagsSchema,
7188
- status: templateStatusSchema,
7189
- order: external_exports.number().int().min(0).max(1e5).default(0),
7190
- // The WayAI install command (a WayAI template always has a wayai side). Kept
7191
- // optional on the wire so a malformed manifest 400s on the field, not the body.
7192
- installCommand: external_exports.string().min(1).max(300).optional(),
7193
- hero: templateHeroSchema.optional(),
7194
- // The channel→backend edge (gh #2955), locale-agnostic.
7195
- uses: templateUsesSchema
7196
- }),
7197
- locales: external_exports.record(templateLocaleSchema, templatePushLocaleSchema)
7198
- }).refine((b) => Boolean(b.locales[b.defaultLocale]), {
7199
- message: "`locales` must include the defaultLocale"
7200
- });
7201
- templateListQuery = external_exports.object({ locale: templateLocaleSchema.optional() });
7202
- templateSlugParam = external_exports.object({ slug: templateSlugSchema });
7203
- templateDetailQuery = external_exports.object({ locale: templateLocaleSchema.optional() });
7204
- courseQuizScoreSchema = external_exports.object({
7205
- correct: external_exports.number().int().min(0).max(50),
7206
- total: external_exports.number().int().min(1).max(50),
7207
- /** Chosen choice index per question; -1 = unanswered. */
7208
- answers: external_exports.array(external_exports.number().int().min(-1).max(50)).max(50).optional()
7209
- });
7210
- upsertCourseLessonBody = external_exports.object({
7211
- quiz_passed: external_exports.boolean().optional(),
7212
- quiz_score: courseQuizScoreSchema.optional(),
7213
- content_version: external_exports.number().int().min(1)
7214
- }).strict();
7215
- linkCourseCapstoneBody = external_exports.object({
7216
- hub_id: external_exports.string().min(1).max(128),
7217
- // A capstone's slug IS a canonical template slug — reuse the one validator
7218
- // the template pipeline (CLI, admin, gallery) already enforces, so course
7219
- // linking can't drift from how real template slugs are shaped.
7220
- template_slug: templateSlugSchema.optional()
7221
- }).strict();
7222
7097
  archiveHubIdParam = external_exports.object({
7223
7098
  hubId: external_exports.string().uuid()
7224
7099
  });
@@ -8691,6 +8566,135 @@ var init_contracts = __esm({
8691
8566
  offset: external_exports.coerce.number().int().min(0).optional()
8692
8567
  });
8693
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() });
8694
8698
  ADMIN_SKILL_NAME_REGEX = /^[a-z0-9][a-z0-9-]{0,63}$/;
8695
8699
  adminSkillNameParam = external_exports.object({
8696
8700
  name: external_exports.string().regex(ADMIN_SKILL_NAME_REGEX, "invalid skill name")
@@ -9843,14 +9847,6 @@ function collectTurnAttachmentHashes2(turn) {
9843
9847
  }
9844
9848
  return hashes;
9845
9849
  }
9846
- function isSafeTemplatePath2(path31) {
9847
- if (path31.length === 0 || path31.length > 300) return false;
9848
- if (path31.startsWith("/") || path31.includes("\\")) return false;
9849
- const segments = path31.split("/");
9850
- return segments.every(
9851
- (seg) => seg.length > 0 && seg !== "." && seg !== ".." && /^[A-Za-z0-9._-]+$/.test(seg)
9852
- );
9853
- }
9854
9850
  function foldDiacritics(input) {
9855
9851
  return input.normalize("NFKD").replace(/[̀-ͯ]/g, "");
9856
9852
  }
@@ -10163,6 +10159,14 @@ function refineHubAsCodeDelegation2(config, ctx) {
10163
10159
  });
10164
10160
  });
10165
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
+ }
10166
10170
  function identifyTokenType(token) {
10167
10171
  if (token.startsWith("way_")) return "way_token";
10168
10172
  if (token.startsWith("eyJ")) return "jwt";
@@ -10202,7 +10206,7 @@ function findStepBoundaries(transcript) {
10202
10206
  }
10203
10207
  return out;
10204
10208
  }
10205
- 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;
10206
10210
  var init_dist = __esm({
10207
10211
  "../../packages/core/dist/index.js"() {
10208
10212
  "use strict";
@@ -10256,7 +10260,6 @@ var init_dist = __esm({
10256
10260
  init_zod();
10257
10261
  init_zod();
10258
10262
  init_zod();
10259
- init_zod();
10260
10263
  UUID_RE = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
10261
10264
  HEX_RE = /^[0-9a-f]{16,}$/;
10262
10265
  WORKOS_ID_RE = /^(?:user|org)_[0-9A-HJKMNP-TV-Z]{26}$/;
@@ -10534,6 +10537,8 @@ var init_dist = __esm({
10534
10537
  });
10535
10538
  SUMMARIZATION_THRESHOLD_MIN2 = 1e3;
10536
10539
  SUMMARIZATION_THRESHOLD_MAX2 = 1e6;
10540
+ PREVIOUS_CONVERSATIONS_MAX2 = 20;
10541
+ previousConversationsCountField2 = external_exports.number().int().min(0).max(PREVIOUS_CONVERSATIONS_MAX2).nullable().optional();
10537
10542
  summarizationThresholdField2 = external_exports.number().int().min(SUMMARIZATION_THRESHOLD_MIN2).max(SUMMARIZATION_THRESHOLD_MAX2).nullable().optional();
10538
10543
  monitorConfigField2 = external_exports.object({
10539
10544
  delay_seconds: external_exports.number().int().min(10),
@@ -10560,11 +10565,13 @@ var init_dist = __esm({
10560
10565
  agent_role: external_exports.enum(AGENT_ROLES2),
10561
10566
  additional_context_template: external_exports.string().max(2e4).optional(),
10562
10567
  summarization_threshold_tokens: summarizationThresholdField2,
10568
+ previous_conversations_count: previousConversationsCountField2,
10563
10569
  monitor_config: monitorConfigField2
10564
10570
  }).passthrough();
10565
10571
  updateAgentBody2 = external_exports.object({
10566
10572
  additional_context_template: external_exports.string().max(2e4).optional(),
10567
10573
  summarization_threshold_tokens: summarizationThresholdField2,
10574
+ previous_conversations_count: previousConversationsCountField2,
10568
10575
  monitor_config: monitorConfigField2
10569
10576
  }).passthrough();
10570
10577
  AGENT_PARAMETER_TYPES2 = ["string", "number", "boolean", "integer", "enum"];
@@ -11900,7 +11907,17 @@ var init_dist = __esm({
11900
11907
  total_evals: external_exports.number(),
11901
11908
  total_runs: external_exports.number(),
11902
11909
  successful_runs: external_exports.number(),
11910
+ /**
11911
+ * Every terminal run that did NOT pass, whatever the reason. Unchanged
11912
+ * meaning — deliberately NOT narrowed to behavioral misses, so a released CLI
11913
+ * that predates the split cannot read an infrastructure wipeout as a clean
11914
+ * sweep. Use `assertion_failure_runs` for the narrow count.
11915
+ */
11903
11916
  failed_runs: external_exports.number(),
11917
+ /** The `failed_runs` breakdown by cause (see `EvalRunOutcomeKind`); sums to it. */
11918
+ assertion_failure_runs: external_exports.number(),
11919
+ errored_runs: external_exports.number(),
11920
+ invalid_runs: external_exports.number(),
11904
11921
  created_by: external_exports.string(),
11905
11922
  /** Optional — sessions created pre-PR2 may not have this. */
11906
11923
  scenario_set_id: external_exports.string().nullable().optional(),
@@ -12102,95 +12119,6 @@ var init_dist = __esm({
12102
12119
  /** Type-to-confirm value; must equal the user's email (constant-time compared). */
12103
12120
  email_confirmation: external_exports.string().min(1).max(320)
12104
12121
  });
12105
- templateLocaleSchema2 = external_exports.enum(SUPPORTED_LOCALES2);
12106
- TEMPLATE_SLUG_REGEX2 = /^[a-z0-9][a-z0-9-]{0,62}$/;
12107
- templateSlugSchema2 = external_exports.string().regex(TEMPLATE_SLUG_REGEX2, "slug must be lowercase alphanumeric with hyphens (max 63)");
12108
- templateStatusSchema2 = external_exports.enum(["published", "draft", "internal"]);
12109
- templateFileMapSchema2 = external_exports.record(external_exports.string()).refine((m) => Object.keys(m).every(isSafeTemplatePath2), {
12110
- message: 'file map contains an unsafe path (no absolute paths, "..", or backslashes)'
12111
- });
12112
- templateTextSchema2 = external_exports.object({
12113
- metaTitle: external_exports.string().min(1).max(200),
12114
- metaDescription: external_exports.string().max(1e3).default("")
12115
- });
12116
- templateUsesEntrySchema2 = external_exports.object({
12117
- backend: templateSlugSchema2,
12118
- endpoint: templateSlugSchema2
12119
- });
12120
- templateUsesSchema2 = external_exports.array(templateUsesEntrySchema2).max(24).default([]);
12121
- templateYamlLocaleEntry2 = templateTextSchema2.extend({ source: external_exports.string().min(1) });
12122
- templateYamlWayaiBlock2 = external_exports.object({
12123
- installCommand: external_exports.string().min(1).max(300),
12124
- locales: external_exports.record(templateLocaleSchema2, templateYamlLocaleEntry2)
12125
- });
12126
- 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))]);
12127
- templateYamlSchema2 = external_exports.object({
12128
- slug: templateSlugSchema2,
12129
- category: external_exports.string().min(1).max(60),
12130
- tags: templateTagsSchema2,
12131
- status: templateStatusSchema2.default("draft"),
12132
- order: external_exports.number().int().min(0).max(1e5).optional(),
12133
- defaultLocale: templateLocaleSchema2,
12134
- hero: external_exports.string().optional(),
12135
- // relative path to a hero image inside the template folder
12136
- // The Rekor backend(s) this channel runs on (gh #2955). Locale-agnostic. The
12137
- // cross-link + MCP endpoint are derived from each entry's slugs, never authored.
12138
- uses: templateUsesSchema2,
12139
- // A WayAI template IS a WayAI channel — the wayai slice is required. (The old
12140
- // Rekor-only store entry is gone: a pure Rekor backend lives only in Rekor's store.)
12141
- wayai: templateYamlWayaiBlock2
12142
- }).refine((c) => Boolean(c.wayai.locales[c.defaultLocale]), {
12143
- message: "`wayai.locales` must include the defaultLocale"
12144
- });
12145
- templateHeroSchema2 = external_exports.object({
12146
- 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)"),
12147
- dataBase64: external_exports.string().min(1).max(8e6)
12148
- });
12149
- templatePushLocaleSchema2 = external_exports.object({
12150
- wayai: templateTextSchema2.optional(),
12151
- readmeMarkdown: external_exports.string().default(""),
12152
- wayaiFiles: templateFileMapSchema2.optional()
12153
- });
12154
- templatePushBody2 = external_exports.object({
12155
- slug: templateSlugSchema2,
12156
- defaultLocale: templateLocaleSchema2,
12157
- common: external_exports.object({
12158
- category: external_exports.string().min(1).max(60),
12159
- tags: templateTagsSchema2,
12160
- status: templateStatusSchema2,
12161
- order: external_exports.number().int().min(0).max(1e5).default(0),
12162
- // The WayAI install command (a WayAI template always has a wayai side). Kept
12163
- // optional on the wire so a malformed manifest 400s on the field, not the body.
12164
- installCommand: external_exports.string().min(1).max(300).optional(),
12165
- hero: templateHeroSchema2.optional(),
12166
- // The channel→backend edge (gh #2955), locale-agnostic.
12167
- uses: templateUsesSchema2
12168
- }),
12169
- locales: external_exports.record(templateLocaleSchema2, templatePushLocaleSchema2)
12170
- }).refine((b) => Boolean(b.locales[b.defaultLocale]), {
12171
- message: "`locales` must include the defaultLocale"
12172
- });
12173
- templateListQuery2 = external_exports.object({ locale: templateLocaleSchema2.optional() });
12174
- templateSlugParam2 = external_exports.object({ slug: templateSlugSchema2 });
12175
- templateDetailQuery2 = external_exports.object({ locale: templateLocaleSchema2.optional() });
12176
- courseQuizScoreSchema2 = external_exports.object({
12177
- correct: external_exports.number().int().min(0).max(50),
12178
- total: external_exports.number().int().min(1).max(50),
12179
- /** Chosen choice index per question; -1 = unanswered. */
12180
- answers: external_exports.array(external_exports.number().int().min(-1).max(50)).max(50).optional()
12181
- });
12182
- upsertCourseLessonBody2 = external_exports.object({
12183
- quiz_passed: external_exports.boolean().optional(),
12184
- quiz_score: courseQuizScoreSchema2.optional(),
12185
- content_version: external_exports.number().int().min(1)
12186
- }).strict();
12187
- linkCourseCapstoneBody2 = external_exports.object({
12188
- hub_id: external_exports.string().min(1).max(128),
12189
- // A capstone's slug IS a canonical template slug — reuse the one validator
12190
- // the template pipeline (CLI, admin, gallery) already enforces, so course
12191
- // linking can't drift from how real template slugs are shaped.
12192
- template_slug: templateSlugSchema2.optional()
12193
- }).strict();
12194
12122
  archiveHubIdParam2 = external_exports.object({
12195
12123
  hubId: external_exports.string().uuid()
12196
12124
  });
@@ -13663,6 +13591,77 @@ var init_dist = __esm({
13663
13591
  offset: external_exports.coerce.number().int().min(0).optional()
13664
13592
  });
13665
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() });
13666
13665
  ADMIN_SKILL_NAME_REGEX2 = /^[a-z0-9][a-z0-9-]{0,63}$/;
13667
13666
  adminSkillNameParam2 = external_exports.object({
13668
13667
  name: external_exports.string().regex(ADMIN_SKILL_NAME_REGEX2, "invalid skill name")
@@ -18799,15 +18798,24 @@ var init_send_message = __esm({
18799
18798
  });
18800
18799
 
18801
18800
  // src/lib/eval-format.ts
18801
+ function runNotes(unproven, inProgress) {
18802
+ return [
18803
+ unproven > 0 ? `${unproven} unproven` : "",
18804
+ inProgress > 0 ? `${inProgress} in progress` : ""
18805
+ ].filter(Boolean);
18806
+ }
18802
18807
  function printResultsTable(results, mode) {
18803
18808
  let totalPassed = 0;
18804
- let totalTerminal = 0;
18809
+ let totalEvaluated = 0;
18810
+ let totalUnproven = 0;
18805
18811
  let totalInProgress = 0;
18806
18812
  for (const r of results) {
18807
18813
  const evalName = r.eval?.eval_name || r.eval_id.slice(0, 8);
18808
- const terminalRuns = r.successful_runs + r.failed_runs;
18814
+ const evaluatedRuns = evaluatedRunCount(r);
18815
+ const unproven = unprovenRunCount(r);
18809
18816
  const inProgress = (r.running_runs ?? 0) + (r.pending_runs ?? 0);
18810
- const passed = inProgress > 0 ? `${r.successful_runs}/${terminalRuns} passed (+${inProgress} in progress)` : `${r.successful_runs}/${terminalRuns} passed`;
18817
+ const notes2 = runNotes(unproven, inProgress);
18818
+ const passed = notes2.length > 0 ? `${r.successful_runs}/${evaluatedRuns} passed (${notes2.join(", ")})` : `${r.successful_runs}/${evaluatedRuns} passed`;
18811
18819
  const avgTime = r.avg_execution_time_ms != null ? `avg ${(r.avg_execution_time_ms / 1e3).toFixed(1)}s` : "";
18812
18820
  let scoresStr = "";
18813
18821
  if (r.aggregated_scores) {
@@ -18818,13 +18826,15 @@ function printResultsTable(results, mode) {
18818
18826
  }
18819
18827
  console.log(` ${evalName.padEnd(20)} ${passed.padEnd(14)} ${avgTime}${scoresStr}`);
18820
18828
  totalPassed += r.successful_runs;
18821
- totalTerminal += terminalRuns;
18829
+ totalEvaluated += evaluatedRuns;
18830
+ totalUnproven += unproven;
18822
18831
  totalInProgress += inProgress;
18823
18832
  }
18824
- const pct = totalTerminal > 0 ? (totalPassed / totalTerminal * 100).toFixed(1) : "0.0";
18825
- const inProgressNote = totalInProgress > 0 ? ` \u2014 ${totalInProgress} in progress` : "";
18833
+ const pct = totalEvaluated > 0 ? (totalPassed / totalEvaluated * 100).toFixed(1) : "0.0";
18834
+ const notes = runNotes(totalUnproven, totalInProgress);
18835
+ const note = notes.length > 0 ? ` \u2014 ${notes.join(", ")}` : "";
18826
18836
  console.log(`
18827
- Overall: ${totalPassed}/${totalTerminal} passed (${pct}%)${inProgressNote}`);
18837
+ Overall: ${totalPassed}/${totalEvaluated} passed (${pct}%)${note}`);
18828
18838
  }
18829
18839
  function truncate(str, maxLen) {
18830
18840
  if (str.length <= maxLen) return str;
@@ -18846,6 +18856,17 @@ function isFailingRun(run) {
18846
18856
  if (run.run_status && !TERMINAL_RUN_STATUSES.has(run.run_status)) return false;
18847
18857
  return run.response_match !== true;
18848
18858
  }
18859
+ function failureTag(run) {
18860
+ switch (run.outcome_kind) {
18861
+ case "execution_error":
18862
+ return "ERROR";
18863
+ case "evaluation_invalid":
18864
+ return "INVALID";
18865
+ // `assertion_failure`, and any pre-taxonomy payload.
18866
+ default:
18867
+ return "FAIL";
18868
+ }
18869
+ }
18849
18870
  function printFailingRuns(runs) {
18850
18871
  const failing = runs.filter(isFailingRun);
18851
18872
  if (failing.length === 0) return;
@@ -18854,7 +18875,7 @@ Failures (${failing.length}):`);
18854
18875
  let anyComment = false;
18855
18876
  for (const run of failing) {
18856
18877
  const evalName = run.eval?.eval_name || run.eval_id?.slice(0, 8) || "eval";
18857
- console.log(` ${evalName} \u2014 Run #${run.run_number} [FAIL]`);
18878
+ console.log(` ${evalName} \u2014 Run #${run.run_number} [${failureTag(run)}]`);
18858
18879
  if (run.error_message) {
18859
18880
  console.log(` Error: ${run.error_message}`);
18860
18881
  }
@@ -18876,6 +18897,7 @@ var NO_EVALUATOR_NOTES_HINT, TERMINAL_RUN_STATUSES;
18876
18897
  var init_eval_format = __esm({
18877
18898
  "src/lib/eval-format.ts"() {
18878
18899
  "use strict";
18900
+ init_contracts();
18879
18901
  NO_EVALUATOR_NOTES_HINT = "No evaluator notes found \u2014 add a `notes` evaluation variable to the message_evaluator agent to surface its reasoning here.";
18880
18902
  TERMINAL_RUN_STATUSES = /* @__PURE__ */ new Set(["completed", "failed"]);
18881
18903
  }
@@ -20261,7 +20283,7 @@ Lost connection to the eval session: ${extractApiMessage(err)}`);
20261
20283
  const session = details.data.session;
20262
20284
  const results = details.data.results;
20263
20285
  const totalRuns = results.reduce((sum, r) => sum + r.total_runs, 0);
20264
- const completedRuns = results.reduce((sum, r) => sum + r.successful_runs + r.failed_runs, 0);
20286
+ const completedRuns = results.reduce((sum, r) => sum + terminalRunCount(r), 0);
20265
20287
  if (TERMINAL_STATUSES.has(session.session_status)) {
20266
20288
  if (await signalController.interrupted()) return;
20267
20289
  console.log("");