import {z} from 'zod' export type GetApiApiV1AiAgentsAdminReviewItemsFingerprintArgs = {fingerprint: string}; export type GetApiApiV1AiAgentsAdminReviewItemsFingerprintOptions = {baseUrl: string, fetch?: typeof fetch | undefined}; export const aiAgentReviewItemWritebackStatus = z.enum(["queued", "running", "completed", "failed"]); export const aiAgentReviewItemPrState = z.enum(["open", "merged", "closed"]); export const aiAgentReviewItemOwnerType = z.enum(["semantic_layer_owner", "agent_admin", "product", "support", "unknown"]); export const aiAgentReviewItemDismissedReason = z.enum(["not_actionable", "expected_behavior", "duplicate", "low_confidence", "other"]); export const aiAgentReviewItemStatus = z.enum(["triage", "open", "in_progress", "resolved", "dismissed", "duplicate"]); export const aiAgentSemanticTargetRef = z.union([z.object({modelName: z.string(), type: z.literal("model")}), z.object({exploreName: z.string(), modelName: z.string(), type: z.literal("explore")}), z.object({exploreName: z.string().optional(), joinName: z.string(), modelName: z.string(), type: z.literal("join")}), z.object({dimensionName: z.string(), modelName: z.string(), type: z.literal("dimension")}), z.object({dimensionName: z.string().optional(), metricName: z.string(), modelName: z.string(), type: z.literal("metric")}), z.object({dimensionName: z.string(), parentDimensionName: z.string(), modelName: z.string(), type: z.literal("additional_dimension")}), z.object({fieldName: z.string(), exploreName: z.string(), modelName: z.string(), type: z.literal("required_filter")}), z.object({targetName: z.string(), targetType: z.enum(["model", "dimension", "metric"]), modelName: z.string(), type: z.literal("ai_hint")})]); export const aiAgentConfigurationSetting = z.enum(["instructions", "knowledge_documents", "data_access", "self_improvement", "sql_mode", "mcp_servers", "explore_tags", "space_access", "user_or_group_access", "unknown"]); export const aiAgentTargetRef = z.union([aiAgentSemanticTargetRef, z.object({agentUuid: z.string(), type: z.literal("agent")}), z.object({setting: aiAgentConfigurationSetting, type: z.literal("agent_config")}), z.object({capabilityKey: z.string(), type: z.literal("product_capability")}), z.object({key: z.string(), type: z.literal("runtime")}), z.object({tileUuid: z.string().nullable(), dashboardUuid: z.string().nullable(), chartUuid: z.string().nullable(), type: z.literal("content")})]); export const aiAgentReviewItemPriority = z.enum(["urgent", "high", "medium", "low", "none"]); export const aiAgentRootCause = z.enum(["semantic_layer", "project_context", "agent_configuration", "product_capability", "runtime_reliability", "feedback_quality", "not_a_failure", "ambiguous"]); export const aiAgentReviewItemSource = z.enum(["ai_finding", "manual"]); export const aiProjectContextTypedObjectRef = z.union([z.object({name: z.string(), type: z.literal("explore")}), z.object({fieldId: z.string(), explore: z.string(), type: z.literal("field")})]); export const aiProjectContextObjectRef = z.union([z.string(), aiProjectContextTypedObjectRef]); export const aiAgentJudgeProjectContextEntry = z.object({objects: z.array(aiProjectContextObjectRef), terms: z.array(z.string()), content: z.string(), kind: z.enum(["definition", "context"]), id: z.string().nullable(), op: z.enum(["create", "update"])}); export const aiAgentRecommendationAction = z.enum(["update_semantic_yaml", "update_agent_instructions", "add_knowledge_document", "enable_data_access", "enable_sql_mode", "enable_self_improvement", "configure_mcp_server", "adjust_explore_tags", "update_access", "route_to_product_work", "request_more_evidence", "no_action"]); export const aiAgentRecommendation = z.object({targetRefs: z.array(aiAgentTargetRef), rationale: z.string(), title: z.string(), actionType: aiAgentRecommendationAction}); export const aiAgentEvidenceExcerpt = z.object({redacted: z.boolean(), text: z.string(), source: z.enum(["user_prompt", "assistant_answer", "next_user_prompt", "conversation_context", "tool_call", "tool_result", "agent_config"])}); export const aiAgentFixTarget = z.enum(["semantic_yaml_patch", "project_context_rule", "agent_configuration_change", "dbt_modeling_ticket", "semantic_layer_ticket", "product_capability_ticket", "runtime_reliability_ticket", "feedback_needed", "no_action"]); export const aiAgentReviewRemediationStatus = z.enum(["queued", "running", "pr_open", "preview_ready", "resolved", "failed"]); export const aiAgentReviewRemediation = z.object({updatedAt: z.string(), createdAt: z.string(), resolvedAt: z.string().nullable(), resolvedByUserUuid: z.string().nullable(), createdByUserUuid: z.string().nullable(), retryPrompt: z.string().nullable(), errorMessage: z.string().nullable(), status: aiAgentReviewRemediationStatus, previewThreadUuid: z.string().nullable(), previewAgentUuid: z.string().nullable(), previewProjectUuid: z.string().nullable(), linkedPrUrl: z.string().nullable(), pullRequestUuid: z.string().nullable(), workThreadUuid: z.string().nullable(), sourceAgentUuid: z.string(), sourceProjectUuid: z.string(), sourceThreadUuid: z.string().nullable(), sourcePromptUuid: z.string().nullable(), sourceFindingUuid: z.string().nullable(), organizationUuid: z.string(), fingerprint: z.string(), uuid: z.string()}); export const aiAgentReviewItemWritebackStrategy = z.enum(["semantic_layer", "project_context"]); export const pullRequestProvider = z.enum(["github", "gitlab"]); export const aiAgentReviewItemWritebackBlockedReason = z.enum(["reviews_disabled", "unsupported_root_cause", "missing_project", "missing_agent", "missing_project_context_entry", "project_context_disabled", "unsupported_source_control", "git_app_not_installed", "missing_writeback_config", "pull_request_open", "source_thread_writeback_exists", "terminal_state", "writeback_in_progress"]); export const aiAgentReviewItemWritebackEligibility = z.union([z.object({reason: z.literal(null).nullable(), strategy: aiAgentReviewItemWritebackStrategy, provider: pullRequestProvider, eligible: z.literal(true)}), z.object({reason: aiAgentReviewItemWritebackBlockedReason, strategy: aiAgentReviewItemWritebackStrategy.nullable(), provider: pullRequestProvider.nullable(), eligible: z.literal(false)})]); export const aiAgentReviewItemSummary = z.object({updatedAt: z.string(), createdAt: z.string(), createdByUserUuid: z.string().nullable(), boardPosition: z.number().nullable(), prWritebackMessage: z.string().nullable(), prWritebackStatus: aiAgentReviewItemWritebackStatus.nullable(), prState: aiAgentReviewItemPrState.nullable(), linkedPrUrl: z.string().nullable(), linkedIssueUrl: z.string().nullable(), statusUpdatedByUserUuid: z.string().nullable(), statusUpdatedAt: z.string(), findingCount: z.number(), lastSeenAt: z.string(), firstSeenAt: z.string(), assignedToUserUuid: z.string().nullable(), ownerType: aiAgentReviewItemOwnerType, dismissedReason: aiAgentReviewItemDismissedReason.nullable(), status: aiAgentReviewItemStatus, targetRefs: z.array(aiAgentTargetRef), priority: aiAgentReviewItemPriority, primaryRootCause: aiAgentRootCause, description: z.string(), title: z.string(), agentUuid: z.string().nullable(), projectUuid: z.string().nullable(), organizationUuid: z.string(), source: aiAgentReviewItemSource, fingerprint: z.string(), uuid: z.string(), latestFinding: z.object({createdAt: z.string(), projectContextEntry: aiAgentJudgeProjectContextEntry.nullable(), recommendation: aiAgentRecommendation.nullable(), evidenceExcerpts: z.array(aiAgentEvidenceExcerpt), targetRefs: z.array(aiAgentTargetRef), fixTargets: z.array(aiAgentFixTarget), subcategories: z.array(z.string()), agentUuid: z.string(), projectUuid: z.string(), threadUuid: z.string(), promptUuid: z.string(), uuid: z.string()}).nullable(), remediation: aiAgentReviewRemediation.nullable(), writebackEligibility: aiAgentReviewItemWritebackEligibility, writebackEligible: z.boolean()}); export const apiAiAgentReviewItemResponse = z.object({results: aiAgentReviewItemSummary, status: z.literal("ok")}); export const validateResponse = async ( schema: { readonly '~standard': { readonly validate: (value: unknown) => ({ readonly value: Output; readonly issues?: undefined } | { readonly issues: ReadonlyArray<{ readonly message: string; readonly path?: ReadonlyArray | undefined }> }) | Promise<{ readonly value: Output; readonly issues?: undefined } | { readonly issues: ReadonlyArray<{ readonly message: string; readonly path?: ReadonlyArray | undefined }> }> } }, value: unknown ): Promise => { const result = await schema['~standard'].validate(value) if (result.issues !== undefined) { const detail = result.issues .map(({ message, path }) => path?.length ? `${path.map((segment) => String(typeof segment === 'object' ? segment.key : segment)).join('.')}: ${message}` : message ) .join('; ') throw new Error(`Response does not match the schema: ${detail}`, { cause: { issues: result.issues } }) } return result.value }; /** * List AI agent review signals * * GET /api/v1/aiAgents/admin/review-items/{fingerprint} */ export const getApiApiV1AiAgentsAdminReviewItemsFingerprint = async (args: GetApiApiV1AiAgentsAdminReviewItemsFingerprintArgs, options: GetApiApiV1AiAgentsAdminReviewItemsFingerprintOptions) => { const {baseUrl, fetch: fetchFn = fetch} = options ?? {} const query = new URLSearchParams() const headers = new Headers() headers.set('accept', "application/json") const url = `${baseUrl.replace(/\/+$/, '')}/api/v1/aiAgents/admin/review-items/${encodeURIComponent(String(args.fingerprint))}${query.size > 0 ? `?${query}` : ''}` const res = await fetchFn(url, {method: "GET", headers}) if (!res.ok) throw new Error(`Request failed with status ${res.status}`, {cause: {status: res.status, body: await res.text()}}) return validateResponse(apiAiAgentReviewItemResponse, await res.json()) };