dominus-cli 2.2.1 → 2.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/mcp.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/config/config.ts","../src/transport/protocol.ts","../src/transport/auth.ts","../src/transport/ws-client.ts","../src/transport/daemon-launcher.ts","../src/mcp/instructions.ts","../src/mcp/resources.ts","../src/mcp/result.ts","../src/mcp/tools/shared.ts","../src/mcp/tools/connections.ts","../src/docs/roblox-api.ts","../src/mcp/tools/docs.ts","../src/mcp/tools/parallel.ts","../src/mcp/tools/studio.ts","../src/mcp/server.ts","../src/mcp/index.ts"],"names":["path","fs","z","ref","propertiesSchema"],"mappings":"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","file":"mcp.js","sourcesContent":["import fs from 'node:fs';\nimport path from 'node:path';\nimport os from 'node:os';\nimport type { ConfigAccess } from '../tools/types.js';\n\nconst DOMINUS_DIR = path.join(os.homedir(), '.dominus');\nconst CONFIG_PATH = path.join(DOMINUS_DIR, 'config.json');\nconst DB_PATH = path.join(DOMINUS_DIR, 'dominus.db');\nconst RULES_PATH = path.join(DOMINUS_DIR, 'rules.json');\n\nexport type AIProviderType =\n | 'openai'\n | 'anthropic'\n | 'gemini'\n | 'xai'\n | 'openrouter'\n | 'custom';\n\nexport interface ProviderConfig {\n name: string;\n baseUrl: string;\n envVar: string;\n defaultModel: string;\n}\n\nexport const PROVIDERS: Record<AIProviderType, ProviderConfig> = {\n openai: {\n name: 'OpenAI',\n baseUrl: 'https://api.openai.com/v1',\n envVar: 'OPENAI_API_KEY',\n defaultModel: 'gpt-5.3-codex',\n },\n anthropic: {\n name: 'Anthropic',\n baseUrl: 'https://api.anthropic.com/v1/',\n envVar: 'ANTHROPIC_API_KEY',\n defaultModel: 'claude-sonnet-4-6',\n },\n gemini: {\n name: 'Google Gemini',\n baseUrl: 'https://generativelanguage.googleapis.com/v1beta/openai',\n envVar: 'GEMINI_API_KEY',\n defaultModel: 'gemini-3.1-pro',\n },\n xai: {\n name: 'xAI (Grok)',\n baseUrl: 'https://api.x.ai/v1',\n envVar: 'XAI_API_KEY',\n defaultModel: 'grok-4.2',\n },\n openrouter: {\n name: 'OpenRouter',\n baseUrl: 'https://openrouter.ai/api/v1',\n envVar: 'OPENROUTER_API_KEY',\n defaultModel: 'anthropic/claude-sonnet-4-6',\n },\n custom: {\n name: 'Custom',\n baseUrl: '',\n envVar: '',\n defaultModel: '',\n },\n};\n\nexport interface DominusConfig {\n provider: AIProviderType;\n apiKey?: string;\n apiBaseUrl: string;\n model: string;\n port: number;\n maxToolIterations: number;\n maxVerifyRetries: number;\n tokenBudget: number;\n autoIndex: boolean;\n autoLearn: boolean;\n userName: string;\n openCloudApiKey?: string;\n}\n\nconst DEFAULTS: DominusConfig = {\n provider: 'openai',\n apiBaseUrl: '',\n model: '',\n port: 18088,\n maxToolIterations: 25,\n maxVerifyRetries: 3,\n tokenBudget: 128000,\n autoIndex: true,\n autoLearn: true,\n userName: 'Developer',\n};\n\n/**\n * Auto-detect provider from environment variables.\n * Returns the first provider whose env var is set, or null.\n */\nexport function detectProviderFromEnv(): { provider: AIProviderType; apiKey: string } | null {\n const priority: AIProviderType[] = ['openai', 'anthropic', 'gemini', 'xai', 'openrouter'];\n for (const p of priority) {\n const key = process.env[PROVIDERS[p].envVar];\n if (key) return { provider: p, apiKey: key };\n }\n return null;\n}\n\n/**\n * Resolve the effective base URL and model for a provider config.\n */\nexport function resolveProviderSettings(config: DominusConfig): {\n baseUrl: string;\n model: string;\n} {\n const providerInfo = PROVIDERS[config.provider];\n return {\n baseUrl: config.apiBaseUrl || providerInfo?.baseUrl || PROVIDERS.openrouter.baseUrl,\n model: config.model || providerInfo?.defaultModel || 'gpt-4o',\n };\n}\n\nexport interface DominusRules {\n do: string[];\n dont: string[];\n conventions: string[];\n context: string;\n}\n\nconst DEFAULT_RULES: DominusRules = {\n do: [],\n dont: [],\n conventions: [],\n context: '',\n};\n\nfunction ensureDir(): void {\n if (!fs.existsSync(DOMINUS_DIR)) {\n fs.mkdirSync(DOMINUS_DIR, { recursive: true });\n }\n}\n\nfunction readJson<T>(filePath: string, defaults: T): T {\n try {\n if (fs.existsSync(filePath)) {\n const raw = fs.readFileSync(filePath, 'utf-8');\n return { ...defaults, ...JSON.parse(raw) };\n }\n } catch {\n // Corrupted file; reset to defaults\n }\n return { ...defaults };\n}\n\nfunction writeJson(filePath: string, data: unknown): void {\n ensureDir();\n fs.writeFileSync(filePath, JSON.stringify(data, null, 2), 'utf-8');\n}\n\nexport function loadConfig(): DominusConfig {\n ensureDir();\n return readJson(CONFIG_PATH, DEFAULTS);\n}\n\nexport function saveConfig(config: DominusConfig): void {\n writeJson(CONFIG_PATH, config);\n}\n\nexport function getConfigValue<K extends keyof DominusConfig>(key: K): DominusConfig[K] {\n const config = loadConfig();\n return config[key];\n}\n\nexport function setConfigValue<K extends keyof DominusConfig>(\n key: K,\n value: DominusConfig[K],\n): void {\n const config = loadConfig();\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (config as any)[key] = value;\n saveConfig(config);\n}\n\nexport function loadRules(): DominusRules {\n ensureDir();\n return readJson(RULES_PATH, DEFAULT_RULES);\n}\n\nexport function saveRules(rules: DominusRules): void {\n writeJson(RULES_PATH, rules);\n}\n\nexport function getDominusDir(): string {\n ensureDir();\n return DOMINUS_DIR;\n}\n\nexport function getDbPath(): string {\n ensureDir();\n return DB_PATH;\n}\n\nexport function createConfigAccess(): ConfigAccess {\n return {\n get<T>(key: string): T | undefined {\n const config = loadConfig() as unknown as Record<string, unknown>;\n return config[key] as T | undefined;\n },\n set(key: string, value: unknown): void {\n const config = loadConfig() as unknown as Record<string, unknown>;\n config[key] = value;\n saveConfig(config as unknown as DominusConfig);\n },\n getAll(): Record<string, unknown> {\n return loadConfig() as unknown as Record<string, unknown>;\n },\n };\n}\n","import { nanoid } from 'nanoid';\nimport { z } from 'zod';\n\nexport const DOMINUS_PROTOCOL_VERSION = 2;\nexport const MAX_MESSAGE_BYTES = 1024 * 1024;\n\nexport interface WsMessage<T = unknown> {\n id: string;\n type: string;\n payload: T;\n ts: number;\n}\n\nexport const StudioMsg = {\n HELLO: 'studio:hello',\n CONNECTED: 'studio:connected',\n DISCONNECTED: 'studio:disconnected',\n EXPLORER: 'studio:explorer',\n OUTPUT: 'studio:output',\n ERROR: 'studio:error',\n SELECTION: 'studio:selection',\n SCRIPT_CONTENT: 'studio:script:content',\n SCRIPT_CHANGED: 'studio:script:changed',\n RESPONSE: 'studio:response',\n REFLECTION: 'studio:reflection',\n TEST_RESULTS: 'studio:test:results',\n AUTHENTICATED: 'server:authenticated',\n AUTH_REJECTED: 'server:auth_rejected',\n} as const;\n\nexport const ControllerMsg = {\n HELLO: 'controller:hello',\n WELCOME: 'controller:welcome',\n RELAY: 'controller:relay',\n TARGET_STATE: 'controller:target_state',\n SET_ACTIVE_CONNECTION: 'controller:set_active_connection',\n} as const;\n\nexport const CliMsg = {\n GET_EXPLORER: 'cli:get:explorer',\n GET_SCRIPT: 'cli:get:script',\n SET_SCRIPT: 'cli:set:script',\n RUN_CODE: 'cli:run',\n GET_PROPERTIES: 'cli:get:properties',\n GET_DESCENDANTS_PROPERTIES: 'cli:get:descendants:properties',\n SET_PROPERTIES: 'cli:set:properties',\n INSERT_INSTANCE: 'cli:insert',\n DELETE_INSTANCE: 'cli:delete',\n GET_SELECTION: 'cli:get:selection',\n SELECT: 'cli:select',\n SEARCH_SCRIPTS: 'cli:search:scripts',\n GET_OUTPUT: 'cli:get:output',\n RUN_TESTS: 'cli:run:tests',\n EXECUTE_RUN_TEST: 'cli:test:run',\n EXECUTE_PLAY_TEST: 'cli:test:play',\n END_TEST: 'cli:test:end',\n BUILD_UI: 'cli:build:ui',\n GET_REFLECTION: 'cli:get:reflection',\n UPLOAD_ASSET: 'cli:upload:asset',\n SERIALIZE_UI: 'cli:serialize:ui',\n MOVE_INSTANCE: 'cli:move:instance',\n UNDO: 'cli:undo',\n REDO: 'cli:redo',\n BULK_SET_PROPERTIES: 'cli:bulk:set:properties',\n FIND_REPLACE_SCRIPTS: 'cli:find:replace:scripts',\n V2_GET_TREE: 'studio:v2:get_tree',\n V2_INSPECT: 'studio:v2:inspect',\n V2_GET_SELECTION: 'studio:v2:get_selection',\n V2_READ_SCRIPT: 'studio:v2:read_script',\n V2_UPDATE_SCRIPT: 'studio:v2:update_script',\n V2_APPLY: 'studio:v2:apply',\n V2_DELETE: 'studio:v2:delete',\n V2_BUILD_UI: 'studio:v2:build_ui',\n V2_SNAPSHOT_UI: 'studio:v2:snapshot_ui',\n V2_RUN_TEST: 'studio:v2:run_test',\n V2_GET_OUTPUT: 'studio:v2:get_output',\n V2_GET_REFLECTION: 'studio:v2:get_reflection',\n} as const;\n\nexport type StudioMsgType = (typeof StudioMsg)[keyof typeof StudioMsg];\nexport type CliMsgType = (typeof CliMsg)[keyof typeof CliMsg];\n\nexport interface ExplorerNode {\n name: string;\n className: string;\n path: string;\n ref?: InstanceRef;\n children?: ExplorerNode[];\n}\n\nexport interface InstanceRef {\n instanceId?: string;\n pathSegments?: string[];\n}\n\nexport interface StudioConnectedPayload {\n studioVersion: string;\n protocolVersion?: number;\n clientId?: string;\n token?: string;\n connectionId?: string;\n placeId?: number;\n placeName?: string;\n engineVersion?: string;\n}\n\nexport interface ScriptContentPayload {\n path: string;\n className: 'Script' | 'LocalScript' | 'ModuleScript';\n source: string;\n lineCount: number;\n}\n\nexport interface ScriptChangedPayload {\n path: string;\n source: string;\n}\n\nexport interface OutputPayload {\n message: string;\n level: 'info' | 'warn' | 'error';\n timestamp: number;\n source?: string;\n}\n\nexport interface SelectionPayload {\n paths: string[];\n classNames: string[];\n}\n\nexport interface PropertyEntry {\n name: string;\n value: string;\n type: string;\n category?: string;\n}\n\nexport interface TestResultPayload {\n name: string;\n passed: boolean;\n duration: number;\n error?: string;\n}\n\nexport interface StudioTestPayload {\n args?: unknown;\n}\n\nexport interface StudioTestResultPayload {\n success: boolean;\n result?: unknown;\n error?: string;\n duration?: number;\n}\n\nexport interface ReflectionPayload {\n className: string;\n properties: { name: string; type: string; category: string }[];\n methods: { name: string; parameters: string[] }[];\n events: { name: string; parameters: string[] }[];\n}\n\nexport interface RunCodePayload {\n code: string;\n}\n\nexport interface RunCodeResponsePayload {\n output: string;\n error?: string;\n duration: number;\n}\n\nexport interface SearchScriptsPayload {\n query: string;\n maxResults?: number;\n}\n\nexport interface SearchResultPayload {\n results: {\n path: string;\n className: string;\n matches: { line: number; text: string }[];\n }[];\n}\n\nexport interface InsertInstancePayload {\n className: string;\n parentPath: string;\n name: string;\n properties?: Record<string, unknown>;\n}\n\nexport interface SetPropertiesPayload {\n path: string;\n properties: Record<string, unknown>;\n}\n\nexport function createMessage<T>(type: string, payload: T): WsMessage<T> {\n return { id: nanoid(), type, payload, ts: Date.now() };\n}\n\nexport function createRequest<T>(type: string, payload: T): WsMessage<T> {\n return createMessage(type, payload);\n}\n\nexport function parseMessage(raw: string): WsMessage {\n if (Buffer.byteLength(raw, 'utf8') > MAX_MESSAGE_BYTES) {\n throw new Error(`WebSocket message exceeds ${MAX_MESSAGE_BYTES} bytes`);\n }\n try {\n const parsed = JSON.parse(raw) as unknown;\n return wsMessageSchema.parse(parsed) as WsMessage;\n } catch {\n throw new Error(`Failed to parse WebSocket message: ${raw.slice(0, 100)}`);\n }\n}\n\nexport function serializeMessage(msg: WsMessage): string {\n const serialized = JSON.stringify(msg);\n if (Buffer.byteLength(serialized, 'utf8') > MAX_MESSAGE_BYTES) {\n throw new Error(`WebSocket message exceeds ${MAX_MESSAGE_BYTES} bytes`);\n }\n return serialized;\n}\n\nconst wsMessageSchema = z\n .object({\n id: z.string().min(1).max(128),\n type: z.string().min(1).max(128),\n payload: z.unknown(),\n ts: z.number().finite(),\n })\n .strict();\n","import fs from 'node:fs';\nimport path from 'node:path';\nimport * as crypto from 'node:crypto';\nimport { getDominusDir } from '../config/config.js';\n\nconst TOKEN_FILE = 'bridge-token';\n\nexport function loadOrCreateBridgeToken(): string {\n const tokenPath = path.join(getDominusDir(), TOKEN_FILE);\n try {\n const existing = fs.readFileSync(tokenPath, 'utf8').trim();\n if (existing.length >= 32) return existing;\n } catch {\n // First run or an unreadable token is repaired below.\n }\n\n const token = crypto.randomBytes(32).toString('base64url');\n fs.writeFileSync(tokenPath, `${token}\\n`, { encoding: 'utf8', mode: 0o600 });\n try {\n fs.chmodSync(tokenPath, 0o600);\n } catch {\n // Windows ACLs do not map directly to POSIX modes.\n }\n return token;\n}\n\nexport function tokensEqual(actual: unknown, expected: string): boolean {\n if (typeof actual !== 'string') return false;\n const actualBuffer = Buffer.from(actual);\n const expectedBuffer = Buffer.from(expected);\n return (\n actualBuffer.length === expectedBuffer.length &&\n crypto.timingSafeEqual(actualBuffer, expectedBuffer)\n );\n}\n","import { EventEmitter } from 'node:events';\nimport { WebSocket } from 'ws';\nimport {\n ControllerMsg,\n DOMINUS_PROTOCOL_VERSION,\n StudioMsg,\n createMessage,\n parseMessage,\n serializeMessage,\n type WsMessage,\n} from './protocol.js';\nimport { loadOrCreateBridgeToken } from './auth.js';\nimport type { PlaceInfo, StudioBridge, StudioConnection } from './ws-server.js';\n\ninterface ClientOptions {\n token?: string;\n connectTimeoutMs?: number;\n}\n\ninterface ControlResult {\n success?: boolean;\n error?: string;\n [key: string]: unknown;\n}\n\nexport class DominusClient extends EventEmitter implements StudioBridge {\n private ws: WebSocket | null = null;\n private readonly port: number;\n private readonly token: string;\n private readonly connectTimeoutMs: number;\n private readonly connections = new Map<string, Omit<StudioConnection, 'ws'>>();\n private activeConnectionId: string | null = null;\n private readonly pendingRequests = new Map<\n string,\n {\n resolve: (msg: WsMessage) => void;\n reject: (err: Error) => void;\n timer: ReturnType<typeof setTimeout>;\n }\n >();\n\n constructor(port = 18088, options: ClientOptions = {}) {\n super();\n this.port = port;\n this.token = options.token ?? loadOrCreateBridgeToken();\n this.connectTimeoutMs = options.connectTimeoutMs ?? 8_000;\n }\n\n connect(): Promise<void> {\n return new Promise((resolve, reject) => {\n const ws = new WebSocket(`ws://127.0.0.1:${this.port}`, {\n perMessageDeflate: false,\n maxPayload: 1024 * 1024,\n });\n let settled = false;\n const timer = setTimeout(() => {\n if (!settled) {\n settled = true;\n ws.close(1008, 'Dominus controller handshake timed out');\n reject(new Error('Timed out authenticating with the Dominus bridge'));\n }\n }, this.connectTimeoutMs);\n\n ws.on('open', () => {\n this.ws = ws;\n ws.send(\n serializeMessage(\n createMessage(ControllerMsg.HELLO, {\n protocolVersion: DOMINUS_PROTOCOL_VERSION,\n token: this.token,\n }),\n ),\n );\n });\n\n ws.on('message', (raw) => {\n try {\n const msg = parseMessage(raw.toString());\n if (msg.type === ControllerMsg.WELCOME && !settled) {\n settled = true;\n clearTimeout(timer);\n this.applyWelcome(msg.payload);\n this.emit('server:started', { port: this.port, relay: true });\n resolve();\n return;\n }\n if (msg.type === StudioMsg.AUTH_REJECTED && !settled) {\n settled = true;\n clearTimeout(timer);\n const payload = msg.payload as { error?: string };\n reject(new Error(payload.error ?? 'Dominus controller authentication failed'));\n ws.close(1008, 'Controller authentication failed');\n return;\n }\n this.handleMessage(msg);\n } catch (err) {\n this.emit('server:error', err);\n }\n });\n\n ws.on('close', () => {\n clearTimeout(timer);\n this.ws = null;\n this.connections.clear();\n this.activeConnectionId = null;\n if (!settled) {\n settled = true;\n reject(new Error('Dominus bridge closed before authentication completed'));\n }\n this.rejectPending(new Error('Dominus relay connection lost'));\n this.emit('studio:disconnected');\n });\n\n ws.on('error', (err) => {\n if (!settled) {\n settled = true;\n clearTimeout(timer);\n reject(err);\n }\n this.emit('server:error', err);\n });\n });\n }\n\n private applyWelcome(payload: unknown): void {\n const welcome = payload as {\n connections?: PlaceInfo[];\n activeConnectionId?: string | null;\n };\n this.replaceConnections(welcome.connections ?? []);\n this.activeConnectionId = welcome.activeConnectionId ?? null;\n if (!this.resolveTargetInfo() && this.connections.size === 1) {\n this.activeConnectionId = this.connections.keys().next().value ?? null;\n }\n }\n\n private handleMessage(msg: WsMessage): void {\n if (msg.type === ControllerMsg.TARGET_STATE) {\n const payload = msg.payload as {\n connections?: PlaceInfo[];\n defaultActiveConnectionId?: string | null;\n };\n this.replaceConnections(payload.connections ?? []);\n if (this.activeConnectionId && !this.connections.has(this.activeConnectionId)) {\n this.activeConnectionId = null;\n }\n if (!this.activeConnectionId && this.connections.size === 1) {\n this.activeConnectionId = this.connections.keys().next().value ?? null;\n }\n this.emit('controller:target_state', payload);\n return;\n }\n\n if (msg.type === StudioMsg.CONNECTED) {\n const connection = msg.payload as PlaceInfo;\n this.connections.set(connection.connectionId, toConnectionInfo(connection));\n if (!this.activeConnectionId && this.connections.size === 1) {\n this.activeConnectionId = connection.connectionId;\n }\n this.emit('studio:connected', connection);\n return;\n }\n\n if (msg.type === StudioMsg.DISCONNECTED) {\n const payload = msg.payload as { connectionId?: string };\n if (payload.connectionId) this.connections.delete(payload.connectionId);\n if (this.activeConnectionId === payload.connectionId) this.activeConnectionId = null;\n if (!this.activeConnectionId && this.connections.size === 1) {\n this.activeConnectionId = this.connections.keys().next().value ?? null;\n }\n this.emit('studio:disconnected', payload);\n return;\n }\n\n if (msg.type === StudioMsg.RESPONSE) {\n const pending = this.pendingRequests.get(msg.id);\n if (pending) {\n clearTimeout(pending.timer);\n this.pendingRequests.delete(msg.id);\n pending.resolve(msg);\n }\n return;\n }\n\n this.emit(msg.type, msg.payload);\n this.emit('message', msg);\n }\n\n private replaceConnections(connections: PlaceInfo[]): void {\n this.connections.clear();\n for (const connection of connections) {\n this.connections.set(connection.connectionId, toConnectionInfo(connection));\n }\n }\n\n private sendMessage(message: WsMessage): void {\n if (!this.ws || this.ws.readyState !== WebSocket.OPEN) {\n throw new Error('Not connected to the Dominus bridge');\n }\n this.ws.send(serializeMessage(message));\n }\n\n private waitForResponse<T = unknown>(\n message: WsMessage,\n timeoutMs: number,\n ): Promise<WsMessage<T>> {\n return new Promise((resolve, reject) => {\n const timer = setTimeout(() => {\n this.pendingRequests.delete(message.id);\n reject(new Error(`Dominus request timed out: ${message.type}`));\n }, timeoutMs);\n this.pendingRequests.set(message.id, {\n resolve: resolve as (msg: WsMessage) => void,\n reject,\n timer,\n });\n try {\n this.sendMessage(message);\n } catch (err) {\n clearTimeout(timer);\n this.pendingRequests.delete(message.id);\n reject(err);\n }\n });\n }\n\n private async sendControlRequest<T extends ControlResult>(\n type: string,\n payload: unknown,\n timeoutMs = 10_000,\n ): Promise<T> {\n const response = await this.waitForResponse<T>(createMessage(type, payload), timeoutMs);\n const result = response.payload;\n if (result.error || result.success === false) throw new Error(result.error ?? `${type} failed`);\n return result;\n }\n\n sendRequest<T = unknown>(\n type: string,\n payload: unknown,\n timeoutMs = 15_000,\n ): Promise<WsMessage<T>> {\n const target = this.resolveTargetInfo();\n if (!target || !this.activeConnectionId) {\n return Promise.reject(\n new Error(\n this.connections.size > 1\n ? 'Multiple Studio sessions are connected. Call dominus_select_studio first.'\n : 'No authenticated Roblox Studio connection',\n ),\n );\n }\n const request = createMessage(type, payload);\n const relay = createMessage(ControllerMsg.RELAY, {\n connectionId: this.activeConnectionId,\n request,\n });\n return new Promise((resolve, reject) => {\n const timer = setTimeout(() => {\n this.pendingRequests.delete(request.id);\n reject(new Error(`Studio request timed out: ${type}`));\n }, timeoutMs);\n this.pendingRequests.set(request.id, {\n resolve: resolve as (msg: WsMessage) => void,\n reject,\n timer,\n });\n try {\n this.sendMessage(relay);\n } catch (err) {\n clearTimeout(timer);\n this.pendingRequests.delete(request.id);\n reject(err);\n }\n });\n }\n\n sendNotification(type: string, payload: unknown): void {\n if (!this.activeConnectionId) return;\n const request = createMessage(type, payload);\n this.sendMessage(\n createMessage(ControllerMsg.RELAY, {\n connectionId: this.activeConnectionId,\n request,\n }),\n );\n }\n\n isConnected(): boolean {\n return this.resolveTargetInfo() !== null;\n }\n\n getConnectionInfo(): StudioConnection | null {\n const target = this.resolveTargetInfo();\n if (!target || !this.ws) return null;\n return { ...target, ws: this.ws };\n }\n\n listConnections(): PlaceInfo[] {\n return [...this.connections.values()].map((connection) => ({\n placeId: connection.placeId ?? 0,\n connectionId: connection.connectionId,\n clientId: connection.clientId,\n placeName: connection.placeName,\n studioVersion: connection.studioVersion,\n connectedAt: connection.connectedAt,\n active: connection.connectionId === this.activeConnectionId,\n }));\n }\n\n getActiveConnectionId(): string | null {\n return this.activeConnectionId;\n }\n\n async setActiveConnectionId(connectionId: string | null): Promise<void> {\n if (connectionId && !this.connections.has(connectionId)) {\n throw new Error(`Studio connection ${connectionId} is not connected`);\n }\n await this.sendControlRequest(ControllerMsg.SET_ACTIVE_CONNECTION, { connectionId });\n this.activeConnectionId = connectionId;\n }\n\n getActivePlaceId(): number {\n return this.resolveTargetInfo()?.placeId ?? 0;\n }\n\n setActivePlaceId(placeId: number): void {\n if (placeId === 0) {\n void this.setActiveConnectionId(null);\n return;\n }\n const matches = [...this.connections.values()].filter(\n (connection) => connection.placeId === placeId,\n );\n if (matches.length !== 1) {\n throw new Error(\n matches.length === 0\n ? `Place ${placeId} is not connected`\n : `Place ${placeId} has multiple Studio sessions; select a connectionId instead`,\n );\n }\n void this.setActiveConnectionId(matches[0].connectionId);\n }\n\n private resolveTargetInfo(): Omit<StudioConnection, 'ws'> | null {\n if (this.activeConnectionId) return this.connections.get(this.activeConnectionId) ?? null;\n if (this.connections.size === 1) return this.connections.values().next().value ?? null;\n return null;\n }\n\n getPort(): number {\n return this.port;\n }\n\n stop(): Promise<void> {\n this.rejectPending(new Error('Dominus client is shutting down'));\n return new Promise((resolve) => {\n if (!this.ws) {\n resolve();\n return;\n }\n const ws = this.ws;\n this.ws = null;\n ws.once('close', resolve);\n ws.close(1000, 'Dominus client shutdown');\n });\n }\n\n private rejectPending(error: Error): void {\n for (const pending of this.pendingRequests.values()) {\n clearTimeout(pending.timer);\n pending.reject(error);\n }\n this.pendingRequests.clear();\n }\n}\n\nfunction toConnectionInfo(connection: PlaceInfo): Omit<StudioConnection, 'ws'> {\n return {\n connectedAt: connection.connectedAt,\n connectionId: connection.connectionId,\n clientId: connection.clientId,\n studioVersion: connection.studioVersion,\n placeId: connection.placeId,\n placeName: connection.placeName,\n };\n}\n\nexport async function isPortInUse(port: number): Promise<boolean> {\n return new Promise((resolve) => {\n const ws = new WebSocket(`ws://127.0.0.1:${port}`);\n const timer = setTimeout(() => {\n ws.close();\n resolve(false);\n }, 750);\n ws.on('open', () => {\n clearTimeout(timer);\n ws.close();\n resolve(true);\n });\n ws.on('error', () => {\n clearTimeout(timer);\n resolve(false);\n });\n });\n}\n","import fs from 'node:fs';\nimport path from 'node:path';\nimport { spawn } from 'node:child_process';\nimport { fileURLToPath } from 'node:url';\nimport { DominusClient, isPortInUse } from './ws-client.js';\n\nexport interface BridgeLaunchOptions {\n attempts?: number;\n connectTimeoutMs?: number;\n daemonPath?: string;\n launch?: (port: number) => void;\n retryDelayMs?: number;\n token?: string;\n}\n\nfunction resolveDaemonPath(): string {\n const besideEntry = fileURLToPath(new URL('./bridge-daemon.js', import.meta.url));\n if (fs.existsSync(besideEntry)) return besideEntry;\n\n const projectBuild = path.resolve(\n path.dirname(fileURLToPath(import.meta.url)),\n '../../dist/bridge-daemon.js',\n );\n if (fs.existsSync(projectBuild)) return projectBuild;\n\n throw new Error('Dominus bridge daemon is missing. Reinstall or rebuild dominus-cli.');\n}\n\nexport function launchBridgeDaemon(port: number, daemonPath = resolveDaemonPath()): void {\n const child = spawn(process.execPath, [daemonPath], {\n detached: true,\n env: { ...process.env, DOMINUS_BRIDGE_PORT: String(port) },\n stdio: 'ignore',\n windowsHide: true,\n });\n child.unref();\n}\n\nasync function connectController(\n port: number,\n timeoutMs: number,\n token?: string,\n): Promise<DominusClient> {\n const client = new DominusClient(port, { connectTimeoutMs: timeoutMs, token });\n try {\n await client.connect();\n return client;\n } catch (error) {\n await client.stop().catch(() => undefined);\n throw error;\n }\n}\n\nexport async function ensureBridgeDaemon(\n port: number,\n options: BridgeLaunchOptions = {},\n): Promise<DominusClient> {\n const attempts = options.attempts ?? 30;\n const connectTimeoutMs = options.connectTimeoutMs ?? 750;\n const retryDelayMs = options.retryDelayMs ?? 100;\n\n try {\n return await connectController(port, connectTimeoutMs, options.token);\n } catch (initialError) {\n if (await isPortInUse(port)) {\n throw new Error(\n `Port ${port} is occupied by a process that is not this Dominus bridge: ${formatError(initialError)}`,\n );\n }\n }\n\n const launch =\n options.launch ?? ((targetPort) => launchBridgeDaemon(targetPort, options.daemonPath));\n launch(port);\n\n let lastError: unknown;\n for (let attempt = 0; attempt < attempts; attempt += 1) {\n await new Promise((resolve) => setTimeout(resolve, retryDelayMs));\n try {\n return await connectController(port, connectTimeoutMs, options.token);\n } catch (error) {\n lastError = error;\n }\n }\n\n throw new Error(\n `Dominus could not start its local Studio bridge on port ${port}: ${formatError(lastError)}`,\n );\n}\n\nfunction formatError(error: unknown): string {\n return error instanceof Error ? error.message : String(error ?? 'unknown error');\n}\n","export const DOMINUS_MCP_INSTRUCTIONS = `Dominus 2 is a Roblox Studio engineering MCP server.\n\nRequired workflow for Studio changes:\n1. Call dominus_status. If Studio is disconnected, ask the user to run dominus-install-plugin only when the Studio Output reports an authentication failure. Select the intended authenticated Studio connection when more than one window is open.\n2. Inspect the relevant tree, selection, instances, scripts, and Roblox API references before editing.\n3. Form a short plan with explicit acceptance checks.\n4. Use stable instance refs returned by Dominus. Prefer instanceId; retain pathSegments as fallback context.\n5. Apply the smallest coherent mutation. Script updates require the expectedRevision returned by studio_read_script.\n6. Read the affected instances back and compare exact values, hierarchy, and source revisions.\n7. Run an appropriate Studio test when behavior changed. Report verification evidence and any remaining uncertainty.\n\nFor broad tasks with independent Studio branches, prefer run_parallel_task when the MCP client supports Sampling. Dominus partitions immediate child scopes, runs proposal-only workers concurrently, rejects unknown refs and overlapping writes, applies only the coordinator-approved atomic plan, and reads the result back. Use the normal workflow when Sampling is unavailable or the task is a simple edit.\n\nSafety rules:\n- Never invent instance IDs or Roblox API members.\n- Do not retry a failed write unchanged. Inspect the error and current state first.\n- Deletion is a separate destructive tool and requires explicit user intent.\n- studio_apply is transactional. Keep related edits together, but stay within its documented limits.\n- UI fidelity work must snapshot and inspect the result after building; verify fonts, UDim2 values, colors, strokes, and hierarchy.\n- Dominus intentionally has no arbitrary Luau execution tool.`;\n","import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport type { StudioBridge } from '../transport/ws-server.js';\nimport { DOMINUS_MCP_INSTRUCTIONS } from './instructions.js';\n\nexport function registerDominusResources(server: McpServer, bridge: StudioBridge): void {\n server.registerResource(\n 'dominus-status',\n 'dominus://status',\n {\n title: 'Dominus 2 Studio Status',\n description: 'Current authenticated Roblox Studio sessions and selected target.',\n mimeType: 'application/json',\n },\n async (uri) => ({\n contents: [\n {\n uri: uri.href,\n mimeType: 'application/json',\n text: JSON.stringify(\n {\n protocolVersion: 2,\n activeConnectionId: bridge.getActiveConnectionId(),\n connections: bridge.listConnections(),\n },\n null,\n 2,\n ),\n },\n ],\n }),\n );\n\n server.registerPrompt(\n 'dominus-workflow',\n {\n title: 'Dominus 2 Engineering Workflow',\n description: 'Inspect, plan, apply, verify, and test a Roblox Studio change safely.',\n },\n async () => ({\n messages: [\n {\n role: 'user',\n content: { type: 'text', text: DOMINUS_MCP_INSTRUCTIONS },\n },\n ],\n }),\n );\n}\n","import type { CallToolResult } from '@modelcontextprotocol/sdk/types.js';\n\nexport interface DominusToolOutput extends Record<string, unknown> {\n success: boolean;\n data?: Record<string, unknown>;\n error?: string;\n}\n\nexport function toolResult(output: DominusToolOutput): CallToolResult {\n return {\n content: [{ type: 'text', text: JSON.stringify(output, null, 2) }],\n structuredContent: output,\n isError: !output.success,\n };\n}\n\nexport function success(data: Record<string, unknown> = {}): CallToolResult {\n return toolResult({ success: true, data });\n}\n\nexport function failure(error: unknown, data?: Record<string, unknown>): CallToolResult {\n return toolResult({\n success: false,\n error: error instanceof Error ? error.message : String(error),\n data,\n });\n}\n","import { z } from 'zod';\nimport { CliMsg, type InstanceRef } from '../../transport/protocol.js';\nimport type { StudioBridge } from '../../transport/ws-server.js';\nimport { failure, success } from '../result.js';\n\nexport const instanceRefSchema = z\n .object({\n instanceId: z.string().uuid().optional(),\n pathSegments: z.array(z.string().min(1).max(256)).min(1).max(100).optional(),\n })\n .refine((value) => Boolean(value.instanceId || value.pathSegments), {\n message: 'Provide instanceId or pathSegments',\n });\n\nexport const toolOutputSchema = {\n success: z.boolean(),\n data: z.record(z.unknown()).optional(),\n error: z.string().optional(),\n};\n\nexport async function callStudio(\n bridge: StudioBridge,\n command: (typeof CliMsg)[keyof typeof CliMsg],\n payload: Record<string, unknown>,\n timeoutMs = 15_000,\n) {\n try {\n const result = await requestStudio(bridge, command, payload, timeoutMs);\n return success(result);\n } catch (err) {\n return failure(err);\n }\n}\n\nexport async function requestStudio(\n bridge: StudioBridge,\n command: (typeof CliMsg)[keyof typeof CliMsg],\n payload: Record<string, unknown>,\n timeoutMs = 15_000,\n): Promise<Record<string, unknown>> {\n const response = await bridge.sendRequest<Record<string, unknown>>(command, payload, timeoutMs);\n const result = response.payload;\n if (!result || typeof result !== 'object') throw new Error('Studio returned an invalid response');\n if (result.success === false || typeof result.error === 'string') {\n throw new Error(typeof result.error === 'string' ? result.error : 'Studio command failed');\n }\n return result;\n}\n\nexport function ref(value: unknown): InstanceRef {\n return value as InstanceRef;\n}\n","import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { z } from 'zod';\nimport type { StudioBridge } from '../../transport/ws-server.js';\nimport { failure, success } from '../result.js';\nimport { toolOutputSchema } from './shared.js';\n\nexport function registerConnectionTools(server: McpServer, bridge: StudioBridge): void {\n server.registerTool(\n 'dominus_status',\n {\n title: 'Dominus Studio Status',\n description:\n 'List authenticated Roblox Studio sessions, the active target, and bridge health. Call this before Studio work.',\n inputSchema: {},\n outputSchema: toolOutputSchema,\n annotations: {\n readOnlyHint: true,\n destructiveHint: false,\n idempotentHint: true,\n openWorldHint: false,\n },\n },\n async () => {\n try {\n return success({\n protocolVersion: 2,\n port: bridge.getPort(),\n activeConnectionId: bridge.getActiveConnectionId(),\n connections: bridge.listConnections(),\n });\n } catch (err) {\n return failure(err);\n }\n },\n );\n\n server.registerTool(\n 'dominus_select_studio',\n {\n title: 'Select Studio Session',\n description:\n 'Choose the exact Studio connection targeted by subsequent tools. Uses connectionId, not placeId, so duplicate windows are safe.',\n inputSchema: { connectionId: z.string().uuid().nullable() },\n outputSchema: toolOutputSchema,\n annotations: {\n readOnlyHint: false,\n destructiveHint: false,\n idempotentHint: true,\n openWorldHint: false,\n },\n },\n async ({ connectionId }) => {\n try {\n await bridge.setActiveConnectionId(connectionId);\n return success({ activeConnectionId: bridge.getActiveConnectionId() });\n } catch (err) {\n return failure(err);\n }\n },\n );\n}\n","import fs from 'node:fs';\nimport path from 'node:path';\n\nexport type RobloxApiKind = 'class' | 'datatype' | 'enum' | 'global' | 'library';\n\nexport interface RobloxApiMember {\n name: string;\n memberType: string;\n definedOn?: string;\n type?: string;\n summary?: string;\n description?: string;\n parameters?: { name?: string; type?: string; summary?: string; default?: string }[];\n returns?: { type?: string; summary?: string }[];\n tags?: string[];\n security?: { read?: string; write?: string };\n threadSafety?: string;\n category?: string;\n deprecationMessage?: string;\n value?: number;\n}\n\nexport interface RobloxApiReference {\n name: string;\n kind: RobloxApiKind;\n summary: string;\n description: string;\n inherits: string[];\n tags: string[];\n deprecationMessage: string;\n sourceUrl: string;\n members: Record<string, RobloxApiMember[]>;\n inheritedClasses?: string[];\n inheritedMembers?: Record<string, RobloxApiMember[]>;\n}\n\nexport interface RobloxApiSearchResult {\n name: string;\n kind: RobloxApiKind;\n score: number;\n sourceUrl: string;\n}\n\ninterface DocsOptions {\n docsRoot?: string;\n includeInherited?: boolean;\n}\n\nconst GITHUB_RAW_BASE =\n 'https://raw.githubusercontent.com/Roblox/creator-docs/main/content/en-us/reference/engine';\nconst GITHUB_TREE_URL =\n 'https://api.github.com/repos/Roblox/creator-docs/git/trees/main?recursive=1';\n\nconst KIND_FOLDERS: Record<RobloxApiKind, string> = {\n class: 'classes',\n datatype: 'datatypes',\n enum: 'enums',\n global: 'globals',\n library: 'libraries',\n};\n\nconst MEMBER_SECTIONS = [\n 'properties',\n 'methods',\n 'events',\n 'callbacks',\n 'constructors',\n 'functions',\n 'items',\n 'constants',\n 'math_operations',\n];\n\nlet remoteTreeCache: { path: string; type: string }[] | null = null;\n\nexport async function getRobloxApiReference(\n name: string,\n opts: DocsOptions & { kind?: RobloxApiKind | 'any' } = {},\n): Promise<RobloxApiReference> {\n const normalizedName = normalizeLookupName(name);\n const kinds = opts.kind && opts.kind !== 'any'\n ? [opts.kind]\n : (Object.keys(KIND_FOLDERS) as RobloxApiKind[]);\n\n for (const kind of kinds) {\n const doc = await readReferenceYaml(normalizedName, kind, opts);\n if (!doc) continue;\n\n const reference = parseReferenceYaml(doc.content, {\n kind,\n sourceUrl: doc.sourceUrl,\n });\n markDefinedOn(reference, reference.name);\n\n if (opts.includeInherited && reference.kind === 'class') {\n const inherited = await collectInheritedMembers(reference, opts, new Set([reference.name]));\n reference.inheritedClasses = inherited.classes;\n reference.inheritedMembers = inherited.members;\n }\n\n return reference;\n }\n\n throw new Error(`Roblox API reference not found for \"${name}\"`);\n}\n\nasync function collectInheritedMembers(\n reference: RobloxApiReference,\n opts: DocsOptions,\n visited: Set<string>,\n): Promise<{ classes: string[]; members: Record<string, RobloxApiMember[]> }> {\n const classes: string[] = [];\n const members: Record<string, RobloxApiMember[]> = {};\n\n for (const parent of reference.inherits) {\n if (!parent || visited.has(parent)) continue;\n visited.add(parent);\n\n const doc = await readReferenceYaml(parent, 'class', opts);\n if (!doc) continue;\n\n const parentReference = parseReferenceYaml(doc.content, {\n kind: 'class',\n sourceUrl: doc.sourceUrl,\n });\n markDefinedOn(parentReference, parentReference.name);\n\n classes.push(parentReference.name);\n mergeMembers(members, parentReference.members);\n\n const inherited = await collectInheritedMembers(parentReference, opts, visited);\n classes.push(...inherited.classes);\n mergeMembers(members, inherited.members);\n }\n\n return { classes, members };\n}\n\nfunction markDefinedOn(reference: RobloxApiReference, className: string): void {\n for (const section of Object.values(reference.members)) {\n for (const member of section) {\n member.definedOn = className;\n }\n }\n}\n\nfunction mergeMembers(\n target: Record<string, RobloxApiMember[]>,\n source: Record<string, RobloxApiMember[]>,\n): void {\n for (const [section, members] of Object.entries(source)) {\n target[section] ??= [];\n target[section].push(...members);\n }\n}\n\nexport async function searchRobloxApi(\n query: string,\n opts: DocsOptions & { kind?: RobloxApiKind | 'any'; limit?: number } = {},\n): Promise<RobloxApiSearchResult[]> {\n const limit = Math.max(1, Math.min(opts.limit ?? 10, 50));\n const normalizedQuery = normalizeSearchText(query);\n const kinds = opts.kind && opts.kind !== 'any'\n ? [opts.kind]\n : (Object.keys(KIND_FOLDERS) as RobloxApiKind[]);\n\n const entries = await listReferenceEntries(opts);\n return entries\n .filter((entry) => kinds.includes(entry.kind))\n .map((entry) => ({\n ...entry,\n score: scoreSearchResult(normalizedQuery, entry.name, entry.kind),\n }))\n .filter((entry) => entry.score > 0)\n .sort((a, b) => b.score - a.score || a.name.localeCompare(b.name))\n .slice(0, limit);\n}\n\nexport function parseReferenceYaml(\n raw: string,\n opts: { kind?: RobloxApiKind; sourceUrl?: string } = {},\n): RobloxApiReference {\n const kind = opts.kind ?? normalizeKind(readTopScalar(raw, 'type')) ?? 'class';\n const members: Record<string, RobloxApiMember[]> = {};\n\n for (const section of MEMBER_SECTIONS) {\n const parsed = parseMemberSection(raw, section);\n if (parsed.length > 0) {\n members[section] = parsed;\n }\n }\n\n return {\n name: readTopScalar(raw, 'name') || 'Unknown',\n kind,\n summary: cleanDocText(readTopScalar(raw, 'summary')),\n description: cleanDocText(readTopScalar(raw, 'description')),\n inherits: readTopList(raw, 'inherits'),\n tags: readTopList(raw, 'tags'),\n deprecationMessage: cleanDocText(readTopScalar(raw, 'deprecation_message')),\n sourceUrl: opts.sourceUrl ?? '',\n members,\n };\n}\n\nfunction normalizeKind(value: string): RobloxApiKind | undefined {\n if (value === 'class' || value === 'datatype' || value === 'enum' || value === 'global' || value === 'library') {\n return value;\n }\n return undefined;\n}\n\nasync function readReferenceYaml(\n name: string,\n kind: RobloxApiKind,\n opts: DocsOptions,\n): Promise<{ content: string; sourceUrl: string } | null> {\n const localRoot = resolveDocsRoot(opts.docsRoot);\n const folder = KIND_FOLDERS[kind];\n const fileName = `${name}.yaml`;\n\n if (localRoot) {\n const localPath = path.join(localRoot, folder, fileName);\n if (fs.existsSync(localPath)) {\n return {\n content: fs.readFileSync(localPath, 'utf-8'),\n sourceUrl: toCreatorDocsUrl(kind, name),\n };\n }\n }\n\n const sourceUrl = `${GITHUB_RAW_BASE}/${folder}/${encodeURIComponent(fileName)}`;\n try {\n return {\n content: await fetchText(sourceUrl),\n sourceUrl: toCreatorDocsUrl(kind, name),\n };\n } catch {\n return null;\n }\n}\n\nasync function listReferenceEntries(opts: DocsOptions): Promise<RobloxApiSearchResult[]> {\n const localRoot = resolveDocsRoot(opts.docsRoot);\n if (localRoot) {\n const entries: RobloxApiSearchResult[] = [];\n for (const [kind, folder] of Object.entries(KIND_FOLDERS) as [RobloxApiKind, string][]) {\n const dir = path.join(localRoot, folder);\n if (!fs.existsSync(dir)) continue;\n\n for (const file of fs.readdirSync(dir)) {\n if (!file.endsWith('.yaml')) continue;\n const name = path.basename(file, '.yaml');\n entries.push({ name, kind, score: 0, sourceUrl: toCreatorDocsUrl(kind, name) });\n }\n }\n return entries;\n }\n\n const tree = await getRemoteTree();\n const prefix = 'content/en-us/reference/engine/';\n return tree\n .filter((entry) => entry.type === 'blob')\n .map((entry) => entry.path)\n .filter((entryPath) => entryPath.startsWith(prefix) && entryPath.endsWith('.yaml'))\n .flatMap((entryPath) => {\n const rest = entryPath.slice(prefix.length);\n const [folder, file] = rest.split('/');\n const kind = folderToKind(folder);\n if (!kind || !file) return [];\n\n const name = path.basename(file, '.yaml');\n return [{ name, kind, score: 0, sourceUrl: toCreatorDocsUrl(kind, name) }];\n });\n}\n\nasync function getRemoteTree(): Promise<{ path: string; type: string }[]> {\n if (remoteTreeCache) return remoteTreeCache;\n\n const payload = JSON.parse(await fetchText(GITHUB_TREE_URL)) as {\n tree?: { path: string; type: string }[];\n };\n remoteTreeCache = payload.tree ?? [];\n return remoteTreeCache;\n}\n\nfunction folderToKind(folder: string): RobloxApiKind | undefined {\n for (const [kind, value] of Object.entries(KIND_FOLDERS) as [RobloxApiKind, string][]) {\n if (value === folder) return kind;\n }\n return undefined;\n}\n\nfunction resolveDocsRoot(explicitRoot?: string): string | null {\n const candidates = [\n explicitRoot,\n process.env.ROBLOX_CREATOR_DOCS_PATH,\n path.join(process.cwd(), '.tmp', 'creator-docs'),\n ].filter(Boolean) as string[];\n\n for (const candidate of candidates) {\n const normalized = normalizeDocsRoot(candidate);\n if (normalized && fs.existsSync(normalized)) return normalized;\n }\n\n return null;\n}\n\nfunction normalizeDocsRoot(root: string): string | null {\n const engineRoot = path.join(root, 'content', 'en-us', 'reference', 'engine');\n if (fs.existsSync(engineRoot)) return engineRoot;\n\n const directClasses = path.join(root, 'classes');\n if (fs.existsSync(directClasses)) return root;\n\n return null;\n}\n\nfunction normalizeLookupName(name: string): string {\n const trimmed = name.trim();\n const ownerName = trimmed.split(':')[0];\n const lastToken = ownerName.split('.').pop() ?? ownerName;\n return lastToken.replace(/[^A-Za-z0-9_]/g, '');\n}\n\nfunction normalizeSearchText(value: string): string {\n return value.trim().toLowerCase().replace(/[^a-z0-9_]+/g, '');\n}\n\nfunction scoreSearchResult(query: string, name: string, kind: RobloxApiKind): number {\n if (!query) return 1;\n\n const normalizedName = normalizeSearchText(name);\n if (normalizedName === query) return 100;\n if (normalizedName.startsWith(query)) return 75;\n if (normalizedName.includes(query)) return 50;\n\n const kindScore = kind.includes(query) ? 10 : 0;\n return kindScore;\n}\n\nfunction toCreatorDocsUrl(kind: RobloxApiKind, name: string): string {\n return `https://create.roblox.com/docs/reference/engine/${KIND_FOLDERS[kind]}/${name}`;\n}\n\nasync function fetchText(url: string): Promise<string> {\n const response = await fetch(url, {\n headers: { 'User-Agent': 'Dominus Roblox API docs lookup' },\n });\n if (!response.ok) {\n throw new Error(`Failed to fetch ${url}: ${response.status} ${response.statusText}`);\n }\n return response.text();\n}\n\nfunction readTopScalar(raw: string, key: string): string {\n const lines = raw.split(/\\r?\\n/);\n for (let i = 0; i < lines.length; i++) {\n const match = lines[i].match(new RegExp(`^${escapeRegExp(key)}:\\\\s*(.*)$`));\n if (!match) continue;\n return readYamlValue(lines, i, 0, match[1]);\n }\n return '';\n}\n\nfunction readTopList(raw: string, key: string): string[] {\n const lines = raw.split(/\\r?\\n/);\n for (let i = 0; i < lines.length; i++) {\n const match = lines[i].match(new RegExp(`^${escapeRegExp(key)}:\\\\s*(.*)$`));\n if (!match) continue;\n\n const inline = match[1].trim();\n if (inline === '[]' || inline === '') {\n if (inline === '[]') return [];\n return readIndentedList(lines, i + 1, 2);\n }\n return [unquote(inline)];\n }\n return [];\n}\n\nfunction parseMemberSection(raw: string, section: string): RobloxApiMember[] {\n const sectionLines = extractTopSection(raw, section);\n if (sectionLines.length === 0) return [];\n\n const items = splitMemberItems(sectionLines);\n return items\n .map((item) => parseMemberItem(item, section))\n .filter((item): item is RobloxApiMember => Boolean(item));\n}\n\nfunction extractTopSection(raw: string, section: string): string[] {\n const lines = raw.split(/\\r?\\n/);\n const start = lines.findIndex((line) => line === `${section}:`);\n if (start === -1) return [];\n\n const result: string[] = [];\n for (let i = start + 1; i < lines.length; i++) {\n if (/^[A-Za-z_][A-Za-z0-9_]*:/.test(lines[i])) break;\n result.push(lines[i]);\n }\n return result;\n}\n\nfunction splitMemberItems(lines: string[]): string[][] {\n const items: string[][] = [];\n let current: string[] = [];\n\n for (const line of lines) {\n if (/^ - /.test(line)) {\n if (current.length > 0) items.push(current);\n current = [line];\n continue;\n }\n if (current.length > 0) current.push(line);\n }\n\n if (current.length > 0) items.push(current);\n return items;\n}\n\nfunction parseMemberItem(lines: string[], section: string): RobloxApiMember | null {\n const name = readMemberScalar(lines, 'name');\n if (!name) return null;\n\n const member: RobloxApiMember = {\n name,\n memberType: section,\n type: readMemberScalar(lines, 'type') || readMemberScalar(lines, 'return_type'),\n summary: cleanDocText(readMemberScalar(lines, 'summary')),\n description: cleanDocText(readMemberScalar(lines, 'description')),\n parameters: readNestedObjects(lines, 'parameters'),\n returns: readNestedObjects(lines, 'returns'),\n tags: readMemberList(lines, 'tags'),\n security: readSecurity(lines),\n threadSafety: readMemberScalar(lines, 'thread_safety'),\n category: readMemberScalar(lines, 'category'),\n deprecationMessage: cleanDocText(readMemberScalar(lines, 'deprecation_message')),\n };\n\n const value = Number(readMemberScalar(lines, 'value'));\n if (Number.isFinite(value)) member.value = value;\n\n return member;\n}\n\nfunction readMemberScalar(lines: string[], key: string): string {\n for (let i = 0; i < lines.length; i++) {\n const firstLinePattern = new RegExp(`^ - ${escapeRegExp(key)}:\\\\s*(.*)$`);\n const fieldPattern = new RegExp(`^ ${escapeRegExp(key)}:\\\\s*(.*)$`);\n const firstLineMatch = lines[i].match(firstLinePattern);\n const fieldMatch = lines[i].match(fieldPattern);\n const match = firstLineMatch ?? fieldMatch;\n if (!match) continue;\n return readYamlValue(lines, i, firstLineMatch ? 2 : 4, match[1]);\n }\n return '';\n}\n\nfunction readMemberList(lines: string[], key: string): string[] {\n for (let i = 0; i < lines.length; i++) {\n const match = lines[i].match(new RegExp(`^ ${escapeRegExp(key)}:\\\\s*(.*)$`));\n if (!match) continue;\n const inline = match[1].trim();\n if (inline === '[]') return [];\n if (inline) return [unquote(inline)];\n return readIndentedList(lines, i + 1, 6);\n }\n return [];\n}\n\nfunction readNestedObjects(lines: string[], key: string): { name?: string; type?: string; summary?: string; default?: string }[] {\n const start = lines.findIndex((line) => line === ` ${key}:`);\n if (start === -1) return [];\n\n const nested: string[] = [];\n for (let i = start + 1; i < lines.length; i++) {\n if (/^ [A-Za-z_][A-Za-z0-9_]*:/.test(lines[i])) break;\n nested.push(lines[i]);\n }\n\n const items: string[][] = [];\n let current: string[] = [];\n for (const line of nested) {\n if (/^ - /.test(line)) {\n if (current.length > 0) items.push(current);\n current = [line];\n continue;\n }\n if (current.length > 0) current.push(line);\n }\n if (current.length > 0) items.push(current);\n\n return items.map((item) => ({\n name: readNestedScalar(item, 'name'),\n type: readNestedScalar(item, 'type'),\n summary: cleanDocText(readNestedScalar(item, 'summary')),\n default: readNestedScalar(item, 'default'),\n }));\n}\n\nfunction readNestedScalar(lines: string[], key: string): string {\n for (let i = 0; i < lines.length; i++) {\n const firstLinePattern = new RegExp(`^ - ${escapeRegExp(key)}:\\\\s*(.*)$`);\n const fieldPattern = new RegExp(`^ ${escapeRegExp(key)}:\\\\s*(.*)$`);\n const firstLineMatch = lines[i].match(firstLinePattern);\n const fieldMatch = lines[i].match(fieldPattern);\n const match = firstLineMatch ?? fieldMatch;\n if (!match) continue;\n return readYamlValue(lines, i, firstLineMatch ? 6 : 8, match[1]);\n }\n return '';\n}\n\nfunction readSecurity(lines: string[]): { read?: string; write?: string } | undefined {\n const start = lines.findIndex((line) => line === ' security:');\n if (start === -1) return undefined;\n\n return {\n read: readIndentedScalar(lines, start + 1, 'read', 6),\n write: readIndentedScalar(lines, start + 1, 'write', 6),\n };\n}\n\nfunction readIndentedScalar(lines: string[], start: number, key: string, indent: number): string {\n const pattern = new RegExp(`^\\\\s{${indent}}${escapeRegExp(key)}:\\\\s*(.*)$`);\n for (let i = start; i < lines.length; i++) {\n if (indentOf(lines[i]) < indent) break;\n const match = lines[i].match(pattern);\n if (match) return unquote(match[1].trim());\n }\n return '';\n}\n\nfunction readYamlValue(lines: string[], index: number, indent: number, rawValue: string): string {\n const value = rawValue.trim();\n if (value === '|-' || value === '|') {\n return readBlock(lines, index + 1, indent + 2);\n }\n if (value === \"''\" || value === '\"\"') return '';\n return unquote(value);\n}\n\nfunction readBlock(lines: string[], start: number, minIndent: number): string {\n const block: string[] = [];\n for (let i = start; i < lines.length; i++) {\n const line = lines[i];\n if (line.trim() && indentOf(line) < minIndent) break;\n block.push(line.slice(Math.min(minIndent, line.length)));\n }\n return block.join('\\n').trim();\n}\n\nfunction readIndentedList(lines: string[], start: number, indent: number): string[] {\n const pattern = new RegExp(`^\\\\s{${indent}}-\\\\s*(.*)$`);\n const values: string[] = [];\n for (let i = start; i < lines.length; i++) {\n if (lines[i].trim() && indentOf(lines[i]) < indent) break;\n const match = lines[i].match(pattern);\n if (match) values.push(unquote(match[1].trim()));\n }\n return values;\n}\n\nfunction cleanDocText(value: string): string {\n return value\n .replace(/\\r/g, '')\n .replace(/[ \\t]+\\n/g, '\\n')\n .trim();\n}\n\nfunction indentOf(line: string): number {\n return line.match(/^ */)?.[0].length ?? 0;\n}\n\nfunction unquote(value: string): string {\n if (\n (value.startsWith(\"'\") && value.endsWith(\"'\")) ||\n (value.startsWith('\"') && value.endsWith('\"'))\n ) {\n return value.slice(1, -1);\n }\n return value;\n}\n\nfunction escapeRegExp(value: string): string {\n return value.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n}\n","import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { z } from 'zod';\nimport { getRobloxApiReference, searchRobloxApi } from '../../docs/roblox-api.js';\nimport { failure, success } from '../result.js';\nimport { toolOutputSchema } from './shared.js';\n\nconst kindSchema = z.enum(['any', 'class', 'datatype', 'enum', 'global', 'library']);\n\nexport function registerDocsTools(server: McpServer): void {\n server.registerTool(\n 'roblox_search_api',\n {\n title: 'Search Roblox API',\n description:\n 'Search the official Roblox Creator Docs engine API mirror by exact or partial class, datatype, enum, global, or library name.',\n inputSchema: {\n query: z.string().min(1).max(100),\n kind: kindSchema.optional().default('any'),\n limit: z.number().int().min(1).max(25).optional().default(10),\n },\n outputSchema: toolOutputSchema,\n annotations: {\n readOnlyHint: true,\n destructiveHint: false,\n idempotentHint: true,\n openWorldHint: true,\n },\n },\n async ({ query, kind, limit }) => {\n try {\n return success({ results: await searchRobloxApi(query, { kind, limit }) });\n } catch (err) {\n return failure(err);\n }\n },\n );\n\n server.registerTool(\n 'roblox_get_api',\n {\n title: 'Get Roblox API Reference',\n description:\n 'Read an official Roblox engine API reference including members, types, security, thread safety, inheritance, and source URL.',\n inputSchema: {\n name: z.string().min(1).max(100),\n kind: kindSchema.optional().default('any'),\n includeInherited: z.boolean().optional().default(true),\n },\n outputSchema: toolOutputSchema,\n annotations: {\n readOnlyHint: true,\n destructiveHint: false,\n idempotentHint: true,\n openWorldHint: true,\n },\n },\n async ({ name, kind, includeInherited }) => {\n try {\n const reference = await getRobloxApiReference(name, { kind, includeInherited });\n return success({ reference });\n } catch (err) {\n return failure(err);\n }\n },\n );\n}\n","import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { z } from 'zod';\nimport { CliMsg, type InstanceRef } from '../../transport/protocol.js';\nimport type { StudioBridge } from '../../transport/ws-server.js';\nimport { failure, success } from '../result.js';\nimport { instanceRefSchema, requestStudio, toolOutputSchema } from './shared.js';\n\nconst propertiesSchema = z\n .record(z.unknown())\n .refine(\n (properties) =>\n Object.keys(properties).length <= 100 &&\n !Object.keys(properties).some((name) => ['Parent', 'ClassName', 'Source'].includes(name)),\n 'At most 100 properties are allowed; Parent, ClassName, and Source require dedicated operations',\n );\n\nconst mutationOperationSchema = z.discriminatedUnion('op', [\n z.object({\n op: z.literal('setProperties'),\n target: instanceRefSchema,\n properties: propertiesSchema,\n }),\n z.object({\n op: z.literal('create'),\n parent: instanceRefSchema,\n className: z.string().min(1).max(100),\n name: z.string().min(1).max(256),\n properties: propertiesSchema.optional(),\n }),\n z.object({\n op: z.literal('move'),\n target: instanceRefSchema,\n parent: instanceRefSchema,\n }),\n]);\n\nconst workerProposalSchema = z.object({\n workerId: z.string().min(1).max(64),\n summary: z.string().min(1).max(4000),\n evidence: z\n .array(\n z.object({\n source: z.string().min(1).max(500),\n summary: z.string().min(1).max(2000),\n }),\n )\n .max(30)\n .default([]),\n operations: z.array(mutationOperationSchema).max(50).default([]),\n risks: z.array(z.string().max(1000)).max(30).default([]),\n verificationSuggestions: z.array(z.string().max(1000)).max(30).default([]),\n});\n\nconst coordinatorDecisionSchema = z.object({\n summary: z.string().min(1).max(4000),\n acceptedWorkerIds: z.array(z.string()).max(5),\n rejected: z\n .array(\n z.object({\n workerId: z.string(),\n reason: z.string().min(1).max(2000),\n }),\n )\n .max(5)\n .default([]),\n operationOrder: z\n .array(\n z.object({\n workerId: z.string(),\n operationIndex: z.number().int().min(0).max(49),\n }),\n )\n .max(100),\n verificationChecks: z.array(z.string().max(1000)).max(50).default([]),\n});\n\ntype MutationOperation = z.infer<typeof mutationOperationSchema>;\ntype WorkerProposal = z.infer<typeof workerProposalSchema>;\ntype CoordinatorDecision = z.infer<typeof coordinatorDecisionSchema>;\n\ninterface TreeNode {\n name: string;\n className: string;\n ref: InstanceRef;\n children?: TreeNode[];\n}\n\ninterface WorkerAssignment {\n id: string;\n role: string;\n objective: string;\n ownedScopes: InstanceRef[];\n acceptanceCriteria: string[];\n scopeNodes: TreeNode[];\n knownRefKeys: Set<string>;\n}\n\ninterface WorkerResult {\n assignment: WorkerAssignment;\n proposal?: WorkerProposal;\n error?: string;\n}\n\ninterface AcceptedProposal {\n assignment: WorkerAssignment;\n proposal: WorkerProposal;\n}\n\ninterface RejectedProposal {\n workerId: string;\n reason: string;\n summary?: string;\n}\n\ninterface VerificationResult {\n passed: boolean;\n treeNodeCount: number;\n treeTruncated: boolean;\n expectedCreates: number;\n foundCreates: number;\n missingCreates: string[];\n propertyMismatches: Array<{\n target: string;\n property: string;\n expected: unknown;\n actual: unknown;\n }>;\n moveMismatches: Array<{ target: string; expectedParent: string; actualParent?: string }>;\n inspectFailures: string[];\n}\n\nexport function registerParallelTaskTool(server: McpServer, bridge: StudioBridge): void {\n server.registerTool(\n 'run_parallel_task',\n {\n title: 'Run Coordinated Parallel Studio Task',\n description:\n 'Partition a broad Studio goal into non-overlapping scopes, run proposal-only workers concurrently through MCP Sampling, reject unsafe or conflicting proposals, atomically apply coordinator-approved writes, and verify the result.',\n inputSchema: {\n goal: z.string().min(1).max(20_000),\n root: instanceRefSchema.optional(),\n rootPath: z.string().min(1).max(2000).optional(),\n maxWorkers: z.number().int().min(1).max(5).optional().default(3),\n constraints: z.string().max(10_000).optional(),\n taskType: z.string().max(100).optional(),\n dryRun: z.boolean().optional().default(false),\n },\n outputSchema: toolOutputSchema,\n annotations: {\n readOnlyHint: false,\n destructiveHint: false,\n idempotentHint: false,\n openWorldHint: false,\n },\n },\n async ({ goal, root, rootPath, maxWorkers, constraints, taskType, dryRun }) => {\n try {\n const capabilities = server.server.getClientCapabilities();\n if (!capabilities?.sampling) {\n return failure(\n 'run_parallel_task requires an MCP client that supports Sampling. Use the normal Dominus inspect-plan-apply workflow with this client.',\n { requiredCapability: 'sampling' },\n );\n }\n\n const rootRef = root ?? {\n pathSegments: parallelRootPathToSegments(rootPath ?? 'Workspace'),\n };\n const tree = await getTree(bridge, rootRef, 5, 1500);\n const rootNode = tree.roots[0];\n if (!rootNode) return failure('The requested root did not return a Studio tree');\n if (tree.truncated) {\n return failure(\n 'The requested root exceeded the parallel evidence limit. Narrow root/rootPath so workers receive a complete hierarchy.',\n { nodeCount: tree.nodeCount, maxNodes: 1500 },\n );\n }\n\n const assignments = createAssignments(goal, rootNode, maxWorkers, constraints, taskType);\n emit(server, 'multi_agent_start', { goal, workerCount: assignments.length });\n\n const settled = await Promise.allSettled(\n assignments.map(async (assignment) => {\n emit(server, 'multi_agent_worker_start', {\n workerId: assignment.id,\n role: assignment.role,\n scopes: assignment.ownedScopes,\n });\n const result = await runWorker(server, bridge, goal, assignment, constraints, taskType);\n emit(server, 'multi_agent_worker_done', {\n workerId: assignment.id,\n summary: result.proposal?.summary ?? result.error ?? 'Worker failed',\n proposedOperationCount: result.proposal?.operations.length ?? 0,\n });\n return result;\n }),\n );\n\n const workerResults: WorkerResult[] = settled.map((result, index) =>\n result.status === 'fulfilled'\n ? result.value\n : { assignment: assignments[index], error: toErrorMessage(result.reason) },\n );\n const validated = validateWorkerResults(workerResults);\n const conflictChecked = rejectProposalConflicts(validated.accepted);\n const accepted = conflictChecked.accepted;\n const rejected = [...validated.rejected, ...conflictChecked.rejected];\n\n for (const item of accepted) {\n emit(server, 'multi_agent_proposal', {\n workerId: item.assignment.id,\n accepted: true,\n operationCount: item.proposal.operations.length,\n });\n }\n for (const item of rejected) {\n emit(server, 'multi_agent_proposal', {\n workerId: item.workerId,\n accepted: false,\n reason: item.reason,\n });\n }\n\n const decision =\n accepted.length > 0\n ? await runCoordinator(server, goal, accepted, rejected, constraints)\n : emptyDecision(rejected);\n const finalPlan = buildFinalPlan(decision, accepted, rejected);\n if (finalPlan.operations.length > 100) {\n return failure('Coordinator plan exceeds the 100-operation atomic limit', {\n operationCount: finalPlan.operations.length,\n });\n }\n\n emit(server, 'multi_agent_decision', {\n acceptedCount: finalPlan.acceptedWorkerIds.length,\n rejectedCount: finalPlan.rejected.length,\n finalOperationCount: finalPlan.operations.length,\n });\n\n let applied: Record<string, unknown> | null = null;\n let verification: VerificationResult | null = null;\n let repairApplied = false;\n if (!dryRun && finalPlan.operations.length > 0) {\n emit(server, 'multi_agent_apply_start', { operationCount: finalPlan.operations.length });\n applied = await requestStudio(\n bridge,\n CliMsg.V2_APPLY,\n { operations: finalPlan.operations },\n 120_000,\n );\n verification = await verifyPlan(bridge, rootRef, rootNode, finalPlan.operations);\n\n if (!verification.passed) {\n const repairOperations = findRepairOperations(\n finalPlan.operations,\n verification,\n rootNode,\n );\n if (repairOperations.length > 0) {\n await requestStudio(\n bridge,\n CliMsg.V2_APPLY,\n { operations: repairOperations },\n 120_000,\n );\n repairApplied = true;\n verification = await verifyPlan(bridge, rootRef, rootNode, finalPlan.operations);\n }\n }\n emit(server, 'multi_agent_apply_done', {\n appliedCount: finalPlan.operations.length,\n verificationPassed: verification.passed,\n repairApplied,\n });\n } else {\n verification = await verifyPlan(bridge, rootRef, rootNode, []);\n }\n\n return success({\n goal,\n root: rootRef,\n dryRun,\n assignments: assignments.map(publicAssignment),\n workers: workerResults.map(publicWorkerResult),\n decision: {\n summary: decision.summary,\n acceptedWorkerIds: finalPlan.acceptedWorkerIds,\n rejected: finalPlan.rejected,\n verificationChecks: decision.verificationChecks,\n },\n finalOperations: finalPlan.operations,\n applied,\n repairApplied,\n verification,\n });\n } catch (err) {\n return failure(err);\n }\n },\n );\n}\n\nasync function getTree(\n bridge: StudioBridge,\n root: InstanceRef,\n maxDepth: number,\n maxNodes: number,\n): Promise<{ roots: TreeNode[]; nodeCount: number; truncated: boolean }> {\n const result = await requestStudio(bridge, CliMsg.V2_GET_TREE, { root, maxDepth, maxNodes });\n return {\n roots: Array.isArray(result.roots) ? (result.roots as TreeNode[]) : [],\n nodeCount: typeof result.nodeCount === 'number' ? result.nodeCount : 0,\n truncated: result.truncated === true,\n };\n}\n\nfunction createAssignments(\n goal: string,\n root: TreeNode,\n maxWorkers: number,\n constraints?: string,\n taskType?: string,\n): WorkerAssignment[] {\n const candidates = root.children?.length ? root.children : [root];\n const workerCount = Math.max(1, Math.min(maxWorkers, candidates.length));\n const groups = Array.from({ length: workerCount }, () => [] as TreeNode[]);\n candidates.forEach((node, index) => groups[index % workerCount].push(node));\n\n return groups.map((scopeNodes, index) => {\n const ownedScopes = scopeNodes.map((node) => node.ref);\n const knownRefKeys = new Set<string>();\n scopeNodes.forEach((node) => collectRefKeys(node, knownRefKeys));\n return {\n id: `worker-${index + 1}`,\n role: `${taskType ?? 'general'} scope analyst ${index + 1}`,\n objective: `Inspect the assigned Studio branches and propose the smallest changes that advance: ${goal}`,\n ownedScopes,\n acceptanceCriteria: [\n 'Every referenced existing instance must come from the supplied evidence.',\n 'Every proposed mutation must remain inside an owned scope.',\n 'Do not propose deletion, arbitrary code execution, or script replacement.',\n constraints?.trim() || 'Preserve unrelated instances and behavior.',\n ],\n scopeNodes,\n knownRefKeys,\n };\n });\n}\n\nasync function runWorker(\n server: McpServer,\n bridge: StudioBridge,\n goal: string,\n assignment: WorkerAssignment,\n constraints?: string,\n taskType?: string,\n): Promise<WorkerResult> {\n try {\n const studioInspection = await inspectScopeRoots(bridge, assignment.ownedScopes);\n const response = await server.server.createMessage(\n {\n systemPrompt: [\n 'You are a read-only Dominus worker. Inspect only the Studio evidence in the request.',\n 'You cannot write to Studio. Return one strict JSON WorkerProposal and no Markdown.',\n 'Only propose setProperties, create, or move operations using exact instance refs copied from evidence.',\n 'Never invent instanceId values. Never propose delete, script edits, or arbitrary execution.',\n ].join(' '),\n messages: [\n {\n role: 'user',\n content: {\n type: 'text',\n text: JSON.stringify(\n {\n schema: {\n workerId: assignment.id,\n summary: 'string',\n evidence: [{ source: 'string', summary: 'string' }],\n operations: [\n {\n op: 'setProperties',\n target: { instanceId: 'uuid', pathSegments: ['...'] },\n properties: {},\n },\n {\n op: 'create',\n parent: { instanceId: 'uuid', pathSegments: ['...'] },\n className: 'Part',\n name: 'Name',\n properties: {},\n },\n {\n op: 'move',\n target: { instanceId: 'uuid', pathSegments: ['...'] },\n parent: { instanceId: 'uuid', pathSegments: ['...'] },\n },\n ],\n risks: ['string'],\n verificationSuggestions: ['string'],\n },\n globalGoal: goal,\n taskType: taskType ?? 'general',\n constraints: constraints ?? '',\n assignment: publicAssignment(assignment),\n studioEvidence: {\n hierarchy: assignment.scopeNodes,\n typedRootInspection: studioInspection,\n },\n },\n null,\n 2,\n ),\n },\n },\n ],\n maxTokens: 5000,\n temperature: 0.2,\n modelPreferences: {\n intelligencePriority: 0.9,\n speedPriority: 0.3,\n costPriority: 0.2,\n },\n },\n { timeout: 120_000 },\n );\n\n const proposal = workerProposalSchema.parse(parseJson(extractSamplingText(response.content)));\n return { assignment, proposal };\n } catch (err) {\n return { assignment, error: toErrorMessage(err) };\n }\n}\n\nasync function inspectScopeRoots(\n bridge: StudioBridge,\n targets: InstanceRef[],\n): Promise<Record<string, unknown>[]> {\n const results: Record<string, unknown>[] = [];\n for (let offset = 0; offset < targets.length; offset += 20) {\n const inspected = await requestStudio(bridge, CliMsg.V2_INSPECT, {\n targets: targets.slice(offset, offset + 20),\n compact: true,\n });\n if (Array.isArray(inspected.results)) {\n results.push(...(inspected.results as Record<string, unknown>[]));\n }\n }\n return results;\n}\n\nfunction validateWorkerResults(results: WorkerResult[]): {\n accepted: AcceptedProposal[];\n rejected: RejectedProposal[];\n} {\n const accepted: AcceptedProposal[] = [];\n const rejected: RejectedProposal[] = [];\n\n for (const result of results) {\n if (!result.proposal) {\n rejected.push({\n workerId: result.assignment.id,\n reason: result.error ?? 'Worker returned no proposal',\n });\n continue;\n }\n if (result.proposal.workerId !== result.assignment.id) {\n rejected.push({\n workerId: result.assignment.id,\n reason: `Proposal workerId ${result.proposal.workerId} did not match its assignment`,\n summary: result.proposal.summary,\n });\n continue;\n }\n const errors = validateOperations(result.assignment, result.proposal.operations);\n if (errors.length > 0) {\n rejected.push({\n workerId: result.assignment.id,\n reason: errors.join('; '),\n summary: result.proposal.summary,\n });\n continue;\n }\n accepted.push({ assignment: result.assignment, proposal: result.proposal });\n }\n return { accepted, rejected };\n}\n\nfunction validateOperations(\n assignment: WorkerAssignment,\n operations: MutationOperation[],\n): string[] {\n const errors: string[] = [];\n for (const [index, operation] of operations.entries()) {\n const refs =\n operation.op === 'create'\n ? [operation.parent]\n : operation.op === 'move'\n ? [operation.target, operation.parent]\n : [operation.target];\n for (const ref of refs) {\n if (!isKnownParallelRef(ref, assignment.knownRefKeys)) {\n errors.push(`Operation ${index} references an instance absent from worker evidence`);\n } else if (!isParallelRefWithinScopes(ref, assignment.ownedScopes)) {\n errors.push(`Operation ${index} targets outside the worker owned scopes`);\n }\n }\n }\n return errors;\n}\n\nfunction rejectProposalConflicts(accepted: AcceptedProposal[]): {\n accepted: AcceptedProposal[];\n rejected: RejectedProposal[];\n} {\n const finalAccepted: AcceptedProposal[] = [];\n const rejected: RejectedProposal[] = [];\n const claims: Array<{ workerId: string; paths: string[][]; refKeys: string[] }> = [];\n\n for (const item of accepted) {\n const targets = item.proposal.operations.map(operationTarget);\n const conflict = claims.find((claim) =>\n targets.some(\n (target) =>\n (target.path && claim.paths.some((path) => parallelPathsOverlap(target.path!, path))) ||\n claim.refKeys.includes(target.key),\n ),\n );\n if (conflict) {\n rejected.push({\n workerId: item.assignment.id,\n reason: `Proposal overlaps writes owned by ${conflict.workerId}`,\n summary: item.proposal.summary,\n });\n continue;\n }\n finalAccepted.push(item);\n claims.push({\n workerId: item.assignment.id,\n paths: targets.flatMap((target) => (target.path ? [target.path] : [])),\n refKeys: targets.map((target) => target.key),\n });\n }\n return { accepted: finalAccepted, rejected };\n}\n\nasync function runCoordinator(\n server: McpServer,\n goal: string,\n accepted: AcceptedProposal[],\n rejected: RejectedProposal[],\n constraints?: string,\n): Promise<CoordinatorDecision> {\n const response = await server.server.createMessage(\n {\n systemPrompt: [\n 'You are the Dominus coordinator. Return strict JSON only.',\n 'Workers are proposal-only. Select whole non-conflicting proposals and order their existing operations.',\n 'Do not invent, edit, merge, or partially accept operations. The server will reject any unknown index.',\n 'Prefer the smallest plan that satisfies the goal and preserves unrelated Studio state.',\n ].join(' '),\n messages: [\n {\n role: 'user',\n content: {\n type: 'text',\n text: JSON.stringify(\n {\n schema: {\n summary: 'string',\n acceptedWorkerIds: ['worker-1'],\n rejected: [{ workerId: 'worker-2', reason: 'string' }],\n operationOrder: [{ workerId: 'worker-1', operationIndex: 0 }],\n verificationChecks: ['string'],\n },\n goal,\n constraints: constraints ?? '',\n validProposals: accepted.map(({ assignment, proposal }) => ({\n workerId: assignment.id,\n summary: proposal.summary,\n evidence: proposal.evidence,\n operations: proposal.operations,\n risks: proposal.risks,\n verificationSuggestions: proposal.verificationSuggestions,\n })),\n alreadyRejected: rejected,\n },\n null,\n 2,\n ),\n },\n },\n ],\n maxTokens: 5000,\n temperature: 0.1,\n modelPreferences: {\n intelligencePriority: 1,\n speedPriority: 0.2,\n costPriority: 0.1,\n },\n },\n { timeout: 120_000 },\n );\n return coordinatorDecisionSchema.parse(parseJson(extractSamplingText(response.content)));\n}\n\nfunction buildFinalPlan(\n decision: CoordinatorDecision,\n accepted: AcceptedProposal[],\n alreadyRejected: RejectedProposal[],\n): {\n acceptedWorkerIds: string[];\n rejected: RejectedProposal[];\n operations: MutationOperation[];\n} {\n const byId = new Map(accepted.map((item) => [item.assignment.id, item]));\n const acceptedIds = [...new Set(decision.acceptedWorkerIds)];\n for (const workerId of acceptedIds) {\n if (!byId.has(workerId)) throw new Error(`Coordinator accepted unknown worker ${workerId}`);\n }\n\n const operations: MutationOperation[] = [];\n const seen = new Set<string>();\n for (const entry of decision.operationOrder) {\n if (!acceptedIds.includes(entry.workerId)) {\n throw new Error(`Coordinator ordered an operation from unaccepted worker ${entry.workerId}`);\n }\n const proposal = byId.get(entry.workerId)!.proposal;\n const operation = proposal.operations[entry.operationIndex];\n if (!operation)\n throw new Error(\n `Coordinator selected missing operation ${entry.workerId}:${entry.operationIndex}`,\n );\n const key = `${entry.workerId}:${entry.operationIndex}`;\n if (seen.has(key)) throw new Error(`Coordinator selected duplicate operation ${key}`);\n seen.add(key);\n operations.push(operation);\n }\n\n for (const workerId of acceptedIds) {\n const proposal = byId.get(workerId)!.proposal;\n for (let index = 0; index < proposal.operations.length; index++) {\n if (!seen.has(`${workerId}:${index}`)) {\n throw new Error(\n `Coordinator partially accepted ${workerId}; operation ${index} was omitted`,\n );\n }\n }\n }\n\n const coordinatorReasons = new Map(decision.rejected.map((item) => [item.workerId, item.reason]));\n const rejected = [...alreadyRejected];\n for (const item of accepted) {\n if (!acceptedIds.includes(item.assignment.id)) {\n rejected.push({\n workerId: item.assignment.id,\n reason:\n coordinatorReasons.get(item.assignment.id) ?? 'Coordinator did not accept this proposal',\n summary: item.proposal.summary,\n });\n }\n }\n return { acceptedWorkerIds: acceptedIds, rejected, operations };\n}\n\nasync function verifyPlan(\n bridge: StudioBridge,\n rootRef: InstanceRef,\n originalRoot: TreeNode,\n operations: MutationOperation[],\n): Promise<VerificationResult> {\n const tree = await getTree(bridge, rootRef, 12, 5000);\n const nodes = flattenTree(tree.roots);\n const paths = new Set(\n nodes.flatMap((node) => (node.ref.pathSegments ? [pathKey(node.ref.pathSegments)] : [])),\n );\n const knownPaths = collectInstancePaths(originalRoot);\n const expectedCreates = operations.flatMap((operation) => {\n if (operation.op !== 'create') return [];\n const parentPath = resolveRefPath(operation.parent, knownPaths);\n return parentPath ? [pathKey([...parentPath, operation.name])] : [];\n });\n const missingCreates = expectedCreates.filter((path) => !paths.has(path));\n\n const inspectOperations = operations.filter((operation) => operation.op !== 'create');\n const inspectFailures: string[] = [];\n const propertyMismatches: VerificationResult['propertyMismatches'] = [];\n const moveMismatches: VerificationResult['moveMismatches'] = [];\n\n for (let offset = 0; offset < inspectOperations.length; offset += 20) {\n const batch = inspectOperations.slice(offset, offset + 20);\n const targets = batch.map((operation) => operation.target);\n const inspected = await requestStudio(bridge, CliMsg.V2_INSPECT, { targets, compact: true });\n const results = Array.isArray(inspected.results)\n ? (inspected.results as Array<Record<string, unknown>>)\n : [];\n batch.forEach((operation, index) => {\n const result = results[index];\n const targetLabel = refLabel(operation.target);\n if (!result || result.success === false) {\n inspectFailures.push(\n `${targetLabel}: ${String(result?.error ?? 'missing inspection result')}`,\n );\n return;\n }\n if (operation.op === 'setProperties') {\n const entries = Array.isArray(result.properties)\n ? (result.properties as Array<{ name?: unknown; value?: unknown }>)\n : [];\n const actual = new Map(entries.map((entry) => [String(entry.name), entry.value]));\n for (const [property, expected] of Object.entries(operation.properties)) {\n const actualValue = actual.get(property);\n if (!actual.has(property) || !valuesEquivalent(expected, actualValue)) {\n propertyMismatches.push({\n target: targetLabel,\n property,\n expected,\n actual: actualValue,\n });\n }\n }\n } else {\n const instanceId = operation.target.instanceId;\n const current =\n nodes.find((node) => instanceId && node.ref.instanceId === instanceId) ??\n nodes.find((node) => samePath(node.ref.pathSegments, operation.target.pathSegments));\n const expectedParent = resolveRefPath(operation.parent, knownPaths);\n const actualPath = current?.ref.pathSegments;\n const actualParent = actualPath?.slice(0, -1);\n if (!expectedParent || !actualParent || !samePath(expectedParent, actualParent)) {\n moveMismatches.push({\n target: targetLabel,\n expectedParent: expectedParent ? expectedParent.join('.') : refLabel(operation.parent),\n actualParent: actualParent?.join('.'),\n });\n }\n }\n });\n }\n\n return {\n passed:\n !tree.truncated &&\n missingCreates.length === 0 &&\n propertyMismatches.length === 0 &&\n moveMismatches.length === 0 &&\n inspectFailures.length === 0,\n treeNodeCount: tree.nodeCount,\n treeTruncated: tree.truncated,\n expectedCreates: expectedCreates.length,\n foundCreates: expectedCreates.length - missingCreates.length,\n missingCreates,\n propertyMismatches,\n moveMismatches,\n inspectFailures,\n };\n}\n\nfunction findRepairOperations(\n operations: MutationOperation[],\n verification: VerificationResult,\n originalRoot: TreeNode,\n): MutationOperation[] {\n const knownPaths = collectInstancePaths(originalRoot);\n const missingCreates = new Set(verification.missingCreates);\n const mismatchedTargets = new Set(verification.propertyMismatches.map((item) => item.target));\n const mismatchedMoves = new Set(verification.moveMismatches.map((item) => item.target));\n return operations.filter((operation) => {\n if (operation.op === 'create') {\n const parentPath = resolveRefPath(operation.parent, knownPaths);\n return Boolean(parentPath && missingCreates.has(pathKey([...parentPath, operation.name])));\n }\n if (operation.op === 'setProperties') return mismatchedTargets.has(refLabel(operation.target));\n return mismatchedMoves.has(refLabel(operation.target));\n });\n}\n\nfunction emptyDecision(rejected: RejectedProposal[]): CoordinatorDecision {\n return {\n summary:\n rejected.length > 0\n ? 'No valid worker proposal was available to apply.'\n : 'Workers found no mutations necessary.',\n acceptedWorkerIds: [],\n rejected: [],\n operationOrder: [],\n verificationChecks: ['Read the requested root back and confirm no mutation was needed.'],\n };\n}\n\nfunction publicAssignment(assignment: WorkerAssignment) {\n return {\n id: assignment.id,\n role: assignment.role,\n objective: assignment.objective,\n ownedScopes: assignment.ownedScopes,\n acceptanceCriteria: assignment.acceptanceCriteria,\n };\n}\n\nfunction publicWorkerResult(result: WorkerResult) {\n return {\n workerId: result.assignment.id,\n summary: result.proposal?.summary,\n evidence: result.proposal?.evidence ?? [],\n proposedOperationCount: result.proposal?.operations.length ?? 0,\n risks: result.proposal?.risks ?? [],\n verificationSuggestions: result.proposal?.verificationSuggestions ?? [],\n error: result.error,\n };\n}\n\nfunction collectRefKeys(node: TreeNode, output: Set<string>): void {\n for (const key of parallelRefKeys(node.ref)) output.add(key);\n node.children?.forEach((child) => collectRefKeys(child, output));\n}\n\nfunction collectInstancePaths(root: TreeNode): Map<string, string[]> {\n const result = new Map<string, string[]>();\n for (const node of flattenTree([root])) {\n if (node.ref.pathSegments) {\n if (node.ref.instanceId) result.set(`id:${node.ref.instanceId}`, node.ref.pathSegments);\n result.set(`path:${pathKey(node.ref.pathSegments)}`, node.ref.pathSegments);\n }\n }\n return result;\n}\n\nfunction flattenTree(roots: TreeNode[]): TreeNode[] {\n const result: TreeNode[] = [];\n const visit = (node: TreeNode) => {\n result.push(node);\n node.children?.forEach(visit);\n };\n roots.forEach(visit);\n return result;\n}\n\nexport function isKnownParallelRef(ref: InstanceRef, known: Set<string>): boolean {\n const keys = parallelRefKeys(ref);\n return keys.length > 0 && keys.every((key) => known.has(key));\n}\n\nexport function isParallelRefWithinScopes(ref: InstanceRef, scopes: InstanceRef[]): boolean {\n if (ref.pathSegments) {\n return scopes.some(\n (scope) => scope.pathSegments && parallelPathIsWithin(ref.pathSegments!, scope.pathSegments),\n );\n }\n return scopes.some((scope) => Boolean(ref.instanceId && scope.instanceId === ref.instanceId));\n}\n\nfunction operationTarget(operation: MutationOperation): { key: string; path?: string[] } {\n if (operation.op === 'create') {\n const parentPath = operation.parent.pathSegments;\n return {\n key: `${refKey(operation.parent)}/create:${operation.name}`,\n path: parentPath ? [...parentPath, operation.name] : undefined,\n };\n }\n return { key: refKey(operation.target), path: operation.target.pathSegments };\n}\n\nexport function parallelRefKeys(ref: InstanceRef): string[] {\n const keys: string[] = [];\n if (ref.instanceId) keys.push(`id:${ref.instanceId}`);\n if (ref.pathSegments) keys.push(`path:${pathKey(ref.pathSegments)}`);\n if (ref.instanceId && ref.pathSegments) {\n keys.push(`pair:${ref.instanceId}:${pathKey(ref.pathSegments)}`);\n }\n return keys;\n}\n\nfunction refKey(ref: InstanceRef): string {\n return parallelRefKeys(ref)[0] ?? 'invalid-ref';\n}\n\nfunction refLabel(ref: InstanceRef): string {\n return ref.pathSegments?.join('.') ?? ref.instanceId ?? 'unknown-instance';\n}\n\nfunction resolveRefPath(ref: InstanceRef, known: Map<string, string[]>): string[] | undefined {\n if (ref.pathSegments) return ref.pathSegments;\n return ref.instanceId ? known.get(`id:${ref.instanceId}`) : undefined;\n}\n\nfunction pathKey(path: string[]): string {\n return path.join('\\u0000');\n}\n\nexport function parallelPathIsWithin(target: string[], scope: string[]): boolean {\n return (\n target.length >= scope.length && scope.every((segment, index) => target[index] === segment)\n );\n}\n\nexport function parallelPathsOverlap(left: string[], right: string[]): boolean {\n return parallelPathIsWithin(left, right) || parallelPathIsWithin(right, left);\n}\n\nfunction samePath(left?: string[], right?: string[]): boolean {\n return Boolean(\n left &&\n right &&\n left.length === right.length &&\n left.every((part, index) => part === right[index]),\n );\n}\n\nexport function parallelRootPathToSegments(path: string): string[] {\n const trimmed = path.trim();\n const bracketSegments = [...trimmed.matchAll(/\\[\"((?:\\\\.|[^\"])*)\"\\]/g)].map(\n (match) => JSON.parse(`\"${match[1]}\"`) as string,\n );\n if (bracketSegments.length > 0) return bracketSegments;\n const segments = trimmed\n .replace(/^game\\.?/i, '')\n .split('.')\n .map((part) => part.trim())\n .filter(Boolean);\n if (segments.length === 0) throw new Error('rootPath must identify a Studio instance');\n return segments;\n}\n\nfunction parseJson(text: string): unknown {\n const trimmed = text.trim();\n const fenced = trimmed.match(/^```(?:json)?\\s*([\\s\\S]*?)\\s*```$/i)?.[1] ?? trimmed;\n try {\n return JSON.parse(fenced);\n } catch {\n const start = fenced.indexOf('{');\n const end = fenced.lastIndexOf('}');\n if (start >= 0 && end > start) return JSON.parse(fenced.slice(start, end + 1));\n throw new Error('Sampling response did not contain a JSON object');\n }\n}\n\nfunction extractSamplingText(content: unknown): string {\n const blocks = Array.isArray(content) ? content : [content];\n const text = blocks\n .flatMap((block) => {\n if (block && typeof block === 'object' && (block as { type?: unknown }).type === 'text') {\n const value = (block as { text?: unknown }).text;\n return typeof value === 'string' ? [value] : [];\n }\n return [];\n })\n .join('\\n');\n if (!text) throw new Error('Sampling response did not contain text');\n return text;\n}\n\nfunction valuesEquivalent(expected: unknown, actual: unknown): boolean {\n if (typeof expected === 'string' && typeof actual === 'string') {\n if (expected.startsWith('#') && actual.startsWith('#'))\n return expected.toUpperCase() === actual.toUpperCase();\n if (actual.startsWith('Enum.')) return actual.endsWith(`.${expected.split('.').at(-1)}`);\n return expected === actual;\n }\n if (typeof expected === 'number' && typeof actual === 'number')\n return Math.abs(expected - actual) < 1e-6;\n if (Array.isArray(expected) && Array.isArray(actual)) {\n return (\n expected.length === actual.length &&\n expected.every((item, index) => valuesEquivalent(item, actual[index]))\n );\n }\n if (expected && actual && typeof expected === 'object' && typeof actual === 'object') {\n const left = expected as Record<string, unknown>;\n const right = actual as Record<string, unknown>;\n return Object.keys(left).every((key) => valuesEquivalent(left[key], right[key]));\n }\n return Object.is(expected, actual);\n}\n\nfunction emit(server: McpServer, type: string, data: Record<string, unknown>): void {\n void server\n .sendLoggingMessage({\n level: 'info',\n logger: 'dominus.multi_agent',\n data: { type, ...data },\n })\n .catch(() => undefined);\n}\n\nfunction toErrorMessage(error: unknown): string {\n return error instanceof Error ? error.message : String(error);\n}\n","import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { z } from 'zod';\nimport { CliMsg } from '../../transport/protocol.js';\nimport type { StudioBridge } from '../../transport/ws-server.js';\nimport { callStudio, instanceRefSchema, ref, toolOutputSchema } from './shared.js';\n\nconst propertiesSchema = z\n .record(z.unknown())\n .refine(\n (properties) =>\n Object.keys(properties).length <= 100 &&\n !Object.keys(properties).some((name) => ['Parent', 'ClassName', 'Source'].includes(name)),\n 'At most 100 properties are allowed; Parent, ClassName, and Source require dedicated operations',\n );\n\nconst setPropertiesOperation = z.object({\n op: z.literal('setProperties'),\n target: instanceRefSchema,\n properties: propertiesSchema,\n});\n\nconst createOperation = z.object({\n op: z.literal('create'),\n parent: instanceRefSchema,\n className: z.string().min(1).max(100),\n name: z.string().min(1).max(256),\n properties: propertiesSchema.optional(),\n});\n\nconst moveOperation = z.object({\n op: z.literal('move'),\n target: instanceRefSchema,\n parent: instanceRefSchema,\n});\n\nconst mutationOperation = z.discriminatedUnion('op', [\n setPropertiesOperation,\n createOperation,\n moveOperation,\n]);\n\ntype UiNode = {\n ClassName: string;\n Name?: string;\n properties?: Record<string, unknown>;\n Children?: UiNode[];\n};\n\nconst uiNodeSchema: z.ZodType<UiNode> = z.lazy(() =>\n z.object({\n ClassName: z.string().min(1).max(100),\n Name: z.string().min(1).max(256).optional(),\n properties: propertiesSchema.optional(),\n Children: z.array(uiNodeSchema).max(1000).optional(),\n }),\n);\n\nexport function registerStudioTools(server: McpServer, bridge: StudioBridge): void {\n server.registerTool(\n 'studio_get_tree',\n {\n title: 'Inspect Studio Tree',\n description:\n 'Read a deterministic Studio hierarchy and receive stable instance refs. Use refs from this result in later calls.',\n inputSchema: {\n root: instanceRefSchema.optional(),\n maxDepth: z.number().int().min(0).max(12).optional().default(3),\n maxNodes: z.number().int().min(1).max(5000).optional().default(1000),\n },\n outputSchema: toolOutputSchema,\n annotations: {\n readOnlyHint: true,\n destructiveHint: false,\n idempotentHint: true,\n openWorldHint: false,\n },\n },\n ({ root, maxDepth, maxNodes }) =>\n callStudio(bridge, CliMsg.V2_GET_TREE, {\n root: root ? ref(root) : undefined,\n maxDepth,\n maxNodes,\n }),\n );\n\n server.registerTool(\n 'studio_inspect',\n {\n title: 'Inspect Studio Instances',\n description:\n 'Read typed property values and immediate children for up to 20 instance refs. Returns writable metadata from live ReflectionService.',\n inputSchema: {\n targets: z.array(instanceRefSchema).min(1).max(20),\n compact: z.boolean().optional().default(true),\n },\n outputSchema: toolOutputSchema,\n annotations: {\n readOnlyHint: true,\n destructiveHint: false,\n idempotentHint: true,\n openWorldHint: false,\n },\n },\n ({ targets, compact }) => callStudio(bridge, CliMsg.V2_INSPECT, { targets, compact }),\n );\n\n server.registerTool(\n 'studio_get_selection',\n {\n title: 'Get Studio Selection',\n description: 'Return the user current Roblox Studio selection as stable instance refs.',\n inputSchema: {},\n outputSchema: toolOutputSchema,\n annotations: {\n readOnlyHint: true,\n destructiveHint: false,\n idempotentHint: true,\n openWorldHint: false,\n },\n },\n () => callStudio(bridge, CliMsg.V2_GET_SELECTION, {}),\n );\n\n server.registerTool(\n 'studio_read_script',\n {\n title: 'Read Studio Script',\n description:\n 'Read a Script, LocalScript, or ModuleScript and receive its source plus a revision required for conflict-safe updates.',\n inputSchema: { target: instanceRefSchema },\n outputSchema: toolOutputSchema,\n annotations: {\n readOnlyHint: true,\n destructiveHint: false,\n idempotentHint: true,\n openWorldHint: false,\n },\n },\n ({ target }) => callStudio(bridge, CliMsg.V2_READ_SCRIPT, { target }),\n );\n\n server.registerTool(\n 'studio_update_script',\n {\n title: 'Update Studio Script',\n description:\n 'Replace script source only if expectedRevision still matches the editor. Read the script again after updating to verify it.',\n inputSchema: {\n target: instanceRefSchema,\n source: z.string().max(750_000),\n expectedRevision: z.string().regex(/^\\d+:[0-9a-f]{8}$/),\n },\n outputSchema: toolOutputSchema,\n annotations: {\n readOnlyHint: false,\n destructiveHint: true,\n idempotentHint: true,\n openWorldHint: false,\n },\n },\n ({ target, source, expectedRevision }) =>\n callStudio(bridge, CliMsg.V2_UPDATE_SCRIPT, { target, source, expectedRevision }, 60_000),\n );\n\n server.registerTool(\n 'studio_apply',\n {\n title: 'Apply Atomic Studio Mutations',\n description:\n 'Atomically set properties, create instances, and move instances. Any failed operation cancels and undoes the entire batch.',\n inputSchema: { operations: z.array(mutationOperation).min(1).max(100) },\n outputSchema: toolOutputSchema,\n annotations: {\n readOnlyHint: false,\n destructiveHint: false,\n idempotentHint: false,\n openWorldHint: false,\n },\n },\n ({ operations }) => callStudio(bridge, CliMsg.V2_APPLY, { operations }, 60_000),\n );\n\n server.registerTool(\n 'studio_delete_instances',\n {\n title: 'Delete Studio Instances',\n description:\n 'Destructively delete up to 50 instances in one undoable recording. Only call when the user explicitly requested deletion or cleanup.',\n inputSchema: {\n targets: z.array(instanceRefSchema).min(1).max(50),\n confirm: z.literal(true),\n },\n outputSchema: toolOutputSchema,\n annotations: {\n readOnlyHint: false,\n destructiveHint: true,\n idempotentHint: false,\n openWorldHint: false,\n },\n },\n ({ targets, confirm }) => callStudio(bridge, CliMsg.V2_DELETE, { targets, confirm }, 60_000),\n );\n\n server.registerTool(\n 'studio_build_ui',\n {\n title: 'Build Atomic Roblox UI',\n description:\n 'Build and validate a declarative UI tree off-tree, then commit it in one undoable operation. Existing UI is replaced only when replaceExisting is true.',\n inputSchema: {\n parent: instanceRefSchema.optional(),\n tree: uiNodeSchema,\n replaceExisting: z.boolean().optional().default(false),\n maxDepth: z.number().int().min(1).max(50).optional().default(30),\n maxNodes: z.number().int().min(1).max(3000).optional().default(1000),\n },\n outputSchema: toolOutputSchema,\n annotations: {\n readOnlyHint: false,\n destructiveHint: true,\n idempotentHint: false,\n openWorldHint: false,\n },\n },\n ({ parent, tree, replaceExisting, maxDepth, maxNodes }) =>\n callStudio(\n bridge,\n CliMsg.V2_BUILD_UI,\n { parent, tree, replaceExisting, maxDepth, maxNodes },\n 120_000,\n ),\n );\n\n server.registerTool(\n 'studio_snapshot_ui',\n {\n title: 'Snapshot Roblox UI',\n description:\n 'Serialize a live UI subtree into typed, studio_build_ui-compatible data for fidelity checks and read-back verification.',\n inputSchema: {\n target: instanceRefSchema,\n maxDepth: z.number().int().min(0).max(50).optional().default(30),\n },\n outputSchema: toolOutputSchema,\n annotations: {\n readOnlyHint: true,\n destructiveHint: false,\n idempotentHint: true,\n openWorldHint: false,\n },\n },\n ({ target, maxDepth }) =>\n callStudio(bridge, CliMsg.V2_SNAPSHOT_UI, { target, maxDepth }, 120_000),\n );\n\n server.registerTool(\n 'studio_run_test',\n {\n title: 'Run Roblox Studio Test',\n description:\n 'Run a bounded StudioTestService run, play, or multiplayer scenario. The game test harness must call StudioTestService:EndTest with its result.',\n inputSchema: {\n mode: z.enum(['run', 'play', 'multiplayer']).optional().default('run'),\n args: z.unknown().optional(),\n players: z.number().int().min(1).max(8).optional().default(1),\n timeoutMs: z.number().int().min(5_000).max(600_000).optional().default(120_000),\n },\n outputSchema: toolOutputSchema,\n annotations: {\n readOnlyHint: false,\n destructiveHint: false,\n idempotentHint: false,\n openWorldHint: false,\n },\n },\n ({ mode, args, players, timeoutMs }) =>\n callStudio(\n bridge,\n CliMsg.V2_RUN_TEST,\n { mode, args, players, timeoutMs },\n timeoutMs + 15_000,\n ),\n );\n\n server.registerTool(\n 'studio_get_output',\n {\n title: 'Read Studio Output',\n description:\n 'Read the bounded Studio output buffer, optionally filtered by severity. Dominus transport messages are excluded.',\n inputSchema: {\n limit: z.number().int().min(1).max(500).optional().default(100),\n level: z.enum(['info', 'warn', 'error']).optional(),\n },\n outputSchema: toolOutputSchema,\n annotations: {\n readOnlyHint: true,\n destructiveHint: false,\n idempotentHint: true,\n openWorldHint: false,\n },\n },\n ({ limit, level }) => callStudio(bridge, CliMsg.V2_GET_OUTPUT, { limit, level }),\n );\n\n server.registerTool(\n 'studio_get_reflection',\n {\n title: 'Read Live Roblox Reflection',\n description:\n 'Read current ReflectionService fields for a class in the connected Studio, including Type, Display category, and permission metadata.',\n inputSchema: { className: z.string().min(1).max(100) },\n outputSchema: toolOutputSchema,\n annotations: {\n readOnlyHint: true,\n destructiveHint: false,\n idempotentHint: true,\n openWorldHint: false,\n },\n },\n ({ className }) => callStudio(bridge, CliMsg.V2_GET_REFLECTION, { className }),\n );\n}\n","import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';\nimport { loadConfig } from '../config/config.js';\nimport { ensureBridgeDaemon } from '../transport/daemon-launcher.js';\nimport type { StudioBridge } from '../transport/ws-server.js';\nimport { DOMINUS_MCP_INSTRUCTIONS } from './instructions.js';\nimport { registerDominusResources } from './resources.js';\nimport { registerConnectionTools } from './tools/connections.js';\nimport { registerDocsTools } from './tools/docs.js';\nimport { registerParallelTaskTool } from './tools/parallel.js';\nimport { registerStudioTools } from './tools/studio.js';\n\nconst VERSION = '2.2.1';\n\nexport function createDominusMcpServer(bridge: StudioBridge): McpServer {\n const server = new McpServer(\n {\n name: 'dominus-2',\n version: VERSION,\n },\n {\n instructions: DOMINUS_MCP_INSTRUCTIONS,\n },\n );\n\n registerConnectionTools(server, bridge);\n registerStudioTools(server, bridge);\n registerParallelTaskTool(server, bridge);\n registerDocsTools(server);\n registerDominusResources(server, bridge);\n return server;\n}\n\nexport async function createStudioBridge(port: number): Promise<StudioBridge> {\n return ensureBridgeDaemon(port);\n}\n\nexport async function startMcpServer(): Promise<void> {\n const config = loadConfig();\n const bridge = await createStudioBridge(config.port);\n const server = createDominusMcpServer(bridge);\n const transport = new StdioServerTransport();\n\n let stopped = false;\n const stop = async () => {\n if (stopped) return;\n stopped = true;\n await bridge.stop();\n };\n process.once('SIGINT', () => void stop().finally(() => process.exit(0)));\n process.once('SIGTERM', () => void stop().finally(() => process.exit(0)));\n\n await server.connect(transport);\n}\n","import { startMcpServer } from './server.js';\n\nstartMcpServer().catch((err) => {\n console.error('Failed to start Dominus MCP server:', err);\n process.exit(1);\n});\n"]}
1
+ {"version":3,"sources":["../src/config/config.ts","../src/transport/protocol.ts","../src/transport/auth.ts","../src/transport/ws-client.ts","../src/transport/daemon-launcher.ts","../src/mcp/instructions.ts","../src/mcp/resources.ts","../src/mcp/result.ts","../src/mcp/tools/shared.ts","../src/mcp/tools/building.ts","../src/mcp/tools/connections.ts","../src/docs/roblox-api.ts","../src/mcp/tools/docs.ts","../src/mcp/tools/parallel.ts","../src/mcp/tools/studio.ts","../src/mcp/server.ts","../src/mcp/index.ts"],"names":["path","fs","z","propertiesSchema","ref"],"mappings":"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","file":"mcp.js","sourcesContent":["import fs from 'node:fs';\nimport path from 'node:path';\nimport os from 'node:os';\nimport type { ConfigAccess } from '../tools/types.js';\n\nconst DOMINUS_DIR = path.join(os.homedir(), '.dominus');\nconst CONFIG_PATH = path.join(DOMINUS_DIR, 'config.json');\nconst DB_PATH = path.join(DOMINUS_DIR, 'dominus.db');\nconst RULES_PATH = path.join(DOMINUS_DIR, 'rules.json');\n\nexport type AIProviderType =\n | 'openai'\n | 'anthropic'\n | 'gemini'\n | 'xai'\n | 'openrouter'\n | 'custom';\n\nexport interface ProviderConfig {\n name: string;\n baseUrl: string;\n envVar: string;\n defaultModel: string;\n}\n\nexport const PROVIDERS: Record<AIProviderType, ProviderConfig> = {\n openai: {\n name: 'OpenAI',\n baseUrl: 'https://api.openai.com/v1',\n envVar: 'OPENAI_API_KEY',\n defaultModel: 'gpt-5.3-codex',\n },\n anthropic: {\n name: 'Anthropic',\n baseUrl: 'https://api.anthropic.com/v1/',\n envVar: 'ANTHROPIC_API_KEY',\n defaultModel: 'claude-sonnet-4-6',\n },\n gemini: {\n name: 'Google Gemini',\n baseUrl: 'https://generativelanguage.googleapis.com/v1beta/openai',\n envVar: 'GEMINI_API_KEY',\n defaultModel: 'gemini-3.1-pro',\n },\n xai: {\n name: 'xAI (Grok)',\n baseUrl: 'https://api.x.ai/v1',\n envVar: 'XAI_API_KEY',\n defaultModel: 'grok-4.2',\n },\n openrouter: {\n name: 'OpenRouter',\n baseUrl: 'https://openrouter.ai/api/v1',\n envVar: 'OPENROUTER_API_KEY',\n defaultModel: 'anthropic/claude-sonnet-4-6',\n },\n custom: {\n name: 'Custom',\n baseUrl: '',\n envVar: '',\n defaultModel: '',\n },\n};\n\nexport interface DominusConfig {\n provider: AIProviderType;\n apiKey?: string;\n apiBaseUrl: string;\n model: string;\n port: number;\n maxToolIterations: number;\n maxVerifyRetries: number;\n tokenBudget: number;\n autoIndex: boolean;\n autoLearn: boolean;\n userName: string;\n openCloudApiKey?: string;\n}\n\nconst DEFAULTS: DominusConfig = {\n provider: 'openai',\n apiBaseUrl: '',\n model: '',\n port: 18088,\n maxToolIterations: 25,\n maxVerifyRetries: 3,\n tokenBudget: 128000,\n autoIndex: true,\n autoLearn: true,\n userName: 'Developer',\n};\n\n/**\n * Auto-detect provider from environment variables.\n * Returns the first provider whose env var is set, or null.\n */\nexport function detectProviderFromEnv(): { provider: AIProviderType; apiKey: string } | null {\n const priority: AIProviderType[] = ['openai', 'anthropic', 'gemini', 'xai', 'openrouter'];\n for (const p of priority) {\n const key = process.env[PROVIDERS[p].envVar];\n if (key) return { provider: p, apiKey: key };\n }\n return null;\n}\n\n/**\n * Resolve the effective base URL and model for a provider config.\n */\nexport function resolveProviderSettings(config: DominusConfig): {\n baseUrl: string;\n model: string;\n} {\n const providerInfo = PROVIDERS[config.provider];\n return {\n baseUrl: config.apiBaseUrl || providerInfo?.baseUrl || PROVIDERS.openrouter.baseUrl,\n model: config.model || providerInfo?.defaultModel || 'gpt-4o',\n };\n}\n\nexport interface DominusRules {\n do: string[];\n dont: string[];\n conventions: string[];\n context: string;\n}\n\nconst DEFAULT_RULES: DominusRules = {\n do: [],\n dont: [],\n conventions: [],\n context: '',\n};\n\nfunction ensureDir(): void {\n if (!fs.existsSync(DOMINUS_DIR)) {\n fs.mkdirSync(DOMINUS_DIR, { recursive: true });\n }\n}\n\nfunction readJson<T>(filePath: string, defaults: T): T {\n try {\n if (fs.existsSync(filePath)) {\n const raw = fs.readFileSync(filePath, 'utf-8');\n return { ...defaults, ...JSON.parse(raw) };\n }\n } catch {\n // Corrupted file; reset to defaults\n }\n return { ...defaults };\n}\n\nfunction writeJson(filePath: string, data: unknown): void {\n ensureDir();\n fs.writeFileSync(filePath, JSON.stringify(data, null, 2), 'utf-8');\n}\n\nexport function loadConfig(): DominusConfig {\n ensureDir();\n return readJson(CONFIG_PATH, DEFAULTS);\n}\n\nexport function saveConfig(config: DominusConfig): void {\n writeJson(CONFIG_PATH, config);\n}\n\nexport function getConfigValue<K extends keyof DominusConfig>(key: K): DominusConfig[K] {\n const config = loadConfig();\n return config[key];\n}\n\nexport function setConfigValue<K extends keyof DominusConfig>(\n key: K,\n value: DominusConfig[K],\n): void {\n const config = loadConfig();\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (config as any)[key] = value;\n saveConfig(config);\n}\n\nexport function loadRules(): DominusRules {\n ensureDir();\n return readJson(RULES_PATH, DEFAULT_RULES);\n}\n\nexport function saveRules(rules: DominusRules): void {\n writeJson(RULES_PATH, rules);\n}\n\nexport function getDominusDir(): string {\n ensureDir();\n return DOMINUS_DIR;\n}\n\nexport function getDbPath(): string {\n ensureDir();\n return DB_PATH;\n}\n\nexport function createConfigAccess(): ConfigAccess {\n return {\n get<T>(key: string): T | undefined {\n const config = loadConfig() as unknown as Record<string, unknown>;\n return config[key] as T | undefined;\n },\n set(key: string, value: unknown): void {\n const config = loadConfig() as unknown as Record<string, unknown>;\n config[key] = value;\n saveConfig(config as unknown as DominusConfig);\n },\n getAll(): Record<string, unknown> {\n return loadConfig() as unknown as Record<string, unknown>;\n },\n };\n}\n","import { nanoid } from 'nanoid';\nimport { z } from 'zod';\n\nexport const DOMINUS_PROTOCOL_VERSION = 2;\nexport const MAX_MESSAGE_BYTES = 1024 * 1024;\n\nexport interface WsMessage<T = unknown> {\n id: string;\n type: string;\n payload: T;\n ts: number;\n}\n\nexport const StudioMsg = {\n HELLO: 'studio:hello',\n CONNECTED: 'studio:connected',\n DISCONNECTED: 'studio:disconnected',\n EXPLORER: 'studio:explorer',\n OUTPUT: 'studio:output',\n ERROR: 'studio:error',\n SELECTION: 'studio:selection',\n SCRIPT_CONTENT: 'studio:script:content',\n SCRIPT_CHANGED: 'studio:script:changed',\n RESPONSE: 'studio:response',\n REFLECTION: 'studio:reflection',\n TEST_RESULTS: 'studio:test:results',\n AUTHENTICATED: 'server:authenticated',\n AUTH_REJECTED: 'server:auth_rejected',\n} as const;\n\nexport const ControllerMsg = {\n HELLO: 'controller:hello',\n WELCOME: 'controller:welcome',\n RELAY: 'controller:relay',\n TARGET_STATE: 'controller:target_state',\n SET_ACTIVE_CONNECTION: 'controller:set_active_connection',\n} as const;\n\nexport const CliMsg = {\n GET_EXPLORER: 'cli:get:explorer',\n GET_SCRIPT: 'cli:get:script',\n SET_SCRIPT: 'cli:set:script',\n RUN_CODE: 'cli:run',\n GET_PROPERTIES: 'cli:get:properties',\n GET_DESCENDANTS_PROPERTIES: 'cli:get:descendants:properties',\n SET_PROPERTIES: 'cli:set:properties',\n INSERT_INSTANCE: 'cli:insert',\n DELETE_INSTANCE: 'cli:delete',\n GET_SELECTION: 'cli:get:selection',\n SELECT: 'cli:select',\n SEARCH_SCRIPTS: 'cli:search:scripts',\n GET_OUTPUT: 'cli:get:output',\n RUN_TESTS: 'cli:run:tests',\n EXECUTE_RUN_TEST: 'cli:test:run',\n EXECUTE_PLAY_TEST: 'cli:test:play',\n END_TEST: 'cli:test:end',\n BUILD_UI: 'cli:build:ui',\n GET_REFLECTION: 'cli:get:reflection',\n UPLOAD_ASSET: 'cli:upload:asset',\n SERIALIZE_UI: 'cli:serialize:ui',\n MOVE_INSTANCE: 'cli:move:instance',\n UNDO: 'cli:undo',\n REDO: 'cli:redo',\n BULK_SET_PROPERTIES: 'cli:bulk:set:properties',\n FIND_REPLACE_SCRIPTS: 'cli:find:replace:scripts',\n V2_GET_TREE: 'studio:v2:get_tree',\n V2_INSPECT: 'studio:v2:inspect',\n V2_GET_SELECTION: 'studio:v2:get_selection',\n V2_READ_SCRIPT: 'studio:v2:read_script',\n V2_UPDATE_SCRIPT: 'studio:v2:update_script',\n V2_APPLY: 'studio:v2:apply',\n V2_CREATE_PARTS: 'studio:v2:create_parts',\n V2_CLONE_INSTANCES: 'studio:v2:clone_instances',\n V2_GROUP_INSTANCES: 'studio:v2:group_instances',\n V2_UNGROUP_INSTANCES: 'studio:v2:ungroup_instances',\n V2_TRANSFORM_INSTANCES: 'studio:v2:transform_instances',\n V2_CREATE_WELDS: 'studio:v2:create_welds',\n V2_QUERY_PARTS: 'studio:v2:query_parts',\n V2_SET_SELECTION: 'studio:v2:set_selection',\n V2_DELETE: 'studio:v2:delete',\n V2_BUILD_UI: 'studio:v2:build_ui',\n V2_SNAPSHOT_UI: 'studio:v2:snapshot_ui',\n V2_RUN_TEST: 'studio:v2:run_test',\n V2_GET_OUTPUT: 'studio:v2:get_output',\n V2_GET_REFLECTION: 'studio:v2:get_reflection',\n} as const;\n\nexport type StudioMsgType = (typeof StudioMsg)[keyof typeof StudioMsg];\nexport type CliMsgType = (typeof CliMsg)[keyof typeof CliMsg];\n\nexport interface ExplorerNode {\n name: string;\n className: string;\n path: string;\n ref?: InstanceRef;\n children?: ExplorerNode[];\n}\n\nexport interface InstanceRef {\n instanceId?: string;\n pathSegments?: string[];\n}\n\nexport interface StudioConnectedPayload {\n studioVersion: string;\n protocolVersion?: number;\n clientId?: string;\n token?: string;\n connectionId?: string;\n placeId?: number;\n placeName?: string;\n engineVersion?: string;\n}\n\nexport interface ScriptContentPayload {\n path: string;\n className: 'Script' | 'LocalScript' | 'ModuleScript';\n source: string;\n lineCount: number;\n}\n\nexport interface ScriptChangedPayload {\n path: string;\n source: string;\n}\n\nexport interface OutputPayload {\n message: string;\n level: 'info' | 'warn' | 'error';\n timestamp: number;\n source?: string;\n}\n\nexport interface SelectionPayload {\n paths: string[];\n classNames: string[];\n}\n\nexport interface PropertyEntry {\n name: string;\n value: string;\n type: string;\n category?: string;\n}\n\nexport interface TestResultPayload {\n name: string;\n passed: boolean;\n duration: number;\n error?: string;\n}\n\nexport interface StudioTestPayload {\n args?: unknown;\n}\n\nexport interface StudioTestResultPayload {\n success: boolean;\n result?: unknown;\n error?: string;\n duration?: number;\n}\n\nexport interface ReflectionPayload {\n className: string;\n properties: { name: string; type: string; category: string }[];\n methods: { name: string; parameters: string[] }[];\n events: { name: string; parameters: string[] }[];\n}\n\nexport interface RunCodePayload {\n code: string;\n}\n\nexport interface RunCodeResponsePayload {\n output: string;\n error?: string;\n duration: number;\n}\n\nexport interface SearchScriptsPayload {\n query: string;\n maxResults?: number;\n}\n\nexport interface SearchResultPayload {\n results: {\n path: string;\n className: string;\n matches: { line: number; text: string }[];\n }[];\n}\n\nexport interface InsertInstancePayload {\n className: string;\n parentPath: string;\n name: string;\n properties?: Record<string, unknown>;\n}\n\nexport interface SetPropertiesPayload {\n path: string;\n properties: Record<string, unknown>;\n}\n\nexport function createMessage<T>(type: string, payload: T): WsMessage<T> {\n return { id: nanoid(), type, payload, ts: Date.now() };\n}\n\nexport function createRequest<T>(type: string, payload: T): WsMessage<T> {\n return createMessage(type, payload);\n}\n\nexport function parseMessage(raw: string): WsMessage {\n if (Buffer.byteLength(raw, 'utf8') > MAX_MESSAGE_BYTES) {\n throw new Error(`WebSocket message exceeds ${MAX_MESSAGE_BYTES} bytes`);\n }\n try {\n const parsed = JSON.parse(raw) as unknown;\n return wsMessageSchema.parse(parsed) as WsMessage;\n } catch {\n throw new Error(`Failed to parse WebSocket message: ${raw.slice(0, 100)}`);\n }\n}\n\nexport function serializeMessage(msg: WsMessage): string {\n const serialized = JSON.stringify(msg);\n if (Buffer.byteLength(serialized, 'utf8') > MAX_MESSAGE_BYTES) {\n throw new Error(`WebSocket message exceeds ${MAX_MESSAGE_BYTES} bytes`);\n }\n return serialized;\n}\n\nconst wsMessageSchema = z\n .object({\n id: z.string().min(1).max(128),\n type: z.string().min(1).max(128),\n payload: z.unknown(),\n ts: z.number().finite(),\n })\n .strict();\n","import fs from 'node:fs';\nimport path from 'node:path';\nimport * as crypto from 'node:crypto';\nimport { getDominusDir } from '../config/config.js';\n\nconst TOKEN_FILE = 'bridge-token';\n\nexport function loadOrCreateBridgeToken(): string {\n const tokenPath = path.join(getDominusDir(), TOKEN_FILE);\n try {\n const existing = fs.readFileSync(tokenPath, 'utf8').trim();\n if (existing.length >= 32) return existing;\n } catch {\n // First run or an unreadable token is repaired below.\n }\n\n const token = crypto.randomBytes(32).toString('base64url');\n fs.writeFileSync(tokenPath, `${token}\\n`, { encoding: 'utf8', mode: 0o600 });\n try {\n fs.chmodSync(tokenPath, 0o600);\n } catch {\n // Windows ACLs do not map directly to POSIX modes.\n }\n return token;\n}\n\nexport function tokensEqual(actual: unknown, expected: string): boolean {\n if (typeof actual !== 'string') return false;\n const actualBuffer = Buffer.from(actual);\n const expectedBuffer = Buffer.from(expected);\n return (\n actualBuffer.length === expectedBuffer.length &&\n crypto.timingSafeEqual(actualBuffer, expectedBuffer)\n );\n}\n","import { EventEmitter } from 'node:events';\nimport { WebSocket } from 'ws';\nimport {\n ControllerMsg,\n DOMINUS_PROTOCOL_VERSION,\n StudioMsg,\n createMessage,\n parseMessage,\n serializeMessage,\n type WsMessage,\n} from './protocol.js';\nimport { loadOrCreateBridgeToken } from './auth.js';\nimport type { PlaceInfo, StudioBridge, StudioConnection } from './ws-server.js';\n\ninterface ClientOptions {\n token?: string;\n connectTimeoutMs?: number;\n}\n\ninterface ControlResult {\n success?: boolean;\n error?: string;\n [key: string]: unknown;\n}\n\nexport class DominusClient extends EventEmitter implements StudioBridge {\n private ws: WebSocket | null = null;\n private readonly port: number;\n private readonly token: string;\n private readonly connectTimeoutMs: number;\n private readonly connections = new Map<string, Omit<StudioConnection, 'ws'>>();\n private activeConnectionId: string | null = null;\n private readonly pendingRequests = new Map<\n string,\n {\n resolve: (msg: WsMessage) => void;\n reject: (err: Error) => void;\n timer: ReturnType<typeof setTimeout>;\n }\n >();\n\n constructor(port = 18088, options: ClientOptions = {}) {\n super();\n this.port = port;\n this.token = options.token ?? loadOrCreateBridgeToken();\n this.connectTimeoutMs = options.connectTimeoutMs ?? 8_000;\n }\n\n connect(): Promise<void> {\n return new Promise((resolve, reject) => {\n const ws = new WebSocket(`ws://127.0.0.1:${this.port}`, {\n perMessageDeflate: false,\n maxPayload: 1024 * 1024,\n });\n let settled = false;\n const timer = setTimeout(() => {\n if (!settled) {\n settled = true;\n ws.close(1008, 'Dominus controller handshake timed out');\n reject(new Error('Timed out authenticating with the Dominus bridge'));\n }\n }, this.connectTimeoutMs);\n\n ws.on('open', () => {\n this.ws = ws;\n ws.send(\n serializeMessage(\n createMessage(ControllerMsg.HELLO, {\n protocolVersion: DOMINUS_PROTOCOL_VERSION,\n token: this.token,\n }),\n ),\n );\n });\n\n ws.on('message', (raw) => {\n try {\n const msg = parseMessage(raw.toString());\n if (msg.type === ControllerMsg.WELCOME && !settled) {\n settled = true;\n clearTimeout(timer);\n this.applyWelcome(msg.payload);\n this.emit('server:started', { port: this.port, relay: true });\n resolve();\n return;\n }\n if (msg.type === StudioMsg.AUTH_REJECTED && !settled) {\n settled = true;\n clearTimeout(timer);\n const payload = msg.payload as { error?: string };\n reject(new Error(payload.error ?? 'Dominus controller authentication failed'));\n ws.close(1008, 'Controller authentication failed');\n return;\n }\n this.handleMessage(msg);\n } catch (err) {\n this.emit('server:error', err);\n }\n });\n\n ws.on('close', () => {\n clearTimeout(timer);\n this.ws = null;\n this.connections.clear();\n this.activeConnectionId = null;\n if (!settled) {\n settled = true;\n reject(new Error('Dominus bridge closed before authentication completed'));\n }\n this.rejectPending(new Error('Dominus relay connection lost'));\n this.emit('studio:disconnected');\n });\n\n ws.on('error', (err) => {\n if (!settled) {\n settled = true;\n clearTimeout(timer);\n reject(err);\n }\n this.emit('server:error', err);\n });\n });\n }\n\n private applyWelcome(payload: unknown): void {\n const welcome = payload as {\n connections?: PlaceInfo[];\n activeConnectionId?: string | null;\n };\n this.replaceConnections(welcome.connections ?? []);\n this.activeConnectionId = welcome.activeConnectionId ?? null;\n if (!this.resolveTargetInfo() && this.connections.size === 1) {\n this.activeConnectionId = this.connections.keys().next().value ?? null;\n }\n }\n\n private handleMessage(msg: WsMessage): void {\n if (msg.type === ControllerMsg.TARGET_STATE) {\n const payload = msg.payload as {\n connections?: PlaceInfo[];\n defaultActiveConnectionId?: string | null;\n };\n this.replaceConnections(payload.connections ?? []);\n if (this.activeConnectionId && !this.connections.has(this.activeConnectionId)) {\n this.activeConnectionId = null;\n }\n if (!this.activeConnectionId && this.connections.size === 1) {\n this.activeConnectionId = this.connections.keys().next().value ?? null;\n }\n this.emit('controller:target_state', payload);\n return;\n }\n\n if (msg.type === StudioMsg.CONNECTED) {\n const connection = msg.payload as PlaceInfo;\n this.connections.set(connection.connectionId, toConnectionInfo(connection));\n if (!this.activeConnectionId && this.connections.size === 1) {\n this.activeConnectionId = connection.connectionId;\n }\n this.emit('studio:connected', connection);\n return;\n }\n\n if (msg.type === StudioMsg.DISCONNECTED) {\n const payload = msg.payload as { connectionId?: string };\n if (payload.connectionId) this.connections.delete(payload.connectionId);\n if (this.activeConnectionId === payload.connectionId) this.activeConnectionId = null;\n if (!this.activeConnectionId && this.connections.size === 1) {\n this.activeConnectionId = this.connections.keys().next().value ?? null;\n }\n this.emit('studio:disconnected', payload);\n return;\n }\n\n if (msg.type === StudioMsg.RESPONSE) {\n const pending = this.pendingRequests.get(msg.id);\n if (pending) {\n clearTimeout(pending.timer);\n this.pendingRequests.delete(msg.id);\n pending.resolve(msg);\n }\n return;\n }\n\n this.emit(msg.type, msg.payload);\n this.emit('message', msg);\n }\n\n private replaceConnections(connections: PlaceInfo[]): void {\n this.connections.clear();\n for (const connection of connections) {\n this.connections.set(connection.connectionId, toConnectionInfo(connection));\n }\n }\n\n private sendMessage(message: WsMessage): void {\n if (!this.ws || this.ws.readyState !== WebSocket.OPEN) {\n throw new Error('Not connected to the Dominus bridge');\n }\n this.ws.send(serializeMessage(message));\n }\n\n private waitForResponse<T = unknown>(\n message: WsMessage,\n timeoutMs: number,\n ): Promise<WsMessage<T>> {\n return new Promise((resolve, reject) => {\n const timer = setTimeout(() => {\n this.pendingRequests.delete(message.id);\n reject(new Error(`Dominus request timed out: ${message.type}`));\n }, timeoutMs);\n this.pendingRequests.set(message.id, {\n resolve: resolve as (msg: WsMessage) => void,\n reject,\n timer,\n });\n try {\n this.sendMessage(message);\n } catch (err) {\n clearTimeout(timer);\n this.pendingRequests.delete(message.id);\n reject(err);\n }\n });\n }\n\n private async sendControlRequest<T extends ControlResult>(\n type: string,\n payload: unknown,\n timeoutMs = 10_000,\n ): Promise<T> {\n const response = await this.waitForResponse<T>(createMessage(type, payload), timeoutMs);\n const result = response.payload;\n if (result.error || result.success === false) throw new Error(result.error ?? `${type} failed`);\n return result;\n }\n\n sendRequest<T = unknown>(\n type: string,\n payload: unknown,\n timeoutMs = 15_000,\n ): Promise<WsMessage<T>> {\n const target = this.resolveTargetInfo();\n if (!target || !this.activeConnectionId) {\n return Promise.reject(\n new Error(\n this.connections.size > 1\n ? 'Multiple Studio sessions are connected. Call dominus_select_studio first.'\n : 'No authenticated Roblox Studio connection',\n ),\n );\n }\n const request = createMessage(type, payload);\n const relay = createMessage(ControllerMsg.RELAY, {\n connectionId: this.activeConnectionId,\n request,\n });\n return new Promise((resolve, reject) => {\n const timer = setTimeout(() => {\n this.pendingRequests.delete(request.id);\n reject(new Error(`Studio request timed out: ${type}`));\n }, timeoutMs);\n this.pendingRequests.set(request.id, {\n resolve: resolve as (msg: WsMessage) => void,\n reject,\n timer,\n });\n try {\n this.sendMessage(relay);\n } catch (err) {\n clearTimeout(timer);\n this.pendingRequests.delete(request.id);\n reject(err);\n }\n });\n }\n\n sendNotification(type: string, payload: unknown): void {\n if (!this.activeConnectionId) return;\n const request = createMessage(type, payload);\n this.sendMessage(\n createMessage(ControllerMsg.RELAY, {\n connectionId: this.activeConnectionId,\n request,\n }),\n );\n }\n\n isConnected(): boolean {\n return this.resolveTargetInfo() !== null;\n }\n\n getConnectionInfo(): StudioConnection | null {\n const target = this.resolveTargetInfo();\n if (!target || !this.ws) return null;\n return { ...target, ws: this.ws };\n }\n\n listConnections(): PlaceInfo[] {\n return [...this.connections.values()].map((connection) => ({\n placeId: connection.placeId ?? 0,\n connectionId: connection.connectionId,\n clientId: connection.clientId,\n placeName: connection.placeName,\n studioVersion: connection.studioVersion,\n connectedAt: connection.connectedAt,\n active: connection.connectionId === this.activeConnectionId,\n }));\n }\n\n getActiveConnectionId(): string | null {\n return this.activeConnectionId;\n }\n\n async setActiveConnectionId(connectionId: string | null): Promise<void> {\n if (connectionId && !this.connections.has(connectionId)) {\n throw new Error(`Studio connection ${connectionId} is not connected`);\n }\n await this.sendControlRequest(ControllerMsg.SET_ACTIVE_CONNECTION, { connectionId });\n this.activeConnectionId = connectionId;\n }\n\n getActivePlaceId(): number {\n return this.resolveTargetInfo()?.placeId ?? 0;\n }\n\n setActivePlaceId(placeId: number): void {\n if (placeId === 0) {\n void this.setActiveConnectionId(null);\n return;\n }\n const matches = [...this.connections.values()].filter(\n (connection) => connection.placeId === placeId,\n );\n if (matches.length !== 1) {\n throw new Error(\n matches.length === 0\n ? `Place ${placeId} is not connected`\n : `Place ${placeId} has multiple Studio sessions; select a connectionId instead`,\n );\n }\n void this.setActiveConnectionId(matches[0].connectionId);\n }\n\n private resolveTargetInfo(): Omit<StudioConnection, 'ws'> | null {\n if (this.activeConnectionId) return this.connections.get(this.activeConnectionId) ?? null;\n if (this.connections.size === 1) return this.connections.values().next().value ?? null;\n return null;\n }\n\n getPort(): number {\n return this.port;\n }\n\n stop(): Promise<void> {\n this.rejectPending(new Error('Dominus client is shutting down'));\n return new Promise((resolve) => {\n if (!this.ws) {\n resolve();\n return;\n }\n const ws = this.ws;\n this.ws = null;\n ws.once('close', resolve);\n ws.close(1000, 'Dominus client shutdown');\n });\n }\n\n private rejectPending(error: Error): void {\n for (const pending of this.pendingRequests.values()) {\n clearTimeout(pending.timer);\n pending.reject(error);\n }\n this.pendingRequests.clear();\n }\n}\n\nfunction toConnectionInfo(connection: PlaceInfo): Omit<StudioConnection, 'ws'> {\n return {\n connectedAt: connection.connectedAt,\n connectionId: connection.connectionId,\n clientId: connection.clientId,\n studioVersion: connection.studioVersion,\n placeId: connection.placeId,\n placeName: connection.placeName,\n };\n}\n\nexport async function isPortInUse(port: number): Promise<boolean> {\n return new Promise((resolve) => {\n const ws = new WebSocket(`ws://127.0.0.1:${port}`);\n const timer = setTimeout(() => {\n ws.close();\n resolve(false);\n }, 750);\n ws.on('open', () => {\n clearTimeout(timer);\n ws.close();\n resolve(true);\n });\n ws.on('error', () => {\n clearTimeout(timer);\n resolve(false);\n });\n });\n}\n","import fs from 'node:fs';\nimport path from 'node:path';\nimport { spawn } from 'node:child_process';\nimport { fileURLToPath } from 'node:url';\nimport { DominusClient, isPortInUse } from './ws-client.js';\n\nexport interface BridgeLaunchOptions {\n attempts?: number;\n connectTimeoutMs?: number;\n daemonPath?: string;\n launch?: (port: number) => void;\n retryDelayMs?: number;\n token?: string;\n}\n\nfunction resolveDaemonPath(): string {\n const besideEntry = fileURLToPath(new URL('./bridge-daemon.js', import.meta.url));\n if (fs.existsSync(besideEntry)) return besideEntry;\n\n const projectBuild = path.resolve(\n path.dirname(fileURLToPath(import.meta.url)),\n '../../dist/bridge-daemon.js',\n );\n if (fs.existsSync(projectBuild)) return projectBuild;\n\n throw new Error('Dominus bridge daemon is missing. Reinstall or rebuild dominus-cli.');\n}\n\nexport function launchBridgeDaemon(port: number, daemonPath = resolveDaemonPath()): void {\n const child = spawn(process.execPath, [daemonPath], {\n detached: true,\n env: { ...process.env, DOMINUS_BRIDGE_PORT: String(port) },\n stdio: 'ignore',\n windowsHide: true,\n });\n child.unref();\n}\n\nasync function connectController(\n port: number,\n timeoutMs: number,\n token?: string,\n): Promise<DominusClient> {\n const client = new DominusClient(port, { connectTimeoutMs: timeoutMs, token });\n try {\n await client.connect();\n return client;\n } catch (error) {\n await client.stop().catch(() => undefined);\n throw error;\n }\n}\n\nexport async function ensureBridgeDaemon(\n port: number,\n options: BridgeLaunchOptions = {},\n): Promise<DominusClient> {\n const attempts = options.attempts ?? 30;\n const connectTimeoutMs = options.connectTimeoutMs ?? 750;\n const retryDelayMs = options.retryDelayMs ?? 100;\n\n try {\n return await connectController(port, connectTimeoutMs, options.token);\n } catch (initialError) {\n if (await isPortInUse(port)) {\n throw new Error(\n `Port ${port} is occupied by a process that is not this Dominus bridge: ${formatError(initialError)}`,\n );\n }\n }\n\n const launch =\n options.launch ?? ((targetPort) => launchBridgeDaemon(targetPort, options.daemonPath));\n launch(port);\n\n let lastError: unknown;\n for (let attempt = 0; attempt < attempts; attempt += 1) {\n await new Promise((resolve) => setTimeout(resolve, retryDelayMs));\n try {\n return await connectController(port, connectTimeoutMs, options.token);\n } catch (error) {\n lastError = error;\n }\n }\n\n throw new Error(\n `Dominus could not start its local Studio bridge on port ${port}: ${formatError(lastError)}`,\n );\n}\n\nfunction formatError(error: unknown): string {\n return error instanceof Error ? error.message : String(error ?? 'unknown error');\n}\n","export const DOMINUS_MCP_INSTRUCTIONS = `Dominus 2 is a Roblox Studio engineering MCP server.\n\nRequired workflow for Studio changes:\n1. Call dominus_status. If Studio is disconnected, ask the user to run dominus-install-plugin only when the Studio Output reports an authentication failure. Select the intended authenticated Studio connection when more than one window is open.\n2. Inspect the relevant tree, selection, instances, scripts, and Roblox API references before editing.\n3. Form a short plan with explicit acceptance checks.\n4. Use stable instance refs returned by Dominus. Prefer instanceId; retain pathSegments as fallback context.\n5. Apply the smallest coherent mutation. Script updates require the expectedRevision returned by studio_read_script.\n6. Read the affected instances back and compare exact values, hierarchy, and source revisions.\n7. Run an appropriate Studio test when behavior changed. Report verification evidence and any remaining uncertainty.\n\nFor broad tasks with independent Studio branches, prefer run_parallel_task when the MCP client supports Sampling. Dominus partitions immediate child scopes, runs proposal-only workers concurrently, rejects unknown refs and overlapping writes, applies only the coordinator-approved atomic plan, and reads the result back. Use the normal workflow when Sampling is unavailable or the task is a simple edit.\n\nBuilding workflow:\n- Use studio_create_parts for multi-part structures instead of many generic create operations.\n- Use studio_clone_instances when an existing instance or model is the intended template. Clone rather than manually recreating descendants and properties.\n- Use studio_transform_instances for Models and BaseParts so model layouts move through PVInstance pivots.\n- Use studio_group_instances and studio_ungroup_instances to organize hierarchy, studio_create_welds for rigid assemblies, and studio_query_parts to inspect crowded 3D regions before editing.\n- Use studio_set_selection when surfacing completed objects to the Studio user.\n\nSafety rules:\n- Never invent instance IDs or Roblox API members.\n- Do not retry a failed write unchanged. Inspect the error and current state first.\n- Deletion is a separate destructive tool and requires explicit user intent.\n- studio_apply is transactional and supports setProperties, create, clone, and move operations. Keep related edits together, but stay within its documented limits.\n- UI fidelity work must snapshot and inspect the result after building; verify fonts, UDim2 values, colors, strokes, and hierarchy.\n- Dominus intentionally has no arbitrary Luau execution tool.`;\n","import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport type { StudioBridge } from '../transport/ws-server.js';\nimport { DOMINUS_MCP_INSTRUCTIONS } from './instructions.js';\n\nexport function registerDominusResources(server: McpServer, bridge: StudioBridge): void {\n server.registerResource(\n 'dominus-status',\n 'dominus://status',\n {\n title: 'Dominus 2 Studio Status',\n description: 'Current authenticated Roblox Studio sessions and selected target.',\n mimeType: 'application/json',\n },\n async (uri) => ({\n contents: [\n {\n uri: uri.href,\n mimeType: 'application/json',\n text: JSON.stringify(\n {\n protocolVersion: 2,\n activeConnectionId: bridge.getActiveConnectionId(),\n connections: bridge.listConnections(),\n },\n null,\n 2,\n ),\n },\n ],\n }),\n );\n\n server.registerPrompt(\n 'dominus-workflow',\n {\n title: 'Dominus 2 Engineering Workflow',\n description: 'Inspect, plan, apply, verify, and test a Roblox Studio change safely.',\n },\n async () => ({\n messages: [\n {\n role: 'user',\n content: { type: 'text', text: DOMINUS_MCP_INSTRUCTIONS },\n },\n ],\n }),\n );\n}\n","import type { CallToolResult } from '@modelcontextprotocol/sdk/types.js';\n\nexport interface DominusToolOutput extends Record<string, unknown> {\n success: boolean;\n data?: Record<string, unknown>;\n error?: string;\n}\n\nexport function toolResult(output: DominusToolOutput): CallToolResult {\n return {\n content: [{ type: 'text', text: JSON.stringify(output, null, 2) }],\n structuredContent: output,\n isError: !output.success,\n };\n}\n\nexport function success(data: Record<string, unknown> = {}): CallToolResult {\n return toolResult({ success: true, data });\n}\n\nexport function failure(error: unknown, data?: Record<string, unknown>): CallToolResult {\n return toolResult({\n success: false,\n error: error instanceof Error ? error.message : String(error),\n data,\n });\n}\n","import { z } from 'zod';\nimport { CliMsg, type InstanceRef } from '../../transport/protocol.js';\nimport type { StudioBridge } from '../../transport/ws-server.js';\nimport { failure, success } from '../result.js';\n\nexport const instanceRefSchema = z\n .object({\n instanceId: z.string().uuid().optional(),\n pathSegments: z.array(z.string().min(1).max(256)).min(1).max(100).optional(),\n })\n .refine((value) => Boolean(value.instanceId || value.pathSegments), {\n message: 'Provide instanceId or pathSegments',\n });\n\nexport const toolOutputSchema = {\n success: z.boolean(),\n data: z.record(z.unknown()).optional(),\n error: z.string().optional(),\n};\n\nexport async function callStudio(\n bridge: StudioBridge,\n command: (typeof CliMsg)[keyof typeof CliMsg],\n payload: Record<string, unknown>,\n timeoutMs = 15_000,\n) {\n try {\n const result = await requestStudio(bridge, command, payload, timeoutMs);\n return success(result);\n } catch (err) {\n return failure(err);\n }\n}\n\nexport async function requestStudio(\n bridge: StudioBridge,\n command: (typeof CliMsg)[keyof typeof CliMsg],\n payload: Record<string, unknown>,\n timeoutMs = 15_000,\n): Promise<Record<string, unknown>> {\n const response = await bridge.sendRequest<Record<string, unknown>>(command, payload, timeoutMs);\n const result = response.payload;\n if (!result || typeof result !== 'object') throw new Error('Studio returned an invalid response');\n if (result.success === false || typeof result.error === 'string') {\n throw new Error(typeof result.error === 'string' ? result.error : 'Studio command failed');\n }\n return result;\n}\n\nexport function ref(value: unknown): InstanceRef {\n return value as InstanceRef;\n}\n","import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { z } from 'zod';\nimport { CliMsg } from '../../transport/protocol.js';\nimport type { StudioBridge } from '../../transport/ws-server.js';\nimport { callStudio, instanceRefSchema, toolOutputSchema } from './shared.js';\n\nconst finiteNumber = z.number().finite();\nconst vector3Schema = z.object({ x: finiteNumber, y: finiteNumber, z: finiteNumber }).strict();\nconst propertiesSchema = z\n .record(z.unknown())\n .refine(\n (properties) =>\n Object.keys(properties).length <= 100 &&\n !Object.keys(properties).some((name) => ['Parent', 'ClassName', 'Source'].includes(name)),\n 'At most 100 properties are allowed; Parent, ClassName, and Source require dedicated operations',\n );\n\nconst partSchema = z.object({\n name: z.string().min(1).max(100),\n className: z\n .enum([\n 'Part',\n 'WedgePart',\n 'CornerWedgePart',\n 'TrussPart',\n 'MeshPart',\n 'SpawnLocation',\n 'Seat',\n 'VehicleSeat',\n ])\n .optional()\n .default('Part'),\n shape: z.enum(['Block', 'Ball', 'Cylinder', 'Wedge', 'CornerWedge']).optional(),\n position: vector3Schema.optional(),\n orientation: vector3Schema.optional(),\n size: vector3Schema.optional(),\n color: z.string().min(1).max(100).optional(),\n material: z.string().min(1).max(100).optional(),\n transparency: z.number().min(0).max(1).optional(),\n anchored: z.boolean().optional().default(true),\n canCollide: z.boolean().optional(),\n properties: propertiesSchema.optional(),\n});\n\nconst cloneRequestSchema = z.object({\n target: instanceRefSchema,\n parent: instanceRefSchema.optional(),\n name: z.string().min(1).max(100).optional(),\n count: z.number().int().min(1).max(50).optional().default(1),\n offset: vector3Schema.optional(),\n stepOffset: vector3Schema.optional(),\n properties: propertiesSchema.optional(),\n});\n\nconst cframeSchema = z\n .array(finiteNumber)\n .refine((value) => value.length === 3 || value.length === 12, 'CFrame requires 3 or 12 numbers');\n\nconst transformOperationSchema = z\n .object({\n target: instanceRefSchema,\n mode: z.enum(['absolute', 'relative']).optional().default('absolute'),\n cframe: cframeSchema.optional(),\n position: vector3Schema.optional(),\n orientation: vector3Schema.optional(),\n offset: vector3Schema.optional(),\n rotationOffset: vector3Schema.optional(),\n space: z.enum(['world', 'local']).optional().default('world'),\n })\n .refine(\n (value) =>\n value.mode === 'relative'\n ? Boolean(value.offset || value.rotationOffset)\n : Boolean(value.cframe || value.position || value.orientation),\n 'Absolute transforms require cframe, position, or orientation; relative transforms require offset or rotationOffset',\n );\n\nexport function registerBuildingTools(server: McpServer, bridge: StudioBridge): void {\n server.registerTool(\n 'studio_create_parts',\n {\n title: 'Build Roblox Parts',\n description:\n 'Create up to 200 typed BaseParts in one undoable batch, optionally grouped under a new Model or Folder. Supports positions, orientations, sizes, colors, materials, shapes, and additional writable properties.',\n inputSchema: {\n parent: instanceRefSchema.optional(),\n groupName: z.string().min(1).max(100).optional(),\n groupClass: z.enum(['Model', 'Folder']).optional().default('Model'),\n parts: z.array(partSchema).min(1).max(200),\n },\n outputSchema: toolOutputSchema,\n annotations: {\n readOnlyHint: false,\n destructiveHint: false,\n idempotentHint: false,\n openWorldHint: false,\n },\n },\n ({ parent, groupName, groupClass, parts }) =>\n callStudio(bridge, CliMsg.V2_CREATE_PARTS, { parent, groupName, groupClass, parts }, 120_000),\n );\n\n server.registerTool(\n 'studio_clone_instances',\n {\n title: 'Clone Roblox Instances',\n description:\n 'Deep-clone instances and descendants with Instance:Clone(), optionally rename, reparent, override root properties, and create repeated spatial copies using offsets. The entire request is undoable and rolls back on failure.',\n inputSchema: { requests: z.array(cloneRequestSchema).min(1).max(100) },\n outputSchema: toolOutputSchema,\n annotations: {\n readOnlyHint: false,\n destructiveHint: false,\n idempotentHint: false,\n openWorldHint: false,\n },\n },\n ({ requests }) => callStudio(bridge, CliMsg.V2_CLONE_INSTANCES, { requests }, 120_000),\n );\n\n server.registerTool(\n 'studio_group_instances',\n {\n title: 'Group Roblox Instances',\n description:\n 'Create a Model or Folder and move up to 100 independent instances into it in one undoable operation.',\n inputSchema: {\n targets: z.array(instanceRefSchema).min(1).max(100),\n name: z.string().min(1).max(100),\n className: z.enum(['Model', 'Folder']).optional().default('Model'),\n parent: instanceRefSchema.optional(),\n },\n outputSchema: toolOutputSchema,\n annotations: {\n readOnlyHint: false,\n destructiveHint: false,\n idempotentHint: false,\n openWorldHint: false,\n },\n },\n ({ targets, name, className, parent }) =>\n callStudio(bridge, CliMsg.V2_GROUP_INSTANCES, { targets, name, className, parent }, 60_000),\n );\n\n server.registerTool(\n 'studio_ungroup_instances',\n {\n title: 'Ungroup Roblox Instances',\n description:\n 'Move every child out of up to 20 Models or Folders, then remove the empty containers in one undoable operation.',\n inputSchema: {\n targets: z.array(instanceRefSchema).min(1).max(20),\n parent: instanceRefSchema.optional(),\n confirm: z.literal(true),\n },\n outputSchema: toolOutputSchema,\n annotations: {\n readOnlyHint: false,\n destructiveHint: true,\n idempotentHint: false,\n openWorldHint: false,\n },\n },\n ({ targets, parent, confirm }) =>\n callStudio(bridge, CliMsg.V2_UNGROUP_INSTANCES, { targets, parent, confirm }, 60_000),\n );\n\n server.registerTool(\n 'studio_transform_instances',\n {\n title: 'Transform Roblox Models and Parts',\n description:\n 'Move or rotate up to 100 Models and BaseParts through PVInstance:PivotTo. Supports exact absolute CFrames and world/local relative offsets without breaking model layouts.',\n inputSchema: { operations: z.array(transformOperationSchema).min(1).max(100) },\n outputSchema: toolOutputSchema,\n annotations: {\n readOnlyHint: false,\n destructiveHint: false,\n idempotentHint: false,\n openWorldHint: false,\n },\n },\n ({ operations }) => callStudio(bridge, CliMsg.V2_TRANSFORM_INSTANCES, { operations }, 60_000),\n );\n\n server.registerTool(\n 'studio_create_welds',\n {\n title: 'Create Roblox Welds',\n description:\n 'Create up to 200 WeldConstraints between explicit BasePart refs in one undoable operation.',\n inputSchema: {\n welds: z\n .array(\n z.object({\n part0: instanceRefSchema,\n part1: instanceRefSchema,\n name: z.string().min(1).max(100).optional(),\n parent: instanceRefSchema.optional(),\n }),\n )\n .min(1)\n .max(200),\n },\n outputSchema: toolOutputSchema,\n annotations: {\n readOnlyHint: false,\n destructiveHint: false,\n idempotentHint: false,\n openWorldHint: false,\n },\n },\n ({ welds }) => callStudio(bridge, CliMsg.V2_CREATE_WELDS, { welds }, 60_000),\n );\n\n server.registerTool(\n 'studio_query_parts',\n {\n title: 'Query Parts in 3D Space',\n description:\n 'Find BaseParts intersecting an oriented box or radius using WorldRoot spatial queries. Returns stable refs, positions, and sizes for inspection or later mutations.',\n inputSchema: {\n root: instanceRefSchema.optional(),\n mode: z.enum(['box', 'radius']).optional().default('box'),\n position: vector3Schema,\n orientation: vector3Schema.optional(),\n size: vector3Schema.optional(),\n radius: z.number().finite().positive().optional(),\n maxParts: z.number().int().min(1).max(500).optional().default(200),\n filter: z.array(instanceRefSchema).max(100).optional(),\n filterType: z.enum(['Include', 'Exclude']).optional().default('Exclude'),\n respectCanCollide: z.boolean().optional().default(false),\n },\n outputSchema: toolOutputSchema,\n annotations: {\n readOnlyHint: true,\n destructiveHint: false,\n idempotentHint: true,\n openWorldHint: false,\n },\n },\n ({\n root,\n mode,\n position,\n orientation,\n size,\n radius,\n maxParts,\n filter,\n filterType,\n respectCanCollide,\n }) =>\n callStudio(bridge, CliMsg.V2_QUERY_PARTS, {\n root,\n mode,\n position,\n orientation,\n size,\n radius,\n maxParts,\n filter,\n filterType,\n respectCanCollide,\n }),\n );\n\n server.registerTool(\n 'studio_set_selection',\n {\n title: 'Set Roblox Studio Selection',\n description:\n 'Replace the current Studio selection with up to 200 stable instance refs. Pass an empty array to clear selection.',\n inputSchema: { targets: z.array(instanceRefSchema).max(200) },\n outputSchema: toolOutputSchema,\n annotations: {\n readOnlyHint: false,\n destructiveHint: false,\n idempotentHint: true,\n openWorldHint: false,\n },\n },\n ({ targets }) => callStudio(bridge, CliMsg.V2_SET_SELECTION, { targets }),\n );\n}\n","import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { z } from 'zod';\nimport type { StudioBridge } from '../../transport/ws-server.js';\nimport { failure, success } from '../result.js';\nimport { toolOutputSchema } from './shared.js';\n\nexport function registerConnectionTools(server: McpServer, bridge: StudioBridge): void {\n server.registerTool(\n 'dominus_status',\n {\n title: 'Dominus Studio Status',\n description:\n 'List authenticated Roblox Studio sessions, the active target, and bridge health. Call this before Studio work.',\n inputSchema: {},\n outputSchema: toolOutputSchema,\n annotations: {\n readOnlyHint: true,\n destructiveHint: false,\n idempotentHint: true,\n openWorldHint: false,\n },\n },\n async () => {\n try {\n return success({\n protocolVersion: 2,\n port: bridge.getPort(),\n activeConnectionId: bridge.getActiveConnectionId(),\n connections: bridge.listConnections(),\n });\n } catch (err) {\n return failure(err);\n }\n },\n );\n\n server.registerTool(\n 'dominus_select_studio',\n {\n title: 'Select Studio Session',\n description:\n 'Choose the exact Studio connection targeted by subsequent tools. Uses connectionId, not placeId, so duplicate windows are safe.',\n inputSchema: { connectionId: z.string().uuid().nullable() },\n outputSchema: toolOutputSchema,\n annotations: {\n readOnlyHint: false,\n destructiveHint: false,\n idempotentHint: true,\n openWorldHint: false,\n },\n },\n async ({ connectionId }) => {\n try {\n await bridge.setActiveConnectionId(connectionId);\n return success({ activeConnectionId: bridge.getActiveConnectionId() });\n } catch (err) {\n return failure(err);\n }\n },\n );\n}\n","import fs from 'node:fs';\nimport path from 'node:path';\n\nexport type RobloxApiKind = 'class' | 'datatype' | 'enum' | 'global' | 'library';\n\nexport interface RobloxApiMember {\n name: string;\n memberType: string;\n definedOn?: string;\n type?: string;\n summary?: string;\n description?: string;\n parameters?: { name?: string; type?: string; summary?: string; default?: string }[];\n returns?: { type?: string; summary?: string }[];\n tags?: string[];\n security?: { read?: string; write?: string };\n threadSafety?: string;\n category?: string;\n deprecationMessage?: string;\n value?: number;\n}\n\nexport interface RobloxApiReference {\n name: string;\n kind: RobloxApiKind;\n summary: string;\n description: string;\n inherits: string[];\n tags: string[];\n deprecationMessage: string;\n sourceUrl: string;\n members: Record<string, RobloxApiMember[]>;\n inheritedClasses?: string[];\n inheritedMembers?: Record<string, RobloxApiMember[]>;\n}\n\nexport interface RobloxApiSearchResult {\n name: string;\n kind: RobloxApiKind;\n score: number;\n sourceUrl: string;\n}\n\ninterface DocsOptions {\n docsRoot?: string;\n includeInherited?: boolean;\n}\n\nconst GITHUB_RAW_BASE =\n 'https://raw.githubusercontent.com/Roblox/creator-docs/main/content/en-us/reference/engine';\nconst GITHUB_TREE_URL =\n 'https://api.github.com/repos/Roblox/creator-docs/git/trees/main?recursive=1';\n\nconst KIND_FOLDERS: Record<RobloxApiKind, string> = {\n class: 'classes',\n datatype: 'datatypes',\n enum: 'enums',\n global: 'globals',\n library: 'libraries',\n};\n\nconst MEMBER_SECTIONS = [\n 'properties',\n 'methods',\n 'events',\n 'callbacks',\n 'constructors',\n 'functions',\n 'items',\n 'constants',\n 'math_operations',\n];\n\nlet remoteTreeCache: { path: string; type: string }[] | null = null;\n\nexport async function getRobloxApiReference(\n name: string,\n opts: DocsOptions & { kind?: RobloxApiKind | 'any' } = {},\n): Promise<RobloxApiReference> {\n const normalizedName = normalizeLookupName(name);\n const kinds = opts.kind && opts.kind !== 'any'\n ? [opts.kind]\n : (Object.keys(KIND_FOLDERS) as RobloxApiKind[]);\n\n for (const kind of kinds) {\n const doc = await readReferenceYaml(normalizedName, kind, opts);\n if (!doc) continue;\n\n const reference = parseReferenceYaml(doc.content, {\n kind,\n sourceUrl: doc.sourceUrl,\n });\n markDefinedOn(reference, reference.name);\n\n if (opts.includeInherited && reference.kind === 'class') {\n const inherited = await collectInheritedMembers(reference, opts, new Set([reference.name]));\n reference.inheritedClasses = inherited.classes;\n reference.inheritedMembers = inherited.members;\n }\n\n return reference;\n }\n\n throw new Error(`Roblox API reference not found for \"${name}\"`);\n}\n\nasync function collectInheritedMembers(\n reference: RobloxApiReference,\n opts: DocsOptions,\n visited: Set<string>,\n): Promise<{ classes: string[]; members: Record<string, RobloxApiMember[]> }> {\n const classes: string[] = [];\n const members: Record<string, RobloxApiMember[]> = {};\n\n for (const parent of reference.inherits) {\n if (!parent || visited.has(parent)) continue;\n visited.add(parent);\n\n const doc = await readReferenceYaml(parent, 'class', opts);\n if (!doc) continue;\n\n const parentReference = parseReferenceYaml(doc.content, {\n kind: 'class',\n sourceUrl: doc.sourceUrl,\n });\n markDefinedOn(parentReference, parentReference.name);\n\n classes.push(parentReference.name);\n mergeMembers(members, parentReference.members);\n\n const inherited = await collectInheritedMembers(parentReference, opts, visited);\n classes.push(...inherited.classes);\n mergeMembers(members, inherited.members);\n }\n\n return { classes, members };\n}\n\nfunction markDefinedOn(reference: RobloxApiReference, className: string): void {\n for (const section of Object.values(reference.members)) {\n for (const member of section) {\n member.definedOn = className;\n }\n }\n}\n\nfunction mergeMembers(\n target: Record<string, RobloxApiMember[]>,\n source: Record<string, RobloxApiMember[]>,\n): void {\n for (const [section, members] of Object.entries(source)) {\n target[section] ??= [];\n target[section].push(...members);\n }\n}\n\nexport async function searchRobloxApi(\n query: string,\n opts: DocsOptions & { kind?: RobloxApiKind | 'any'; limit?: number } = {},\n): Promise<RobloxApiSearchResult[]> {\n const limit = Math.max(1, Math.min(opts.limit ?? 10, 50));\n const normalizedQuery = normalizeSearchText(query);\n const kinds = opts.kind && opts.kind !== 'any'\n ? [opts.kind]\n : (Object.keys(KIND_FOLDERS) as RobloxApiKind[]);\n\n const entries = await listReferenceEntries(opts);\n return entries\n .filter((entry) => kinds.includes(entry.kind))\n .map((entry) => ({\n ...entry,\n score: scoreSearchResult(normalizedQuery, entry.name, entry.kind),\n }))\n .filter((entry) => entry.score > 0)\n .sort((a, b) => b.score - a.score || a.name.localeCompare(b.name))\n .slice(0, limit);\n}\n\nexport function parseReferenceYaml(\n raw: string,\n opts: { kind?: RobloxApiKind; sourceUrl?: string } = {},\n): RobloxApiReference {\n const kind = opts.kind ?? normalizeKind(readTopScalar(raw, 'type')) ?? 'class';\n const members: Record<string, RobloxApiMember[]> = {};\n\n for (const section of MEMBER_SECTIONS) {\n const parsed = parseMemberSection(raw, section);\n if (parsed.length > 0) {\n members[section] = parsed;\n }\n }\n\n return {\n name: readTopScalar(raw, 'name') || 'Unknown',\n kind,\n summary: cleanDocText(readTopScalar(raw, 'summary')),\n description: cleanDocText(readTopScalar(raw, 'description')),\n inherits: readTopList(raw, 'inherits'),\n tags: readTopList(raw, 'tags'),\n deprecationMessage: cleanDocText(readTopScalar(raw, 'deprecation_message')),\n sourceUrl: opts.sourceUrl ?? '',\n members,\n };\n}\n\nfunction normalizeKind(value: string): RobloxApiKind | undefined {\n if (value === 'class' || value === 'datatype' || value === 'enum' || value === 'global' || value === 'library') {\n return value;\n }\n return undefined;\n}\n\nasync function readReferenceYaml(\n name: string,\n kind: RobloxApiKind,\n opts: DocsOptions,\n): Promise<{ content: string; sourceUrl: string } | null> {\n const localRoot = resolveDocsRoot(opts.docsRoot);\n const folder = KIND_FOLDERS[kind];\n const fileName = `${name}.yaml`;\n\n if (localRoot) {\n const localPath = path.join(localRoot, folder, fileName);\n if (fs.existsSync(localPath)) {\n return {\n content: fs.readFileSync(localPath, 'utf-8'),\n sourceUrl: toCreatorDocsUrl(kind, name),\n };\n }\n }\n\n const sourceUrl = `${GITHUB_RAW_BASE}/${folder}/${encodeURIComponent(fileName)}`;\n try {\n return {\n content: await fetchText(sourceUrl),\n sourceUrl: toCreatorDocsUrl(kind, name),\n };\n } catch {\n return null;\n }\n}\n\nasync function listReferenceEntries(opts: DocsOptions): Promise<RobloxApiSearchResult[]> {\n const localRoot = resolveDocsRoot(opts.docsRoot);\n if (localRoot) {\n const entries: RobloxApiSearchResult[] = [];\n for (const [kind, folder] of Object.entries(KIND_FOLDERS) as [RobloxApiKind, string][]) {\n const dir = path.join(localRoot, folder);\n if (!fs.existsSync(dir)) continue;\n\n for (const file of fs.readdirSync(dir)) {\n if (!file.endsWith('.yaml')) continue;\n const name = path.basename(file, '.yaml');\n entries.push({ name, kind, score: 0, sourceUrl: toCreatorDocsUrl(kind, name) });\n }\n }\n return entries;\n }\n\n const tree = await getRemoteTree();\n const prefix = 'content/en-us/reference/engine/';\n return tree\n .filter((entry) => entry.type === 'blob')\n .map((entry) => entry.path)\n .filter((entryPath) => entryPath.startsWith(prefix) && entryPath.endsWith('.yaml'))\n .flatMap((entryPath) => {\n const rest = entryPath.slice(prefix.length);\n const [folder, file] = rest.split('/');\n const kind = folderToKind(folder);\n if (!kind || !file) return [];\n\n const name = path.basename(file, '.yaml');\n return [{ name, kind, score: 0, sourceUrl: toCreatorDocsUrl(kind, name) }];\n });\n}\n\nasync function getRemoteTree(): Promise<{ path: string; type: string }[]> {\n if (remoteTreeCache) return remoteTreeCache;\n\n const payload = JSON.parse(await fetchText(GITHUB_TREE_URL)) as {\n tree?: { path: string; type: string }[];\n };\n remoteTreeCache = payload.tree ?? [];\n return remoteTreeCache;\n}\n\nfunction folderToKind(folder: string): RobloxApiKind | undefined {\n for (const [kind, value] of Object.entries(KIND_FOLDERS) as [RobloxApiKind, string][]) {\n if (value === folder) return kind;\n }\n return undefined;\n}\n\nfunction resolveDocsRoot(explicitRoot?: string): string | null {\n const candidates = [\n explicitRoot,\n process.env.ROBLOX_CREATOR_DOCS_PATH,\n path.join(process.cwd(), '.tmp', 'creator-docs'),\n ].filter(Boolean) as string[];\n\n for (const candidate of candidates) {\n const normalized = normalizeDocsRoot(candidate);\n if (normalized && fs.existsSync(normalized)) return normalized;\n }\n\n return null;\n}\n\nfunction normalizeDocsRoot(root: string): string | null {\n const engineRoot = path.join(root, 'content', 'en-us', 'reference', 'engine');\n if (fs.existsSync(engineRoot)) return engineRoot;\n\n const directClasses = path.join(root, 'classes');\n if (fs.existsSync(directClasses)) return root;\n\n return null;\n}\n\nfunction normalizeLookupName(name: string): string {\n const trimmed = name.trim();\n const ownerName = trimmed.split(':')[0];\n const lastToken = ownerName.split('.').pop() ?? ownerName;\n return lastToken.replace(/[^A-Za-z0-9_]/g, '');\n}\n\nfunction normalizeSearchText(value: string): string {\n return value.trim().toLowerCase().replace(/[^a-z0-9_]+/g, '');\n}\n\nfunction scoreSearchResult(query: string, name: string, kind: RobloxApiKind): number {\n if (!query) return 1;\n\n const normalizedName = normalizeSearchText(name);\n if (normalizedName === query) return 100;\n if (normalizedName.startsWith(query)) return 75;\n if (normalizedName.includes(query)) return 50;\n\n const kindScore = kind.includes(query) ? 10 : 0;\n return kindScore;\n}\n\nfunction toCreatorDocsUrl(kind: RobloxApiKind, name: string): string {\n return `https://create.roblox.com/docs/reference/engine/${KIND_FOLDERS[kind]}/${name}`;\n}\n\nasync function fetchText(url: string): Promise<string> {\n const response = await fetch(url, {\n headers: { 'User-Agent': 'Dominus Roblox API docs lookup' },\n });\n if (!response.ok) {\n throw new Error(`Failed to fetch ${url}: ${response.status} ${response.statusText}`);\n }\n return response.text();\n}\n\nfunction readTopScalar(raw: string, key: string): string {\n const lines = raw.split(/\\r?\\n/);\n for (let i = 0; i < lines.length; i++) {\n const match = lines[i].match(new RegExp(`^${escapeRegExp(key)}:\\\\s*(.*)$`));\n if (!match) continue;\n return readYamlValue(lines, i, 0, match[1]);\n }\n return '';\n}\n\nfunction readTopList(raw: string, key: string): string[] {\n const lines = raw.split(/\\r?\\n/);\n for (let i = 0; i < lines.length; i++) {\n const match = lines[i].match(new RegExp(`^${escapeRegExp(key)}:\\\\s*(.*)$`));\n if (!match) continue;\n\n const inline = match[1].trim();\n if (inline === '[]' || inline === '') {\n if (inline === '[]') return [];\n return readIndentedList(lines, i + 1, 2);\n }\n return [unquote(inline)];\n }\n return [];\n}\n\nfunction parseMemberSection(raw: string, section: string): RobloxApiMember[] {\n const sectionLines = extractTopSection(raw, section);\n if (sectionLines.length === 0) return [];\n\n const items = splitMemberItems(sectionLines);\n return items\n .map((item) => parseMemberItem(item, section))\n .filter((item): item is RobloxApiMember => Boolean(item));\n}\n\nfunction extractTopSection(raw: string, section: string): string[] {\n const lines = raw.split(/\\r?\\n/);\n const start = lines.findIndex((line) => line === `${section}:`);\n if (start === -1) return [];\n\n const result: string[] = [];\n for (let i = start + 1; i < lines.length; i++) {\n if (/^[A-Za-z_][A-Za-z0-9_]*:/.test(lines[i])) break;\n result.push(lines[i]);\n }\n return result;\n}\n\nfunction splitMemberItems(lines: string[]): string[][] {\n const items: string[][] = [];\n let current: string[] = [];\n\n for (const line of lines) {\n if (/^ - /.test(line)) {\n if (current.length > 0) items.push(current);\n current = [line];\n continue;\n }\n if (current.length > 0) current.push(line);\n }\n\n if (current.length > 0) items.push(current);\n return items;\n}\n\nfunction parseMemberItem(lines: string[], section: string): RobloxApiMember | null {\n const name = readMemberScalar(lines, 'name');\n if (!name) return null;\n\n const member: RobloxApiMember = {\n name,\n memberType: section,\n type: readMemberScalar(lines, 'type') || readMemberScalar(lines, 'return_type'),\n summary: cleanDocText(readMemberScalar(lines, 'summary')),\n description: cleanDocText(readMemberScalar(lines, 'description')),\n parameters: readNestedObjects(lines, 'parameters'),\n returns: readNestedObjects(lines, 'returns'),\n tags: readMemberList(lines, 'tags'),\n security: readSecurity(lines),\n threadSafety: readMemberScalar(lines, 'thread_safety'),\n category: readMemberScalar(lines, 'category'),\n deprecationMessage: cleanDocText(readMemberScalar(lines, 'deprecation_message')),\n };\n\n const value = Number(readMemberScalar(lines, 'value'));\n if (Number.isFinite(value)) member.value = value;\n\n return member;\n}\n\nfunction readMemberScalar(lines: string[], key: string): string {\n for (let i = 0; i < lines.length; i++) {\n const firstLinePattern = new RegExp(`^ - ${escapeRegExp(key)}:\\\\s*(.*)$`);\n const fieldPattern = new RegExp(`^ ${escapeRegExp(key)}:\\\\s*(.*)$`);\n const firstLineMatch = lines[i].match(firstLinePattern);\n const fieldMatch = lines[i].match(fieldPattern);\n const match = firstLineMatch ?? fieldMatch;\n if (!match) continue;\n return readYamlValue(lines, i, firstLineMatch ? 2 : 4, match[1]);\n }\n return '';\n}\n\nfunction readMemberList(lines: string[], key: string): string[] {\n for (let i = 0; i < lines.length; i++) {\n const match = lines[i].match(new RegExp(`^ ${escapeRegExp(key)}:\\\\s*(.*)$`));\n if (!match) continue;\n const inline = match[1].trim();\n if (inline === '[]') return [];\n if (inline) return [unquote(inline)];\n return readIndentedList(lines, i + 1, 6);\n }\n return [];\n}\n\nfunction readNestedObjects(lines: string[], key: string): { name?: string; type?: string; summary?: string; default?: string }[] {\n const start = lines.findIndex((line) => line === ` ${key}:`);\n if (start === -1) return [];\n\n const nested: string[] = [];\n for (let i = start + 1; i < lines.length; i++) {\n if (/^ [A-Za-z_][A-Za-z0-9_]*:/.test(lines[i])) break;\n nested.push(lines[i]);\n }\n\n const items: string[][] = [];\n let current: string[] = [];\n for (const line of nested) {\n if (/^ - /.test(line)) {\n if (current.length > 0) items.push(current);\n current = [line];\n continue;\n }\n if (current.length > 0) current.push(line);\n }\n if (current.length > 0) items.push(current);\n\n return items.map((item) => ({\n name: readNestedScalar(item, 'name'),\n type: readNestedScalar(item, 'type'),\n summary: cleanDocText(readNestedScalar(item, 'summary')),\n default: readNestedScalar(item, 'default'),\n }));\n}\n\nfunction readNestedScalar(lines: string[], key: string): string {\n for (let i = 0; i < lines.length; i++) {\n const firstLinePattern = new RegExp(`^ - ${escapeRegExp(key)}:\\\\s*(.*)$`);\n const fieldPattern = new RegExp(`^ ${escapeRegExp(key)}:\\\\s*(.*)$`);\n const firstLineMatch = lines[i].match(firstLinePattern);\n const fieldMatch = lines[i].match(fieldPattern);\n const match = firstLineMatch ?? fieldMatch;\n if (!match) continue;\n return readYamlValue(lines, i, firstLineMatch ? 6 : 8, match[1]);\n }\n return '';\n}\n\nfunction readSecurity(lines: string[]): { read?: string; write?: string } | undefined {\n const start = lines.findIndex((line) => line === ' security:');\n if (start === -1) return undefined;\n\n return {\n read: readIndentedScalar(lines, start + 1, 'read', 6),\n write: readIndentedScalar(lines, start + 1, 'write', 6),\n };\n}\n\nfunction readIndentedScalar(lines: string[], start: number, key: string, indent: number): string {\n const pattern = new RegExp(`^\\\\s{${indent}}${escapeRegExp(key)}:\\\\s*(.*)$`);\n for (let i = start; i < lines.length; i++) {\n if (indentOf(lines[i]) < indent) break;\n const match = lines[i].match(pattern);\n if (match) return unquote(match[1].trim());\n }\n return '';\n}\n\nfunction readYamlValue(lines: string[], index: number, indent: number, rawValue: string): string {\n const value = rawValue.trim();\n if (value === '|-' || value === '|') {\n return readBlock(lines, index + 1, indent + 2);\n }\n if (value === \"''\" || value === '\"\"') return '';\n return unquote(value);\n}\n\nfunction readBlock(lines: string[], start: number, minIndent: number): string {\n const block: string[] = [];\n for (let i = start; i < lines.length; i++) {\n const line = lines[i];\n if (line.trim() && indentOf(line) < minIndent) break;\n block.push(line.slice(Math.min(minIndent, line.length)));\n }\n return block.join('\\n').trim();\n}\n\nfunction readIndentedList(lines: string[], start: number, indent: number): string[] {\n const pattern = new RegExp(`^\\\\s{${indent}}-\\\\s*(.*)$`);\n const values: string[] = [];\n for (let i = start; i < lines.length; i++) {\n if (lines[i].trim() && indentOf(lines[i]) < indent) break;\n const match = lines[i].match(pattern);\n if (match) values.push(unquote(match[1].trim()));\n }\n return values;\n}\n\nfunction cleanDocText(value: string): string {\n return value\n .replace(/\\r/g, '')\n .replace(/[ \\t]+\\n/g, '\\n')\n .trim();\n}\n\nfunction indentOf(line: string): number {\n return line.match(/^ */)?.[0].length ?? 0;\n}\n\nfunction unquote(value: string): string {\n if (\n (value.startsWith(\"'\") && value.endsWith(\"'\")) ||\n (value.startsWith('\"') && value.endsWith('\"'))\n ) {\n return value.slice(1, -1);\n }\n return value;\n}\n\nfunction escapeRegExp(value: string): string {\n return value.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n}\n","import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { z } from 'zod';\nimport { getRobloxApiReference, searchRobloxApi } from '../../docs/roblox-api.js';\nimport { failure, success } from '../result.js';\nimport { toolOutputSchema } from './shared.js';\n\nconst kindSchema = z.enum(['any', 'class', 'datatype', 'enum', 'global', 'library']);\n\nexport function registerDocsTools(server: McpServer): void {\n server.registerTool(\n 'roblox_search_api',\n {\n title: 'Search Roblox API',\n description:\n 'Search the official Roblox Creator Docs engine API mirror by exact or partial class, datatype, enum, global, or library name.',\n inputSchema: {\n query: z.string().min(1).max(100),\n kind: kindSchema.optional().default('any'),\n limit: z.number().int().min(1).max(25).optional().default(10),\n },\n outputSchema: toolOutputSchema,\n annotations: {\n readOnlyHint: true,\n destructiveHint: false,\n idempotentHint: true,\n openWorldHint: true,\n },\n },\n async ({ query, kind, limit }) => {\n try {\n return success({ results: await searchRobloxApi(query, { kind, limit }) });\n } catch (err) {\n return failure(err);\n }\n },\n );\n\n server.registerTool(\n 'roblox_get_api',\n {\n title: 'Get Roblox API Reference',\n description:\n 'Read an official Roblox engine API reference including members, types, security, thread safety, inheritance, and source URL.',\n inputSchema: {\n name: z.string().min(1).max(100),\n kind: kindSchema.optional().default('any'),\n includeInherited: z.boolean().optional().default(true),\n },\n outputSchema: toolOutputSchema,\n annotations: {\n readOnlyHint: true,\n destructiveHint: false,\n idempotentHint: true,\n openWorldHint: true,\n },\n },\n async ({ name, kind, includeInherited }) => {\n try {\n const reference = await getRobloxApiReference(name, { kind, includeInherited });\n return success({ reference });\n } catch (err) {\n return failure(err);\n }\n },\n );\n}\n","import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { z } from 'zod';\nimport { CliMsg, type InstanceRef } from '../../transport/protocol.js';\nimport type { StudioBridge } from '../../transport/ws-server.js';\nimport { failure, success } from '../result.js';\nimport { instanceRefSchema, requestStudio, toolOutputSchema } from './shared.js';\n\nconst propertiesSchema = z\n .record(z.unknown())\n .refine(\n (properties) =>\n Object.keys(properties).length <= 100 &&\n !Object.keys(properties).some((name) => ['Parent', 'ClassName', 'Source'].includes(name)),\n 'At most 100 properties are allowed; Parent, ClassName, and Source require dedicated operations',\n );\n\nconst mutationOperationSchema = z.discriminatedUnion('op', [\n z.object({\n op: z.literal('setProperties'),\n target: instanceRefSchema,\n properties: propertiesSchema,\n }),\n z.object({\n op: z.literal('create'),\n parent: instanceRefSchema,\n className: z.string().min(1).max(100),\n name: z.string().min(1).max(256),\n properties: propertiesSchema.optional(),\n }),\n z.object({\n op: z.literal('move'),\n target: instanceRefSchema,\n parent: instanceRefSchema,\n }),\n z.object({\n op: z.literal('clone'),\n target: instanceRefSchema,\n parent: instanceRefSchema,\n name: z.string().min(1).max(100),\n offset: z\n .object({ x: z.number().finite(), y: z.number().finite(), z: z.number().finite() })\n .optional(),\n properties: propertiesSchema.optional(),\n }),\n]);\n\nconst workerProposalSchema = z.object({\n workerId: z.string().min(1).max(64),\n summary: z.string().min(1).max(4000),\n evidence: z\n .array(\n z.object({\n source: z.string().min(1).max(500),\n summary: z.string().min(1).max(2000),\n }),\n )\n .max(30)\n .default([]),\n operations: z.array(mutationOperationSchema).max(50).default([]),\n risks: z.array(z.string().max(1000)).max(30).default([]),\n verificationSuggestions: z.array(z.string().max(1000)).max(30).default([]),\n});\n\nconst coordinatorDecisionSchema = z.object({\n summary: z.string().min(1).max(4000),\n acceptedWorkerIds: z.array(z.string()).max(5),\n rejected: z\n .array(\n z.object({\n workerId: z.string(),\n reason: z.string().min(1).max(2000),\n }),\n )\n .max(5)\n .default([]),\n operationOrder: z\n .array(\n z.object({\n workerId: z.string(),\n operationIndex: z.number().int().min(0).max(49),\n }),\n )\n .max(100),\n verificationChecks: z.array(z.string().max(1000)).max(50).default([]),\n});\n\ntype MutationOperation = z.infer<typeof mutationOperationSchema>;\ntype WorkerProposal = z.infer<typeof workerProposalSchema>;\ntype CoordinatorDecision = z.infer<typeof coordinatorDecisionSchema>;\n\ninterface TreeNode {\n name: string;\n className: string;\n ref: InstanceRef;\n children?: TreeNode[];\n}\n\ninterface WorkerAssignment {\n id: string;\n role: string;\n objective: string;\n ownedScopes: InstanceRef[];\n acceptanceCriteria: string[];\n scopeNodes: TreeNode[];\n knownRefKeys: Set<string>;\n}\n\ninterface WorkerResult {\n assignment: WorkerAssignment;\n proposal?: WorkerProposal;\n error?: string;\n}\n\ninterface AcceptedProposal {\n assignment: WorkerAssignment;\n proposal: WorkerProposal;\n}\n\ninterface RejectedProposal {\n workerId: string;\n reason: string;\n summary?: string;\n}\n\ninterface VerificationResult {\n passed: boolean;\n treeNodeCount: number;\n treeTruncated: boolean;\n expectedCreates: number;\n foundCreates: number;\n missingCreates: string[];\n propertyMismatches: Array<{\n target: string;\n property: string;\n expected: unknown;\n actual: unknown;\n }>;\n moveMismatches: Array<{ target: string; expectedParent: string; actualParent?: string }>;\n inspectFailures: string[];\n}\n\nexport function registerParallelTaskTool(server: McpServer, bridge: StudioBridge): void {\n server.registerTool(\n 'run_parallel_task',\n {\n title: 'Run Coordinated Parallel Studio Task',\n description:\n 'Partition a broad Studio goal into non-overlapping scopes, run proposal-only workers concurrently through MCP Sampling, reject unsafe or conflicting proposals, atomically apply coordinator-approved writes, and verify the result.',\n inputSchema: {\n goal: z.string().min(1).max(20_000),\n root: instanceRefSchema.optional(),\n rootPath: z.string().min(1).max(2000).optional(),\n maxWorkers: z.number().int().min(1).max(5).optional().default(3),\n constraints: z.string().max(10_000).optional(),\n taskType: z.string().max(100).optional(),\n dryRun: z.boolean().optional().default(false),\n },\n outputSchema: toolOutputSchema,\n annotations: {\n readOnlyHint: false,\n destructiveHint: false,\n idempotentHint: false,\n openWorldHint: false,\n },\n },\n async ({ goal, root, rootPath, maxWorkers, constraints, taskType, dryRun }) => {\n try {\n const capabilities = server.server.getClientCapabilities();\n if (!capabilities?.sampling) {\n return failure(\n 'run_parallel_task requires an MCP client that supports Sampling. Use the normal Dominus inspect-plan-apply workflow with this client.',\n { requiredCapability: 'sampling' },\n );\n }\n\n const rootRef = root ?? {\n pathSegments: parallelRootPathToSegments(rootPath ?? 'Workspace'),\n };\n const tree = await getTree(bridge, rootRef, 5, 1500);\n const rootNode = tree.roots[0];\n if (!rootNode) return failure('The requested root did not return a Studio tree');\n if (tree.truncated) {\n return failure(\n 'The requested root exceeded the parallel evidence limit. Narrow root/rootPath so workers receive a complete hierarchy.',\n { nodeCount: tree.nodeCount, maxNodes: 1500 },\n );\n }\n\n const assignments = createAssignments(goal, rootNode, maxWorkers, constraints, taskType);\n emit(server, 'multi_agent_start', { goal, workerCount: assignments.length });\n\n const settled = await Promise.allSettled(\n assignments.map(async (assignment) => {\n emit(server, 'multi_agent_worker_start', {\n workerId: assignment.id,\n role: assignment.role,\n scopes: assignment.ownedScopes,\n });\n const result = await runWorker(server, bridge, goal, assignment, constraints, taskType);\n emit(server, 'multi_agent_worker_done', {\n workerId: assignment.id,\n summary: result.proposal?.summary ?? result.error ?? 'Worker failed',\n proposedOperationCount: result.proposal?.operations.length ?? 0,\n });\n return result;\n }),\n );\n\n const workerResults: WorkerResult[] = settled.map((result, index) =>\n result.status === 'fulfilled'\n ? result.value\n : { assignment: assignments[index], error: toErrorMessage(result.reason) },\n );\n const validated = validateWorkerResults(workerResults);\n const conflictChecked = rejectProposalConflicts(validated.accepted);\n const accepted = conflictChecked.accepted;\n const rejected = [...validated.rejected, ...conflictChecked.rejected];\n\n for (const item of accepted) {\n emit(server, 'multi_agent_proposal', {\n workerId: item.assignment.id,\n accepted: true,\n operationCount: item.proposal.operations.length,\n });\n }\n for (const item of rejected) {\n emit(server, 'multi_agent_proposal', {\n workerId: item.workerId,\n accepted: false,\n reason: item.reason,\n });\n }\n\n const decision =\n accepted.length > 0\n ? await runCoordinator(server, goal, accepted, rejected, constraints)\n : emptyDecision(rejected);\n const finalPlan = buildFinalPlan(decision, accepted, rejected);\n if (finalPlan.operations.length > 100) {\n return failure('Coordinator plan exceeds the 100-operation atomic limit', {\n operationCount: finalPlan.operations.length,\n });\n }\n\n emit(server, 'multi_agent_decision', {\n acceptedCount: finalPlan.acceptedWorkerIds.length,\n rejectedCount: finalPlan.rejected.length,\n finalOperationCount: finalPlan.operations.length,\n });\n\n let applied: Record<string, unknown> | null = null;\n let verification: VerificationResult | null = null;\n let repairApplied = false;\n if (!dryRun && finalPlan.operations.length > 0) {\n emit(server, 'multi_agent_apply_start', { operationCount: finalPlan.operations.length });\n applied = await requestStudio(\n bridge,\n CliMsg.V2_APPLY,\n { operations: finalPlan.operations },\n 120_000,\n );\n verification = await verifyPlan(bridge, rootRef, rootNode, finalPlan.operations);\n\n if (!verification.passed) {\n const repairOperations = findRepairOperations(\n finalPlan.operations,\n verification,\n rootNode,\n );\n if (repairOperations.length > 0) {\n await requestStudio(\n bridge,\n CliMsg.V2_APPLY,\n { operations: repairOperations },\n 120_000,\n );\n repairApplied = true;\n verification = await verifyPlan(bridge, rootRef, rootNode, finalPlan.operations);\n }\n }\n emit(server, 'multi_agent_apply_done', {\n appliedCount: finalPlan.operations.length,\n verificationPassed: verification.passed,\n repairApplied,\n });\n } else {\n verification = await verifyPlan(bridge, rootRef, rootNode, []);\n }\n\n return success({\n goal,\n root: rootRef,\n dryRun,\n assignments: assignments.map(publicAssignment),\n workers: workerResults.map(publicWorkerResult),\n decision: {\n summary: decision.summary,\n acceptedWorkerIds: finalPlan.acceptedWorkerIds,\n rejected: finalPlan.rejected,\n verificationChecks: decision.verificationChecks,\n },\n finalOperations: finalPlan.operations,\n applied,\n repairApplied,\n verification,\n });\n } catch (err) {\n return failure(err);\n }\n },\n );\n}\n\nasync function getTree(\n bridge: StudioBridge,\n root: InstanceRef,\n maxDepth: number,\n maxNodes: number,\n): Promise<{ roots: TreeNode[]; nodeCount: number; truncated: boolean }> {\n const result = await requestStudio(bridge, CliMsg.V2_GET_TREE, { root, maxDepth, maxNodes });\n return {\n roots: Array.isArray(result.roots) ? (result.roots as TreeNode[]) : [],\n nodeCount: typeof result.nodeCount === 'number' ? result.nodeCount : 0,\n truncated: result.truncated === true,\n };\n}\n\nfunction createAssignments(\n goal: string,\n root: TreeNode,\n maxWorkers: number,\n constraints?: string,\n taskType?: string,\n): WorkerAssignment[] {\n const candidates = root.children?.length ? root.children : [root];\n const workerCount = Math.max(1, Math.min(maxWorkers, candidates.length));\n const groups = Array.from({ length: workerCount }, () => [] as TreeNode[]);\n candidates.forEach((node, index) => groups[index % workerCount].push(node));\n\n return groups.map((scopeNodes, index) => {\n const ownedScopes = scopeNodes.map((node) => node.ref);\n const knownRefKeys = new Set<string>();\n scopeNodes.forEach((node) => collectRefKeys(node, knownRefKeys));\n return {\n id: `worker-${index + 1}`,\n role: `${taskType ?? 'general'} scope analyst ${index + 1}`,\n objective: `Inspect the assigned Studio branches and propose the smallest changes that advance: ${goal}`,\n ownedScopes,\n acceptanceCriteria: [\n 'Every referenced existing instance must come from the supplied evidence.',\n 'Every proposed mutation must remain inside an owned scope.',\n 'Do not propose deletion, arbitrary code execution, or script replacement.',\n constraints?.trim() || 'Preserve unrelated instances and behavior.',\n ],\n scopeNodes,\n knownRefKeys,\n };\n });\n}\n\nasync function runWorker(\n server: McpServer,\n bridge: StudioBridge,\n goal: string,\n assignment: WorkerAssignment,\n constraints?: string,\n taskType?: string,\n): Promise<WorkerResult> {\n try {\n const studioInspection = await inspectScopeRoots(bridge, assignment.ownedScopes);\n const response = await server.server.createMessage(\n {\n systemPrompt: [\n 'You are a read-only Dominus worker. Inspect only the Studio evidence in the request.',\n 'You cannot write to Studio. Return one strict JSON WorkerProposal and no Markdown.',\n 'Only propose setProperties, create, clone, or move operations using exact instance refs copied from evidence.',\n 'Never invent instanceId values. Never propose delete, script edits, or arbitrary execution.',\n ].join(' '),\n messages: [\n {\n role: 'user',\n content: {\n type: 'text',\n text: JSON.stringify(\n {\n schema: {\n workerId: assignment.id,\n summary: 'string',\n evidence: [{ source: 'string', summary: 'string' }],\n operations: [\n {\n op: 'setProperties',\n target: { instanceId: 'uuid', pathSegments: ['...'] },\n properties: {},\n },\n {\n op: 'create',\n parent: { instanceId: 'uuid', pathSegments: ['...'] },\n className: 'Part',\n name: 'Name',\n properties: {},\n },\n {\n op: 'move',\n target: { instanceId: 'uuid', pathSegments: ['...'] },\n parent: { instanceId: 'uuid', pathSegments: ['...'] },\n },\n {\n op: 'clone',\n target: { instanceId: 'uuid', pathSegments: ['...'] },\n parent: { instanceId: 'uuid', pathSegments: ['...'] },\n name: 'CloneName',\n offset: { x: 0, y: 0, z: 0 },\n },\n ],\n risks: ['string'],\n verificationSuggestions: ['string'],\n },\n globalGoal: goal,\n taskType: taskType ?? 'general',\n constraints: constraints ?? '',\n assignment: publicAssignment(assignment),\n studioEvidence: {\n hierarchy: assignment.scopeNodes,\n typedRootInspection: studioInspection,\n },\n },\n null,\n 2,\n ),\n },\n },\n ],\n maxTokens: 5000,\n temperature: 0.2,\n modelPreferences: {\n intelligencePriority: 0.9,\n speedPriority: 0.3,\n costPriority: 0.2,\n },\n },\n { timeout: 120_000 },\n );\n\n const proposal = workerProposalSchema.parse(parseJson(extractSamplingText(response.content)));\n return { assignment, proposal };\n } catch (err) {\n return { assignment, error: toErrorMessage(err) };\n }\n}\n\nasync function inspectScopeRoots(\n bridge: StudioBridge,\n targets: InstanceRef[],\n): Promise<Record<string, unknown>[]> {\n const results: Record<string, unknown>[] = [];\n for (let offset = 0; offset < targets.length; offset += 20) {\n const inspected = await requestStudio(bridge, CliMsg.V2_INSPECT, {\n targets: targets.slice(offset, offset + 20),\n compact: true,\n });\n if (Array.isArray(inspected.results)) {\n results.push(...(inspected.results as Record<string, unknown>[]));\n }\n }\n return results;\n}\n\nfunction validateWorkerResults(results: WorkerResult[]): {\n accepted: AcceptedProposal[];\n rejected: RejectedProposal[];\n} {\n const accepted: AcceptedProposal[] = [];\n const rejected: RejectedProposal[] = [];\n\n for (const result of results) {\n if (!result.proposal) {\n rejected.push({\n workerId: result.assignment.id,\n reason: result.error ?? 'Worker returned no proposal',\n });\n continue;\n }\n if (result.proposal.workerId !== result.assignment.id) {\n rejected.push({\n workerId: result.assignment.id,\n reason: `Proposal workerId ${result.proposal.workerId} did not match its assignment`,\n summary: result.proposal.summary,\n });\n continue;\n }\n const errors = validateOperations(result.assignment, result.proposal.operations);\n if (errors.length > 0) {\n rejected.push({\n workerId: result.assignment.id,\n reason: errors.join('; '),\n summary: result.proposal.summary,\n });\n continue;\n }\n accepted.push({ assignment: result.assignment, proposal: result.proposal });\n }\n return { accepted, rejected };\n}\n\nfunction validateOperations(\n assignment: WorkerAssignment,\n operations: MutationOperation[],\n): string[] {\n const errors: string[] = [];\n for (const [index, operation] of operations.entries()) {\n const refs =\n operation.op === 'create'\n ? [operation.parent]\n : operation.op === 'move' || operation.op === 'clone'\n ? [operation.target, operation.parent]\n : [operation.target];\n for (const ref of refs) {\n if (!isKnownParallelRef(ref, assignment.knownRefKeys)) {\n errors.push(`Operation ${index} references an instance absent from worker evidence`);\n } else if (!isParallelRefWithinScopes(ref, assignment.ownedScopes)) {\n errors.push(`Operation ${index} targets outside the worker owned scopes`);\n }\n }\n }\n return errors;\n}\n\nfunction rejectProposalConflicts(accepted: AcceptedProposal[]): {\n accepted: AcceptedProposal[];\n rejected: RejectedProposal[];\n} {\n const finalAccepted: AcceptedProposal[] = [];\n const rejected: RejectedProposal[] = [];\n const claims: Array<{ workerId: string; paths: string[][]; refKeys: string[] }> = [];\n\n for (const item of accepted) {\n const targets = item.proposal.operations.map(operationTarget);\n const conflict = claims.find((claim) =>\n targets.some(\n (target) =>\n (target.path && claim.paths.some((path) => parallelPathsOverlap(target.path!, path))) ||\n claim.refKeys.includes(target.key),\n ),\n );\n if (conflict) {\n rejected.push({\n workerId: item.assignment.id,\n reason: `Proposal overlaps writes owned by ${conflict.workerId}`,\n summary: item.proposal.summary,\n });\n continue;\n }\n finalAccepted.push(item);\n claims.push({\n workerId: item.assignment.id,\n paths: targets.flatMap((target) => (target.path ? [target.path] : [])),\n refKeys: targets.map((target) => target.key),\n });\n }\n return { accepted: finalAccepted, rejected };\n}\n\nasync function runCoordinator(\n server: McpServer,\n goal: string,\n accepted: AcceptedProposal[],\n rejected: RejectedProposal[],\n constraints?: string,\n): Promise<CoordinatorDecision> {\n const response = await server.server.createMessage(\n {\n systemPrompt: [\n 'You are the Dominus coordinator. Return strict JSON only.',\n 'Workers are proposal-only. Select whole non-conflicting proposals and order their existing operations.',\n 'Do not invent, edit, merge, or partially accept operations. The server will reject any unknown index.',\n 'Prefer the smallest plan that satisfies the goal and preserves unrelated Studio state.',\n ].join(' '),\n messages: [\n {\n role: 'user',\n content: {\n type: 'text',\n text: JSON.stringify(\n {\n schema: {\n summary: 'string',\n acceptedWorkerIds: ['worker-1'],\n rejected: [{ workerId: 'worker-2', reason: 'string' }],\n operationOrder: [{ workerId: 'worker-1', operationIndex: 0 }],\n verificationChecks: ['string'],\n },\n goal,\n constraints: constraints ?? '',\n validProposals: accepted.map(({ assignment, proposal }) => ({\n workerId: assignment.id,\n summary: proposal.summary,\n evidence: proposal.evidence,\n operations: proposal.operations,\n risks: proposal.risks,\n verificationSuggestions: proposal.verificationSuggestions,\n })),\n alreadyRejected: rejected,\n },\n null,\n 2,\n ),\n },\n },\n ],\n maxTokens: 5000,\n temperature: 0.1,\n modelPreferences: {\n intelligencePriority: 1,\n speedPriority: 0.2,\n costPriority: 0.1,\n },\n },\n { timeout: 120_000 },\n );\n return coordinatorDecisionSchema.parse(parseJson(extractSamplingText(response.content)));\n}\n\nfunction buildFinalPlan(\n decision: CoordinatorDecision,\n accepted: AcceptedProposal[],\n alreadyRejected: RejectedProposal[],\n): {\n acceptedWorkerIds: string[];\n rejected: RejectedProposal[];\n operations: MutationOperation[];\n} {\n const byId = new Map(accepted.map((item) => [item.assignment.id, item]));\n const acceptedIds = [...new Set(decision.acceptedWorkerIds)];\n for (const workerId of acceptedIds) {\n if (!byId.has(workerId)) throw new Error(`Coordinator accepted unknown worker ${workerId}`);\n }\n\n const operations: MutationOperation[] = [];\n const seen = new Set<string>();\n for (const entry of decision.operationOrder) {\n if (!acceptedIds.includes(entry.workerId)) {\n throw new Error(`Coordinator ordered an operation from unaccepted worker ${entry.workerId}`);\n }\n const proposal = byId.get(entry.workerId)!.proposal;\n const operation = proposal.operations[entry.operationIndex];\n if (!operation)\n throw new Error(\n `Coordinator selected missing operation ${entry.workerId}:${entry.operationIndex}`,\n );\n const key = `${entry.workerId}:${entry.operationIndex}`;\n if (seen.has(key)) throw new Error(`Coordinator selected duplicate operation ${key}`);\n seen.add(key);\n operations.push(operation);\n }\n\n for (const workerId of acceptedIds) {\n const proposal = byId.get(workerId)!.proposal;\n for (let index = 0; index < proposal.operations.length; index++) {\n if (!seen.has(`${workerId}:${index}`)) {\n throw new Error(\n `Coordinator partially accepted ${workerId}; operation ${index} was omitted`,\n );\n }\n }\n }\n\n const coordinatorReasons = new Map(decision.rejected.map((item) => [item.workerId, item.reason]));\n const rejected = [...alreadyRejected];\n for (const item of accepted) {\n if (!acceptedIds.includes(item.assignment.id)) {\n rejected.push({\n workerId: item.assignment.id,\n reason:\n coordinatorReasons.get(item.assignment.id) ?? 'Coordinator did not accept this proposal',\n summary: item.proposal.summary,\n });\n }\n }\n return { acceptedWorkerIds: acceptedIds, rejected, operations };\n}\n\nasync function verifyPlan(\n bridge: StudioBridge,\n rootRef: InstanceRef,\n originalRoot: TreeNode,\n operations: MutationOperation[],\n): Promise<VerificationResult> {\n const tree = await getTree(bridge, rootRef, 12, 5000);\n const nodes = flattenTree(tree.roots);\n const paths = new Set(\n nodes.flatMap((node) => (node.ref.pathSegments ? [pathKey(node.ref.pathSegments)] : [])),\n );\n const knownPaths = collectInstancePaths(originalRoot);\n const expectedCreates = operations.flatMap((operation) => {\n if (operation.op !== 'create' && operation.op !== 'clone') return [];\n const parentPath = resolveRefPath(operation.parent, knownPaths);\n return parentPath ? [pathKey([...parentPath, operation.name])] : [];\n });\n const missingCreates = expectedCreates.filter((path) => !paths.has(path));\n\n const inspectOperations = operations.filter(\n (operation) => operation.op !== 'create' && operation.op !== 'clone',\n );\n const inspectFailures: string[] = [];\n const propertyMismatches: VerificationResult['propertyMismatches'] = [];\n const moveMismatches: VerificationResult['moveMismatches'] = [];\n\n for (let offset = 0; offset < inspectOperations.length; offset += 20) {\n const batch = inspectOperations.slice(offset, offset + 20);\n const targets = batch.map((operation) => operation.target);\n const inspected = await requestStudio(bridge, CliMsg.V2_INSPECT, { targets, compact: true });\n const results = Array.isArray(inspected.results)\n ? (inspected.results as Array<Record<string, unknown>>)\n : [];\n batch.forEach((operation, index) => {\n const result = results[index];\n const targetLabel = refLabel(operation.target);\n if (!result || result.success === false) {\n inspectFailures.push(\n `${targetLabel}: ${String(result?.error ?? 'missing inspection result')}`,\n );\n return;\n }\n if (operation.op === 'setProperties') {\n const entries = Array.isArray(result.properties)\n ? (result.properties as Array<{ name?: unknown; value?: unknown }>)\n : [];\n const actual = new Map(entries.map((entry) => [String(entry.name), entry.value]));\n for (const [property, expected] of Object.entries(operation.properties)) {\n const actualValue = actual.get(property);\n if (!actual.has(property) || !valuesEquivalent(expected, actualValue)) {\n propertyMismatches.push({\n target: targetLabel,\n property,\n expected,\n actual: actualValue,\n });\n }\n }\n } else {\n const instanceId = operation.target.instanceId;\n const current =\n nodes.find((node) => instanceId && node.ref.instanceId === instanceId) ??\n nodes.find((node) => samePath(node.ref.pathSegments, operation.target.pathSegments));\n const expectedParent = resolveRefPath(operation.parent, knownPaths);\n const actualPath = current?.ref.pathSegments;\n const actualParent = actualPath?.slice(0, -1);\n if (!expectedParent || !actualParent || !samePath(expectedParent, actualParent)) {\n moveMismatches.push({\n target: targetLabel,\n expectedParent: expectedParent ? expectedParent.join('.') : refLabel(operation.parent),\n actualParent: actualParent?.join('.'),\n });\n }\n }\n });\n }\n\n return {\n passed:\n !tree.truncated &&\n missingCreates.length === 0 &&\n propertyMismatches.length === 0 &&\n moveMismatches.length === 0 &&\n inspectFailures.length === 0,\n treeNodeCount: tree.nodeCount,\n treeTruncated: tree.truncated,\n expectedCreates: expectedCreates.length,\n foundCreates: expectedCreates.length - missingCreates.length,\n missingCreates,\n propertyMismatches,\n moveMismatches,\n inspectFailures,\n };\n}\n\nfunction findRepairOperations(\n operations: MutationOperation[],\n verification: VerificationResult,\n originalRoot: TreeNode,\n): MutationOperation[] {\n const knownPaths = collectInstancePaths(originalRoot);\n const missingCreates = new Set(verification.missingCreates);\n const mismatchedTargets = new Set(verification.propertyMismatches.map((item) => item.target));\n const mismatchedMoves = new Set(verification.moveMismatches.map((item) => item.target));\n return operations.filter((operation) => {\n if (operation.op === 'create') {\n const parentPath = resolveRefPath(operation.parent, knownPaths);\n return Boolean(parentPath && missingCreates.has(pathKey([...parentPath, operation.name])));\n }\n if (operation.op === 'clone') return false;\n if (operation.op === 'setProperties') return mismatchedTargets.has(refLabel(operation.target));\n return mismatchedMoves.has(refLabel(operation.target));\n });\n}\n\nfunction emptyDecision(rejected: RejectedProposal[]): CoordinatorDecision {\n return {\n summary:\n rejected.length > 0\n ? 'No valid worker proposal was available to apply.'\n : 'Workers found no mutations necessary.',\n acceptedWorkerIds: [],\n rejected: [],\n operationOrder: [],\n verificationChecks: ['Read the requested root back and confirm no mutation was needed.'],\n };\n}\n\nfunction publicAssignment(assignment: WorkerAssignment) {\n return {\n id: assignment.id,\n role: assignment.role,\n objective: assignment.objective,\n ownedScopes: assignment.ownedScopes,\n acceptanceCriteria: assignment.acceptanceCriteria,\n };\n}\n\nfunction publicWorkerResult(result: WorkerResult) {\n return {\n workerId: result.assignment.id,\n summary: result.proposal?.summary,\n evidence: result.proposal?.evidence ?? [],\n proposedOperationCount: result.proposal?.operations.length ?? 0,\n risks: result.proposal?.risks ?? [],\n verificationSuggestions: result.proposal?.verificationSuggestions ?? [],\n error: result.error,\n };\n}\n\nfunction collectRefKeys(node: TreeNode, output: Set<string>): void {\n for (const key of parallelRefKeys(node.ref)) output.add(key);\n node.children?.forEach((child) => collectRefKeys(child, output));\n}\n\nfunction collectInstancePaths(root: TreeNode): Map<string, string[]> {\n const result = new Map<string, string[]>();\n for (const node of flattenTree([root])) {\n if (node.ref.pathSegments) {\n if (node.ref.instanceId) result.set(`id:${node.ref.instanceId}`, node.ref.pathSegments);\n result.set(`path:${pathKey(node.ref.pathSegments)}`, node.ref.pathSegments);\n }\n }\n return result;\n}\n\nfunction flattenTree(roots: TreeNode[]): TreeNode[] {\n const result: TreeNode[] = [];\n const visit = (node: TreeNode) => {\n result.push(node);\n node.children?.forEach(visit);\n };\n roots.forEach(visit);\n return result;\n}\n\nexport function isKnownParallelRef(ref: InstanceRef, known: Set<string>): boolean {\n const keys = parallelRefKeys(ref);\n return keys.length > 0 && keys.every((key) => known.has(key));\n}\n\nexport function isParallelRefWithinScopes(ref: InstanceRef, scopes: InstanceRef[]): boolean {\n if (ref.pathSegments) {\n return scopes.some(\n (scope) => scope.pathSegments && parallelPathIsWithin(ref.pathSegments!, scope.pathSegments),\n );\n }\n return scopes.some((scope) => Boolean(ref.instanceId && scope.instanceId === ref.instanceId));\n}\n\nfunction operationTarget(operation: MutationOperation): { key: string; path?: string[] } {\n if (operation.op === 'create' || operation.op === 'clone') {\n const parentPath = operation.parent.pathSegments;\n return {\n key: `${refKey(operation.parent)}/create:${operation.name}`,\n path: parentPath ? [...parentPath, operation.name] : undefined,\n };\n }\n return { key: refKey(operation.target), path: operation.target.pathSegments };\n}\n\nexport function parallelRefKeys(ref: InstanceRef): string[] {\n const keys: string[] = [];\n if (ref.instanceId) keys.push(`id:${ref.instanceId}`);\n if (ref.pathSegments) keys.push(`path:${pathKey(ref.pathSegments)}`);\n if (ref.instanceId && ref.pathSegments) {\n keys.push(`pair:${ref.instanceId}:${pathKey(ref.pathSegments)}`);\n }\n return keys;\n}\n\nfunction refKey(ref: InstanceRef): string {\n return parallelRefKeys(ref)[0] ?? 'invalid-ref';\n}\n\nfunction refLabel(ref: InstanceRef): string {\n return ref.pathSegments?.join('.') ?? ref.instanceId ?? 'unknown-instance';\n}\n\nfunction resolveRefPath(ref: InstanceRef, known: Map<string, string[]>): string[] | undefined {\n if (ref.pathSegments) return ref.pathSegments;\n return ref.instanceId ? known.get(`id:${ref.instanceId}`) : undefined;\n}\n\nfunction pathKey(path: string[]): string {\n return path.join('\\u0000');\n}\n\nexport function parallelPathIsWithin(target: string[], scope: string[]): boolean {\n return (\n target.length >= scope.length && scope.every((segment, index) => target[index] === segment)\n );\n}\n\nexport function parallelPathsOverlap(left: string[], right: string[]): boolean {\n return parallelPathIsWithin(left, right) || parallelPathIsWithin(right, left);\n}\n\nfunction samePath(left?: string[], right?: string[]): boolean {\n return Boolean(\n left &&\n right &&\n left.length === right.length &&\n left.every((part, index) => part === right[index]),\n );\n}\n\nexport function parallelRootPathToSegments(path: string): string[] {\n const trimmed = path.trim();\n const bracketSegments = [...trimmed.matchAll(/\\[\"((?:\\\\.|[^\"])*)\"\\]/g)].map(\n (match) => JSON.parse(`\"${match[1]}\"`) as string,\n );\n if (bracketSegments.length > 0) return bracketSegments;\n const segments = trimmed\n .replace(/^game\\.?/i, '')\n .split('.')\n .map((part) => part.trim())\n .filter(Boolean);\n if (segments.length === 0) throw new Error('rootPath must identify a Studio instance');\n return segments;\n}\n\nfunction parseJson(text: string): unknown {\n const trimmed = text.trim();\n const fenced = trimmed.match(/^```(?:json)?\\s*([\\s\\S]*?)\\s*```$/i)?.[1] ?? trimmed;\n try {\n return JSON.parse(fenced);\n } catch {\n const start = fenced.indexOf('{');\n const end = fenced.lastIndexOf('}');\n if (start >= 0 && end > start) return JSON.parse(fenced.slice(start, end + 1));\n throw new Error('Sampling response did not contain a JSON object');\n }\n}\n\nfunction extractSamplingText(content: unknown): string {\n const blocks = Array.isArray(content) ? content : [content];\n const text = blocks\n .flatMap((block) => {\n if (block && typeof block === 'object' && (block as { type?: unknown }).type === 'text') {\n const value = (block as { text?: unknown }).text;\n return typeof value === 'string' ? [value] : [];\n }\n return [];\n })\n .join('\\n');\n if (!text) throw new Error('Sampling response did not contain text');\n return text;\n}\n\nfunction valuesEquivalent(expected: unknown, actual: unknown): boolean {\n if (typeof expected === 'string' && typeof actual === 'string') {\n if (expected.startsWith('#') && actual.startsWith('#'))\n return expected.toUpperCase() === actual.toUpperCase();\n if (actual.startsWith('Enum.')) return actual.endsWith(`.${expected.split('.').at(-1)}`);\n return expected === actual;\n }\n if (typeof expected === 'number' && typeof actual === 'number')\n return Math.abs(expected - actual) < 1e-6;\n if (Array.isArray(expected) && Array.isArray(actual)) {\n return (\n expected.length === actual.length &&\n expected.every((item, index) => valuesEquivalent(item, actual[index]))\n );\n }\n if (expected && actual && typeof expected === 'object' && typeof actual === 'object') {\n const left = expected as Record<string, unknown>;\n const right = actual as Record<string, unknown>;\n return Object.keys(left).every((key) => valuesEquivalent(left[key], right[key]));\n }\n return Object.is(expected, actual);\n}\n\nfunction emit(server: McpServer, type: string, data: Record<string, unknown>): void {\n void server\n .sendLoggingMessage({\n level: 'info',\n logger: 'dominus.multi_agent',\n data: { type, ...data },\n })\n .catch(() => undefined);\n}\n\nfunction toErrorMessage(error: unknown): string {\n return error instanceof Error ? error.message : String(error);\n}\n","import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { z } from 'zod';\nimport { CliMsg } from '../../transport/protocol.js';\nimport type { StudioBridge } from '../../transport/ws-server.js';\nimport { callStudio, instanceRefSchema, ref, toolOutputSchema } from './shared.js';\n\nconst propertiesSchema = z\n .record(z.unknown())\n .refine(\n (properties) =>\n Object.keys(properties).length <= 100 &&\n !Object.keys(properties).some((name) => ['Parent', 'ClassName', 'Source'].includes(name)),\n 'At most 100 properties are allowed; Parent, ClassName, and Source require dedicated operations',\n );\n\nconst setPropertiesOperation = z.object({\n op: z.literal('setProperties'),\n target: instanceRefSchema,\n properties: propertiesSchema,\n});\n\nconst createOperation = z.object({\n op: z.literal('create'),\n parent: instanceRefSchema,\n className: z.string().min(1).max(100),\n name: z.string().min(1).max(256),\n properties: propertiesSchema.optional(),\n});\n\nconst moveOperation = z.object({\n op: z.literal('move'),\n target: instanceRefSchema,\n parent: instanceRefSchema,\n});\n\nconst cloneOperation = z.object({\n op: z.literal('clone'),\n target: instanceRefSchema,\n parent: instanceRefSchema.optional(),\n name: z.string().min(1).max(100).optional(),\n offset: z\n .object({ x: z.number().finite(), y: z.number().finite(), z: z.number().finite() })\n .optional(),\n properties: propertiesSchema.optional(),\n});\n\nconst mutationOperation = z.discriminatedUnion('op', [\n setPropertiesOperation,\n createOperation,\n cloneOperation,\n moveOperation,\n]);\n\ntype UiNode = {\n ClassName: string;\n Name?: string;\n properties?: Record<string, unknown>;\n Children?: UiNode[];\n};\n\nconst uiNodeSchema: z.ZodType<UiNode> = z.lazy(() =>\n z.object({\n ClassName: z.string().min(1).max(100),\n Name: z.string().min(1).max(256).optional(),\n properties: propertiesSchema.optional(),\n Children: z.array(uiNodeSchema).max(1000).optional(),\n }),\n);\n\nexport function registerStudioTools(server: McpServer, bridge: StudioBridge): void {\n server.registerTool(\n 'studio_get_tree',\n {\n title: 'Inspect Studio Tree',\n description:\n 'Read a deterministic Studio hierarchy and receive stable instance refs. Use refs from this result in later calls.',\n inputSchema: {\n root: instanceRefSchema.optional(),\n maxDepth: z.number().int().min(0).max(12).optional().default(3),\n maxNodes: z.number().int().min(1).max(5000).optional().default(1000),\n },\n outputSchema: toolOutputSchema,\n annotations: {\n readOnlyHint: true,\n destructiveHint: false,\n idempotentHint: true,\n openWorldHint: false,\n },\n },\n ({ root, maxDepth, maxNodes }) =>\n callStudio(bridge, CliMsg.V2_GET_TREE, {\n root: root ? ref(root) : undefined,\n maxDepth,\n maxNodes,\n }),\n );\n\n server.registerTool(\n 'studio_inspect',\n {\n title: 'Inspect Studio Instances',\n description:\n 'Read typed property values and immediate children for up to 20 instance refs. Returns writable metadata from live ReflectionService.',\n inputSchema: {\n targets: z.array(instanceRefSchema).min(1).max(20),\n compact: z.boolean().optional().default(true),\n },\n outputSchema: toolOutputSchema,\n annotations: {\n readOnlyHint: true,\n destructiveHint: false,\n idempotentHint: true,\n openWorldHint: false,\n },\n },\n ({ targets, compact }) => callStudio(bridge, CliMsg.V2_INSPECT, { targets, compact }),\n );\n\n server.registerTool(\n 'studio_get_selection',\n {\n title: 'Get Studio Selection',\n description: 'Return the user current Roblox Studio selection as stable instance refs.',\n inputSchema: {},\n outputSchema: toolOutputSchema,\n annotations: {\n readOnlyHint: true,\n destructiveHint: false,\n idempotentHint: true,\n openWorldHint: false,\n },\n },\n () => callStudio(bridge, CliMsg.V2_GET_SELECTION, {}),\n );\n\n server.registerTool(\n 'studio_read_script',\n {\n title: 'Read Studio Script',\n description:\n 'Read a Script, LocalScript, or ModuleScript and receive its source plus a revision required for conflict-safe updates.',\n inputSchema: { target: instanceRefSchema },\n outputSchema: toolOutputSchema,\n annotations: {\n readOnlyHint: true,\n destructiveHint: false,\n idempotentHint: true,\n openWorldHint: false,\n },\n },\n ({ target }) => callStudio(bridge, CliMsg.V2_READ_SCRIPT, { target }),\n );\n\n server.registerTool(\n 'studio_update_script',\n {\n title: 'Update Studio Script',\n description:\n 'Replace script source only if expectedRevision still matches the editor. Read the script again after updating to verify it.',\n inputSchema: {\n target: instanceRefSchema,\n source: z.string().max(750_000),\n expectedRevision: z.string().regex(/^\\d+:[0-9a-f]{8}$/),\n },\n outputSchema: toolOutputSchema,\n annotations: {\n readOnlyHint: false,\n destructiveHint: true,\n idempotentHint: true,\n openWorldHint: false,\n },\n },\n ({ target, source, expectedRevision }) =>\n callStudio(bridge, CliMsg.V2_UPDATE_SCRIPT, { target, source, expectedRevision }, 60_000),\n );\n\n server.registerTool(\n 'studio_apply',\n {\n title: 'Apply Atomic Studio Mutations',\n description:\n 'Atomically set properties, create instances, deep-clone instances, and move instances. Any failed operation cancels and undoes the entire batch.',\n inputSchema: { operations: z.array(mutationOperation).min(1).max(100) },\n outputSchema: toolOutputSchema,\n annotations: {\n readOnlyHint: false,\n destructiveHint: false,\n idempotentHint: false,\n openWorldHint: false,\n },\n },\n ({ operations }) => callStudio(bridge, CliMsg.V2_APPLY, { operations }, 60_000),\n );\n\n server.registerTool(\n 'studio_delete_instances',\n {\n title: 'Delete Studio Instances',\n description:\n 'Destructively delete up to 50 instances in one undoable recording. Only call when the user explicitly requested deletion or cleanup.',\n inputSchema: {\n targets: z.array(instanceRefSchema).min(1).max(50),\n confirm: z.literal(true),\n },\n outputSchema: toolOutputSchema,\n annotations: {\n readOnlyHint: false,\n destructiveHint: true,\n idempotentHint: false,\n openWorldHint: false,\n },\n },\n ({ targets, confirm }) => callStudio(bridge, CliMsg.V2_DELETE, { targets, confirm }, 60_000),\n );\n\n server.registerTool(\n 'studio_build_ui',\n {\n title: 'Build Atomic Roblox UI',\n description:\n 'Build and validate a declarative UI tree off-tree, then commit it in one undoable operation. Existing UI is replaced only when replaceExisting is true.',\n inputSchema: {\n parent: instanceRefSchema.optional(),\n tree: uiNodeSchema,\n replaceExisting: z.boolean().optional().default(false),\n maxDepth: z.number().int().min(1).max(50).optional().default(30),\n maxNodes: z.number().int().min(1).max(3000).optional().default(1000),\n },\n outputSchema: toolOutputSchema,\n annotations: {\n readOnlyHint: false,\n destructiveHint: true,\n idempotentHint: false,\n openWorldHint: false,\n },\n },\n ({ parent, tree, replaceExisting, maxDepth, maxNodes }) =>\n callStudio(\n bridge,\n CliMsg.V2_BUILD_UI,\n { parent, tree, replaceExisting, maxDepth, maxNodes },\n 120_000,\n ),\n );\n\n server.registerTool(\n 'studio_snapshot_ui',\n {\n title: 'Snapshot Roblox UI',\n description:\n 'Serialize a live UI subtree into typed, studio_build_ui-compatible data for fidelity checks and read-back verification.',\n inputSchema: {\n target: instanceRefSchema,\n maxDepth: z.number().int().min(0).max(50).optional().default(30),\n },\n outputSchema: toolOutputSchema,\n annotations: {\n readOnlyHint: true,\n destructiveHint: false,\n idempotentHint: true,\n openWorldHint: false,\n },\n },\n ({ target, maxDepth }) =>\n callStudio(bridge, CliMsg.V2_SNAPSHOT_UI, { target, maxDepth }, 120_000),\n );\n\n server.registerTool(\n 'studio_run_test',\n {\n title: 'Run Roblox Studio Test',\n description:\n 'Run a bounded StudioTestService run, play, or multiplayer scenario. The game test harness must call StudioTestService:EndTest with its result.',\n inputSchema: {\n mode: z.enum(['run', 'play', 'multiplayer']).optional().default('run'),\n args: z.unknown().optional(),\n players: z.number().int().min(1).max(8).optional().default(1),\n timeoutMs: z.number().int().min(5_000).max(600_000).optional().default(120_000),\n },\n outputSchema: toolOutputSchema,\n annotations: {\n readOnlyHint: false,\n destructiveHint: false,\n idempotentHint: false,\n openWorldHint: false,\n },\n },\n ({ mode, args, players, timeoutMs }) =>\n callStudio(\n bridge,\n CliMsg.V2_RUN_TEST,\n { mode, args, players, timeoutMs },\n timeoutMs + 15_000,\n ),\n );\n\n server.registerTool(\n 'studio_get_output',\n {\n title: 'Read Studio Output',\n description:\n 'Read the bounded Studio output buffer, optionally filtered by severity. Dominus transport messages are excluded.',\n inputSchema: {\n limit: z.number().int().min(1).max(500).optional().default(100),\n level: z.enum(['info', 'warn', 'error']).optional(),\n },\n outputSchema: toolOutputSchema,\n annotations: {\n readOnlyHint: true,\n destructiveHint: false,\n idempotentHint: true,\n openWorldHint: false,\n },\n },\n ({ limit, level }) => callStudio(bridge, CliMsg.V2_GET_OUTPUT, { limit, level }),\n );\n\n server.registerTool(\n 'studio_get_reflection',\n {\n title: 'Read Live Roblox Reflection',\n description:\n 'Read current ReflectionService fields for a class in the connected Studio, including Type, Display category, and permission metadata.',\n inputSchema: { className: z.string().min(1).max(100) },\n outputSchema: toolOutputSchema,\n annotations: {\n readOnlyHint: true,\n destructiveHint: false,\n idempotentHint: true,\n openWorldHint: false,\n },\n },\n ({ className }) => callStudio(bridge, CliMsg.V2_GET_REFLECTION, { className }),\n );\n}\n","import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';\nimport { loadConfig } from '../config/config.js';\nimport { ensureBridgeDaemon } from '../transport/daemon-launcher.js';\nimport type { StudioBridge } from '../transport/ws-server.js';\nimport { DOMINUS_MCP_INSTRUCTIONS } from './instructions.js';\nimport { registerDominusResources } from './resources.js';\nimport { registerBuildingTools } from './tools/building.js';\nimport { registerConnectionTools } from './tools/connections.js';\nimport { registerDocsTools } from './tools/docs.js';\nimport { registerParallelTaskTool } from './tools/parallel.js';\nimport { registerStudioTools } from './tools/studio.js';\n\nconst VERSION = '2.3.0';\n\nexport function createDominusMcpServer(bridge: StudioBridge): McpServer {\n const server = new McpServer(\n {\n name: 'dominus-2',\n version: VERSION,\n },\n {\n instructions: DOMINUS_MCP_INSTRUCTIONS,\n },\n );\n\n registerConnectionTools(server, bridge);\n registerStudioTools(server, bridge);\n registerBuildingTools(server, bridge);\n registerParallelTaskTool(server, bridge);\n registerDocsTools(server);\n registerDominusResources(server, bridge);\n return server;\n}\n\nexport async function createStudioBridge(port: number): Promise<StudioBridge> {\n return ensureBridgeDaemon(port);\n}\n\nexport async function startMcpServer(): Promise<void> {\n const config = loadConfig();\n const bridge = await createStudioBridge(config.port);\n const server = createDominusMcpServer(bridge);\n const transport = new StdioServerTransport();\n\n let stopped = false;\n const stop = async () => {\n if (stopped) return;\n stopped = true;\n await bridge.stop();\n };\n process.once('SIGINT', () => void stop().finally(() => process.exit(0)));\n process.once('SIGTERM', () => void stop().finally(() => process.exit(0)));\n\n await server.connect(transport);\n}\n","import { startMcpServer } from './server.js';\n\nstartMcpServer().catch((err) => {\n console.error('Failed to start Dominus MCP server:', err);\n process.exit(1);\n});\n"]}