import { WebJobProgress } from "@xenosystem/web-context-client/progress"; declare const WEB_CONTEXT_TOOL_RESULT_SCHEMA: "xeno.web-context.tool-result.v1"; interface WebContextEvidenceProjection { evidenceId: string; requestId: string; sourceUrl: string; finalUrl?: string; citations: Array<{ url: string; title?: string; artifactId?: string; }>; } interface WebContextToolResult { schemaVersion: typeof WEB_CONTEXT_TOOL_RESULT_SCHEMA; operation: "search" | "fetch"; requestId: string; evidence: WebContextEvidenceProjection; job?: { jobId: string; state: string; }; artifact?: { artifactId: string; mediaType: string; bytes: number; }; jobProgress?: WebJobProgress; } interface ImageUrlBlock { type: "image_url"; image_url: { url: string; detail?: "auto" | "low" | "high"; }; } interface ResourceContentBlock { type: "resource"; uri?: string; mimeType?: string; text?: string; data?: string; } type ToolAssistantContentBlock = TextBlock | ImageUrlBlock | ResourceContentBlock; type ToolOperationState = "registered" | "starting" | "running_foreground" | "running_background" | "waiting_for_input" | "stalled" | "verifying" | "completed" | "failed" | "timed_out" | "cancelled" | "orphaned"; type ToolCompletionPolicy = "await" | "observe" | "detach"; interface ExpectedOutputContract { path: string; kind?: "file" | "directory"; nonEmpty?: boolean; } interface ToolEvidence { id: string; kind: "artifact" | "process" | "verification"; status: "pending" | "verified" | "failed"; path?: string; observedAt: string; operationId: string; detail?: Record; } interface ToolOperationSnapshot { schemaVersion: 1; operationId: string; turnId: string; generation: number; toolCallId: string; toolName: string; ownerSessionId?: string; state: ToolOperationState; terminal: boolean; presentation: "foreground" | "background"; completionPolicy: ToolCompletionPolicy; promotable: boolean; processId?: string; taskId?: string; displayName?: string; pid?: number; commandFingerprint?: string; outputPath?: string; startedAt: string; lastActivityAt: string; deadlineAt?: string; elapsedMs: number; idleMs: number; outputBytes: number; nextOffset: number; exitCode?: number | null; completionReason?: string; suggestedNextAction?: string; expectedOutputs?: ExpectedOutputContract[]; evidence?: ToolEvidence[]; } interface ToolResult { success: boolean; output: string; error?: string; errorCode?: string; errorDetails?: Record; assistantContent?: ToolAssistantContentBlock[]; assistantOnlyContent?: ToolAssistantContentBlock[]; operation?: ToolOperationSnapshot; evidence?: ToolEvidence[]; webContext?: WebContextToolResult; retryable?: boolean; } interface TextBlock { type: "text"; text: string; } type PermissionPromptOperation = "generic" | "filesystem" | "write" | "edit" | "bash"; interface PermissionPromptPreviewLine { kind: "meta" | "context" | "add" | "remove"; text: string; } interface PermissionPromptPreview { title: string; summary?: string; lines: PermissionPromptPreviewLine[]; truncated?: boolean; } declare const XENO_UI_RENDERER_API_VERSION: 1; type AgentStatus = "idle" | "thinking" | "executing" | "error" | "disconnected"; type ToolCallStatus = "pending" | "running" | "success" | "error"; type PermissionDecision = "allow" | "always" | "deny"; interface ChatMessage { id: string; role: "user" | "assistant"; content: string; timestamp: number; isStreaming?: boolean; } interface ToolCallEvent { id: string; toolName: string; input: Record; status: ToolCallStatus; result?: ToolResult; durationMs?: number; timestamp: number; } interface ErrorEvent { id: string; message: string; retryable: boolean; timestamp: number; } type ConversationItem = { type: "message"; data: ChatMessage; } | { type: "tool_call"; data: ToolCallEvent; } | { type: "error"; data: ErrorEvent; }; interface AgentUiPermissionRequest { id: string; toolName: string; detail: string; description?: string; operation?: PermissionPromptOperation; preview?: PermissionPromptPreview; riskLevel: "low" | "medium" | "high"; timestamp: number; } interface TokenUsage { input: number; output: number; total: number; } interface AgentUiAgent { readonly tokenUsage: TokenUsage; run(prompt: string): Promise; cancelCurrentTurn(): void; } interface AgentUiSnapshot { apiVersion: typeof XENO_UI_RENDERER_API_VERSION; revision: number; items: readonly ConversationItem[]; isProcessing: boolean; status: AgentStatus; tokenUsage: Readonly; permissionRequest: Readonly | null; lastUserMessage: string | null; } type AgentUiListener = (snapshot: AgentUiSnapshot) => void; interface AgentUiControllerOptions { agent: AgentUiAgent; enablePermissionRequests?: boolean; now?: () => number; createId?: () => string; } interface AgentUiController { readonly apiVersion: typeof XENO_UI_RENDERER_API_VERSION; getSnapshot(): AgentUiSnapshot; subscribe(listener: AgentUiListener): () => void; sendMessage(text: string): Promise; cancelExecution(): void; clearMessages(): void; retryLastMessage(): Promise; resolvePermission(requestId: string, decision: PermissionDecision): boolean; dispose(): void; } interface AgentUiViewOptions { agentName?: string; regionLabel?: string; inputLabel?: string; inputPlaceholder?: string; } interface AgentUiTimelineEntryView { key: string; kind: "user-message" | "assistant-message" | "tool-call" | "error"; role: "article" | "status" | "alert"; accessibleName: string; text: string; detail?: string; state?: ToolCallStatus; retryable?: boolean; streaming?: boolean; } interface AgentUiPermissionView { role: "alertdialog"; accessibleName: string; description: string; riskLevel: "low" | "medium" | "high"; requestId: string; controls: readonly { label: string; decision: PermissionDecision; }[]; } interface AgentUiView { apiVersion: typeof XENO_UI_RENDERER_API_VERSION; revision: number; region: { role: "region"; accessibleName: string; }; header: { title: string; statusRole: "status"; statusText: string; tokenText: string; }; timeline: { role: "log"; live: "polite"; busy: boolean; entries: readonly AgentUiTimelineEntryView[]; }; permission: AgentUiPermissionView | null; composer: { role: "form"; inputLabel: string; placeholder: string; disabled: boolean; sendLabel: string; cancelLabel: string; }; } type AgentUiAction = { type: "send"; text: string; } | { type: "cancel"; } | { type: "clear"; } | { type: "retry"; } | { type: "permission"; requestId: string; decision: PermissionDecision; }; interface AgentUiDomOptions extends AgentUiViewOptions { className?: string; injectStyles?: boolean; styleNonce?: string; onClose?: () => void; } interface AgentUiDomHandle { readonly element: HTMLElement; render(): void; focusInput(): void; dispose(): void; } declare function createAgentUiController(options: AgentUiControllerOptions): AgentUiController; declare function mountAgentUi(target: HTMLElement, controller: AgentUiController, options?: AgentUiDomOptions): AgentUiDomHandle; type MarkdownSegment = { kind: "text"; text: string; } | { kind: "code-block"; language: string; code: string; } | { kind: "inline-code"; code: string; } | { kind: "strong"; text: string; } | { kind: "emphasis"; text: string; } | { kind: "link"; text: string; href: string; }; declare function parseMarkdown(text: string): MarkdownSegment[]; declare function isSafeMarkdownHref(href: string): boolean; declare const xenoUiTokens: Readonly<{ background: "#101214"; surface: "#181b1f"; surfaceRaised: "#20242a"; border: "#343a42"; text: "#f2f4f7"; textMuted: "#aab2bd"; accent: "#5da9e9"; success: "#56b881"; warning: "#e7b65a"; danger: "#e57373"; focus: "#8bc5f4"; }>; declare const xenoUiCss = "\n.xeno-ui{box-sizing:border-box;display:grid;grid-template-rows:auto minmax(12rem,1fr) auto;width:min(32rem,100%);height:min(44rem,100%);min-height:24rem;border:1px solid var(--xeno-border,#343a42);background:var(--xeno-bg,#101214);color:var(--xeno-text,#f2f4f7);font:14px/1.45 ui-sans-serif,system-ui,-apple-system,\"Segoe UI\",sans-serif;letter-spacing:0}\n.xeno-ui *{box-sizing:border-box;letter-spacing:0}\n.xeno-ui__header{display:flex;align-items:center;gap:.75rem;padding:.75rem 1rem;border-bottom:1px solid var(--xeno-border,#343a42);background:var(--xeno-surface,#181b1f)}\n.xeno-ui__title{min-width:0;margin:0;font-size:.95rem;font-weight:650;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}\n.xeno-ui__status{margin-left:auto;color:var(--xeno-muted,#aab2bd);font-size:.78rem;text-transform:capitalize}\n.xeno-ui__tokens{color:var(--xeno-muted,#aab2bd);font-variant-numeric:tabular-nums;font-size:.75rem}\n.xeno-ui__timeline{min-height:0;overflow:auto;padding:1rem;scrollbar-gutter:stable}\n.xeno-ui__empty{display:grid;min-height:100%;place-items:center;color:var(--xeno-muted,#aab2bd)}\n.xeno-ui__entry{margin:0 0 .75rem;padding:.7rem .8rem;border-left:3px solid var(--xeno-border,#343a42);background:var(--xeno-surface,#181b1f);white-space:pre-wrap;overflow-wrap:anywhere}\n.xeno-ui__entry--user{margin-left:12%;border-left-color:var(--xeno-accent,#5da9e9)}\n.xeno-ui__entry--assistant{margin-right:8%;border-left-color:var(--xeno-success,#56b881)}\n.xeno-ui__entry--tool{border-left-color:var(--xeno-warning,#e7b65a);font-family:ui-monospace,\"Cascadia Mono\",monospace;font-size:.82rem}\n.xeno-ui__entry--error{border-left-color:var(--xeno-danger,#e57373)}\n.xeno-ui__entry code{padding:.08rem .3rem;border:1px solid var(--xeno-border,#343a42);background:var(--xeno-raised,#20242a);font-family:ui-monospace,\"Cascadia Mono\",monospace}\n.xeno-ui__entry pre{max-width:100%;margin:.55rem 0 0;padding:.7rem;overflow:auto;border:1px solid var(--xeno-border,#343a42);background:#0b0d0f;white-space:pre}\n.xeno-ui__entry a{color:var(--xeno-accent,#5da9e9)}\n.xeno-ui__details{margin-top:.5rem;color:var(--xeno-muted,#aab2bd)}\n.xeno-ui__details pre{max-height:16rem}\n.xeno-ui__permission{margin:.75rem 1rem 0;padding:.8rem;border:1px solid var(--xeno-warning,#e7b65a);background:var(--xeno-raised,#20242a)}\n.xeno-ui__permission-title{margin:0 0 .35rem;font-size:.9rem}\n.xeno-ui__permission-actions{display:flex;flex-wrap:wrap;gap:.5rem;margin-top:.75rem}\n.xeno-ui__composer{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:.55rem;padding:.75rem 1rem;border-top:1px solid var(--xeno-border,#343a42);background:var(--xeno-surface,#181b1f)}\n.xeno-ui__input{width:100%;min-height:2.75rem;max-height:9rem;resize:none;overflow-y:hidden;padding:.65rem .75rem;border:1px solid var(--xeno-border,#343a42);border-radius:4px;background:#0f1113;color:var(--xeno-text,#f2f4f7);font:inherit}\n.xeno-ui__controls{display:flex;align-items:flex-end;gap:.45rem}\n.xeno-ui__button{min-width:2.5rem;min-height:2.5rem;padding:.55rem .7rem;border:1px solid var(--xeno-border,#343a42);border-radius:4px;background:var(--xeno-raised,#20242a);color:var(--xeno-text,#f2f4f7);font:inherit;cursor:pointer}\n.xeno-ui__button:hover{border-color:var(--xeno-accent,#5da9e9)}\n.xeno-ui__button--primary{border-color:var(--xeno-accent,#5da9e9);background:#1b4f78}\n.xeno-ui__button--danger{border-color:var(--xeno-danger,#e57373)}\n.xeno-ui__button:disabled,.xeno-ui__input:disabled{cursor:not-allowed;opacity:.55}\n.xeno-ui :focus-visible{outline:2px solid var(--xeno-focus,#8bc5f4);outline-offset:2px}\n@media (max-width:36rem){.xeno-ui{width:100%;height:100%;border-left:0;border-right:0}.xeno-ui__entry--user,.xeno-ui__entry--assistant{margin-left:0;margin-right:0}.xeno-ui__composer{grid-template-columns:1fr}.xeno-ui__controls{justify-content:flex-end}}\n@media (prefers-reduced-motion:reduce){.xeno-ui *{scroll-behavior:auto!important;transition:none!important}}\n"; declare function createAgentUiView(snapshot: AgentUiSnapshot, options?: AgentUiViewOptions): AgentUiView; declare function dispatchAgentUiAction(controller: AgentUiController, action: AgentUiAction): Promise; export { type AgentStatus, type AgentUiAction, type AgentUiAgent, type AgentUiController, type AgentUiControllerOptions, type AgentUiDomHandle, type AgentUiDomOptions, type AgentUiListener, type AgentUiPermissionRequest, type AgentUiSnapshot, type AgentUiTimelineEntryView, type AgentUiView, type AgentUiViewOptions, type ChatMessage, type ConversationItem, type ErrorEvent, type PermissionDecision, type TokenUsage, type ToolCallEvent, type ToolCallStatus, XENO_UI_RENDERER_API_VERSION, createAgentUiController, createAgentUiView, dispatchAgentUiAction, isSafeMarkdownHref, mountAgentUi, parseMarkdown, xenoUiCss, xenoUiTokens };