/**
 * Metona IR — 工具相关类型定义
 *
 * 独立于 metona-request.ts 中的工具定义，用于 Tool Registry 内部。
 *
 * @see docs/MetonaAI-Desktop 架构与交互设计.html
 */

import type { MetonaToolDef, MetonaToolCall, MetonaToolResult } from './metona-request';

/**
 * 工具执行上下文（传递给工具的 execute 方法）
 */
export interface ToolExecutionContext {
  /** 当前会话 ID */
  sessionId: string;
  /** 当前工作空间根路径 */
  workspacePath: string;
  /** 当前迭代轮次 */
  iteration: number;
  /** 请求 ID */
  requestId: string;
  /** #11 修复: 超时 abort signal，工具可在耗时操作前检查 signal.aborted 自行中止 */
  signal?: AbortSignal;
}

/**
 * 工具基类接口
 * 所有内置工具和 MCP 工具都实现此接口
 */
export interface IMetonaTool {
  /** 工具定义（供 LLM 阅读） */
  readonly definition: MetonaToolDef;

  /**
   * 执行工具
   * @param args 工具参数
   * @param context 执行上下文
   * @returns 工具执行结果
   */
  execute(args: Record<string, unknown>, context: ToolExecutionContext): Promise<unknown>;
}

/**
 * 工具注册表中存储的工具记录
 */
export interface ToolRegistryEntry {
  tool: IMetonaTool;
  /** 来源：'builtin' | 'mcp' */
  source: 'builtin' | 'mcp';
  /** MCP Server 名称（仅 mcp 来源） */
  serverName?: string;
  /** 是否已启用 */
  enabled: boolean;
}
