import type { PiToolResult, PiToolUpdateCallback } from "./pi-api.ts"; export type CodeModeLanguage = "javascript" | "python"; export type CapabilityEffect = "read" | "write" | "process" | "network" | "orchestration"; export interface CapabilityCatalogEntry { name: string; description: string; effect: CapabilityEffect; } export interface CapabilityInvocationContext { cwd: string; signal?: AbortSignal; allowedEffects: ReadonlySet; } export interface CodeModeCapability { name: string; description: string; effect: CapabilityEffect; execute(input: TInput, context: CapabilityInvocationContext): Promise | TOutput; } export interface KernelCapabilityInvocation { name: string; effect: CapabilityEffect | "unknown"; elapsedMs: number; ok: boolean; } export interface KernelRunRequest { code: string; cwd: string; timeoutMs: number; outputLimitBytes: number; allowedEffects: ReadonlySet; signal?: AbortSignal; onUpdate?: PiToolUpdateCallback; } export interface KernelRunResult { language: CodeModeLanguage; value: unknown; stdout: string; stderr: string; elapsedMs: number; capabilityInvocations: KernelCapabilityInvocation[]; kernelReused: boolean; } export interface EvalToolDetails { ok: boolean; language: CodeModeLanguage; elapsedMs: number; capabilityCalls: number; capabilityInvocations: KernelCapabilityInvocation[]; kernelReused: boolean; truncated: boolean; denied?: boolean; error?: string; } export interface CodeModeRuntime { run(language: CodeModeLanguage, request: KernelRunRequest): Promise; reset(language?: CodeModeLanguage): Promise; close(): Promise; } export interface EvalToolParams { language: CodeModeLanguage; code: string; timeoutSeconds?: number; } export interface CodeModeExtensionOptions { capabilities?: CodeModeCapability[]; runtime?: CodeModeRuntime; requireConfirmation?: boolean; allowNonInteractive?: boolean; allowedCapabilityEffects?: CapabilityEffect[]; pythonExecutable?: string; maxOutputBytes?: number; maxTimeoutMs?: number; } export type EvalToolResult = PiToolResult;