src / toolsProvider.ts

/**
 * @file Merged tools provider — combines beledarian tools + memory tools + media tools.
 */

import type { Tool, ToolsProviderController } from "@lmstudio/sdk";
import { toolsProvider as beledarianToolsProvider } from "./tools/toolsProvider";
import { toolsProvider as memoryToolsProvider } from "./memory/toolsProvider";
import { createImageAnalysisTool, createBatchImageAnalysisTool, createCatalogImagesTool } from "./media/imageAnalysis";
import { createVideoAnalysisTool } from "./media/videoAnalysis";
import { createDesignSystemTools } from "./media/designSystems";
import { createDesignReferenceTools } from "./media/designReferences";
import { maestroConfigSchematics } from "./config";

export async function maestroToolsProvider(ctl: ToolsProviderController): Promise<Tool[]> {
  // Run both sub-providers in parallel
  const [beledTools, memTools] = await Promise.all([
    beledarianToolsProvider(ctl),
    memoryToolsProvider(ctl as any),
  ]);

  // Read config for media tool toggles
  const cfg = ctl.getPluginConfig(maestroConfigSchematics);
  const mediaTools: Tool[] = [];

  if (cfg.get("enableImageAnalysis")) {
    const imgMaxDim = cfg.get("imageMaxDimension") || 512;
    mediaTools.push(createImageAnalysisTool(ctl, imgMaxDim));
    mediaTools.push(createBatchImageAnalysisTool(ctl, imgMaxDim));
    mediaTools.push(createCatalogImagesTool(ctl));
  }
  if (cfg.get("enableVideoAnalysis")) {
    const frameCount = cfg.get("videoFrameCount") || 4;
    const vidMaxDim = cfg.get("videoFrameMaxDimension") || 384;
    mediaTools.push(createVideoAnalysisTool(ctl, frameCount, vidMaxDim));
  }

  // Design system tools + reference guides (when design mode is on)
  if (cfg.get("enableDesignMode")) {
    mediaTools.push(...createDesignSystemTools(ctl));
    mediaTools.push(...createDesignReferenceTools());
  }

  return [...beledTools, ...memTools, ...mediaTools];
}