Ctrl K
ComunidadGuías…

lib/types.ts

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
export type SourceType = "url" | "openapi_url" | "json_paste" | "graphql_url" | "graphql_sdl" | "mcp_url" | "preset" | "website" | "workflow";

export type ServerStatus = "live" | "error" | "pending" | "preset";

export type PipelineStatus = "passed" | "completed" | "failed" | "pending";

export type McpGenerationMode = "auto" | "static" | "dynamic" | "code";

export type McpClientPreset = "default" | "claude" | "claude-code" | "cursor" | "openai";

export type McpOperationFilter = "read" | "write" | "destructive";
export type McpToolPolicy = "allow" | "approval" | "block";
export type ExecutionPolicy = {
  max_attempts?: number;
  timeout_ms?: number;
  base_delay_ms?: number;
  retry_statuses?: number[];
  retry_writes?: boolean;
  idempotency_header?: string;
};

// Graduated action levels for agent permissioning: reading data, preparing
// drafts, mutating records, sending outward-facing messages, deleting data.
export type McpActionLevel = "read" | "draft" | "write" | "send" | "destructive";

export type McpEndpointFilters = {
  tools?: string[];
  noTools?: string[];
  resources?: string[];
  noResources?: string[];
  tags?: string[];
  noTags?: string[];
  operations?: McpOperationFilter[];
  noOperations?: McpOperationFilter[];
};

export type McpToolAnnotations = {
  title?: string;
  readOnlyHint?: boolean;
  destructiveHint?: boolean;
  idempotentHint?: boolean;
  openWorldHint?: boolean;
};

export type AstrailToolProfile = {
  method?: string;
  path?: string;
  visibility?: "public" | "private";
  risk: "read" | "write" | "destructive";
  action_class?: McpActionLevel;
  requires_auth: boolean;
  auth_schemes: string[];
  required_scopes: string[];
  prerequisites: string[];
  agent_instructions: string[];
  business_context?: string;
  use_when?: string;
  avoid_when?: string;
  edge_case_notes?: string;
  action_level?: McpActionLevel;
  response_hints?: unknown;
  example_arguments: Record<string, unknown>;
  complexity?: {
    parameter_count: number;
    body_mode: "schema" | "compact_object";
    compressed: boolean;
  };
};

export type RuntimePermissionPattern = string | {
  pattern: string;
  regex?: boolean;
  match?: "sdk_method" | "endpoint_id" | "tool_name" | "operation_id" | "method_path" | "resource" | "tag" | "path" | "http_method";
  note?: string;
};

export type RuntimeRolePolicy = {
  max_action_level?: McpActionLevel;
  allowed_tools?: string[];
  blocked_tools?: string[];
  note?: string;
};

export type X402PaymentPolicy = {
  enabled?: boolean;
  allowed_networks?: string[];
  allowed_assets?: string[];
  max_amount_per_call?: string | null;
  daily_limit?: string | null;
  approval_threshold?: string | null;
  require_domain_verification?: true;
};

export type RuntimePermissionPolicy = {
  // Non-secret operating context appended to MCP initialization instructions.
  business_context?: string;
  argument_retention?: "none" | "keys_only" | "redacted";
  allow_http_gets?: boolean;
  allowed_methods?: RuntimePermissionPattern[];
  blocked_methods?: RuntimePermissionPattern[];
  allowed_resources?: RuntimePermissionPattern[];
  blocked_resources?: RuntimePermissionPattern[];
  allowed_actions?: McpActionLevel[];
  blocked_actions?: McpActionLevel[];
  read_only?: boolean;
  // Per-actor role scopes evaluated against the x-astrail-actor-role header.
  // "default" applies when the caller sends no role or an unknown role.
  roles?: Record<string, RuntimeRolePolicy>;
  // Non-custodial x402 policy. Astrail forwards caller-signed payment proofs;
  // it never stores wallet private keys or pays from a platform wallet.
  x402?: X402PaymentPolicy;
};

export type FieldMappingRule = {
  tool?: string;
  argument: string;
  upstream_name?: string;
  default?: unknown;
  value_map?: Record<string, unknown>;
  drop?: boolean;
  note?: string;
  source_path?: string;
  target_path?: string;
  coerce?: "string" | "number" | "integer" | "boolean" | "json";
  enum_map?: Record<string, unknown>;
  default_when?: { path: string; equals?: unknown; missing?: boolean };
  validations?: Array<{ kind: "required" | "type" | "min" | "max" | "pattern" | "enum"; value?: unknown; message?: string }>;
};

export type ResponseFieldRule = {
  tool?: string;
  field: string;
  rename?: string;
  drop?: boolean;
  note?: string;
  target_path?: string;
  coerce?: "string" | "number" | "integer" | "boolean" | "json";
  enum_map?: Record<string, unknown>;
};

export type ServerFieldMappings = {
  arguments?: FieldMappingRule[];
  response?: ResponseFieldRule[];
};

export type McpTool = {
  name: string;
  description: string;
  enabled?: boolean;
  input_schema?: Record<string, unknown>;
  method?: string;
  path?: string;
  annotations?: McpToolAnnotations;
  x_astrail?: AstrailToolProfile;
  metadata?: Record<string, unknown>;
  visibility?: "public" | "private";
  policy?: McpToolPolicy;
};

export type McpServer = {
  id: string;
  user_id: string;
  organization_id?: string | null;
  name: string;
  description: string | null;
  source_url: string | null;
  source_type: SourceType | string | null;
  category?: string | null;
  generated_code: string | null;
  tools_json: McpTool[] | null;
  endpoint_map?: OpenApiEndpoint[] | null;
  runtime_policy?: RuntimePermissionPolicy | null;
  field_mappings?: ServerFieldMappings | null;
  execution_policy?: ExecutionPolicy | null;
  schema_fingerprint?: string | null;
  schema_checked_at?: string | null;
  schema_drift_detected?: boolean | null;
  diagnostics?: GenerationDiagnostics | string[] | null;
  status?: ServerStatus | string | null;
  validation_status?: PipelineStatus | string | null;
  generation_status?: PipelineStatus | string | null;
  is_public: boolean;
  hosted_endpoint: string | null;
  call_count: number;
  generation_version?: number | string | null;
  protocol_version?: string | null;
  created_at: string;
};

export type RuntimeLog = {
  id: string;
  server_id: string | null;
  user_id: string | null;
  tool_name: string | null;
  status: string | null;
  method: string | null;
  path: string | null;
  execution_mode: string | null;
  upstream_status?: number | null;
  trace_id?: string | null;
  attempt_count?: number | null;
  error_code?: string | null;
  error: string | null;
  latency_ms: number | null;
  end_user_id?: string | null;
  actor_role?: string | null;
  api_key_id?: string | null;
  api_key_name?: string | null;
  api_key_preview?: string | null;
  client_name?: string | null;
  credential_refs?: CredentialAuditRef[] | null;
  bundle_id?: string | null;
  arguments_redacted?: unknown;
  summary?: string | null;
  agent_id?: string | null;
  task_authorization_id?: string | null;
  purpose?: string | null;
  authorization_decision?: unknown;
  task_id?: string | null;
  affected_resources?: unknown[] | null;
  effective_scopes?: string[] | null;
  policy_result?: unknown;
  provider_result?: unknown;
  approval_id?: string | null;
  approval_actor_id?: string | null;
  approval_decision?: string | null;
  approval_decided_at?: string | null;
  approval_reason?: string | null;
  execution_claim_id?: string | null;
  evidence_sequence?: number | null;
  previous_event_hash?: string | null;
  event_hash?: string | null;
  storage_status?: string | null;
  created_at: string;
};

export type CredentialAuditRef = {
  id: string;
  name: string;
  provider: string | null;
  end_user_id: string | null;
  auth_scheme: string;
};

export type ApiKey = {
  id: string;
  user_id: string;
  name: string;
  key_preview: string;
  end_user_id?: string | null;
  actor_role?: string | null;
  agent_id?: string | null;
  agent_policy?: {
    allowed_tools?: string[];
    allowed_actions?: McpActionLevel[];
    allowed_resources?: string[];
    allowed_scopes?: string[];
  } | null;
  last_used: string | null;
  created_at: string;
};

export type DesignPartnerRequest = {
  id: string;
  name: string;
  email: string;
  company: string;
  role: string | null;
  agent_kind: string;
  needed_api: string;
  has_api_docs: "yes" | "no" | string;
  api_docs_url_or_notes: string | null;
  runtime_preference: "hosted" | "exported_code" | "self_hosted" | string;
  urgency: "today" | "this_week" | "exploring" | string;
  status: "new" | "contacted" | "onboarded" | "generated" | "success" | string;
  created_at: string;
};

export type GeneratedMcpServer = {
  name: string;
  description: string;
  tools: McpTool[];
  generated_code: string;
};

export type SpecFormat = "json" | "yaml";

export type SpecDiscoveryResult = {
  status: "found" | "not_found" | "error";
  input_url: string;
  discovered_url?: string;
  discovery_method?: string;
  content_type?: string;
  spec_raw?: string;
  spec_format?: SpecFormat;
  diagnostics: string[];
};

export type OpenApiEndpoint = {
  method: string;
  path: string;
  tool_name?: string | null;
  runtime_kind?: "rest" | "browser" | "graphql" | "mcp_proxy";
  browser_action?: "open_page" | "click" | "submit_form" | "follow_link";
  selector?: string | null;
  target_url?: string | null;
  base_url?: string | null;
  operation_id: string | null;
  summary: string | null;
  description: string | null;
  tags?: string[];
  parameters?: unknown[];
  path_params?: unknown[];
  query_params?: unknown[];
  static_headers?: Record<string, string>;
  request_body?: unknown;
  request_body_schema?: unknown;
  responses?: unknown;
  response_hints?: unknown;
  security?: unknown;
  security_requirements?: unknown;
  oauth_security_schemes?: string[];
  oauth_security_metadata?: Record<string, {
    authorization_url?: string | null;
    token_url?: string | null;
    revocation_url?: string | null;
    resource_origin?: string | null;
  }>;
  oauth_security_bindings?: Record<string, string>;
  security_scheme_metadata_complete?: boolean;
  requires_auth?: boolean;
  visibility?: "public" | "private";
  enabled?: boolean;
  resource?: string | null;
  operation_kind?: McpOperationFilter;
  action_class?: McpActionLevel;
  policy?: McpToolPolicy;
  input_schema?: Record<string, unknown>;
  docs_corpus?: Record<string, unknown>;
};

export type GenerationDiagnostics = {
  input_url: string | null;
  discovered_url: string | null;
  discovery_method: string | null;
  spec_size_bytes: number;
  endpoint_count: number;
  selected_group: string;
  tools_generated: number;
  hosted_endpoint: string | null;
  warnings: string[];
  errors: string[];
  timestamps: {
    started_at?: string;
    completed_at?: string;
    failed_at?: string;
  };
  trace: Array<{
    label: string;
    status: "passed" | "warning" | "failed" | "pending";
    detail?: string;
  }>;
  raw: string[];
};

export type SpecPreview = {
  source_url: string | null;
  spec_size_bytes: number;
  endpoint_count: number;
  endpoint_limit: number;
  groups: Array<{ name: string; count: number }>;
  resources?: Array<{ name: string; count: number }>;
  operations?: Array<{ name: McpOperationFilter; count: number }>;
  recommended_mode?: Exclude<McpGenerationMode, "auto">;
  client_presets?: McpClientPreset[];
  is_large: boolean;
  warning: string | null;
  diagnostics: string[];
};