"use strict";
/**
* @file Merged config schematics — single chain combining tools + memory + media fields.
*
* Simplified from 45 → 17 settings. Removed settings are hardcoded to sensible
* defaults throughout the codebase. Merged granular toggles into broader controls.
*
* IMPORTANT: The sub-namespace config exports (tools/config.ts → toolsPluginConfig,
* memory/config.ts → configSchematics) are still used by their respective modules
* via ctl.getPluginConfig(). Since SDK does structural key lookup at runtime,
* all keys present here will be readable through either sub-schematics object.
*/
Object.defineProperty(exports, "__esModule", { value: true });
exports.maestroConfigSchematics = void 0;
const sdk_1 = require("@lmstudio/sdk");
exports.maestroConfigSchematics = (0, sdk_1.createConfigSchematics)()
// ── Workspace ──────────────────────────────────────────────
.field("defaultWorkingDirectory", "string", {
displayName: "📂 Working Directory",
subtitle: "Starting directory for the plugin. The model can only access files inside this path. Leave empty for default (~/.maestro-toolbox/workspace).",
}, "")
// ── Permissions ────────────────────────────────────────────
.field("allowCodeExecution", "boolean", {
displayName: "⚡ Allow Code Execution",
subtitle: "Enable JavaScript, Python, Shell, Terminal, Database, and Test tools. DANGER: Code runs on your machine.",
}, false)
.field("allowMacOSIntegration", "boolean", {
displayName: "🍎 Allow macOS Integration",
subtitle: "Enable AppleScript, JXA, and Screenshot tools. Lets the model control macOS apps and capture the screen.",
}, false)
// ── Sub-Agent ──────────────────────────────────────────────
.field("enableSecondaryAgent", "boolean", {
displayName: "🤖 Enable Secondary Agent",
subtitle: "Auto-detects a second loaded model via LM Link. If only one model is loaded, it delegates to itself.",
}, false)
.field("subAgentFrequency", "select", {
displayName: "🤖 Sub-Agent Frequency",
subtitle: "Controls how often the agent is encouraged to delegate tasks to the secondary agent.",
options: [
{ value: "when_useful", displayName: "When useful — delegate summarization, memory, research" },
{ value: "always", displayName: "Always — delegate all auxiliary tasks" },
{ value: "hard_tasks", displayName: "Hard tasks only — delegate sparingly" },
{ value: "never", displayName: "Never — disable delegation hints entirely" },
],
}, "when_useful")
.field("subAgentPermissions", "select", {
displayName: "🤖 Sub-Agent Permissions",
subtitle: "What the secondary agent is allowed to do.",
options: [
{ value: "read_only", displayName: "Read-only — file reading and web search only" },
{ value: "standard", displayName: "Standard — file reading, web search, and memory (recommended)" },
{ value: "full", displayName: "Full — all of the above + code execution (DANGER)" },
],
}, "standard")
.field("enableAutoDebug", "boolean", {
displayName: "🤖 Auto-Debug Mode",
subtitle: "If enabled, coding tasks delegated to sub-agents will automatically trigger a second reviewer pass.",
}, false)
// ── Memory ─────────────────────────────────────────────────
.field("autoInjectMemories", "select", {
displayName: "🧠 Auto-Inject Memories",
subtitle: "Automatically add relevant memories to every conversation (via prompt preprocessor)",
options: [
{ value: "on", displayName: "On — inject relevant memories automatically (recommended)" },
{ value: "off", displayName: "Off — only recall when explicitly asked via tools" },
],
}, "on")
.field("contextMemoryCount", "numeric", {
displayName: "🧠 Context Memory Count",
subtitle: "How many memories to inject per message when auto-inject is on (1–15)",
min: 1,
max: 15,
int: true,
slider: { step: 1, min: 1, max: 15 },
}, 5)
.field("enableAIExtraction", "select", {
displayName: "🧠 AI Fact Extraction",
subtitle: "Use the loaded model to automatically extract facts from conversations",
options: [
{ value: "on", displayName: "On — AI extracts facts from your messages" },
{ value: "off", displayName: "Off — only store what you explicitly tell it to remember" },
],
}, "on")
.field("activeProject", "string", {
displayName: "🧠 Active Project",
subtitle: "Stable project slug for project-scoped retrieval and writes. When set, project memories for this project are auto-injected and AI-extracted durable facts inherit this project.",
}, "")
// ── Search ─────────────────────────────────────────────────
.field("searxngUrl", "string", {
displayName: "🔍 SearXNG URL",
subtitle: "URL of a SearXNG instance (e.g. http://localhost:8080). When set, uses SearXNG instead of DuckDuckGo for web searches. Leave empty to use DDG.",
}, "")
// ── Output ─────────────────────────────────────────────────
.field("toolOutputBudget", "select", {
displayName: "📏 Tool Output Budget",
subtitle: "How much text tools can return per call. Higher = more context used but better results. Match to your model's context window.",
options: [
{ value: "compact", displayName: "Compact (4K-8K) — for small context models (4K-20K)" },
{ value: "standard", displayName: "Standard (8K-16K) — for medium context models (32K-64K)" },
{ value: "generous", displayName: "Generous (16K-32K) — for large context models (128K+)" },
{ value: "maximum", displayName: "Maximum (32K-64K) — unlimited output, maximum detail" },
],
}, "generous")
// ── Features ───────────────────────────────────────────────
.field("enableDesignMode", "boolean", {
displayName: "🎨 Enable Design Mode",
subtitle: "Injects design knowledge + 70 real design systems (Apple, Figma, Notion, Nike, Tesla, etc.) the model can load on demand.",
}, false)
.field("enableMediaAnalysis", "boolean", {
displayName: "📷 Enable Media Analysis",
subtitle: "Enable image and video analysis tools. Requires ffmpeg for video.",
}, true)
.field("enableVideoRendering", "boolean", {
displayName: "🎬 Enable Video Rendering",
subtitle: "Enable render_html_video tool — renders HyperFrames-compatible HTML to MP4 via 'npx hyperframes render'. Requires Node 22+ and FFmpeg. Load 'video-composition' design reference for the HTML schema.",
}, false)
.build();
//# sourceMappingURL=config.js.map