import type { BaseToolDefinition, BaseToolDependencyDeclaration, BaseToolHandler, BaseToolInvokeRequest, BaseToolInvokeResult, BaseToolRiskLevel, BaseToolSchemaLike } from "../../../../agentCore/agent_executionEngine/basic_toolLayer/baseTools/baseToolDefinition.js";
import type { ShellToolAuditEvent, ShellToolResult } from "../shellExecution/shell.commandExecution/core.js";
export type ShellBestPracticeProviderName = "anthropic" | "openai" | "deepmind" | "praxis-native";
export type ShellBestPracticeSource = {
    kind: "cli" | "agent-sdk" | "api-sdk" | "praxis-native";
    label: string;
    path?: string;
};
export type ShellBestPracticeMetadata<Name extends string = ShellBestPracticeProviderName> = {
    providerName: Name;
    source: ShellBestPracticeSource;
    directCliSupport: boolean;
    sideEffectPolicy?: "runtime-governed";
    notes?: readonly string[];
};
export type ShellBestPracticeSelection<Name extends string = ShellBestPracticeProviderName> = {
    providerName: Name;
    sourceLabel: string;
    sourceKind?: string;
    sourcePath?: string;
    directCliSupport: boolean;
    sideEffectPolicy?: string;
    notes?: readonly string[];
};
export type ShellProviderPracticeMetadata<Name extends string, Provider, Dependencies> = ShellBestPracticeMetadata<Name> & {
    createProvider?(dependencies: Dependencies): Provider | undefined;
};
export type ShellProviderPracticeSelection<Name extends string, Provider, Practice> = {
    providerName: Name;
    practice: Practice;
    provider?: Provider;
};
export type ShellBaseToolDefinitionOptions<Input, Output> = {
    toolId: string;
    title: string;
    description: string;
    summary: string;
    storageGroup?: string;
    riskLevel?: BaseToolRiskLevel;
    permissionHints: readonly string[];
    dependencies: readonly BaseToolDependencyDeclaration[];
    inputSchema?: BaseToolSchemaLike;
    outputSchema?: BaseToolSchemaLike;
    storagePolicy?: BaseToolDefinition["storagePolicy"];
    metadata?: Readonly<Record<string, unknown>>;
};
export declare function shellToolSkillDocPath(toolId: string, storageGroup?: string): string;
export declare function shellToolSourcePath(toolId: string, storageGroup?: string): string;
export declare function shellToolStoragePracticePath(toolId: string, storageGroup?: string): string;
export declare function jsonSchema(name: string, schema: unknown): BaseToolSchemaLike;
export declare function createShellBaseToolDefinition<Input, Output>(options: ShellBaseToolDefinitionOptions<Input, Output>): BaseToolDefinition<Input, Output>;
export declare function orderShellPractices<Name extends string, Practice extends ShellBestPracticeMetadata<Name>>(practices: readonly Practice[], preferredProvider: Name | undefined): readonly Practice[];
export declare function selectShellPractice<Name extends ShellBestPracticeProviderName>(practices: readonly ShellBestPracticeMetadata<Name>[], preferredProvider: Name | undefined): ShellBestPracticeSelection<Name>;
export declare function selectShellProviderPractice<Name extends string, Provider, Dependencies>(practices: readonly ShellProviderPracticeMetadata<Name, Provider, Dependencies>[], dependencies: Dependencies & {
    preferredProvider?: Name;
}, fallbackPractice: ShellProviderPracticeMetadata<Name, Provider, Dependencies>): ShellProviderPracticeSelection<Name, Provider, ShellProviderPracticeMetadata<Name, Provider, Dependencies>>;
export declare function buildShellPracticeAuditMetadata(selection: ShellBestPracticeSelection): Readonly<Record<string, unknown>>;
export declare function adaptShellToolResultToInvokeResult<Output, Code extends string = string>(result: ShellToolResult<Output, Code>): BaseToolInvokeResult<Output>;
export declare function createShellCoreHandler<Input, Output, Code extends string = string>(definition: BaseToolDefinition<Input, Output>, invokeCore: (request: BaseToolInvokeRequest<Input>) => Promise<ShellToolResult<Output, Code>>): BaseToolHandler<Input, Output>;
export declare function injectRuntimeInvocationMetadata(metadata: Readonly<Record<string, unknown>> | undefined, auditMetadata: Readonly<Record<string, unknown>> | undefined, request: Pick<BaseToolInvokeRequest, "runtimeId" | "sessionId" | "toolCallId">): Readonly<Record<string, unknown>>;
export declare function attachShellAuditMetadata(audit: readonly ShellToolAuditEvent[] | undefined, metadata: Readonly<Record<string, unknown>>): readonly ShellToolAuditEvent[];
