{"version":3,"sources":["../src/index.ts","../src/errors.ts","../src/utils.ts","../src/commander.ts","../src/builder.ts","../src/hooks/context.tsx","../src/hooks/useCustomCommand.ts","../src/hooks/useCommand.ts","../src/hooks/useInvoker.ts"],"sourcesContent":["// ============================================================================\n// CORE EXPORTS\n// ============================================================================\n\nexport { default as Commander, type CommandHandler } from \"./commander\"\nexport {\n  CommandBuilder,\n  CommandTemplate,\n  command,\n  simpleCommand,\n} from \"./builder\"\n\n// ============================================================================\n// HOOKS EXPORTS\n// ============================================================================\n\nexport * from \"./hooks\"\n\n// ============================================================================\n// TYPE EXPORTS\n// ============================================================================\n\nexport type {\n  CommandKey,\n  CommandCategory,\n  Command,\n  EventListener,\n  CommandExecutionContext,\n  SearchResult,\n  SearchOptions,\n  ExecutionResult,\n  CommanderStats,\n} from \"./types\"\n\n// ============================================================================\n// ERROR EXPORTS\n// ============================================================================\n\nexport {\n  CommandError,\n  CommandNotFoundError,\n  CommandUnavailableError,\n  CommandTimeoutError,\n  CommandExecutionError,\n  createCommandError,\n} from \"./errors\"\n\n// ============================================================================\n// UTILITY EXPORTS\n// ============================================================================\n\nexport {\n  generateId,\n  normalizeSearchTerm,\n  calculateSearchScore,\n  getMatchedTerms,\n  isValidCommandKey,\n  isValidCommand,\n  withTimeout,\n  delay,\n  debounce,\n  unique,\n  removeItem,\n  deepClone,\n  PriorityQueue,\n} from \"./utils\"\n\n// ============================================================================\n// VERSION\n// ============================================================================\n\nexport const VERSION = \"1.0.0\"\n","// ============================================================================\n// CUSTOM ERROR CLASSES\n// ============================================================================\n\nexport class CommandError extends Error {\n  name = \"CommandError\"\n  constructor(\n    message: string,\n    public command?: string,\n  ) {\n    super(message)\n  }\n}\n\nexport class CommandNotFoundError extends CommandError {\n  name = \"CommandNotFoundError\"\n  constructor(command: string) {\n    super(`Command not found: ${command}`, command)\n  }\n}\n\nexport class CommandUnavailableError extends CommandError {\n  name = \"CommandUnavailableError\"\n  constructor(command: string) {\n    super(`Command not available: ${command}`, command)\n  }\n}\n\nexport class CommandTimeoutError extends CommandError {\n  name = \"CommandTimeoutError\"\n  constructor(command: string, timeout: number) {\n    super(`Command timeout: ${command} (${timeout}ms)`, command)\n  }\n}\n\nexport class CommandExecutionError extends CommandError {\n  name = \"CommandExecutionError\"\n  cause: Error\n\n  constructor(command: string, originalError: Error) {\n    super(\n      `Command execution failed: ${command} - ${originalError.message}`,\n      command,\n    )\n    this.cause = originalError\n  }\n}\n\n// ============================================================================\n// ERROR FACTORY\n// ============================================================================\n\nexport function createCommandError(\n  type: string,\n  command: string,\n  details?: any,\n): CommandError {\n  switch (type) {\n    case \"not-found\":\n      return new CommandNotFoundError(command)\n    case \"unavailable\":\n      return new CommandUnavailableError(command)\n    case \"timeout\":\n      return new CommandTimeoutError(command, details?.timeout || 0)\n    case \"execution\":\n      return new CommandExecutionError(\n        command,\n        details?.error || new Error(\"Unknown error\"),\n      )\n    default:\n      return new CommandError(`Unknown error type: ${type}`, command)\n  }\n}\n","// ============================================================================\n// ID GENERATION\n// ============================================================================\n\nlet counter = 0\n\nexport function generateId(): string {\n  return `cmd_${Date.now()}_${++counter}`\n}\n\n// ============================================================================\n// SEARCH UTILITIES\n// ============================================================================\n\nexport function normalizeSearchTerm(term: string): string {\n  return term.toLowerCase().trim()\n}\n\nexport function calculateSearchScore(\n  command: any,\n  queryTerms: string[],\n): number {\n  let score = 0\n  const searchableText = [\n    command.label,\n    command.description || \"\",\n    ...(command.tags || []),\n    ...(command.searchKeywords || []),\n  ]\n    .join(\" \")\n    .toLowerCase()\n\n  queryTerms.forEach((term) => {\n    // Exact match in label = highest score\n    if (command.label.toLowerCase().includes(term)) {\n      score += command.label.toLowerCase() === term ? 100 : 50\n    }\n\n    // Match in description\n    if (command.description?.toLowerCase().includes(term)) {\n      score += 25\n    }\n\n    // Match in tags\n    if (command.tags?.some((tag: string) => tag.toLowerCase().includes(term))) {\n      score += 15\n    }\n\n    // Match in keywords\n    if (\n      command.searchKeywords?.some((keyword: string) =>\n        keyword.toLowerCase().includes(term),\n      )\n    ) {\n      score += 10\n    }\n\n    // Fuzzy match\n    if (searchableText.includes(term)) {\n      score += 5\n    }\n  })\n\n  return score\n}\n\nexport function getMatchedTerms(command: any, queryTerms: string[]): string[] {\n  const matched: string[] = []\n  const searchableText = [\n    command.label,\n    command.description || \"\",\n    ...(command.tags || []),\n    ...(command.searchKeywords || []),\n  ]\n    .join(\" \")\n    .toLowerCase()\n\n  queryTerms.forEach((term) => {\n    if (searchableText.includes(term)) {\n      matched.push(term)\n    }\n  })\n\n  return matched\n}\n\n// ============================================================================\n// VALIDATION UTILITIES\n// ============================================================================\n\nexport function isValidCommandKey(key: any): key is string {\n  return typeof key === \"string\" && key.length > 0\n}\n\nexport function isValidCommand(command: any): boolean {\n  return (\n    command &&\n    typeof command === \"object\" &&\n    isValidCommandKey(command.key) &&\n    typeof command.label === \"string\" &&\n    command.label.length > 0 &&\n    typeof command.handle === \"function\"\n  )\n}\n\n// ============================================================================\n// ASYNC UTILITIES\n// ============================================================================\n\nexport function withTimeout<T>(\n  promise: Promise<T>,\n  timeoutMs: number,\n  errorMessage: string = \"Operation timed out\",\n): Promise<T> {\n  return Promise.race([\n    promise,\n    new Promise<never>((_, reject) => {\n      setTimeout(() => {\n        reject(new Error(errorMessage))\n      }, timeoutMs)\n    }),\n  ])\n}\n\nexport async function delay(ms: number): Promise<void> {\n  return new Promise((resolve) => setTimeout(resolve, ms))\n}\n\n// ============================================================================\n// DEBOUNCE UTILITY\n// ============================================================================\n\nexport function debounce<T extends (...args: any[]) => any>(\n  func: T,\n  wait: number,\n  immediate: boolean = false,\n): (...args: Parameters<T>) => void {\n  let timeout: NodeJS.Timeout | undefined\n\n  return function executedFunction(...args: Parameters<T>) {\n    const later = () => {\n      timeout = undefined\n      if (!immediate) func(...args)\n    }\n\n    const callNow = immediate && !timeout\n\n    clearTimeout(timeout)\n    timeout = setTimeout(later, wait)\n\n    if (callNow) func(...args)\n  }\n}\n\n// ============================================================================\n// ARRAY UTILITIES\n// ============================================================================\n\nexport function unique<T>(array: T[]): T[] {\n  return [...new Set(array)]\n}\n\nexport function removeItem<T>(array: T[], item: T): T[] {\n  const index = array.indexOf(item)\n  if (index > -1) {\n    array.splice(index, 1)\n  }\n  return array\n}\n\n// ============================================================================\n// OBJECT UTILITIES\n// ============================================================================\n\nexport function deepClone<T>(obj: T): T {\n  if (obj === null || typeof obj !== \"object\") {\n    return obj\n  }\n\n  if (obj instanceof Date) {\n    return new Date(obj.getTime()) as T\n  }\n\n  if (obj instanceof Array) {\n    return obj.map((item) => deepClone(item)) as T\n  }\n\n  if (typeof obj === \"object\") {\n    const cloned = {} as T\n    for (const key in obj) {\n      if (obj.hasOwnProperty(key)) {\n        cloned[key] = deepClone(obj[key])\n      }\n    }\n    return cloned\n  }\n\n  return obj\n}\n\n// ============================================================================\n// PRIORITY QUEUE IMPLEMENTATION\n// ============================================================================\n\nexport class PriorityQueue<T> {\n  private items: Array<{ item: T; priority: number }> = []\n\n  enqueue(item: T, priority: number = 0): void {\n    const queueItem = { item, priority }\n    let added = false\n\n    for (let i = 0; i < this.items.length; i++) {\n      if (queueItem.priority > this.items[i].priority) {\n        this.items.splice(i, 0, queueItem)\n        added = true\n        break\n      }\n    }\n\n    if (!added) {\n      this.items.push(queueItem)\n    }\n  }\n\n  dequeue(): T | undefined {\n    return this.items.shift()?.item\n  }\n\n  peek(): T | undefined {\n    return this.items[0]?.item\n  }\n\n  isEmpty(): boolean {\n    return this.items.length === 0\n  }\n\n  size(): number {\n    return this.items.length\n  }\n\n  clear(): void {\n    this.items = []\n  }\n\n  remove(predicate: (item: T) => boolean): boolean {\n    const index = this.items.findIndex((queueItem) => predicate(queueItem.item))\n    if (index >= 0) {\n      this.items.splice(index, 1)\n      return true\n    }\n    return false\n  }\n}\n","import type {\n  Command,\n  CommandKey,\n  CommandCategory,\n  EventListener,\n  CommandExecutionContext,\n  SearchResult,\n  SearchOptions,\n  ExecutionResult,\n  CommanderStats,\n} from \"./types\"\n\nimport {\n  CommandNotFoundError,\n  CommandUnavailableError,\n  CommandTimeoutError,\n  CommandExecutionError,\n} from \"./errors\"\n\nimport {\n  generateId,\n  normalizeSearchTerm,\n  calculateSearchScore,\n  getMatchedTerms,\n  isValidCommand,\n  withTimeout,\n  removeItem,\n} from \"./utils\"\n\n// ============================================================================\n// COMMAND HANDLER CLASS\n// ============================================================================\n\nexport class CommandHandler {\n  constructor(\n    private key: CommandKey,\n    private commander: Commander,\n  ) {}\n\n  exists(): boolean {\n    return this.commander.has(this.key)\n  }\n\n  async isAvailable(): Promise<boolean> {\n    const command = this.commander.getCommand(this.key)\n    return command ? this.commander.isCommandAvailable(command) : false\n  }\n\n  async invoke<T = any>(\n    input?: any,\n    source: \"palette\" | \"shortcut\" | \"api\" = \"api\",\n  ): Promise<T> {\n    return this.commander.invoke<T>(this.key, input, source)\n  }\n\n  async attempt<T = any>(\n    input?: any,\n    source: \"palette\" | \"shortcut\" | \"api\" = \"api\",\n  ): Promise<ExecutionResult<T>> {\n    return this.commander.attempt<T>(this.key, input, source)\n  }\n\n  getCommand(): Command | undefined {\n    return this.commander.getCommand(this.key)\n  }\n}\n\n// ============================================================================\n// MAIN COMMANDER CLASS\n// ============================================================================\n\nexport default class Commander {\n  protected _commands: Map<CommandKey, Command> = new Map()\n  protected listeners: Map<string, EventListener[]> = new Map()\n  protected executionHistory: CommandExecutionContext[] = []\n  protected recentCommands: CommandKey[] = []\n\n  public maxHistorySize = 100\n  public maxRecentSize = 10\n\n  constructor(commands: Command[] = []) {\n    commands.forEach((cmd) => this.add(cmd))\n  }\n\n  // ============================================================================\n  // EVENT SYSTEM\n  // ============================================================================\n\n  listen<T = any>(\n    event: string,\n    callback: (...args: T[]) => void | Promise<void>,\n    options: { once?: boolean } = {},\n  ): EventListener<T> {\n    const listener: EventListener<T> = {\n      id: generateId(),\n      event,\n      callback,\n      once: options.once,\n    }\n\n    if (!this.listeners.has(event)) {\n      this.listeners.set(event, [])\n    }\n    this.listeners.get(event)!.push(listener as EventListener)\n\n    return listener\n  }\n\n  removeListener(listener: EventListener): void {\n    for (const [event, listeners] of this.listeners) {\n      const index = listeners.findIndex((l) => l.id === listener.id)\n      if (index >= 0) {\n        listeners.splice(index, 1)\n        if (listeners.length === 0) {\n          this.listeners.delete(event)\n        }\n        break\n      }\n    }\n  }\n\n  private async emit(event: string, ...args: any[]): Promise<void> {\n    const listeners = this.listeners.get(event) || []\n    const toRemove: EventListener[] = []\n\n    await Promise.allSettled(\n      listeners.map(async (listener) => {\n        try {\n          await listener.callback(...args)\n          if (listener.once) {\n            toRemove.push(listener)\n          }\n        } catch (error) {\n          console.error(`Event listener error for ${event}:`, error)\n        }\n      }),\n    )\n\n    // Remove one-time listeners\n    toRemove.forEach((listener) => this.removeListener(listener))\n  }\n\n  // ============================================================================\n  // COMMAND MANAGEMENT\n  // ============================================================================\n\n  commands(): Command[] {\n    return Array.from(this._commands.values())\n  }\n\n  getCommand(key: CommandKey): Command | undefined {\n    return this._commands.get(key)\n  }\n\n  add(command: Command): Command {\n    if (!isValidCommand(command)) {\n      throw new Error(`Invalid command: ${JSON.stringify(command)}`)\n    }\n\n    this._commands.set(command.key, command)\n    this.emit(\"command:added\", command)\n    return command\n  }\n\n  remove(commandOrKey: string | CommandKey | Command): boolean {\n    const key =\n      typeof commandOrKey === \"string\"\n        ? (commandOrKey as CommandKey)\n        : typeof commandOrKey === \"object\"\n          ? commandOrKey.key\n          : commandOrKey\n\n    const command = this._commands.get(key)\n    if (command) {\n      this._commands.delete(key)\n      this.emit(\"command:removed\", command)\n      return true\n    }\n    return false\n  }\n\n  removeByOwner(owner: string): number {\n    let removed = 0\n    for (const [key, command] of this._commands) {\n      if (command.owner === owner) {\n        this._commands.delete(key)\n        this.emit(\"command:removed\", command)\n        removed++\n      }\n    }\n    return removed\n  }\n\n  removeByCategory(category: CommandCategory): number {\n    let removed = 0\n    for (const [key, command] of this._commands) {\n      if (command.category === category) {\n        this._commands.delete(key)\n        this.emit(\"command:removed\", command)\n        removed++\n      }\n    }\n    return removed\n  }\n\n  has(key: CommandKey): boolean {\n    return this._commands.has(key)\n  }\n\n  // ============================================================================\n  // SEARCH & FILTERING\n  // ============================================================================\n\n  async search(\n    query: string,\n    options: SearchOptions = {},\n  ): Promise<SearchResult[]> {\n    const normalizedQuery = normalizeSearchTerm(query)\n    if (!normalizedQuery) {\n      return this.getAllAvailable(options)\n    }\n\n    const results: SearchResult[] = []\n    const queryTerms = normalizedQuery.split(/\\s+/)\n\n    for (const command of this._commands.values()) {\n      // Filter by options first\n      if (options.category && command.category !== options.category) continue\n      if (options.owner && command.owner !== options.owner) continue\n      if (\n        options.tags?.length &&\n        !options.tags.some((tag) => command.tags?.includes(tag))\n      )\n        continue\n\n      // Check availability\n      if (\n        !options.includeUnavailable &&\n        !(await this.isCommandAvailable(command))\n      ) {\n        continue\n      }\n\n      const score = calculateSearchScore(command, queryTerms)\n      if (score > 0) {\n        results.push({\n          command,\n          score,\n          matchedTerms: getMatchedTerms(command, queryTerms),\n        })\n      }\n    }\n\n    // Sort by score (desc) and priority (desc)\n    results.sort((a, b) => {\n      if (a.score !== b.score) return b.score - a.score\n      return (b.command.priority || 0) - (a.command.priority || 0)\n    })\n\n    return options.limit ? results.slice(0, options.limit) : results\n  }\n\n  private async getAllAvailable(\n    options: SearchOptions,\n  ): Promise<SearchResult[]> {\n    const results: SearchResult[] = []\n\n    for (const command of this._commands.values()) {\n      if (options.category && command.category !== options.category) continue\n      if (options.owner && command.owner !== options.owner) continue\n      if (\n        options.tags?.length &&\n        !options.tags.some((tag) => command.tags?.includes(tag))\n      )\n        continue\n\n      if (\n        !options.includeUnavailable &&\n        !(await this.isCommandAvailable(command))\n      ) {\n        continue\n      }\n\n      results.push({\n        command,\n        score: command.priority || 0,\n        matchedTerms: [],\n      })\n    }\n\n    // Sort by priority and recent usage\n    results.sort((a, b) => {\n      const aRecentIndex = this.recentCommands.indexOf(a.command.key)\n      const bRecentIndex = this.recentCommands.indexOf(b.command.key)\n\n      // Recent commands first\n      if (aRecentIndex >= 0 && bRecentIndex >= 0) {\n        return aRecentIndex - bRecentIndex\n      }\n      if (aRecentIndex >= 0) return -1\n      if (bRecentIndex >= 0) return 1\n\n      // Then by priority\n      return (b.command.priority || 0) - (a.command.priority || 0)\n    })\n\n    return options.limit ? results.slice(0, options.limit) : results\n  }\n\n  // ============================================================================\n  // COMMAND AVAILABILITY\n  // ============================================================================\n\n  async isCommandAvailable(command: Command): Promise<boolean> {\n    if (!command.when) return true\n\n    try {\n      return await command.when()\n    } catch (error) {\n      console.warn(\n        `Command availability check failed for ${command.key}:`,\n        error,\n      )\n      return false\n    }\n  }\n\n  async getAvailableCommands(\n    options: {\n      category?: CommandCategory\n      owner?: string\n    } = {},\n  ): Promise<Command[]> {\n    const available: Command[] = []\n\n    for (const command of this._commands.values()) {\n      if (options.category && command.category !== options.category) continue\n      if (options.owner && command.owner !== options.owner) continue\n\n      if (await this.isCommandAvailable(command)) {\n        available.push(command)\n      }\n    }\n\n    return available\n  }\n\n  // ============================================================================\n  // EXECUTION\n  // ============================================================================\n\n  async invoke<T = any>(\n    key: CommandKey,\n    input?: any,\n    source: \"palette\" | \"shortcut\" | \"api\" = \"api\",\n  ): Promise<T> {\n    const command = this._commands.get(key)\n    if (!command) {\n      const error = new CommandNotFoundError(key)\n      this.emit(\"command:error\", key, error)\n      throw error\n    }\n\n    // Check availability\n    if (!(await this.isCommandAvailable(command))) {\n      const error = new CommandUnavailableError(key)\n      this.emit(\"command:error\", key, error)\n      throw error\n    }\n\n    const context: CommandExecutionContext = {\n      command,\n      input,\n      startTime: new Date(),\n      source,\n    }\n\n    this.emit(\"command:executing\", context)\n\n    try {\n      // Execute with timeout\n      const result = await this.executeWithTimeout(command, input)\n\n      // Track execution\n      this.trackExecution(context, result)\n      this.addToRecent(key)\n\n      this.emit(\"command:completed\", context, result)\n      return result as T\n    } catch (error) {\n      const executionError =\n        error instanceof Error\n          ? new CommandExecutionError(key, error)\n          : new CommandExecutionError(key, new Error(String(error)))\n\n      this.emit(\"command:failed\", context, executionError)\n      throw executionError\n    }\n  }\n\n  private async executeWithTimeout<T>(\n    command: Command,\n    input?: any,\n  ): Promise<T> {\n    const timeoutMs = command.timeout || 30000\n\n    try {\n      return await withTimeout(\n        command.handle.call(this, input),\n        timeoutMs,\n        `Command timeout: ${command.key} (${timeoutMs}ms)`,\n      )\n    } catch (error) {\n      if (error instanceof Error && error.message.includes(\"timeout\")) {\n        throw new CommandTimeoutError(command.key, timeoutMs)\n      }\n      throw error\n    }\n  }\n\n  async attempt<T = any>(\n    key: CommandKey,\n    input?: any,\n    source: \"palette\" | \"shortcut\" | \"api\" = \"api\",\n  ): Promise<ExecutionResult<T>> {\n    try {\n      const result = await this.invoke<T>(key, input, source)\n      return { success: true, result, command: key }\n    } catch (error) {\n      return { success: false, error, command: key }\n    }\n  }\n\n  // ============================================================================\n  // EXECUTION TRACKING\n  // ============================================================================\n\n  private trackExecution(context: CommandExecutionContext, result: any): void {\n    this.executionHistory.push({\n      ...context,\n      // Don't store large results in history\n      input: typeof context.input === \"object\" ? \"<object>\" : context.input,\n    })\n\n    // Keep history size manageable\n    if (this.executionHistory.length > this.maxHistorySize) {\n      this.executionHistory.splice(\n        0,\n        this.executionHistory.length - this.maxHistorySize,\n      )\n    }\n  }\n\n  private addToRecent(key: CommandKey): void {\n    // Remove if already exists\n    const existingIndex = this.recentCommands.indexOf(key)\n    if (existingIndex >= 0) {\n      this.recentCommands.splice(existingIndex, 1)\n    }\n\n    // Add to front\n    this.recentCommands.unshift(key)\n\n    // Keep recent size manageable\n    if (this.recentCommands.length > this.maxRecentSize) {\n      this.recentCommands.splice(this.maxRecentSize)\n    }\n  }\n\n  getExecutionHistory(limit?: number): CommandExecutionContext[] {\n    return limit\n      ? this.executionHistory.slice(-limit)\n      : [...this.executionHistory]\n  }\n\n  getRecentCommands(): Command[] {\n    return this.recentCommands\n      .map((key) => this._commands.get(key))\n      .filter((cmd): cmd is Command => cmd !== undefined)\n  }\n\n  clearHistory(): void {\n    this.executionHistory = []\n    this.recentCommands = []\n    this.emit(\"history:cleared\")\n  }\n\n  // ============================================================================\n  // CATEGORIES & ORGANIZATION\n  // ============================================================================\n\n  getCommandsByCategory(): Map<CommandCategory, Command[]> {\n    const categories = new Map<CommandCategory, Command[]>()\n\n    for (const command of this._commands.values()) {\n      const category = command.category || \"custom\"\n      if (!categories.has(category)) {\n        categories.set(category, [])\n      }\n      categories.get(category)!.push(command)\n    }\n\n    return categories\n  }\n\n  getCategories(): CommandCategory[] {\n    const categories = new Set<CommandCategory>()\n    for (const command of this._commands.values()) {\n      categories.add(command.category || \"custom\")\n    }\n    return Array.from(categories)\n  }\n\n  // ============================================================================\n  // UTILITY METHODS\n  // ============================================================================\n\n  createInvoker(key: CommandKey): CommandHandler {\n    return new CommandHandler(key, this)\n  }\n\n  // Alias for backward compatibility\n  invoker(key: CommandKey): CommandHandler {\n    return this.createInvoker(key)\n  }\n\n  getStats(): CommanderStats {\n    return {\n      totalCommands: this._commands.size,\n      categories: this.getCategories().length,\n      executionHistory: this.executionHistory.length,\n      recentCommands: this.recentCommands.length,\n      listeners: Array.from(this.listeners.values()).flat().length,\n    }\n  }\n\n  // ============================================================================\n  // CLEANUP\n  // ============================================================================\n\n  destroy(): void {\n    this._commands.clear()\n    this.listeners.clear()\n    this.executionHistory = []\n    this.recentCommands = []\n  }\n}\n","import type { Command, CommandKey, CommandCategory } from \"./types\"\nimport { isValidCommandKey } from \"./utils\"\n\n// ============================================================================\n// COMMAND BUILDER PATTERN\n// ============================================================================\n\nexport class CommandBuilder<TInput = any, TOutput = any> {\n  private command: Partial<Command<TInput, TOutput>> = {}\n\n  /**\n   * Create a new CommandBuilder instance\n   */\n  static create<T = any, R = any>(key: string): CommandBuilder<T, R> {\n    return new CommandBuilder<T, R>().key(key as CommandKey)\n  }\n\n  /**\n   * Set the command key (required)\n   */\n  key(key: CommandKey): this {\n    if (!isValidCommandKey(key)) {\n      throw new Error(\"Command key must be a non-empty string\")\n    }\n    this.command.key = key\n    return this\n  }\n\n  /**\n   * Set the command label (required)\n   */\n  label(label: string): this {\n    if (!label || typeof label !== \"string\") {\n      throw new Error(\"Command label must be a non-empty string\")\n    }\n    this.command.label = label\n    return this\n  }\n\n  /**\n   * Set the command description\n   */\n  description(description: string): this {\n    this.command.description = description\n    return this\n  }\n\n  /**\n   * Set the command category\n   */\n  category(category: CommandCategory): this {\n    this.command.category = category\n    return this\n  }\n\n  /**\n   * Set the command owner\n   */\n  owner(owner: string): this {\n    this.command.owner = owner\n    return this\n  }\n\n  /**\n   * Add tags to the command\n   */\n  tags(...tags: string[]): this {\n    this.command.tags = [...(this.command.tags || []), ...tags]\n    return this\n  }\n\n  /**\n   * Set the command icon\n   */\n  icon(icon: string): this {\n    this.command.icon = icon\n    return this\n  }\n\n  /**\n   * Set the keyboard shortcut\n   */\n  shortcut(shortcut: string): this {\n    this.command.shortcut = shortcut\n    return this\n  }\n\n  /**\n   * Set the availability condition\n   */\n  when(condition: () => boolean | Promise<boolean>): this {\n    this.command.when = condition\n    return this\n  }\n\n  /**\n   * Add search keywords\n   */\n  searchKeywords(...keywords: string[]): this {\n    this.command.searchKeywords = [\n      ...(this.command.searchKeywords || []),\n      ...keywords,\n    ]\n    return this\n  }\n\n  /**\n   * Set the command priority\n   */\n  priority(priority: number): this {\n    this.command.priority = priority\n    return this\n  }\n\n  /**\n   * Set the command timeout\n   */\n  timeout(ms: number): this {\n    if (ms <= 0) {\n      throw new Error(\"Timeout must be a positive number\")\n    }\n    this.command.timeout = ms\n    return this\n  }\n\n  /**\n   * Set the command handler (required)\n   */\n  handle(handler: (input?: TInput) => Promise<TOutput>): this {\n    if (typeof handler !== \"function\") {\n      throw new Error(\"Command handler must be a function\")\n    }\n    this.command.handle = handler\n    return this\n  }\n\n  /**\n   * Build and return the command\n   */\n  build(): Command<TInput, TOutput> {\n    if (!this.command.key) {\n      throw new Error(\"Command key is required\")\n    }\n    if (!this.command.label) {\n      throw new Error(\"Command label is required\")\n    }\n    if (!this.command.handle) {\n      throw new Error(\"Command handle is required\")\n    }\n\n    return this.command as Command<TInput, TOutput>\n  }\n\n  /**\n   * Clone this builder to create a new one with the same configuration\n   */\n  clone(): CommandBuilder<TInput, TOutput> {\n    const cloned = new CommandBuilder<TInput, TOutput>()\n    cloned.command = { ...this.command }\n    return cloned\n  }\n\n  /**\n   * Reset the builder to start over\n   */\n  reset(): this {\n    this.command = {}\n    return this\n  }\n\n  /**\n   * Get the current command state (for debugging)\n   */\n  getState(): Partial<Command<TInput, TOutput>> {\n    return { ...this.command }\n  }\n}\n\n// ============================================================================\n// COMMAND TEMPLATES\n// ============================================================================\n\nexport class CommandTemplate {\n  /**\n   * Create a system command template\n   */\n  static system(): CommandBuilder {\n    return CommandBuilder.create(\"system:placeholder\")\n      .category(\"system\")\n      .owner(\"system\")\n      .priority(10)\n  }\n\n  /**\n   * Create a file command template\n   */\n  static file(): CommandBuilder {\n    return CommandBuilder.create(\"file:placeholder\")\n      .category(\"file\")\n      .tags(\"file\")\n      .priority(5)\n  }\n\n  /**\n   * Create a debug command template\n   */\n  static debug(): CommandBuilder {\n    return CommandBuilder.create(\"debug:placeholder\")\n      .category(\"debug\")\n      .owner(\"debug\")\n      .tags(\"debug\", \"development\")\n      .when(() => process.env.NODE_ENV === \"development\")\n      .priority(15)\n  }\n\n  /**\n   * Create a view command template\n   */\n  static view(): CommandBuilder {\n    return CommandBuilder.create(\"view:placeholder\")\n      .category(\"view\")\n      .tags(\"view\", \"ui\")\n      .priority(3)\n  }\n\n  /**\n   * Create a tools command template\n   */\n  static tools(): CommandBuilder {\n    return CommandBuilder.create(\"tools:placeholder\")\n      .category(\"tools\")\n      .tags(\"tools\", \"utility\")\n      .priority(8)\n  }\n\n  /**\n   * Create a custom command template\n   */\n  static custom(): CommandBuilder {\n    return CommandBuilder.create(\"custom:placeholder\")\n      .category(\"custom\")\n      .owner(\"temporary\")\n      .priority(1)\n  }\n}\n\n// ============================================================================\n// FLUENT HELPERS\n// ============================================================================\n\n/**\n * Start building a command with a fluent API\n */\nexport function command<TInput = any, TOutput = any>(\n  key: string,\n): CommandBuilder<TInput, TOutput> {\n  return CommandBuilder.create<TInput, TOutput>(key)\n}\n\n/**\n * Create a simple command quickly\n */\nexport function simpleCommand<TInput = any, TOutput = any>(\n  key: string,\n  label: string,\n  handler: (input?: TInput) => Promise<TOutput>,\n): Command<TInput, TOutput> {\n  return CommandBuilder.create<TInput, TOutput>(key)\n    .label(label)\n    .handle(handler)\n    .build()\n}\n\n// ============================================================================\n// VALIDATION HELPERS\n// ============================================================================\n\nexport function validateCommandConfiguration(\n  command: Partial<Command>,\n): string[] {\n  const errors: string[] = []\n\n  if (!command.key) {\n    errors.push(\"Command key is required\")\n  } else if (!isValidCommandKey(command.key)) {\n    errors.push(\"Command key must be a non-empty string\")\n  }\n\n  if (!command.label) {\n    errors.push(\"Command label is required\")\n  } else if (\n    typeof command.label !== \"string\" ||\n    command.label.trim().length === 0\n  ) {\n    errors.push(\"Command label must be a non-empty string\")\n  }\n\n  if (!command.handle) {\n    errors.push(\"Command handle is required\")\n  } else if (typeof command.handle !== \"function\") {\n    errors.push(\"Command handle must be a function\")\n  }\n\n  if (\n    command.timeout !== undefined &&\n    (typeof command.timeout !== \"number\" || command.timeout <= 0)\n  ) {\n    errors.push(\"Command timeout must be a positive number\")\n  }\n\n  if (command.priority !== undefined && typeof command.priority !== \"number\") {\n    errors.push(\"Command priority must be a number\")\n  }\n\n  return errors\n}\n","import {\n  createContext,\n  useContext,\n  useEffect,\n  useMemo,\n  useState,\n  useCallback,\n  ReactNode,\n} from \"react\"\nimport Commander from \"../commander\"\nimport type {\n  Command,\n  CommandKey,\n  CommandCategory,\n  SearchResult,\n  SearchOptions,\n  ExecutionResult,\n} from \"../types\"\n\n// ============================================================================\n// CONTEXT TYPES\n// ============================================================================\n\ninterface CommanderContextValue {\n  // Core commander instance\n  commander: Commander\n\n  // Command management\n  commands: () => Command[]\n  add: (command: Command) => Command\n  remove: (commandOrKey: string | CommandKey | Command) => boolean\n  removeByOwner: (owner: string) => number\n  removeByCategory: (category: CommandCategory) => number\n  has: (key: CommandKey) => boolean\n  getCommand: (key: CommandKey) => Command | undefined\n\n  // Execution\n  invoke: <T = any>(\n    key: CommandKey,\n    input?: any,\n    source?: \"palette\" | \"shortcut\" | \"api\",\n  ) => Promise<T>\n  attempt: <T = any>(\n    key: CommandKey,\n    input?: any,\n    source?: \"palette\" | \"shortcut\" | \"api\",\n  ) => Promise<ExecutionResult<T>>\n\n  // Search & filtering\n  search: (query: string, options?: SearchOptions) => Promise<SearchResult[]>\n  isCommandAvailable: (command: Command) => Promise<boolean>\n  getAvailableCommands: (options?: {\n    category?: CommandCategory\n    owner?: string\n  }) => Promise<Command[]>\n\n  // Organization\n  getCommandsByCategory: () => Map<CommandCategory, Command[]>\n  getCategories: () => CommandCategory[]\n\n  // History & tracking\n  getExecutionHistory: (limit?: number) => any[]\n  getRecentCommands: () => Command[]\n  clearHistory: () => void\n\n  // Events\n  listen: (\n    event: string,\n    callback: (...args: any[]) => void | Promise<void>,\n    options?: { once?: boolean },\n  ) => any\n  removeListener: (listener: any) => void\n\n  // Utilities\n  createInvoker: (key: CommandKey) => any\n  getStats: () => any\n\n  // State\n  isReady: boolean\n}\n\nconst CommanderContext = createContext<CommanderContextValue | null>(null)\n\n// ============================================================================\n// PROVIDER PROPS\n// ============================================================================\n\ninterface CommanderProviderProps {\n  children: ReactNode\n  commander: Commander\n  onReady?: (commander: Commander) => void\n  enableDevTools?: boolean\n}\n\n// ============================================================================\n// PROVIDER COMPONENT\n// ============================================================================\n\nexport function CommanderProvider({\n  children,\n  commander,\n  onReady,\n  enableDevTools = process.env.NODE_ENV === \"development\",\n}: CommanderProviderProps) {\n  // Setup dev tools and callbacks\n  useEffect(() => {\n    // Dev tools integration\n    if (enableDevTools && typeof window !== \"undefined\") {\n      // Expose commander globally for debugging\n      ;(window as any).__commander = commander\n\n      // Add dev commands\n      commander.add({\n        key: \"dev:inspect-commands\" as CommandKey,\n        label: \"Inspect All Commands\",\n        description: \"Log all registered commands to console\",\n        category: \"debug\",\n        icon: \"🔍\",\n        owner: \"dev-tools\",\n        tags: [\"debug\", \"inspect\"],\n        priority: 100,\n        handle: async () => {\n          console.group(\"📋 Registered Commands\")\n          commander.commands().forEach((cmd) => {\n            console.log(`${cmd.icon || \"📝\"} ${cmd.label}`, {\n              key: cmd.key,\n              category: cmd.category,\n              owner: cmd.owner,\n              shortcut: cmd.shortcut,\n              tags: cmd.tags,\n            })\n          })\n          console.groupEnd()\n          return {\n            commands: commander.commands(),\n            total: commander.commands().length,\n          }\n        },\n      })\n\n      commander.add({\n        key: \"dev:clear-history\" as CommandKey,\n        label: \"Clear Command History\",\n        description: \"Clear execution history and recent commands\",\n        category: \"debug\",\n        icon: \"🧹\",\n        owner: \"dev-tools\",\n        tags: [\"debug\", \"clear\"],\n        priority: 90,\n        handle: async () => {\n          commander.clearHistory()\n          console.log(\"Command history cleared\")\n          return { cleared: true }\n        },\n      })\n\n      commander.add({\n        key: \"dev:stats\" as CommandKey,\n        label: \"Show Commander Stats\",\n        description: \"Display commander statistics\",\n        category: \"debug\",\n        icon: \"📊\",\n        owner: \"dev-tools\",\n        tags: [\"debug\", \"stats\"],\n        priority: 80,\n        handle: async () => {\n          const stats = commander.getStats()\n          console.log(\"Commander Stats:\", stats)\n          return stats\n        },\n      })\n\n      commander.add({\n        key: \"dev:search-test\" as CommandKey,\n        label: \"Test Search System\",\n        description: \"Test search functionality with sample queries\",\n        category: \"debug\",\n        icon: \"🔎\",\n        owner: \"dev-tools\",\n        tags: [\"debug\", \"search\"],\n        priority: 70,\n        handle: async () => {\n          const queries = [\"save\", \"debug\", \"file\", \"system\"]\n          const results: any = {}\n\n          for (const query of queries) {\n            const searchResults = await commander.search(query, { limit: 3 })\n            results[query] = searchResults.map((r) => ({\n              label: r.command.label,\n              score: r.score,\n              matched: r.matchedTerms,\n            }))\n          }\n\n          console.log(\"Search Test Results:\", results)\n          return results\n        },\n      })\n    }\n\n    // Call onReady callback\n    onReady?.(commander)\n\n    // Cleanup dev tools on unmount\n    return () => {\n      if (enableDevTools && typeof window !== \"undefined\") {\n        delete (window as any).__commander\n        commander.removeByOwner(\"dev-tools\")\n      }\n    }\n  }, [commander, enableDevTools, onReady])\n\n  // Context value with all commander methods\n  const value = useMemo<CommanderContextValue>(\n    () => ({\n      // Core instance\n      commander,\n\n      // Command management\n      commands: () => commander.commands(),\n      add: (command: Command) => commander.add(command),\n      remove: (commandOrKey: string | CommandKey | Command) =>\n        commander.remove(commandOrKey),\n      removeByOwner: (owner: string) => commander.removeByOwner(owner),\n      removeByCategory: (category: CommandCategory) =>\n        commander.removeByCategory(category),\n      has: (key: CommandKey) => commander.has(key),\n      getCommand: (key: CommandKey) => commander.getCommand(key),\n\n      // Execution\n      invoke: <T = any,>(\n        key: CommandKey,\n        input?: any,\n        source: \"palette\" | \"shortcut\" | \"api\" = \"api\",\n      ) => commander.invoke<T>(key, input, source),\n      attempt: <T = any,>(\n        key: CommandKey,\n        input?: any,\n        source: \"palette\" | \"shortcut\" | \"api\" = \"api\",\n      ) => commander.attempt<T>(key, input, source),\n\n      // Search & filtering\n      search: (query: string, options?: SearchOptions) =>\n        commander.search(query, options),\n      isCommandAvailable: (command: Command) =>\n        commander.isCommandAvailable(command),\n      getAvailableCommands: (options?: {\n        category?: CommandCategory\n        owner?: string\n      }) => commander.getAvailableCommands(options),\n\n      // Organization\n      getCommandsByCategory: () => commander.getCommandsByCategory(),\n      getCategories: () => commander.getCategories(),\n\n      // History & tracking\n      getExecutionHistory: (limit?: number) =>\n        commander.getExecutionHistory(limit),\n      getRecentCommands: () => commander.getRecentCommands(),\n      clearHistory: () => commander.clearHistory(),\n\n      // Events\n      listen: (\n        event: string,\n        callback: (...args: any[]) => void | Promise<void>,\n        options?: { once?: boolean },\n      ) => commander.listen(event, callback, options),\n      removeListener: (listener: any) => commander.removeListener(listener),\n\n      // Utilities\n      createInvoker: (key: CommandKey) => commander.createInvoker(key),\n      getStats: () => commander.getStats(),\n\n      // State\n      isReady: true,\n    }),\n    [commander],\n  )\n\n  return (\n    <CommanderContext.Provider value={value}>\n      {children}\n    </CommanderContext.Provider>\n  )\n}\n\n// ============================================================================\n// HOOK TO ACCESS CONTEXT\n// ============================================================================\n\n/**\n * Hook to access the Commander context\n * Returns the full Commander API\n */\nexport function useCommander(): CommanderContextValue {\n  const context = useContext(CommanderContext)\n\n  if (!context) {\n    throw new Error(\n      \"useCommander must be used within a CommanderProvider. \" +\n        \"Wrap your app with <CommanderProvider> to use commander hooks.\",\n    )\n  }\n\n  if (!context.isReady) {\n    throw new Error(\"Commander is not ready yet.\")\n  }\n\n  return context\n}\n\n// ============================================================================\n// CONVENIENCE HOOKS\n// ============================================================================\n\n/**\n * Hook to get just the commander instance\n */\nexport function useCommanderInstance(): Commander {\n  const { commander } = useCommander()\n  return commander\n}\n\n/**\n * Hook for direct command execution\n */\nexport function useInvoke() {\n  const { invoke } = useCommander()\n  return invoke\n}\n\n/**\n * Hook for safe command execution\n */\nexport function useAttempt() {\n  const { attempt } = useCommander()\n  return attempt\n}\n\n/**\n * Hook for command search\n */\nexport function useSearch() {\n  const { search } = useCommander()\n  return search\n}\n\n/**\n * Hook to get all commands\n */\nexport function useCommands() {\n  const { commands } = useCommander()\n  return commands()\n}\n\n/**\n * Hook to get commands by category\n */\nexport function useCommandsByCategory() {\n  const { getCommandsByCategory } = useCommander()\n  return getCommandsByCategory()\n}\n\n/**\n * Hook to get recent commands\n */\nexport function useRecentCommands() {\n  const { getRecentCommands } = useCommander()\n  return getRecentCommands()\n}\n\n/**\n * Hook to get command stats\n */\nexport function useCommanderStats() {\n  const { getStats } = useCommander()\n  return getStats()\n}\n","import { useEffect, useMemo, useCallback, useState } from \"react\"\nimport { useCommander } from \"./context\"\nimport type { Command, CommandKey, CommandCategory } from \"../types\"\n\n// ============================================================================\n// TYPES\n// ============================================================================\n\ninterface UseCustomCommandProps<TInput = any, TOutput = any> {\n  key: string\n  label?: string\n  description?: string\n  category?: CommandCategory\n  tags?: string[]\n  icon?: string\n  shortcut?: string\n  when?: () => boolean | Promise<boolean>\n  handle: (input?: TInput) => Promise<TOutput>\n  timeout?: number\n  priority?: number\n  owner?: string\n  searchKeywords?: string[]\n}\n\ninterface CustomCommandInvoker<TInput, TOutput> {\n  key: CommandKey\n  exists: () => boolean\n  isAvailable: () => Promise<boolean>\n  invoke: (\n    input?: TInput,\n    source?: \"palette\" | \"shortcut\" | \"api\",\n  ) => Promise<TOutput>\n  attempt: (\n    input?: TInput,\n    source?: \"palette\" | \"shortcut\" | \"api\",\n  ) => Promise<{\n    success: boolean\n    result?: TOutput\n    error?: any\n    command: CommandKey\n  }>\n  getCommand: () => Command<TInput, TOutput> | undefined\n}\n\n// ============================================================================\n// MAIN HOOK\n// ============================================================================\n\n/**\n * Hook to register a temporary command that exists only while the component is mounted\n *\n * @param props Command configuration\n * @returns Invoker object for executing the command\n *\n * @example\n * ```tsx\n * function FileEditor({ file }) {\n *   const saveInvoker = useCustomCommand({\n *     key: `file:save:${file.id}`,\n *     label: `Save ${file.name}`,\n *     icon: '💾',\n *     shortcut: 'ctrl+s',\n *     handle: async () => saveFile(file)\n *   });\n *\n *   // Command is automatically registered and appears in Command Palette\n *   // Execute programmatically if needed:\n *   const handleSave = () => saveInvoker.invoke();\n * }\n * ```\n */\nexport function useCustomCommand<TInput = any, TOutput = any>(\n  props: UseCustomCommandProps<TInput, TOutput>,\n): CustomCommandInvoker<TInput, TOutput> {\n  const commander = useCommander()\n\n  const {\n    key,\n    label,\n    description,\n    category = \"custom\",\n    tags = [],\n    icon,\n    shortcut,\n    when,\n    handle,\n    timeout,\n    priority,\n    owner = \"temporary\",\n    searchKeywords = [],\n  } = props\n\n  // Memoize command to avoid unnecessary re-registrations\n  const command = useMemo<Command<TInput, TOutput>>(\n    () => ({\n      key: key as CommandKey,\n      label: label || key,\n      description,\n      category,\n      tags,\n      icon,\n      shortcut,\n      when,\n      handle,\n      timeout,\n      priority,\n      owner,\n      searchKeywords,\n    }),\n    [\n      key,\n      label,\n      description,\n      category,\n      tags.join(\",\"),\n      icon,\n      shortcut,\n      when,\n      handle,\n      timeout,\n      priority,\n      owner,\n      searchKeywords.join(\",\"),\n    ],\n  )\n\n  // Register command on mount, remove on unmount\n  useEffect(() => {\n    try {\n      const registeredCommand = commander.add(command)\n\n      // Return cleanup function\n      return () => {\n        commander.remove(registeredCommand)\n      }\n    } catch (error) {\n      console.error(`Failed to register custom command \"${key}\":`, error)\n    }\n  }, [commander, command, key])\n\n  // Create invoker object\n  const invoker = useMemo<CustomCommandInvoker<TInput, TOutput>>(() => {\n    const commandKey = key as CommandKey\n\n    return {\n      key: commandKey,\n\n      exists: () => commander.has(commandKey),\n\n      isAvailable: async () => {\n        const cmd = commander.getCommand(commandKey)\n        return cmd ? commander.isCommandAvailable(cmd) : false\n      },\n\n      invoke: async (\n        input?: TInput,\n        source: \"palette\" | \"shortcut\" | \"api\" = \"api\",\n      ) => {\n        return commander.invoke<TOutput>(commandKey, input, source)\n      },\n\n      attempt: async (\n        input?: TInput,\n        source: \"palette\" | \"shortcut\" | \"api\" = \"api\",\n      ) => {\n        return commander.attempt<TOutput>(commandKey, input, source)\n      },\n\n      getCommand: () =>\n        commander.getCommand(commandKey) as\n          | Command<TInput, TOutput>\n          | undefined,\n    }\n  }, [commander, key])\n\n  return invoker\n}\n\n// ============================================================================\n// SPECIALIZED HOOKS\n// ============================================================================\n\n/**\n * Hook for creating a simple action command (no input/output)\n */\nexport function useAction(\n  key: string,\n  label: string,\n  action: () => Promise<void> | void,\n  options: Partial<\n    Omit<UseCustomCommandProps<void, void>, \"key\" | \"label\" | \"handle\">\n  > = {},\n): CustomCommandInvoker<void, void> {\n  return useCustomCommand<void, void>({\n    key,\n    label,\n    handle: async () => {\n      await action()\n    },\n    ...options,\n  })\n}\n\n/**\n * Hook for creating a toggle command\n */\nexport function useToggleCommand(\n  key: string,\n  label: string,\n  isActive: boolean,\n  onToggle: (newState: boolean) => Promise<void> | void,\n  options: Partial<\n    Omit<UseCustomCommandProps<void, boolean>, \"key\" | \"label\" | \"handle\">\n  > = {},\n): CustomCommandInvoker<void, boolean> {\n  return useCustomCommand<void, boolean>({\n    key,\n    label: `${isActive ? \"Disable\" : \"Enable\"} ${label}`,\n    icon: isActive ? \"🔴\" : \"🟢\",\n    handle: async () => {\n      const newState = !isActive\n      await onToggle(newState)\n      return newState\n    },\n    ...options,\n  })\n}\n\n/**\n * Hook for creating a modal command that returns a promise\n */\nexport function useModalCommand<TInput, TOutput>(\n  key: string,\n  label: string,\n  openModal: (input?: TInput) => Promise<TOutput>,\n  options: Partial<\n    Omit<UseCustomCommandProps<TInput, TOutput>, \"key\" | \"label\" | \"handle\">\n  > = {},\n): CustomCommandInvoker<TInput, TOutput> {\n  return useCustomCommand<TInput, TOutput>({\n    key,\n    label,\n    handle: openModal,\n    category: \"tools\",\n    ...options,\n  })\n}\n\n/**\n * Hook for creating a navigation command\n */\nexport function useNavigationCommand(\n  key: string,\n  label: string,\n  path: string,\n  navigate: (path: string, state?: any) => void,\n  options: Partial<\n    Omit<UseCustomCommandProps<void, void>, \"key\" | \"label\" | \"handle\">\n  > = {},\n): CustomCommandInvoker<void, void> {\n  return useCustomCommand<void, void>({\n    key,\n    label,\n    category: \"view\",\n    icon: \"🔗\",\n    handle: async () => {\n      navigate(path)\n    },\n    ...options,\n  })\n}\n\n/**\n * Hook for creating contextual commands based on data\n */\nexport function useContextualCommands<TData>(\n  data: TData[],\n  commandFactory: (item: TData, index: number) => UseCustomCommandProps,\n) {\n  const commander = useCommander()\n  const invokers: CustomCommandInvoker<any, any>[] = []\n\n  useEffect(() => {\n    const registeredCommands: Command[] = []\n\n    // Register commands for each data item\n    data.forEach((item, index) => {\n      try {\n        const commandProps = commandFactory(item, index)\n        const command: Command = {\n          key: commandProps.key as CommandKey,\n          label: commandProps.label || commandProps.key,\n          description: commandProps.description,\n          category: commandProps.category || \"custom\",\n          tags: commandProps.tags || [],\n          icon: commandProps.icon,\n          shortcut: commandProps.shortcut,\n          when: commandProps.when,\n          handle: commandProps.handle,\n          timeout: commandProps.timeout,\n          priority: commandProps.priority,\n          owner: commandProps.owner || \"contextual\",\n          searchKeywords: commandProps.searchKeywords,\n        }\n\n        const registeredCommand = commander.add(command)\n        registeredCommands.push(registeredCommand)\n      } catch (error) {\n        console.error(\n          `Failed to register contextual command for item ${index}:`,\n          error,\n        )\n      }\n    })\n\n    // Cleanup all registered commands\n    return () => {\n      registeredCommands.forEach((command) => {\n        commander.remove(command)\n      })\n    }\n  }, [data, commandFactory, commander])\n\n  return {\n    count: data.length,\n    refresh: useCallback(() => {\n      // Force re-registration by updating the effect dependencies\n      // This is handled automatically by the useEffect dependencies\n    }, []),\n  }\n}\n\n// ============================================================================\n// UTILITY HOOKS\n// ============================================================================\n\n/**\n * Hook to check if a custom command exists and is available\n */\nexport function useCommandStatus(key: CommandKey) {\n  const commander = useCommander()\n  const [isExecuting, setIsExecuting] = useState(false)\n  const [lastResult, setLastResult] = useState<any>(undefined)\n  const [lastError, setLastError] = useState<any>(undefined)\n\n  const exists = commander.has(key)\n\n  const checkAvailability = useCallback(async () => {\n    const command = commander.getCommand(key)\n    return command ? commander.isCommandAvailable(command) : false\n  }, [commander, key])\n\n  useEffect(() => {\n    const executingListener = commander.listen(\n      \"command:executing\",\n      (context) => {\n        if (context.command.key === key) {\n          setIsExecuting(true)\n          setLastError(undefined)\n        }\n      },\n    )\n\n    const completedListener = commander.listen(\n      \"command:completed\",\n      (context, result) => {\n        if (context.command.key === key) {\n          setIsExecuting(false)\n          setLastResult(result)\n        }\n      },\n    )\n\n    const failedListener = commander.listen(\n      \"command:failed\",\n      (context, error) => {\n        if (context.command.key === key) {\n          setIsExecuting(false)\n          setLastError(error)\n        }\n      },\n    )\n\n    return () => {\n      commander.removeListener(executingListener)\n      commander.removeListener(completedListener)\n      commander.removeListener(failedListener)\n    }\n  }, [commander, key])\n\n  return {\n    exists,\n    checkAvailability,\n    isExecuting,\n    lastResult,\n    lastError,\n  }\n}\n\n/**\n * Hook to listen for custom command events\n */\nexport function useCommandEvents(\n  key: CommandKey,\n  handlers: {\n    onExecuting?: (context: any) => void\n    onExecuted?: (context: { result: any }) => void\n    onError?: (error: any) => void\n  },\n) {\n  const commander = useCommander()\n\n  useEffect(() => {\n    const listeners: any[] = []\n\n    if (handlers.onExecuting) {\n      const listener = commander.listen(\"command:executing\", (context) => {\n        if (context.command.key === key) {\n          handlers.onExecuting!(context)\n        }\n      })\n      listeners.push(listener)\n    }\n\n    if (handlers.onExecuted) {\n      const listener = commander.listen(\n        \"command:completed\",\n        (context, result) => {\n          if (context.command.key === key) {\n            handlers.onExecuted!({ result })\n          }\n        },\n      )\n      listeners.push(listener)\n    }\n\n    if (handlers.onError) {\n      const listener = commander.listen(\"command:failed\", (context, error) => {\n        if (context.command.key === key) {\n          handlers.onError!(error)\n        }\n      })\n      listeners.push(listener)\n    }\n\n    return () => {\n      listeners.forEach((listener) => {\n        commander.removeListener(listener)\n      })\n    }\n  }, [\n    commander,\n    key,\n    handlers.onExecuting,\n    handlers.onExecuted,\n    handlers.onError,\n  ])\n}\n","import { useCallback, useMemo, useState, useEffect, useRef } from \"react\"\nimport { useCommander } from \"./context\"\nimport type { Command, CommandKey, ExecutionResult } from \"../types\"\n\n// ============================================================================\n// TYPES\n// ============================================================================\n\nexport type CommandSource = \"palette\" | \"shortcut\" | \"api\"\n\nexport interface UseCommandOptions<TInput = any, TOutput = any> {\n  // Execução\n  source?: CommandSource\n  throwOnError?: boolean\n  timeout?: number\n\n  // Retry & Debounce\n  retry?: number\n  retryDelay?: number | ((attempt: number) => number)\n  debounce?: number\n  throttle?: number\n\n  // Input handling\n  defaultInput?: Partial<TInput>\n  validateInput?: (input?: TInput) => boolean | string\n  transformInput?: (input?: TInput) => TInput\n\n  // Output handling\n  transformOutput?: (output: TOutput) => TOutput\n\n  // Callbacks\n  onSuccess?: (result: TOutput, input?: TInput) => void\n  onError?: (error: Error, input?: TInput) => void\n  onFinally?: (input?: TInput) => void\n\n  // Estado\n  resetOnKeyChange?: boolean\n}\n\nexport interface CommandInvoker<TInput = any, TOutput = any> {\n  // Estado do comando\n  exists: boolean\n  isAvailable: boolean\n  isLoading: boolean\n\n  // Resultados\n  lastResult: TOutput | null\n  lastError: Error | null\n  lastInput: TInput | null\n  lastExecution: Date | null\n  executionCount: number\n\n  // Comando completo\n  command: Command<TInput, TOutput> | null\n\n  // Métodos de execução\n  invoke: (\n    input?: TInput,\n    options?: Partial<UseCommandOptions<TInput, TOutput>>,\n  ) => Promise<TOutput>\n  attempt: (\n    input?: TInput,\n    options?: Partial<UseCommandOptions<TInput, TOutput>>,\n  ) => Promise<ExecutionResult<TOutput>>\n  execute: (\n    input?: TInput,\n    callbacks?: ExecuteCallbacks<TInput, TOutput>,\n  ) => Promise<TOutput | null>\n\n  // Verificações\n  canInvoke: (input?: TInput) => Promise<boolean>\n  validateInput: (input?: TInput) => boolean | string\n\n  // Estado\n  reset: () => void\n  clearError: () => void\n\n  // Utilitários\n  refresh: () => void\n}\n\nexport interface ExecuteCallbacks<TInput = any, TOutput = any> {\n  onSuccess?: (result: TOutput, input?: TInput) => void\n  onError?: (error: Error, input?: TInput) => void\n  onFinally?: (input?: TInput) => void\n}\n\n// ============================================================================\n// UTILITIES\n// ============================================================================\n\nfunction createRetryDelay(delay: number | ((attempt: number) => number)) {\n  return typeof delay === \"function\" ? delay : () => delay\n}\n\nfunction debouncePromise<T extends (...args: any[]) => Promise<any>>(\n  fn: T,\n  delay: number,\n): T {\n  let timeoutId: NodeJS.Timeout | null = null\n  let resolvePromise: ((value: any) => void) | null = null\n  let rejectPromise: ((error: any) => void) | null = null\n\n  return (async (...args: Parameters<T>) => {\n    return new Promise<Awaited<ReturnType<T>>>((resolve, reject) => {\n      if (timeoutId) {\n        clearTimeout(timeoutId)\n        if (rejectPromise) {\n          rejectPromise(new Error(\"Debounced\"))\n        }\n      }\n\n      resolvePromise = resolve\n      rejectPromise = reject\n\n      timeoutId = setTimeout(async () => {\n        try {\n          const result = await fn(...args)\n          if (resolvePromise) resolvePromise(result)\n        } catch (error) {\n          if (rejectPromise) rejectPromise(error)\n        }\n      }, delay)\n    })\n  }) as T\n}\n\nfunction throttlePromise<T extends (...args: any[]) => Promise<any>>(\n  fn: T,\n  delay: number,\n): T {\n  let lastExecution = 0\n  let pending: Promise<Awaited<ReturnType<T>>> | null = null\n\n  return (async (...args: Parameters<T>) => {\n    const now = Date.now()\n\n    if (pending) {\n      return pending\n    }\n\n    if (now - lastExecution < delay) {\n      return new Promise<Awaited<ReturnType<T>>>((resolve, reject) => {\n        setTimeout(\n          async () => {\n            try {\n              const result = await fn(...args)\n              resolve(result)\n            } catch (error) {\n              reject(error)\n            }\n            pending = null\n          },\n          delay - (now - lastExecution),\n        )\n      })\n    }\n\n    lastExecution = now\n    pending = fn(...args)\n    const result = await pending\n    pending = null\n    return result\n  }) as T\n}\n\n// ============================================================================\n// MAIN HOOK\n// ============================================================================\n\n/**\n * Hook para executar comandos existentes no Commander\n *\n * @param key - Chave do comando a ser executado\n * @param options - Opções de configuração\n * @returns CommandInvoker com estado e métodos de execução\n */\nexport function useCommand<TInput = any, TOutput = any>(\n  key: CommandKey,\n  options: UseCommandOptions<TInput, TOutput> = {},\n): CommandInvoker<TInput, TOutput> {\n  const commander = useCommander()\n\n  // Estado interno\n  const [isLoading, setIsLoading] = useState(false)\n  const [lastResult, setLastResult] = useState<TOutput | null>(null)\n  const [lastError, setLastError] = useState<Error | null>(null)\n  const [lastInput, setLastInput] = useState<TInput | null>(null)\n  const [lastExecution, setLastExecution] = useState<Date | null>(null)\n  const [executionCount, setExecutionCount] = useState(0)\n  const [isAvailable, setIsAvailable] = useState(false)\n\n  // Refs para callbacks estáveis\n  const optionsRef = useRef(options)\n  optionsRef.current = options\n\n  const {\n    source = \"api\",\n    throwOnError = true,\n    timeout,\n    retry = 0,\n    retryDelay = 1000,\n    debounce,\n    throttle,\n    defaultInput,\n    validateInput,\n    transformInput,\n    transformOutput,\n    onSuccess,\n    onError,\n    onFinally,\n    resetOnKeyChange = true,\n  } = options\n\n  // Estado do comando\n  const command = commander.getCommand(key)\n  const exists = !!command\n\n  // Reset quando key muda\n  useEffect(() => {\n    if (resetOnKeyChange) {\n      setLastResult(null)\n      setLastError(null)\n      setLastInput(null)\n      setLastExecution(null)\n      setExecutionCount(0)\n    }\n  }, [key, resetOnKeyChange])\n\n  // Verifica disponibilidade\n  useEffect(() => {\n    let mounted = true\n\n    const checkAvailability = async () => {\n      if (command) {\n        const available = await commander.isCommandAvailable(command)\n        if (mounted) {\n          setIsAvailable(available)\n        }\n      } else {\n        if (mounted) {\n          setIsAvailable(false)\n        }\n      }\n    }\n\n    checkAvailability()\n\n    // Re-verifica quando comandos mudam\n    const listener = commander.listen(\"command:added\", checkAvailability)\n    const listener2 = commander.listen(\"command:removed\", checkAvailability)\n\n    return () => {\n      mounted = false\n      commander.removeListener(listener)\n      commander.removeListener(listener2)\n    }\n  }, [commander, command, key])\n\n  // Função de validação de input\n  const inputValidator = useCallback(\n    (input?: TInput): boolean | string => {\n      if (validateInput) {\n        return validateInput(input)\n      }\n      return true\n    },\n    [validateInput],\n  )\n\n  // Verifica se pode invocar\n  const canInvoke = useCallback(\n    async (input?: TInput): Promise<boolean> => {\n      if (!exists || !isAvailable) return false\n\n      const validation = inputValidator(input)\n      if (validation !== true) return false\n\n      return true\n    },\n    [exists, isAvailable, inputValidator],\n  )\n\n  // Função principal de execução com retry\n  const executeWithRetry = useCallback(\n    async (\n      input?: TInput,\n      overrideOptions: Partial<UseCommandOptions<TInput, TOutput>> = {},\n    ): Promise<TOutput> => {\n      const finalOptions = { ...optionsRef.current, ...overrideOptions }\n      const retryDelayFn = createRetryDelay(\n        finalOptions.retryDelay || retryDelay,\n      )\n\n      let lastError: Error\n      let currentInput = input\n\n      // Transform input se necessário\n      if (finalOptions.transformInput || transformInput) {\n        const transformer = finalOptions.transformInput || transformInput\n        currentInput = transformer!(currentInput)\n      }\n\n      // Merge com defaultInput\n      if (defaultInput && currentInput) {\n        currentInput = { ...defaultInput, ...currentInput } as TInput\n      } else if (defaultInput && !currentInput) {\n        currentInput = defaultInput as TInput\n      }\n\n      // Validar input\n      const validation = inputValidator(currentInput)\n      if (validation !== true) {\n        throw new Error(\n          typeof validation === \"string\" ? validation : \"Invalid input\",\n        )\n      }\n\n      for (\n        let attempt = 0;\n        attempt <= (finalOptions.retry || retry);\n        attempt++\n      ) {\n        try {\n          const result = await commander.invoke<TOutput>(\n            key,\n            currentInput,\n            finalOptions.source || source,\n          )\n\n          // Transform output se necessário\n          let finalResult: TOutput = result\n          if (finalOptions.transformOutput || transformOutput) {\n            const transformer = finalOptions.transformOutput || transformOutput\n            finalResult = transformer!(result)\n          }\n\n          return finalResult\n        } catch (error) {\n          lastError = error instanceof Error ? error : new Error(String(error))\n\n          if (attempt < (finalOptions.retry || retry)) {\n            // Wait before retry\n            await new Promise((resolve) =>\n              setTimeout(resolve, retryDelayFn(attempt + 1)),\n            )\n          }\n        }\n      }\n\n      throw lastError!\n    },\n    [\n      commander,\n      key,\n      source,\n      retry,\n      retryDelay,\n      defaultInput,\n      transformInput,\n      transformOutput,\n      inputValidator,\n    ],\n  )\n\n  // Aplica debounce/throttle se necessário\n  const processedExecute = useMemo(() => {\n    let fn = executeWithRetry\n\n    if (debounce && debounce > 0) {\n      fn = debouncePromise(fn, debounce)\n    } else if (throttle && throttle > 0) {\n      fn = throttlePromise(fn, throttle)\n    }\n\n    return fn\n  }, [executeWithRetry, debounce, throttle])\n\n  // Função invoke principal\n  const invoke = useCallback(\n    async (\n      input?: TInput,\n      overrideOptions: Partial<UseCommandOptions<TInput, TOutput>> = {},\n    ): Promise<TOutput> => {\n      const finalOptions = { ...optionsRef.current, ...overrideOptions }\n\n      if (!(await canInvoke(input))) {\n        const error = new Error(\n          `Command \"${key}\" is not available or input is invalid`,\n        )\n        if (finalOptions.throwOnError !== false) {\n          throw error\n        }\n        return null as TOutput\n      }\n\n      setIsLoading(true)\n      setLastError(null)\n      setLastInput(input || null)\n\n      try {\n        const result = await processedExecute(input, overrideOptions)\n\n        setLastResult(result)\n        setLastExecution(new Date())\n        setExecutionCount((prev) => prev + 1)\n\n        // Callback de sucesso\n        const successCallback = finalOptions.onSuccess || onSuccess\n        if (successCallback) {\n          successCallback(result, input)\n        }\n\n        return result\n      } catch (error) {\n        const err = error instanceof Error ? error : new Error(String(error))\n\n        setLastError(err)\n\n        // Callback de erro\n        const errorCallback = finalOptions.onError || onError\n        if (errorCallback) {\n          errorCallback(err, input)\n        }\n\n        if (finalOptions.throwOnError !== false) {\n          throw err\n        }\n\n        return null as TOutput\n      } finally {\n        setIsLoading(false)\n\n        // Callback final\n        const finallyCallback = finalOptions.onFinally || onFinally\n        if (finallyCallback) {\n          finallyCallback(input)\n        }\n      }\n    },\n    [key, canInvoke, processedExecute, onSuccess, onError, onFinally],\n  )\n\n  // Função attempt (não lança erro)\n  const attempt = useCallback(\n    async (\n      input?: TInput,\n      overrideOptions: Partial<UseCommandOptions<TInput, TOutput>> = {},\n    ): Promise<ExecutionResult<TOutput>> => {\n      try {\n        const result = await invoke(input, {\n          ...overrideOptions,\n          throwOnError: false,\n        })\n        return { success: true, result, command: key }\n      } catch (error) {\n        return {\n          success: false,\n          error: error instanceof Error ? error : new Error(String(error)),\n          command: key,\n        }\n      }\n    },\n    [invoke, key],\n  )\n\n  // Função execute com callbacks inline\n  const execute = useCallback(\n    async (\n      input?: TInput,\n      callbacks: ExecuteCallbacks<TInput, TOutput> = {},\n    ): Promise<TOutput | null> => {\n      try {\n        const result = await invoke(input, {\n          onSuccess: callbacks.onSuccess,\n          onError: callbacks.onError,\n          onFinally: callbacks.onFinally,\n          throwOnError: false,\n        })\n        return result\n      } catch (error) {\n        return null\n      }\n    },\n    [invoke],\n  )\n\n  // Funções de utilidade\n  const reset = useCallback(() => {\n    setLastResult(null)\n    setLastError(null)\n    setLastInput(null)\n    setLastExecution(null)\n    setExecutionCount(0)\n  }, [])\n\n  const clearError = useCallback(() => {\n    setLastError(null)\n  }, [])\n\n  const refresh = useCallback(() => {\n    // Force re-check availability\n    if (command) {\n      commander.isCommandAvailable(command).then(setIsAvailable)\n    }\n  }, [commander, command])\n\n  // Objeto CommandInvoker completo\n  const invoker: CommandInvoker<TInput, TOutput> = useMemo(\n    () => ({\n      // Estado\n      exists,\n      isAvailable,\n      isLoading,\n      lastResult,\n      lastError,\n      lastInput,\n      lastExecution,\n      executionCount,\n      command: command as Command<TInput, TOutput> | null,\n\n      // Métodos\n      invoke,\n      attempt,\n      execute,\n      canInvoke,\n      validateInput: inputValidator,\n      reset,\n      clearError,\n      refresh,\n    }),\n    [\n      exists,\n      isAvailable,\n      isLoading,\n      lastResult,\n      lastError,\n      lastInput,\n      lastExecution,\n      executionCount,\n      command,\n      invoke,\n      attempt,\n      execute,\n      canInvoke,\n      inputValidator,\n      reset,\n      clearError,\n      refresh,\n    ],\n  )\n\n  // Sempre retorna o CommandInvoker\n  return invoker\n}\n\n// ============================================================================\n// EXPORTS\n// ============================================================================\n\nexport default useCommand\n\n// Types are exported where they are declared\n","import { useCommand } from \"./useCommand\"\nimport type { CommandKey, ExecutionResult } from \"../types\"\nimport type {\n  CommandSource,\n  UseCommandOptions,\n  CommandInvoker,\n} from \"./useCommand\"\n\n// ============================================================================\n// TYPES\n// ============================================================================\n\nexport interface UseInvokerOptions<TInput = any, TOutput = any> {\n  source?: CommandSource\n  throwOnError?: boolean\n  defaultInput?: Partial<TInput>\n  onSuccess?: (result: TOutput) => void\n  onError?: (error: Error) => void\n}\n\n/**\n * Hook simplificado para execução de comandos\n *\n * Retorna diretamente a função de execução, sem necessidade de chamar .invoke()\n *\n * @param key - Chave do comando a ser executado\n * @param options - Opções simplificadas de configuração\n * @returns Função de execução direta\n */\nexport function useInvoker<TInput = any, TOutput = any>(\n  key: CommandKey,\n  options: UseInvokerOptions<TInput, TOutput> = {},\n): (input?: TInput) => Promise<TOutput> {\n  const {\n    source = \"api\",\n    throwOnError = true,\n    defaultInput,\n    onSuccess,\n    onError,\n  } = options\n\n  // Converte opções do useInvoker para useCommand\n  const commandOptions: UseCommandOptions<TInput, TOutput> = {\n    source,\n    throwOnError,\n    defaultInput,\n    onSuccess,\n    onError,\n  }\n\n  const commandInvoker = useCommand(key, commandOptions)\n\n  // Retorna apenas a função invoke\n  return commandInvoker.invoke\n}\n\n// ============================================================================\n// SPECIALIZED HOOKS\n// ============================================================================\n\n/**\n * Hook para comandos que não precisam de input\n */\nexport function useAction(\n  key: CommandKey,\n  options: Omit<UseInvokerOptions<void, any>, \"defaultInput\"> = {},\n): () => Promise<any> {\n  const invoke = useInvoker<void, any>(key, options)\n  return () => invoke()\n}\n\n/**\n * Hook que retorna sempre o objeto CommandInvoker (alias para useCommand)\n */\nexport function useCommandState<TInput = any, TOutput = any>(\n  key: CommandKey,\n  options: UseInvokerOptions<TInput, TOutput> = {},\n): CommandInvoker<TInput, TOutput> {\n  // Converte opções simplificadas para useCommand\n  const commandOptions: UseCommandOptions<TInput, TOutput> = {\n    source: options.source,\n    throwOnError: options.throwOnError,\n    defaultInput: options.defaultInput,\n    onSuccess: options.onSuccess,\n    onError: options.onError,\n  }\n\n  return useCommand(key, commandOptions)\n}\n\n/**\n * Hook para execução segura (nunca lança erro)\n */\nexport function useSafeInvoker<TInput = any, TOutput = any>(\n  key: CommandKey,\n  options: Omit<UseInvokerOptions<TInput, TOutput>, \"throwOnError\"> = {},\n): (input?: TInput) => Promise<ExecutionResult<TOutput>> {\n  const invoker = useCommand(key, {\n    ...options,\n    throwOnError: false,\n  })\n\n  return (input?: TInput) => invoker.attempt(input)\n}\n\n/**\n * Hook para comandos com input pré-configurado\n */\nexport function useBoundInvoker<TInput = any, TOutput = any>(\n  key: CommandKey,\n  boundInput: Partial<TInput>,\n  options: Omit<UseInvokerOptions<TInput, TOutput>, \"defaultInput\"> = {},\n): (input?: Partial<TInput>) => Promise<TOutput> {\n  const invoke = useInvoker<TInput, TOutput>(key, {\n    ...options,\n    defaultInput: boundInput,\n  })\n\n  return (input?: Partial<TInput>) => {\n    const mergedInput = { ...boundInput, ...input } as TInput\n    return invoke(mergedInput)\n  }\n}\n\n/**\n * Hook para comandos toggle (boolean)\n */\nexport function useToggleInvoker(\n  key: CommandKey,\n  options: Omit<UseInvokerOptions<boolean, boolean>, \"defaultInput\"> = {},\n): (state?: boolean) => Promise<boolean> {\n  const invoke = useInvoker<boolean, boolean>(key, options)\n  return (state?: boolean) => invoke(state)\n}\n\n// ============================================================================\n// BATCH EXECUTION HOOKS\n// ============================================================================\n\n/**\n * Hook para execução sequencial de múltiplos comandos\n */\nexport function useBatchInvoker(\n  keys: CommandKey[],\n  options: {\n    source?: CommandSource\n    stopOnError?: boolean\n    onProgress?: (completed: number, total: number) => void\n  } = {},\n): (\n  inputs?: any[],\n  batchOptions?: { stopOnError?: boolean },\n) => Promise<ExecutionResult[]> {\n  const invokers = keys.map((key) =>\n    useCommand(key, {\n      source: options.source,\n      throwOnError: false,\n    }),\n  )\n\n  return async (\n    inputs: any[] = [],\n    batchOptions: { stopOnError?: boolean } = {},\n  ) => {\n    const results: ExecutionResult[] = []\n    const stopOnError = batchOptions.stopOnError ?? options.stopOnError ?? false\n\n    for (let i = 0; i < keys.length; i++) {\n      const input = inputs[i]\n      const result = await invokers[i].attempt(input)\n\n      results.push(result)\n\n      if (options.onProgress) {\n        options.onProgress(i + 1, keys.length)\n      }\n\n      if (stopOnError && !result.success) {\n        break\n      }\n    }\n\n    return results\n  }\n}\n\n/**\n * Hook para execução paralela de múltiplos comandos\n */\nexport function useParallelInvoker(\n  keys: CommandKey[],\n  options: { source?: CommandSource } = {},\n): (inputs?: any[]) => Promise<PromiseSettledResult<any>[]> {\n  const invokers = keys.map((key) =>\n    useCommand(key, {\n      source: options.source,\n    }),\n  )\n\n  return async (inputs: any[] = []) => {\n    const promises = keys.map((_, i) => {\n      const input = inputs[i]\n      return invokers[i].invoke(input)\n    })\n\n    return Promise.allSettled(promises)\n  }\n}\n\n// ============================================================================\n// EXPORTS\n// ============================================================================\n\nexport default useInvoker\n\n// Re-export types from useCommand\nexport type {\n  CommandInvoker,\n  CommandSource,\n  UseCommandOptions,\n} from \"./useCommand\"\n"],"mappings":"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","names":["useAction","command","command","command","_a","command","import_react","command","import_react","delay","result","debounce","command","lastError","attempt","useAction"]}