mrmd-js 2.0.0 → 2.0.1
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/index.cjs +207 -18
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +207 -18
- package/dist/index.js.map +1 -1
- package/dist/mrmd-js.iife.js +207 -18
- package/dist/mrmd-js.iife.js.map +1 -1
- package/package.json +1 -1
- package/src/execute/javascript.js +13 -1
- package/src/session/console-capture.js +36 -0
- package/src/transform/async.js +165 -15
- package/src/transform/persistence.js +2 -2
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../src/constants.js","../src/session/console-capture.js","../src/session/context/iframe.js","../src/session/context/main.js","../src/transform/extract.js","../src/execute/interface.js","../src/transform/persistence.js","../src/transform/async.js","../src/execute/javascript.js","../src/lsp/parse.js","../src/lsp/format.js","../src/lsp/complete.js","../src/lsp/hover.js","../src/lsp/inspect.js","../src/lsp/variables.js","../src/analysis/is-complete.js","../src/analysis/format.js","../src/session/session.js","../src/session/manager.js","../src/execute/registry.js","../src/execute/html.js","../src/execute/css.js","../src/execute/index.js","../src/runtime.js","../src/utils/html-renderer.js","../src/utils/css-applicator.js","../src/utils/ansi-renderer.js"],"sourcesContent":["/**\n * Constants\n *\n * Runtime constants for mrmd-js.\n * @module constants\n */\n\n/** Runtime name */\nexport const RUNTIME_NAME = 'mrmd-js';\n\n/** Runtime version */\nexport const RUNTIME_VERSION = '2.0.0';\n\n/** Default session ID */\nexport const DEFAULT_SESSION = 'default';\n\n/** Default max sessions */\nexport const DEFAULT_MAX_SESSIONS = 10;\n\n/** Supported languages */\nexport const SUPPORTED_LANGUAGES = [\n 'javascript',\n 'js',\n 'html',\n 'htm',\n 'css',\n 'style',\n];\n\n/** Default features */\nexport const DEFAULT_FEATURES = {\n execute: true,\n executeStream: true,\n interrupt: false, // Limited in browser\n complete: true,\n inspect: true,\n hover: true,\n variables: true,\n variableExpand: true,\n reset: true,\n isComplete: true,\n format: true,\n assets: true,\n};\n","/**\n * Console Capture\n *\n * Intercepts console methods to capture output during execution.\n * @module session/console-capture\n */\n\n/**\n * @typedef {import('./context/interface.js').LogEntry} LogEntry\n */\n\n/**\n * Format arguments for logging\n * @param {Array<*>} args\n * @returns {string}\n */\nfunction formatArgs(args) {\n return args\n .map((arg) => {\n if (arg === null) return 'null';\n if (arg === undefined) return 'undefined';\n if (typeof arg === 'object') {\n try {\n return JSON.stringify(arg, null, 2);\n } catch {\n return String(arg);\n }\n }\n return String(arg);\n })\n .join(' ');\n}\n\n/**\n * Create a console capture for a window context\n */\nexport class ConsoleCapture {\n /** @type {Window} */\n #context;\n\n /** @type {LogEntry[]} */\n #queue = [];\n\n /** @type {Partial<Console> | null} */\n #originalConsole = null;\n\n /** @type {boolean} */\n #active = false;\n\n /**\n * @param {Window} context - The window context to capture console from\n */\n constructor(context) {\n this.#context = context;\n }\n\n /**\n * Start capturing console output\n */\n start() {\n if (this.#active) return;\n\n const console = this.#context.console;\n\n // Save originals\n this.#originalConsole = {\n log: console.log.bind(console),\n info: console.info.bind(console),\n warn: console.warn.bind(console),\n error: console.error.bind(console),\n };\n\n // Intercept methods\n console.log = (...args) => {\n this.#queue.push({ type: 'log', args, timestamp: Date.now() });\n this.#originalConsole?.log?.(...args);\n };\n\n console.info = (...args) => {\n this.#queue.push({ type: 'info', args, timestamp: Date.now() });\n this.#originalConsole?.info?.(...args);\n };\n\n console.warn = (...args) => {\n this.#queue.push({ type: 'warn', args, timestamp: Date.now() });\n this.#originalConsole?.warn?.(...args);\n };\n\n console.error = (...args) => {\n this.#queue.push({ type: 'error', args, timestamp: Date.now() });\n this.#originalConsole?.error?.(...args);\n };\n\n this.#active = true;\n }\n\n /**\n * Stop capturing and restore original console\n */\n stop() {\n if (!this.#active || !this.#originalConsole) return;\n\n const console = this.#context.console;\n\n if (this.#originalConsole.log) {\n console.log = this.#originalConsole.log;\n }\n if (this.#originalConsole.info) {\n console.info = this.#originalConsole.info;\n }\n if (this.#originalConsole.warn) {\n console.warn = this.#originalConsole.warn;\n }\n if (this.#originalConsole.error) {\n console.error = this.#originalConsole.error;\n }\n\n this.#originalConsole = null;\n this.#active = false;\n }\n\n /**\n * Clear the log queue\n */\n clear() {\n this.#queue = [];\n }\n\n /**\n * Get captured logs and clear queue\n * @returns {LogEntry[]}\n */\n flush() {\n const logs = this.#queue;\n this.#queue = [];\n return logs;\n }\n\n /**\n * Get captured logs without clearing\n * @returns {LogEntry[]}\n */\n peek() {\n return [...this.#queue];\n }\n\n /**\n * Convert logs to stdout/stderr strings\n * @param {LogEntry[]} logs\n * @returns {{ stdout: string, stderr: string }}\n */\n static toOutput(logs) {\n const stdout = [];\n const stderr = [];\n\n for (const log of logs) {\n const formatted = formatArgs(log.args);\n if (log.type === 'error') {\n stderr.push(`Error: ${formatted}`);\n } else if (log.type === 'warn') {\n stderr.push(`Warning: ${formatted}`);\n } else {\n stdout.push(formatted);\n }\n }\n\n return {\n stdout: stdout.join('\\n'),\n stderr: stderr.join('\\n'),\n };\n }\n}\n\n/**\n * Create a console capture for a context\n * @param {Window} context\n * @returns {ConsoleCapture}\n */\nexport function createConsoleCapture(context) {\n return new ConsoleCapture(context);\n}\n","/**\n * Iframe Execution Context\n *\n * Executes JavaScript in an isolated iframe environment.\n * Variables persist in the iframe's global scope between executions.\n *\n * @module session/context/iframe\n */\n\nimport { ConsoleCapture } from '../console-capture.js';\n\n/**\n * @typedef {import('./interface.js').ExecutionContext} ExecutionContext\n * @typedef {import('./interface.js').RawExecutionResult} RawExecutionResult\n * @typedef {import('./interface.js').LogEntry} LogEntry\n */\n\n/**\n * @typedef {Object} StdinRequest\n * @property {string} prompt - Prompt text to display\n * @property {boolean} password - Whether to hide input\n * @property {string} execId - Execution ID for this request\n */\n\n/**\n * @callback OnStdinRequestCallback\n * @param {StdinRequest} request - The stdin request\n * @returns {Promise<string>} - Resolves with user input\n */\n\n/**\n * @typedef {Object} IframeContextOptions\n * @property {boolean} [visible=false] - Whether iframe is visible\n * @property {HTMLElement} [target] - Target element for visible iframe\n * @property {boolean} [allowMainAccess=true] - Allow access to main document\n * @property {Record<string, *>} [utilities] - Custom utilities to inject\n * @property {Partial<CSSStyleDeclaration>} [styles] - Styles for visible iframe\n */\n\n/**\n * Iframe-based execution context\n * @implements {ExecutionContext}\n */\nexport class IframeContext {\n /** @type {HTMLIFrameElement | null} */\n #iframe = null;\n\n /** @type {Window | null} */\n #ctx = null;\n\n /** @type {Set<string>} */\n #trackedVars = new Set();\n\n /** @type {ConsoleCapture | null} */\n #consoleCapture = null;\n\n /** @type {IframeContextOptions} */\n #options;\n\n /** @type {boolean} */\n #initialized = false;\n\n /** @type {OnStdinRequestCallback | null} */\n #onStdinRequest = null;\n\n /** @type {string} */\n #currentExecId = '';\n\n /**\n * @param {IframeContextOptions} [options]\n */\n constructor(options = {}) {\n this.#options = {\n visible: false,\n allowMainAccess: true,\n ...options,\n };\n }\n\n /**\n * Initialize the iframe\n */\n #initialize() {\n if (this.#initialized) return;\n\n // Create iframe\n this.#iframe = document.createElement('iframe');\n this.#iframe.sandbox.add('allow-scripts');\n this.#iframe.sandbox.add('allow-same-origin');\n\n if (this.#options.visible && this.#options.target) {\n // Visible mode\n const styles = this.#options.styles || {};\n this.#iframe.style.width = styles.width || '100%';\n this.#iframe.style.height = styles.height || '100%';\n this.#iframe.style.border = styles.border || 'none';\n this.#iframe.style.display = 'block';\n\n // Apply additional styles\n for (const [key, value] of Object.entries(styles)) {\n if (value && typeof value === 'string') {\n this.#iframe.style.setProperty(key, value);\n }\n }\n\n this.#options.target.appendChild(this.#iframe);\n } else {\n // Hidden mode\n this.#iframe.style.display = 'none';\n document.body.appendChild(this.#iframe);\n }\n\n // Get context\n this.#ctx = /** @type {Window} */ (this.#iframe.contentWindow);\n\n // Set up utilities\n this.#setupUtilities();\n\n // Set up console capture\n this.#consoleCapture = new ConsoleCapture(this.#ctx);\n this.#consoleCapture.start();\n\n // Initialize tracking set in iframe\n this.#ctx.__userVars__ = this.#trackedVars;\n\n this.#initialized = true;\n }\n\n /**\n * Set up utility functions in the context\n */\n #setupUtilities() {\n if (!this.#ctx) return;\n\n // Access to main document\n if (this.#options.allowMainAccess) {\n this.#ctx.mainDocument = document;\n this.#ctx.mainWindow = window;\n }\n\n // Sleep helper\n this.#ctx.sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));\n\n // Print helper\n this.#ctx.print = (...args) => {\n this.#ctx?.console.log(...args);\n };\n\n // Input helper - prompts for user input (like Python's input())\n // Returns a Promise that resolves when user provides input\n const self = this;\n this.#ctx.input = async (prompt = '', options = {}) => {\n // Print prompt to console (like Python does)\n if (prompt) {\n self.#ctx?.console.log(prompt);\n }\n\n // If no stdin handler is set, fall back to browser prompt()\n if (!self.#onStdinRequest) {\n const result = self.#ctx?.prompt(prompt) ?? '';\n return result;\n }\n\n // Request input from the external handler\n const request = {\n prompt: prompt,\n password: options.password ?? false,\n execId: self.#currentExecId,\n };\n\n try {\n const response = await self.#onStdinRequest(request);\n // Remove trailing newline if present (input() in Python strips it)\n return response.replace(/\\n$/, '');\n } catch (error) {\n // If cancelled, throw an error like Python's KeyboardInterrupt\n throw new Error('Input cancelled');\n }\n };\n\n // Display helper for rich output\n this.#ctx.display = (data, mimeType = 'text/plain') => {\n // Store for retrieval\n if (!this.#ctx.__displayQueue__) {\n this.#ctx.__displayQueue__ = [];\n }\n\n let content;\n if (typeof data === 'string') {\n content = data;\n } else if (data instanceof HTMLElement) {\n content = data.outerHTML;\n mimeType = 'text/html';\n } else {\n try {\n content = JSON.stringify(data, null, 2);\n mimeType = 'application/json';\n } catch {\n content = String(data);\n }\n }\n\n this.#ctx.__displayQueue__.push({ data: { [mimeType]: content }, metadata: {} });\n };\n\n // Inject custom utilities\n if (this.#options.utilities) {\n for (const [key, value] of Object.entries(this.#options.utilities)) {\n this.#ctx[key] = value;\n }\n }\n }\n\n /**\n * Set the stdin request handler\n * @param {OnStdinRequestCallback | null} handler\n */\n setStdinHandler(handler) {\n this.#onStdinRequest = handler;\n }\n\n /**\n * Get the current stdin request handler\n * @returns {OnStdinRequestCallback | null}\n */\n getStdinHandler() {\n return this.#onStdinRequest;\n }\n\n /**\n * Execute code in the iframe\n * @param {string} code - Already transformed/wrapped code from executor\n * @param {{ execId?: string }} [options] - Execution options\n * @returns {Promise<RawExecutionResult>}\n */\n async execute(code, options = {}) {\n this.#initialize();\n\n if (!this.#ctx) {\n throw new Error('Context not initialized');\n }\n\n // Set current execution ID for input() calls\n this.#currentExecId = options.execId || '';\n\n // Clear display queue\n this.#ctx.__displayQueue__ = [];\n\n // Clear console capture\n this.#consoleCapture?.clear();\n\n const startTime = performance.now();\n\n try {\n // Execute - code is already transformed/wrapped by the executor\n const result = await this.#ctx.eval(code);\n const duration = performance.now() - startTime;\n\n // Get logs\n const logs = this.#consoleCapture?.flush() || [];\n\n return {\n result,\n logs,\n duration,\n };\n } catch (error) {\n const duration = performance.now() - startTime;\n const logs = this.#consoleCapture?.flush() || [];\n\n return {\n result: undefined,\n logs,\n error: error instanceof Error ? error : new Error(String(error)),\n duration,\n };\n } finally {\n // Clear current exec ID\n this.#currentExecId = '';\n }\n }\n\n /**\n * Get all user-defined variables\n * @returns {Record<string, *>}\n */\n getVariables() {\n if (!this.#ctx) return {};\n\n const vars = {};\n for (const name of this.#trackedVars) {\n try {\n vars[name] = this.#ctx[name];\n } catch {\n // Skip inaccessible\n }\n }\n return vars;\n }\n\n /**\n * Get a specific variable\n * @param {string} name\n * @returns {*}\n */\n getVariable(name) {\n if (!this.#ctx) return undefined;\n return this.#ctx[name];\n }\n\n /**\n * Check if variable exists\n * @param {string} name\n * @returns {boolean}\n */\n hasVariable(name) {\n if (!this.#ctx) return false;\n return name in this.#ctx;\n }\n\n /**\n * Get the global object\n * @returns {Window}\n */\n getGlobal() {\n this.#initialize();\n return /** @type {Window} */ (this.#ctx);\n }\n\n /**\n * Track a declared variable\n * @param {string} name\n */\n trackVariable(name) {\n this.#trackedVars.add(name);\n }\n\n /**\n * Get tracked variable names\n * @returns {Set<string>}\n */\n getTrackedVariables() {\n return this.#trackedVars;\n }\n\n /**\n * Reset the context\n */\n reset() {\n if (!this.#initialized) return;\n\n // Destroy and reinitialize\n this.destroy();\n this.#initialized = false;\n this.#trackedVars = new Set();\n this.#initialize();\n }\n\n /**\n * Destroy the context\n */\n destroy() {\n this.#consoleCapture?.stop();\n this.#consoleCapture = null;\n\n if (this.#iframe) {\n this.#iframe.parentElement?.removeChild(this.#iframe);\n this.#iframe = null;\n }\n\n this.#ctx = null;\n this.#initialized = false;\n }\n\n /**\n * Check if this is main context\n * @returns {boolean}\n */\n isMainContext() {\n return false;\n }\n\n /**\n * Get the iframe element\n * @returns {HTMLIFrameElement | null}\n */\n getIframe() {\n return this.#iframe;\n }\n\n /**\n * Get display data queue\n * @returns {Array<{data: Record<string, string>, metadata: Record<string, *>}>}\n */\n getDisplayQueue() {\n return this.#ctx?.__displayQueue__ || [];\n }\n}\n\n/**\n * Create an iframe context\n * @param {IframeContextOptions} [options]\n * @returns {IframeContext}\n */\nexport function createIframeContext(options) {\n return new IframeContext(options);\n}\n","/**\n * Main Execution Context\n *\n * Executes JavaScript in the main window context (no isolation).\n * Provides full access to the page's DOM and state.\n *\n * @module session/context/main\n */\n\nimport { ConsoleCapture } from '../console-capture.js';\n\n/**\n * @typedef {import('./interface.js').ExecutionContext} ExecutionContext\n * @typedef {import('./interface.js').RawExecutionResult} RawExecutionResult\n */\n\n/**\n * @typedef {Object} StdinRequest\n * @property {string} prompt - Prompt text to display\n * @property {boolean} password - Whether to hide input\n * @property {string} execId - Execution ID for this request\n */\n\n/**\n * @callback OnStdinRequestCallback\n * @param {StdinRequest} request - The stdin request\n * @returns {Promise<string>} - Resolves with user input\n */\n\n/**\n * @typedef {Object} MainContextOptions\n * @property {Record<string, *>} [utilities] - Custom utilities to inject\n */\n\n/**\n * Main window execution context (no isolation)\n * @implements {ExecutionContext}\n */\nexport class MainContext {\n /** @type {Set<string>} */\n #trackedVars = new Set();\n\n /** @type {ConsoleCapture | null} */\n #consoleCapture = null;\n\n /** @type {MainContextOptions} */\n #options;\n\n /** @type {boolean} */\n #initialized = false;\n\n /** @type {Array<{data: Record<string, string>, metadata: Record<string, *>}>} */\n #displayQueue = [];\n\n /** @type {OnStdinRequestCallback | null} */\n #onStdinRequest = null;\n\n /** @type {string} */\n #currentExecId = '';\n\n /**\n * @param {MainContextOptions} [options]\n */\n constructor(options = {}) {\n this.#options = options;\n }\n\n /**\n * Initialize the context\n */\n #initialize() {\n if (this.#initialized) return;\n\n // Set up utilities on window\n this.#setupUtilities();\n\n // Set up console capture\n this.#consoleCapture = new ConsoleCapture(window);\n this.#consoleCapture.start();\n\n this.#initialized = true;\n }\n\n /**\n * Set up utility functions\n */\n #setupUtilities() {\n const self = this;\n\n // Sleep helper (if not already defined)\n if (!('sleep' in window)) {\n /** @type {*} */ (window).sleep = (ms) =>\n new Promise((resolve) => setTimeout(resolve, ms));\n }\n\n // Print helper\n if (!('print' in window) || typeof window.print !== 'function') {\n /** @type {*} */ (window).print = (...args) => {\n console.log(...args);\n };\n }\n\n // Input helper - prompts for user input (like Python's input())\n /** @type {*} */ (window).__mrmd_input__ = async (prompt = '', options = {}) => {\n // Print prompt to console (like Python does)\n if (prompt) {\n console.log(prompt);\n }\n\n // If no stdin handler is set, fall back to browser prompt()\n if (!self.#onStdinRequest) {\n const result = window.prompt(prompt) ?? '';\n return result;\n }\n\n // Request input from the external handler\n const request = {\n prompt: prompt,\n password: options.password ?? false,\n execId: self.#currentExecId,\n };\n\n try {\n const response = await self.#onStdinRequest(request);\n // Remove trailing newline if present (input() in Python strips it)\n return response.replace(/\\n$/, '');\n } catch (error) {\n // If cancelled, throw an error like Python's KeyboardInterrupt\n throw new Error('Input cancelled');\n }\n };\n\n // Expose as 'input' if not already defined\n if (!('input' in window)) {\n /** @type {*} */ (window).input = /** @type {*} */ (window).__mrmd_input__;\n }\n\n // Display helper\n /** @type {*} */ (window).__mrmd_display__ = (data, mimeType = 'text/plain') => {\n let content;\n if (typeof data === 'string') {\n content = data;\n } else if (data instanceof HTMLElement) {\n content = data.outerHTML;\n mimeType = 'text/html';\n } else {\n try {\n content = JSON.stringify(data, null, 2);\n mimeType = 'application/json';\n } catch {\n content = String(data);\n }\n }\n\n this.#displayQueue.push({ data: { [mimeType]: content }, metadata: {} });\n };\n\n // Inject custom utilities\n if (this.#options.utilities) {\n for (const [key, value] of Object.entries(this.#options.utilities)) {\n /** @type {*} */ (window)[key] = value;\n }\n }\n }\n\n /**\n * Set the stdin request handler\n * @param {OnStdinRequestCallback | null} handler\n */\n setStdinHandler(handler) {\n this.#onStdinRequest = handler;\n }\n\n /**\n * Get the current stdin request handler\n * @returns {OnStdinRequestCallback | null}\n */\n getStdinHandler() {\n return this.#onStdinRequest;\n }\n\n /**\n * Execute code in main context\n * @param {string} code - Already transformed/wrapped code from executor\n * @param {{ execId?: string }} [options] - Execution options\n * @returns {Promise<RawExecutionResult>}\n */\n async execute(code, options = {}) {\n this.#initialize();\n\n // Set current execution ID for input() calls\n this.#currentExecId = options.execId || '';\n\n // Clear display queue\n this.#displayQueue = [];\n\n // Clear console capture\n this.#consoleCapture?.clear();\n\n const startTime = performance.now();\n\n try {\n // Execute - code is already transformed/wrapped by the executor\n const result = await eval(code);\n const duration = performance.now() - startTime;\n\n // Get logs\n const logs = this.#consoleCapture?.flush() || [];\n\n return {\n result,\n logs,\n duration,\n };\n } catch (error) {\n const duration = performance.now() - startTime;\n const logs = this.#consoleCapture?.flush() || [];\n\n return {\n result: undefined,\n logs,\n error: error instanceof Error ? error : new Error(String(error)),\n duration,\n };\n } finally {\n // Clear current exec ID\n this.#currentExecId = '';\n }\n }\n\n /**\n * Get all user-defined variables\n * @returns {Record<string, *>}\n */\n getVariables() {\n const vars = {};\n for (const name of this.#trackedVars) {\n try {\n vars[name] = /** @type {*} */ (window)[name];\n } catch {\n // Skip inaccessible\n }\n }\n return vars;\n }\n\n /**\n * Get a specific variable\n * @param {string} name\n * @returns {*}\n */\n getVariable(name) {\n return /** @type {*} */ (window)[name];\n }\n\n /**\n * Check if variable exists\n * @param {string} name\n * @returns {boolean}\n */\n hasVariable(name) {\n return name in window;\n }\n\n /**\n * Get the global object\n * @returns {Window}\n */\n getGlobal() {\n return window;\n }\n\n /**\n * Track a declared variable\n * @param {string} name\n */\n trackVariable(name) {\n this.#trackedVars.add(name);\n }\n\n /**\n * Get tracked variable names\n * @returns {Set<string>}\n */\n getTrackedVariables() {\n return this.#trackedVars;\n }\n\n /**\n * Reset the context\n */\n reset() {\n // Delete tracked variables from window\n for (const name of this.#trackedVars) {\n try {\n delete /** @type {*} */ (window)[name];\n } catch {\n // Some properties can't be deleted\n }\n }\n this.#trackedVars = new Set();\n this.#displayQueue = [];\n }\n\n /**\n * Destroy the context\n */\n destroy() {\n this.#consoleCapture?.stop();\n this.#consoleCapture = null;\n\n // Clean up tracked variables\n this.reset();\n\n // Clean up utilities we added\n try {\n delete /** @type {*} */ (window).__mrmd_display__;\n } catch {\n // Ignore\n }\n\n this.#initialized = false;\n }\n\n /**\n * Check if this is main context\n * @returns {boolean}\n */\n isMainContext() {\n return true;\n }\n\n /**\n * Get the iframe element\n * @returns {null}\n */\n getIframe() {\n return null;\n }\n\n /**\n * Get display data queue\n * @returns {Array<{data: Record<string, string>, metadata: Record<string, *>}>}\n */\n getDisplayQueue() {\n return this.#displayQueue;\n }\n}\n\n/**\n * Create a main context\n * @param {MainContextOptions} [options]\n * @returns {MainContext}\n */\nexport function createMainContext(options) {\n return new MainContext(options);\n}\n","/**\n * Extract Transform\n *\n * Extracts declared variable names from code.\n * @module transform/extract\n */\n\n/**\n * Extract all variable names that will be declared by the code.\n * Handles var, let, const, function, and class declarations.\n *\n * @param {string} code - Source code\n * @returns {string[]} Array of declared variable names\n *\n * @example\n * extractDeclaredVariables('const x = 1; let { a, b } = obj; function foo() {}')\n * // Returns: ['x', 'a', 'b', 'foo']\n */\nexport function extractDeclaredVariables(code) {\n const variables = new Set();\n\n // Remove strings, comments to avoid false matches\n const cleaned = removeStringsAndComments(code);\n\n // Match var/let/const declarations\n // Handles: const x = 1, let x = 1, var x = 1\n // Handles: const { a, b } = obj, const [a, b] = arr\n const varPattern = /\\b(?:var|let|const)\\s+([^=;]+?)(?:\\s*=|\\s*;|\\s*$)/g;\n\n let match;\n while ((match = varPattern.exec(cleaned)) !== null) {\n const declaration = match[1].trim();\n extractNamesFromPattern(declaration, variables);\n }\n\n // Match function declarations\n const funcPattern = /\\bfunction\\s+([a-zA-Z_$][a-zA-Z0-9_$]*)\\s*\\(/g;\n while ((match = funcPattern.exec(cleaned)) !== null) {\n variables.add(match[1]);\n }\n\n // Match class declarations\n const classPattern = /\\bclass\\s+([a-zA-Z_$][a-zA-Z0-9_$]*)/g;\n while ((match = classPattern.exec(cleaned)) !== null) {\n variables.add(match[1]);\n }\n\n return Array.from(variables);\n}\n\n/**\n * Extract variable names from a destructuring pattern or simple identifier\n * @param {string} pattern\n * @param {Set<string>} variables\n */\nfunction extractNamesFromPattern(pattern, variables) {\n // Simple identifier\n const simpleMatch = pattern.match(/^([a-zA-Z_$][a-zA-Z0-9_$]*)$/);\n if (simpleMatch) {\n variables.add(simpleMatch[1]);\n return;\n }\n\n // Object destructuring { a, b: c, ...rest }\n if (pattern.startsWith('{')) {\n const inner = pattern.slice(1, -1);\n // Split by comma, handling nested braces\n const parts = splitByComma(inner);\n for (const part of parts) {\n const trimmed = part.trim();\n if (!trimmed) continue;\n\n // Handle rest: ...rest\n if (trimmed.startsWith('...')) {\n const name = trimmed.slice(3).trim();\n if (isValidIdentifier(name)) {\n variables.add(name);\n }\n continue;\n }\n\n // Handle rename: key: name or key: pattern\n const colonIdx = trimmed.indexOf(':');\n if (colonIdx !== -1) {\n const value = trimmed.slice(colonIdx + 1).trim();\n extractNamesFromPattern(value, variables);\n } else {\n // Simple: key (which is also the variable name)\n const name = trimmed.split('=')[0].trim(); // Handle default values\n if (isValidIdentifier(name)) {\n variables.add(name);\n }\n }\n }\n return;\n }\n\n // Array destructuring [a, b, ...rest]\n if (pattern.startsWith('[')) {\n const inner = pattern.slice(1, -1);\n const parts = splitByComma(inner);\n for (const part of parts) {\n const trimmed = part.trim();\n if (!trimmed) continue;\n\n // Handle rest: ...rest\n if (trimmed.startsWith('...')) {\n const name = trimmed.slice(3).trim();\n if (isValidIdentifier(name)) {\n variables.add(name);\n }\n continue;\n }\n\n // Handle nested destructuring or simple name\n const nameOrPattern = trimmed.split('=')[0].trim();\n extractNamesFromPattern(nameOrPattern, variables);\n }\n return;\n }\n\n // Multiple declarations: a, b, c (from var a, b, c)\n if (pattern.includes(',')) {\n const parts = splitByComma(pattern);\n for (const part of parts) {\n const trimmed = part.trim().split('=')[0].trim();\n if (isValidIdentifier(trimmed)) {\n variables.add(trimmed);\n }\n }\n }\n}\n\n/**\n * Split string by commas, respecting nested brackets\n * @param {string} str\n * @returns {string[]}\n */\nfunction splitByComma(str) {\n const parts = [];\n let current = '';\n let depth = 0;\n\n for (const char of str) {\n if ((char === '{' || char === '[' || char === '(')) {\n depth++;\n current += char;\n } else if ((char === '}' || char === ']' || char === ')')) {\n depth--;\n current += char;\n } else if (char === ',' && depth === 0) {\n parts.push(current);\n current = '';\n } else {\n current += char;\n }\n }\n\n if (current) {\n parts.push(current);\n }\n\n return parts;\n}\n\n/**\n * Check if string is a valid JavaScript identifier\n * @param {string} name\n * @returns {boolean}\n */\nfunction isValidIdentifier(name) {\n return /^[a-zA-Z_$][a-zA-Z0-9_$]*$/.test(name);\n}\n\n/**\n * Remove strings and comments from code\n * @param {string} code\n * @returns {string}\n */\nfunction removeStringsAndComments(code) {\n let result = '';\n let i = 0;\n\n while (i < code.length) {\n // Single-line comment\n if (code[i] === '/' && code[i + 1] === '/') {\n while (i < code.length && code[i] !== '\\n') i++;\n continue;\n }\n\n // Multi-line comment\n if (code[i] === '/' && code[i + 1] === '*') {\n i += 2;\n while (i < code.length && !(code[i] === '*' && code[i + 1] === '/')) i++;\n i += 2;\n continue;\n }\n\n // Template literal\n if (code[i] === '`') {\n result += ' ';\n i++;\n while (i < code.length) {\n if (code[i] === '\\\\') {\n i += 2;\n continue;\n }\n if (code[i] === '`') {\n i++;\n break;\n }\n if (code[i] === '$' && code[i + 1] === '{') {\n i += 2;\n let depth = 1;\n while (i < code.length && depth > 0) {\n if (code[i] === '{') depth++;\n else if (code[i] === '}') depth--;\n i++;\n }\n continue;\n }\n i++;\n }\n continue;\n }\n\n // String\n if (code[i] === '\"' || code[i] === \"'\") {\n const quote = code[i];\n result += ' ';\n i++;\n while (i < code.length) {\n if (code[i] === '\\\\') {\n i += 2;\n continue;\n }\n if (code[i] === quote) {\n i++;\n break;\n }\n i++;\n }\n continue;\n }\n\n result += code[i];\n i++;\n }\n\n return result;\n}\n","/**\n * Executor Interface\n *\n * Defines the contract for language executors.\n * Each executor handles one or more languages and produces MRP-compliant results.\n *\n * @module execute/interface\n */\n\n/**\n * @typedef {import('../session/context/interface.js').ExecutionContext} ExecutionContext\n * @typedef {import('../types/execution.js').ExecuteOptions} ExecuteOptions\n * @typedef {import('../types/execution.js').ExecutionResult} ExecutionResult\n * @typedef {import('../types/streaming.js').StreamEvent} StreamEvent\n */\n\n/**\n * @typedef {Object} Executor\n * @property {readonly string[]} languages - Language identifiers this executor handles\n * @property {function(string, ExecutionContext, ExecuteOptions=): Promise<ExecutionResult>} execute - Execute code\n * @property {function(string, ExecutionContext, ExecuteOptions=): AsyncGenerator<StreamEvent>} [executeStream] - Execute with streaming\n */\n\n/**\n * @typedef {Object} ExecutorConfig\n * @property {string[]} languages - Language identifiers to register\n */\n\n/**\n * Base class for executors (optional, executors can also be plain objects)\n * @abstract\n */\nexport class BaseExecutor {\n /** @type {readonly string[]} */\n languages = [];\n\n /**\n * Execute code\n * @param {string} code - Code to execute\n * @param {ExecutionContext} context - Execution context\n * @param {ExecuteOptions} [options] - Execution options\n * @returns {Promise<ExecutionResult>}\n * @abstract\n */\n async execute(code, context, options = {}) {\n throw new Error('execute() must be implemented by subclass');\n }\n\n /**\n * Execute code with streaming output\n * Default implementation wraps execute() result\n *\n * @param {string} code - Code to execute\n * @param {ExecutionContext} context - Execution context\n * @param {ExecuteOptions} [options] - Execution options\n * @returns {AsyncGenerator<StreamEvent>}\n */\n async *executeStream(code, context, options = {}) {\n const execId = options.execId || `exec-${Date.now()}`;\n const timestamp = new Date().toISOString();\n\n // Start event\n yield /** @type {import('../types/streaming.js').StartEvent} */ ({\n type: 'start',\n execId,\n timestamp,\n });\n\n try {\n // Execute\n const result = await this.execute(code, context, options);\n\n // Stream stdout\n if (result.stdout) {\n yield /** @type {import('../types/streaming.js').StdoutEvent} */ ({\n type: 'stdout',\n content: result.stdout,\n accumulated: result.stdout,\n });\n }\n\n // Stream stderr\n if (result.stderr) {\n yield /** @type {import('../types/streaming.js').StderrEvent} */ ({\n type: 'stderr',\n content: result.stderr,\n accumulated: result.stderr,\n });\n }\n\n // Stream display data\n for (const display of result.displayData) {\n yield /** @type {import('../types/streaming.js').DisplayEvent} */ ({\n type: 'display',\n data: display.data,\n metadata: display.metadata,\n });\n }\n\n // Stream assets\n for (const asset of result.assets) {\n yield /** @type {import('../types/streaming.js').AssetEvent} */ ({\n type: 'asset',\n path: asset.path,\n url: asset.url,\n mimeType: asset.mimeType,\n assetType: asset.assetType,\n });\n }\n\n // Result event\n yield /** @type {import('../types/streaming.js').ResultEvent} */ ({\n type: 'result',\n result,\n });\n } catch (error) {\n // Error event\n yield /** @type {import('../types/streaming.js').ErrorEvent} */ ({\n type: 'error',\n error: {\n type: error instanceof Error ? error.name : 'Error',\n message: error instanceof Error ? error.message : String(error),\n traceback: error instanceof Error && error.stack ? error.stack.split('\\n') : undefined,\n },\n });\n }\n\n // Done event\n yield /** @type {import('../types/streaming.js').DoneEvent} */ ({\n type: 'done',\n });\n }\n\n /**\n * Check if this executor supports a language\n * @param {string} language\n * @returns {boolean}\n */\n supports(language) {\n return this.languages.includes(language.toLowerCase());\n }\n}\n\nexport {};\n","/**\n * Persistence Transform\n *\n * Transforms const/let declarations to var for persistence across executions.\n * In a REPL, we want variables to persist between cells. const/let are\n * block-scoped and would be lost; var attaches to the global scope.\n *\n * @module transform/persistence\n */\n\n/**\n * Transform const/let declarations to var for persistence.\n *\n * @param {string} code - Source code\n * @returns {string} Transformed code\n *\n * @example\n * transformForPersistence('const x = 1; let y = 2;')\n * // Returns: 'var x = 1; var y = 2;'\n */\nexport function transformForPersistence(code) {\n // Use a state machine approach to avoid transforming inside strings/comments\n let result = '';\n let i = 0;\n const len = code.length;\n\n while (i < len) {\n // Check for single-line comment\n if (code[i] === '/' && code[i + 1] === '/') {\n const start = i;\n i += 2;\n while (i < len && code[i] !== '\\n') i++;\n result += code.slice(start, i);\n continue;\n }\n\n // Check for multi-line comment\n if (code[i] === '/' && code[i + 1] === '*') {\n const start = i;\n i += 2;\n while (i < len && !(code[i] === '*' && code[i + 1] === '/')) i++;\n i += 2;\n result += code.slice(start, i);\n continue;\n }\n\n // Check for template literal\n if (code[i] === '`') {\n const start = i;\n i++;\n while (i < len) {\n if (code[i] === '\\\\') {\n i += 2;\n continue;\n }\n if (code[i] === '`') {\n i++;\n break;\n }\n // Handle ${...} - need to track nested braces\n if (code[i] === '$' && code[i + 1] === '{') {\n i += 2;\n let braceDepth = 1;\n while (i < len && braceDepth > 0) {\n if (code[i] === '{') braceDepth++;\n else if (code[i] === '}') braceDepth--;\n i++;\n }\n continue;\n }\n i++;\n }\n result += code.slice(start, i);\n continue;\n }\n\n // Check for string (single or double quote)\n if (code[i] === '\"' || code[i] === \"'\") {\n const quote = code[i];\n const start = i;\n i++;\n while (i < len) {\n if (code[i] === '\\\\') {\n i += 2;\n continue;\n }\n if (code[i] === quote) {\n i++;\n break;\n }\n i++;\n }\n result += code.slice(start, i);\n continue;\n }\n\n // Check for regex (simple heuristic)\n if (code[i] === '/' && i > 0) {\n const prev = code[i - 1];\n // Regex can follow: ( = : [ ! & | ? { } ; , \\n\n if ('(=:[!&|?{};,\\n'.includes(prev) || /\\s/.test(prev)) {\n const start = i;\n i++;\n while (i < len) {\n if (code[i] === '\\\\') {\n i += 2;\n continue;\n }\n if (code[i] === '/') {\n i++;\n // Skip flags\n while (i < len && /[gimsuy]/.test(code[i])) i++;\n break;\n }\n if (code[i] === '\\n') break; // Invalid regex\n i++;\n }\n result += code.slice(start, i);\n continue;\n }\n }\n\n // Check for const/let keywords\n if (isWordBoundary(code, i)) {\n if (code.slice(i, i + 5) === 'const' && isWordBoundary(code, i + 5)) {\n result += 'var';\n i += 5;\n continue;\n }\n if (code.slice(i, i + 3) === 'let' && isWordBoundary(code, i + 3)) {\n result += 'var';\n i += 3;\n continue;\n }\n }\n\n result += code[i];\n i++;\n }\n\n return result;\n}\n\n/**\n * Check if position is at a word boundary\n * @param {string} code\n * @param {number} pos\n * @returns {boolean}\n */\nfunction isWordBoundary(code, pos) {\n if (pos === 0) return true;\n if (pos >= code.length) return true;\n\n const before = code[pos - 1];\n const after = code[pos];\n\n const isWordChar = (c) => /[a-zA-Z0-9_$]/.test(c);\n\n // Boundary if previous char is not a word char\n if (pos > 0 && isWordChar(before)) return false;\n // Or if position is at end and next char is not word char\n if (pos < code.length && !isWordChar(after)) return true;\n\n return true;\n}\n\n/**\n * Check if position after keyword is a word boundary\n * @param {string} code\n * @param {number} pos - Position after the keyword\n * @returns {boolean}\n */\nfunction isWordBoundaryAfter(code, pos) {\n if (pos >= code.length) return true;\n return !/[a-zA-Z0-9_$]/.test(code[pos]);\n}\n","/**\n * Async Transform\n *\n * Wraps code to support top-level await.\n * @module transform/async\n */\n\n/**\n * Check if code contains top-level await\n * @param {string} code\n * @returns {boolean}\n */\nfunction hasTopLevelAwait(code) {\n // Simple check - look for await outside of async function/arrow\n // This is a heuristic; a proper check would need AST parsing\n\n // Remove strings, comments, and regex to avoid false positives\n const cleaned = code\n // Remove template literals (simple version)\n .replace(/`[^`]*`/g, '')\n // Remove strings\n .replace(/\"(?:[^\"\\\\]|\\\\.)*\"/g, '')\n .replace(/'(?:[^'\\\\]|\\\\.)*'/g, '')\n // Remove single-line comments\n .replace(/\\/\\/[^\\n]*/g, '')\n // Remove multi-line comments\n .replace(/\\/\\*[\\s\\S]*?\\*\\//g, '');\n\n // Track nesting depth of async contexts\n // This is simplified - real implementation would use AST\n let depth = 0;\n let i = 0;\n\n while (i < cleaned.length) {\n // Check for async function or async arrow\n if (cleaned.slice(i, i + 5) === 'async') {\n // Look ahead for function or arrow\n let j = i + 5;\n while (j < cleaned.length && /\\s/.test(cleaned[j])) j++;\n\n if (\n cleaned.slice(j, j + 8) === 'function' ||\n cleaned[j] === '('\n ) {\n // Found async context start\n depth++;\n }\n }\n\n // Track braces for context depth (simplified)\n if (cleaned[i] === '{') {\n // Already in async context, depth increases\n }\n if (cleaned[i] === '}') {\n // Could be end of async context\n if (depth > 0) depth--;\n }\n\n // Check for await at top level\n if (cleaned.slice(i, i + 5) === 'await') {\n const before = i > 0 ? cleaned[i - 1] : ' ';\n const after = i + 5 < cleaned.length ? cleaned[i + 5] : ' ';\n\n // Check it's a word boundary\n if (!/[a-zA-Z0-9_$]/.test(before) && !/[a-zA-Z0-9_$]/.test(after)) {\n // Found await - check if we're at top level\n // For simplicity, assume any await not deep in braces is top-level\n // A proper implementation would track async function scopes\n return true;\n }\n }\n\n i++;\n }\n\n return false;\n}\n\n/**\n * Wrap code for top-level await support\n *\n * Transforms code to run in an async IIFE that captures the last expression.\n *\n * @param {string} code - Source code\n * @returns {string} Wrapped code\n */\nexport function wrapForAsync(code) {\n const needsAsync = hasTopLevelAwait(code);\n\n // We always wrap to capture the return value\n // The wrapper captures the last expression value\n\n if (needsAsync) {\n return `(async () => {\n${code}\n})()`;\n }\n\n return `(() => {\n${code}\n})()`;\n}\n\n/**\n * Wrap code and capture the last expression value\n *\n * @param {string} code - Source code\n * @returns {string} Wrapped code that returns last expression\n */\nexport function wrapWithLastExpression(code) {\n const needsAsync = hasTopLevelAwait(code);\n\n // Find the last expression and make it a return value\n // This is tricky without AST - we use eval trick instead\n const wrapped = `\n;(${needsAsync ? 'async ' : ''}function() {\n let __result__;\n try {\n __result__ = eval(${JSON.stringify(code)});\n } catch (e) {\n if (e instanceof SyntaxError) {\n // Code might be statements, not expression\n eval(${JSON.stringify(code)});\n __result__ = undefined;\n } else {\n throw e;\n }\n }\n return __result__;\n})()`;\n\n return wrapped.trim();\n}\n","/**\n * JavaScript Executor\n *\n * Executes JavaScript code in an execution context.\n * Handles variable persistence, async/await, and console output.\n *\n * @module execute/javascript\n */\n\nimport { BaseExecutor } from './interface.js';\nimport { transformForPersistence } from '../transform/persistence.js';\nimport { wrapWithLastExpression } from '../transform/async.js';\nimport { extractDeclaredVariables } from '../transform/extract.js';\n\n/**\n * @typedef {import('../session/context/interface.js').ExecutionContext} ExecutionContext\n * @typedef {import('../types/execution.js').ExecuteOptions} ExecuteOptions\n * @typedef {import('../types/execution.js').ExecutionResult} ExecutionResult\n * @typedef {import('../types/execution.js').ExecutionError} ExecutionError\n * @typedef {import('../types/execution.js').DisplayData} DisplayData\n */\n\n/**\n * Format a value for display as a string\n * @param {*} value\n * @param {number} [maxLength=1000]\n * @returns {string | undefined}\n */\nfunction formatValue(value, maxLength = 1000) {\n if (value === undefined) return undefined;\n if (value === null) return 'null';\n\n if (typeof value === 'function') {\n return `[Function: ${value.name || 'anonymous'}]`;\n }\n\n if (typeof value === 'symbol') {\n return value.toString();\n }\n\n if (typeof value === 'object') {\n try {\n const json = JSON.stringify(value, null, 2);\n if (json.length > maxLength) {\n return json.slice(0, maxLength) + '...';\n }\n return json;\n } catch {\n return String(value);\n }\n }\n\n const str = String(value);\n if (str.length > maxLength) {\n return str.slice(0, maxLength) + '...';\n }\n return str;\n}\n\n/**\n * JavaScript executor\n */\nexport class JavaScriptExecutor extends BaseExecutor {\n /** @type {readonly string[]} */\n languages = ['javascript', 'js', 'ecmascript', 'es'];\n\n /**\n * Execute JavaScript code\n * @param {string} code - Code to execute\n * @param {ExecutionContext} context - Execution context\n * @param {ExecuteOptions} [options] - Execution options\n * @returns {Promise<ExecutionResult>}\n */\n async execute(code, context, options = {}) {\n const startTime = performance.now();\n\n // Extract and track declared variables\n const declaredVars = extractDeclaredVariables(code);\n for (const varName of declaredVars) {\n context.trackVariable(varName);\n }\n\n // Transform code for persistence (const/let → var)\n const transformed = transformForPersistence(code);\n\n // Wrap to capture last expression value and support async\n const wrapped = wrapWithLastExpression(transformed);\n\n try {\n // Execute in context (pass execId for input() support)\n const rawResult = await context.execute(wrapped, { execId: options.execId });\n const duration = performance.now() - startTime;\n\n // Format result\n return this.#formatResult(rawResult, context, duration, options);\n } catch (error) {\n const duration = performance.now() - startTime;\n\n return {\n success: false,\n stdout: '',\n stderr: error instanceof Error ? `${error.name}: ${error.message}` : String(error),\n error: this.#formatError(error),\n displayData: [],\n assets: [],\n executionCount: 0,\n duration,\n };\n }\n }\n\n /**\n * Format raw execution result to MRP ExecutionResult\n * @param {import('../session/context/interface.js').RawExecutionResult} raw\n * @param {ExecutionContext} context\n * @param {number} duration\n * @param {ExecuteOptions} options\n * @returns {ExecutionResult}\n */\n #formatResult(raw, context, duration, options) {\n // Separate logs into stdout/stderr\n const stdout = raw.logs\n .filter((log) => log.type === 'log' || log.type === 'info')\n .map((log) => log.args.map((arg) => formatValue(arg) ?? '').join(' '))\n .join('\\n');\n\n const stderr = raw.logs\n .filter((log) => log.type === 'error' || log.type === 'warn')\n .map((log) => {\n const prefix = log.type === 'error' ? 'Error: ' : 'Warning: ';\n return prefix + log.args.map((arg) => formatValue(arg) ?? '').join(' ');\n })\n .join('\\n');\n\n // Format error if present\n /** @type {ExecutionError | undefined} */\n let error;\n if (raw.error) {\n error = this.#formatError(raw.error);\n }\n\n // Get display data from context\n /** @type {DisplayData[]} */\n const displayData = 'getDisplayQueue' in context ? context.getDisplayQueue() : [];\n\n return {\n success: !raw.error,\n stdout,\n stderr,\n result: raw.result,\n resultString: formatValue(raw.result),\n error,\n displayData,\n assets: [],\n executionCount: 0, // Will be set by session\n duration,\n };\n }\n\n /**\n * Format an error\n * @param {*} error\n * @returns {ExecutionError}\n */\n #formatError(error) {\n if (error instanceof Error) {\n /** @type {ExecutionError} */\n const formatted = {\n type: error.name,\n message: error.message,\n traceback: error.stack?.split('\\n'),\n };\n\n // Try to extract line/column from stack\n const lineMatch = error.stack?.match(/:(\\d+):(\\d+)/);\n if (lineMatch) {\n formatted.line = parseInt(lineMatch[1], 10);\n formatted.column = parseInt(lineMatch[2], 10);\n }\n\n return formatted;\n }\n\n return {\n type: 'Error',\n message: String(error),\n };\n }\n}\n\n/**\n * Create a JavaScript executor\n * @returns {JavaScriptExecutor}\n */\nexport function createJavaScriptExecutor() {\n return new JavaScriptExecutor();\n}\n","/**\n * Code Parsing Utilities\n *\n * Utilities for parsing JavaScript code to extract identifiers,\n * determine completion context, and find symbol boundaries.\n *\n * @module lsp/parse\n */\n\n/**\n * @typedef {Object} IdentifierInfo\n * @property {string} name - The identifier name\n * @property {string} full - Full path (e.g., \"obj.prop\" or \"arr[0]\")\n * @property {number} start - Start position in code\n * @property {number} end - End position in code\n */\n\n/**\n * @typedef {'member' | 'global' | 'bracket' | 'string' | 'comment' | 'none'} CompletionContextType\n */\n\n/**\n * @typedef {Object} CompletionContext\n * @property {CompletionContextType} type - Context type\n * @property {string} prefix - What user has typed\n * @property {string} [object] - Object path for member access\n * @property {number} start - Start of completion region\n * @property {number} end - End of completion region\n */\n\n// Characters that can be part of an identifier\nconst ID_START = /[$_a-zA-Z]/;\nconst ID_CONTINUE = /[$_a-zA-Z0-9]/;\n\n// JavaScript keywords\nconst KEYWORDS = new Set([\n 'await', 'break', 'case', 'catch', 'class', 'const', 'continue',\n 'debugger', 'default', 'delete', 'do', 'else', 'enum', 'export',\n 'extends', 'false', 'finally', 'for', 'function', 'if', 'import',\n 'in', 'instanceof', 'let', 'new', 'null', 'return', 'static',\n 'super', 'switch', 'this', 'throw', 'true', 'try', 'typeof',\n 'undefined', 'var', 'void', 'while', 'with', 'yield',\n // Future reserved\n 'implements', 'interface', 'package', 'private', 'protected', 'public',\n]);\n\n// Common globals to suggest\nconst COMMON_GLOBALS = [\n 'Array', 'Boolean', 'Date', 'Error', 'Function', 'JSON', 'Map',\n 'Math', 'Number', 'Object', 'Promise', 'Proxy', 'Reflect', 'RegExp',\n 'Set', 'String', 'Symbol', 'WeakMap', 'WeakSet',\n 'console', 'fetch', 'setTimeout', 'setInterval', 'clearTimeout',\n 'clearInterval', 'parseInt', 'parseFloat', 'isNaN', 'isFinite',\n 'encodeURI', 'decodeURI', 'encodeURIComponent', 'decodeURIComponent',\n];\n\n/**\n * Check if a character is an identifier start\n * @param {string} char\n * @returns {boolean}\n */\nexport function isIdentifierStart(char) {\n return ID_START.test(char);\n}\n\n/**\n * Check if a character is an identifier continuation\n * @param {string} char\n * @returns {boolean}\n */\nexport function isIdentifierPart(char) {\n return ID_CONTINUE.test(char);\n}\n\n/**\n * Check if a string is a JavaScript keyword\n * @param {string} str\n * @returns {boolean}\n */\nexport function isKeyword(str) {\n return KEYWORDS.has(str);\n}\n\n/**\n * Get all JavaScript keywords\n * @returns {string[]}\n */\nexport function getKeywords() {\n return Array.from(KEYWORDS);\n}\n\n/**\n * Get common global names\n * @returns {string[]}\n */\nexport function getCommonGlobals() {\n return COMMON_GLOBALS;\n}\n\n/**\n * Find the identifier at a given position in code\n * @param {string} code\n * @param {number} cursor - Cursor position (0-indexed)\n * @returns {IdentifierInfo | null}\n */\nexport function parseIdentifierAtPosition(code, cursor) {\n if (!code || cursor < 0 || cursor > code.length) {\n return null;\n }\n\n // Find the start of the identifier chain (handles obj.prop.sub)\n let start = cursor;\n let parenDepth = 0;\n let bracketDepth = 0;\n\n // Walk backwards to find the start\n while (start > 0) {\n const char = code[start - 1];\n\n // Handle brackets for array access\n if (char === ']') {\n bracketDepth++;\n start--;\n continue;\n }\n if (char === '[') {\n if (bracketDepth > 0) {\n bracketDepth--;\n start--;\n continue;\n }\n break;\n }\n\n // Skip over bracket contents\n if (bracketDepth > 0) {\n start--;\n continue;\n }\n\n // Handle dots for member access\n if (char === '.') {\n start--;\n continue;\n }\n\n // Handle identifier characters\n if (isIdentifierPart(char)) {\n start--;\n continue;\n }\n\n // Handle closing paren (for function calls like foo().bar)\n if (char === ')') {\n parenDepth++;\n start--;\n continue;\n }\n if (char === '(') {\n if (parenDepth > 0) {\n parenDepth--;\n start--;\n continue;\n }\n break;\n }\n\n // Skip over paren contents\n if (parenDepth > 0) {\n start--;\n continue;\n }\n\n // Stop at any other character\n break;\n }\n\n // Find the end of the identifier\n let end = cursor;\n while (end < code.length && isIdentifierPart(code[end])) {\n end++;\n }\n\n if (start === end) {\n return null;\n }\n\n const full = code.slice(start, end);\n\n // Extract just the last identifier name\n const lastDot = full.lastIndexOf('.');\n const name = lastDot >= 0 ? full.slice(lastDot + 1) : full;\n\n return {\n name,\n full,\n start,\n end,\n };\n}\n\n/**\n * Determine the completion context at cursor position\n * @param {string} code\n * @param {number} cursor\n * @returns {CompletionContext}\n */\nexport function parseCompletionContext(code, cursor) {\n // Default result\n const defaultResult = {\n type: /** @type {CompletionContextType} */ ('none'),\n prefix: '',\n start: cursor,\n end: cursor,\n };\n\n if (!code || cursor < 0 || cursor > code.length) {\n return defaultResult;\n }\n\n // Check if we're in a string or comment\n const contextType = getStringOrCommentContext(code, cursor);\n if (contextType === 'string' || contextType === 'comment') {\n return { type: contextType, prefix: '', start: cursor, end: cursor };\n }\n\n // Find what's immediately before the cursor\n let pos = cursor - 1;\n\n // Skip whitespace\n while (pos >= 0 && /\\s/.test(code[pos])) {\n pos--;\n }\n\n if (pos < 0) {\n return { type: 'global', prefix: '', start: cursor, end: cursor };\n }\n\n // Check for member access (dot notation)\n if (code[pos] === '.') {\n // Find the object before the dot\n const objectEnd = pos;\n const objectInfo = parseIdentifierAtPosition(code, objectEnd);\n\n if (objectInfo) {\n return {\n type: 'member',\n prefix: '',\n object: objectInfo.full,\n start: cursor,\n end: cursor,\n };\n }\n\n return { type: 'member', prefix: '', object: '', start: cursor, end: cursor };\n }\n\n // Check if we're typing an identifier\n if (isIdentifierPart(code[pos])) {\n // Walk back to find the start\n let start = pos;\n while (start > 0 && isIdentifierPart(code[start - 1])) {\n start--;\n }\n\n const prefix = code.slice(start, cursor);\n\n // Check what's before this identifier\n let beforeStart = start - 1;\n while (beforeStart >= 0 && /\\s/.test(code[beforeStart])) {\n beforeStart--;\n }\n\n if (beforeStart >= 0 && code[beforeStart] === '.') {\n // Member access with partial identifier\n const objectEnd = beforeStart;\n const objectInfo = parseIdentifierAtPosition(code, objectEnd);\n\n return {\n type: 'member',\n prefix,\n object: objectInfo?.full ?? '',\n start,\n end: cursor,\n };\n }\n\n // Global identifier\n return {\n type: 'global',\n prefix,\n start,\n end: cursor,\n };\n }\n\n // Check for bracket access\n if (code[pos] === '[') {\n // Find the object before the bracket\n const objectEnd = pos;\n const objectInfo = parseIdentifierAtPosition(code, objectEnd);\n\n if (objectInfo) {\n return {\n type: 'bracket',\n prefix: '',\n object: objectInfo.full,\n start: cursor,\n end: cursor,\n };\n }\n }\n\n return { type: 'global', prefix: '', start: cursor, end: cursor };\n}\n\n/**\n * Determine if cursor is inside a string or comment\n * @param {string} code\n * @param {number} cursor\n * @returns {'string' | 'comment' | null}\n */\nexport function getStringOrCommentContext(code, cursor) {\n let inSingleQuote = false;\n let inDoubleQuote = false;\n let inTemplate = false;\n let inLineComment = false;\n let inBlockComment = false;\n\n for (let i = 0; i < cursor && i < code.length; i++) {\n const char = code[i];\n const next = code[i + 1];\n const prev = code[i - 1];\n\n // Skip escaped characters in strings\n if ((inSingleQuote || inDoubleQuote || inTemplate) && prev === '\\\\') {\n continue;\n }\n\n // Line comment\n if (!inSingleQuote && !inDoubleQuote && !inTemplate && !inBlockComment) {\n if (char === '/' && next === '/') {\n inLineComment = true;\n i++; // Skip next char\n continue;\n }\n }\n\n // Block comment\n if (!inSingleQuote && !inDoubleQuote && !inTemplate && !inLineComment) {\n if (char === '/' && next === '*') {\n inBlockComment = true;\n i++;\n continue;\n }\n if (inBlockComment && char === '*' && next === '/') {\n inBlockComment = false;\n i++;\n continue;\n }\n }\n\n // End line comment at newline\n if (inLineComment && char === '\\n') {\n inLineComment = false;\n continue;\n }\n\n // Strings\n if (!inLineComment && !inBlockComment) {\n if (char === \"'\" && !inDoubleQuote && !inTemplate) {\n inSingleQuote = !inSingleQuote;\n continue;\n }\n if (char === '\"' && !inSingleQuote && !inTemplate) {\n inDoubleQuote = !inDoubleQuote;\n continue;\n }\n if (char === '`' && !inSingleQuote && !inDoubleQuote) {\n inTemplate = !inTemplate;\n continue;\n }\n }\n }\n\n if (inSingleQuote || inDoubleQuote || inTemplate) {\n return 'string';\n }\n if (inLineComment || inBlockComment) {\n return 'comment';\n }\n return null;\n}\n\n/**\n * Extract the word at cursor position (simpler than full identifier)\n * @param {string} code\n * @param {number} cursor\n * @returns {{word: string, start: number, end: number}}\n */\nexport function getWordAtCursor(code, cursor) {\n let start = cursor;\n let end = cursor;\n\n // Walk backwards\n while (start > 0 && isIdentifierPart(code[start - 1])) {\n start--;\n }\n\n // Walk forwards\n while (end < code.length && isIdentifierPart(code[end])) {\n end++;\n }\n\n return {\n word: code.slice(start, end),\n start,\n end,\n };\n}\n\n/**\n * Split an object path into parts\n * e.g., \"obj.prop[0].name\" → [\"obj\", \"prop\", \"0\", \"name\"]\n * @param {string} path\n * @returns {string[]}\n */\nexport function splitObjectPath(path) {\n const parts = [];\n let current = '';\n let inBracket = false;\n\n for (const char of path) {\n if (char === '.' && !inBracket) {\n if (current) parts.push(current);\n current = '';\n } else if (char === '[') {\n if (current) parts.push(current);\n current = '';\n inBracket = true;\n } else if (char === ']') {\n if (current) parts.push(current);\n current = '';\n inBracket = false;\n } else if (char === '\"' || char === \"'\") {\n // Skip quotes in bracket notation\n continue;\n } else {\n current += char;\n }\n }\n\n if (current) parts.push(current);\n return parts;\n}\n","/**\n * Value Formatting Utilities\n *\n * Utilities for formatting JavaScript values for display in\n * completions, hover, and variable inspection.\n *\n * @module lsp/format\n */\n\n/**\n * Format a value for display as a string\n * @param {*} value\n * @param {number} [maxLength=1000]\n * @returns {string | undefined}\n */\nexport function formatValue(value, maxLength = 1000) {\n if (value === undefined) return undefined;\n if (value === null) return 'null';\n\n if (typeof value === 'function') {\n const name = value.name || 'anonymous';\n return `[Function: ${name}]`;\n }\n\n if (typeof value === 'symbol') {\n return value.toString();\n }\n\n if (value instanceof Error) {\n return `${value.name}: ${value.message}`;\n }\n\n if (value instanceof RegExp) {\n return value.toString();\n }\n\n if (value instanceof Date) {\n return value.toISOString();\n }\n\n if (value instanceof Map) {\n const preview = Array.from(value.entries())\n .slice(0, 5)\n .map(([k, v]) => `${formatValueShort(k)} => ${formatValueShort(v)}`)\n .join(', ');\n const more = value.size > 5 ? `, ... (${value.size} total)` : '';\n return `Map(${value.size}) {${preview}${more}}`;\n }\n\n if (value instanceof Set) {\n const preview = Array.from(value)\n .slice(0, 5)\n .map(formatValueShort)\n .join(', ');\n const more = value.size > 5 ? `, ... (${value.size} total)` : '';\n return `Set(${value.size}) {${preview}${more}}`;\n }\n\n if (Array.isArray(value)) {\n const preview = value.slice(0, 5).map(formatValueShort).join(', ');\n const more = value.length > 5 ? `, ... (${value.length} total)` : '';\n return `[${preview}${more}]`;\n }\n\n if (typeof value === 'object') {\n try {\n const json = JSON.stringify(value, null, 2);\n if (json.length > maxLength) {\n return json.slice(0, maxLength) + '...';\n }\n return json;\n } catch {\n return String(value);\n }\n }\n\n const str = String(value);\n if (str.length > maxLength) {\n return str.slice(0, maxLength) + '...';\n }\n return str;\n}\n\n/**\n * Format a value for short display (single line, truncated)\n * @param {*} value\n * @param {number} [maxLength=50]\n * @returns {string}\n */\nexport function formatValueShort(value, maxLength = 50) {\n if (value === undefined) return 'undefined';\n if (value === null) return 'null';\n\n if (typeof value === 'string') {\n const truncated = value.length > maxLength - 2\n ? value.slice(0, maxLength - 5) + '...'\n : value;\n return JSON.stringify(truncated);\n }\n\n if (typeof value === 'number' || typeof value === 'boolean') {\n return String(value);\n }\n\n if (typeof value === 'function') {\n return `ƒ ${value.name || 'anonymous'}()`;\n }\n\n if (typeof value === 'symbol') {\n return value.toString();\n }\n\n if (Array.isArray(value)) {\n return `Array(${value.length})`;\n }\n\n if (value instanceof Date) {\n return value.toISOString();\n }\n\n if (value instanceof RegExp) {\n const str = value.toString();\n return str.length > maxLength ? str.slice(0, maxLength - 3) + '...' : str;\n }\n\n if (value instanceof Map) {\n return `Map(${value.size})`;\n }\n\n if (value instanceof Set) {\n return `Set(${value.size})`;\n }\n\n if (value instanceof Error) {\n return `${value.name}: ${value.message.slice(0, 30)}`;\n }\n\n if (typeof value === 'object') {\n const constructor = value.constructor?.name;\n if (constructor && constructor !== 'Object') {\n return constructor;\n }\n const keys = Object.keys(value);\n return `{${keys.slice(0, 3).join(', ')}${keys.length > 3 ? ', ...' : ''}}`;\n }\n\n return String(value).slice(0, maxLength);\n}\n\n/**\n * Get type name for a value\n * @param {*} value\n * @returns {string}\n */\nexport function getTypeName(value) {\n if (value === null) return 'null';\n if (value === undefined) return 'undefined';\n if (Array.isArray(value)) return 'Array';\n if (value instanceof Date) return 'Date';\n if (value instanceof RegExp) return 'RegExp';\n if (value instanceof Error) return value.constructor.name;\n if (value instanceof Map) return 'Map';\n if (value instanceof Set) return 'Set';\n if (value instanceof WeakMap) return 'WeakMap';\n if (value instanceof WeakSet) return 'WeakSet';\n if (value instanceof Promise) return 'Promise';\n if (value instanceof ArrayBuffer) return 'ArrayBuffer';\n\n // Typed arrays\n if (ArrayBuffer.isView(value)) {\n return value.constructor.name;\n }\n\n const type = typeof value;\n if (type === 'object') {\n const constructor = value.constructor;\n if (constructor && constructor.name !== 'Object') {\n return constructor.name;\n }\n return 'Object';\n }\n\n return type;\n}\n\n/**\n * Get the kind of a value for completion icons\n * @param {*} value\n * @returns {import('../types/completion.js').CompletionKind}\n */\nexport function getCompletionKind(value) {\n if (value === null || value === undefined) {\n return 'value';\n }\n\n if (typeof value === 'function') {\n // Check if it's a class (constructor)\n if (/^class\\s/.test(value.toString())) {\n return 'class';\n }\n return 'function';\n }\n\n if (typeof value === 'object') {\n if (Array.isArray(value)) return 'variable';\n if (value instanceof Map || value instanceof Set) return 'variable';\n return 'variable';\n }\n\n return 'value';\n}\n\n/**\n * Check if a value is expandable (has children)\n * @param {*} value\n * @returns {boolean}\n */\nexport function isExpandable(value) {\n if (value === null || value === undefined) return false;\n if (typeof value === 'object') return true;\n if (typeof value === 'function') return true;\n return false;\n}\n\n/**\n * Get function signature from a function\n * @param {Function} fn\n * @returns {string}\n */\nexport function getFunctionSignature(fn) {\n if (typeof fn !== 'function') return '';\n\n const str = fn.toString();\n\n // Handle arrow functions\n if (str.startsWith('(') || /^[a-zA-Z_$][a-zA-Z0-9_$]*\\s*=>/.test(str)) {\n const match = str.match(/^(\\([^)]*\\)|[a-zA-Z_$][a-zA-Z0-9_$]*)\\s*=>/);\n if (match) {\n const params = match[1].startsWith('(') ? match[1] : `(${match[1]})`;\n return `${params} => ...`;\n }\n }\n\n // Handle regular functions\n const funcMatch = str.match(/^(?:async\\s+)?function\\s*([^(]*)\\(([^)]*)\\)/);\n if (funcMatch) {\n const name = funcMatch[1].trim() || fn.name || 'anonymous';\n const params = funcMatch[2];\n return `function ${name}(${params})`;\n }\n\n // Handle method shorthand\n const methodMatch = str.match(/^(?:async\\s+)?([a-zA-Z_$][a-zA-Z0-9_$]*)\\s*\\(([^)]*)\\)/);\n if (methodMatch) {\n return `${methodMatch[1]}(${methodMatch[2]})`;\n }\n\n // Handle class\n if (str.startsWith('class')) {\n return `class ${fn.name || 'anonymous'}`;\n }\n\n // Fallback\n const name = fn.name || 'anonymous';\n const length = fn.length;\n const params = Array(length).fill('arg').map((a, i) => `${a}${i}`).join(', ');\n return `${name}(${params})`;\n}\n\n/**\n * Get source code for a function (if available)\n * @param {Function} fn\n * @returns {string | undefined}\n */\nexport function getFunctionSource(fn) {\n if (typeof fn !== 'function') return undefined;\n\n try {\n const source = fn.toString();\n // Check if it's native code\n if (source.includes('[native code]')) {\n return undefined;\n }\n return source;\n } catch {\n return undefined;\n }\n}\n\n/**\n * Get size description for a value\n * @param {*} value\n * @returns {string | undefined}\n */\nexport function getSizeDescription(value) {\n if (Array.isArray(value)) {\n return `${value.length} items`;\n }\n if (value instanceof Map || value instanceof Set) {\n return `${value.size} items`;\n }\n if (typeof value === 'string') {\n return `${value.length} chars`;\n }\n if (typeof value === 'object' && value !== null) {\n const keys = Object.keys(value);\n return `${keys.length} keys`;\n }\n return undefined;\n}\n","/**\n * Code Completion\n *\n * Provides runtime-aware code completions by introspecting live values\n * in the execution context.\n *\n * @module lsp/complete\n */\n\nimport {\n parseCompletionContext,\n splitObjectPath,\n isKeyword,\n getKeywords,\n getCommonGlobals,\n} from './parse.js';\n\nimport {\n formatValueShort,\n getTypeName,\n getCompletionKind,\n getFunctionSignature,\n} from './format.js';\n\n/**\n * @typedef {import('../session/context/interface.js').ExecutionContext} ExecutionContext\n * @typedef {import('../types/completion.js').CompletionResult} CompletionResult\n * @typedef {import('../types/completion.js').CompletionItem} CompletionItem\n * @typedef {import('../types/completion.js').CompleteOptions} CompleteOptions\n */\n\n/**\n * Get completions at cursor position\n *\n * @param {string} code - The code being edited\n * @param {number} cursor - Cursor position (0-indexed)\n * @param {ExecutionContext} context - Execution context for live values\n * @param {CompleteOptions} [options]\n * @returns {CompletionResult}\n */\nexport function getCompletions(code, cursor, context, options = {}) {\n const ctx = parseCompletionContext(code, cursor);\n\n // Don't complete inside strings or comments\n if (ctx.type === 'string' || ctx.type === 'comment') {\n return {\n matches: [],\n cursorStart: cursor,\n cursorEnd: cursor,\n source: 'runtime',\n };\n }\n\n /** @type {CompletionItem[]} */\n let matches = [];\n\n switch (ctx.type) {\n case 'member':\n matches = getMemberCompletions(ctx.object || '', ctx.prefix, context);\n break;\n\n case 'bracket':\n matches = getBracketCompletions(ctx.object || '', context);\n break;\n\n case 'global':\n default:\n matches = getGlobalCompletions(ctx.prefix, context);\n break;\n }\n\n // Filter by prefix\n if (ctx.prefix) {\n const lowerPrefix = ctx.prefix.toLowerCase();\n matches = matches.filter(item =>\n item.label.toLowerCase().startsWith(lowerPrefix)\n );\n }\n\n // Sort by priority and name\n matches.sort((a, b) => {\n const priorityDiff = (a.sortPriority ?? 50) - (b.sortPriority ?? 50);\n if (priorityDiff !== 0) return priorityDiff;\n return a.label.localeCompare(b.label);\n });\n\n return {\n matches,\n cursorStart: ctx.start,\n cursorEnd: ctx.end,\n source: 'runtime',\n };\n}\n\n/**\n * Get completions for member access (dot notation)\n * @param {string} objectPath\n * @param {string} prefix\n * @param {ExecutionContext} context\n * @returns {CompletionItem[]}\n */\nfunction getMemberCompletions(objectPath, prefix, context) {\n if (!objectPath) return [];\n\n // Resolve the object in context\n const value = resolveValue(objectPath, context);\n if (value === undefined && !objectPath.includes('.')) {\n // Check if it's a global\n const global = context.getGlobal();\n if (global && objectPath in global) {\n // @ts-ignore\n return getPropertiesOf(global[objectPath]);\n }\n }\n\n if (value === undefined || value === null) {\n return [];\n }\n\n return getPropertiesOf(value);\n}\n\n/**\n * Get completions for bracket access\n * @param {string} objectPath\n * @param {ExecutionContext} context\n * @returns {CompletionItem[]}\n */\nfunction getBracketCompletions(objectPath, context) {\n const value = resolveValue(objectPath, context);\n\n if (Array.isArray(value)) {\n // Suggest indices\n return value.slice(0, 20).map((_, i) => ({\n label: String(i),\n kind: /** @type {const} */ ('value'),\n detail: getTypeName(value[i]),\n valuePreview: formatValueShort(value[i]),\n sortPriority: 10,\n }));\n }\n\n if (value instanceof Map) {\n // Suggest keys\n return Array.from(value.keys()).slice(0, 20).map(key => ({\n label: String(key),\n insertText: typeof key === 'string' ? `\"${key}\"` : String(key),\n kind: /** @type {const} */ ('property'),\n detail: getTypeName(value.get(key)),\n valuePreview: formatValueShort(value.get(key)),\n sortPriority: 10,\n }));\n }\n\n if (typeof value === 'object' && value !== null) {\n // Suggest string keys\n return Object.keys(value).slice(0, 50).map(key => ({\n label: key,\n insertText: `\"${key}\"`,\n kind: /** @type {const} */ ('property'),\n detail: getTypeName(value[key]),\n valuePreview: formatValueShort(value[key]),\n sortPriority: 10,\n }));\n }\n\n return [];\n}\n\n/**\n * Get completions for global context\n * @param {string} prefix\n * @param {ExecutionContext} context\n * @returns {CompletionItem[]}\n */\nfunction getGlobalCompletions(prefix, context) {\n /** @type {CompletionItem[]} */\n const items = [];\n\n // 1. User-defined variables (highest priority)\n const userVars = context.getVariables();\n for (const [name, value] of Object.entries(userVars)) {\n items.push({\n label: name,\n kind: getCompletionKind(value),\n detail: getTypeName(value),\n valuePreview: formatValueShort(value),\n type: getTypeName(value),\n sortPriority: 10,\n });\n }\n\n // 2. Keywords\n for (const keyword of getKeywords()) {\n items.push({\n label: keyword,\n kind: 'keyword',\n sortPriority: 60,\n });\n }\n\n // 3. Common globals\n const global = context.getGlobal();\n for (const name of getCommonGlobals()) {\n if (name in userVars) continue; // Skip if user defined\n\n try {\n // @ts-ignore\n const value = global?.[name];\n if (value !== undefined) {\n items.push({\n label: name,\n kind: getCompletionKind(value),\n detail: getTypeName(value),\n type: getTypeName(value),\n sortPriority: 40,\n });\n }\n } catch {\n // Skip inaccessible\n }\n }\n\n // 4. Add some built-in globals that might be useful\n const builtinGlobals = ['globalThis', 'window', 'document', 'navigator', 'location'];\n for (const name of builtinGlobals) {\n if (name in userVars) continue;\n try {\n // @ts-ignore\n const value = global?.[name];\n if (value !== undefined) {\n items.push({\n label: name,\n kind: 'variable',\n detail: getTypeName(value),\n sortPriority: 50,\n });\n }\n } catch {\n // Skip inaccessible\n }\n }\n\n return items;\n}\n\n/**\n * Get all properties of an object as completion items\n * @param {*} value\n * @returns {CompletionItem[]}\n */\nfunction getPropertiesOf(value) {\n /** @type {CompletionItem[]} */\n const items = [];\n const seen = new Set();\n\n // Walk prototype chain\n let obj = value;\n let depth = 0;\n\n while (obj != null && depth < 5) {\n const names = Object.getOwnPropertyNames(obj);\n\n for (const name of names) {\n if (seen.has(name)) continue;\n if (name === 'constructor') continue; // Skip constructor\n seen.add(name);\n\n try {\n const descriptor = Object.getOwnPropertyDescriptor(obj, name);\n const propValue = descriptor?.get ? undefined : value[name];\n\n /** @type {CompletionItem} */\n const item = {\n label: name,\n kind: typeof propValue === 'function' ? 'method' : 'property',\n sortPriority: depth === 0 ? 20 : 30 + depth,\n };\n\n if (propValue !== undefined) {\n item.detail = getTypeName(propValue);\n item.type = getTypeName(propValue);\n\n if (typeof propValue === 'function') {\n item.detail = getFunctionSignature(propValue);\n } else {\n item.valuePreview = formatValueShort(propValue);\n }\n } else if (descriptor?.get) {\n item.detail = '(getter)';\n }\n\n items.push(item);\n } catch {\n // Skip inaccessible properties\n items.push({\n label: name,\n kind: 'property',\n detail: '(inaccessible)',\n sortPriority: 90,\n });\n }\n }\n\n obj = Object.getPrototypeOf(obj);\n depth++;\n }\n\n return items;\n}\n\n/**\n * Resolve a value from an object path in the context\n * @param {string} path\n * @param {ExecutionContext} context\n * @returns {*}\n */\nfunction resolveValue(path, context) {\n const parts = splitObjectPath(path);\n if (parts.length === 0) return undefined;\n\n // Start with user variables or global\n let value = context.getVariable(parts[0]);\n\n if (value === undefined) {\n // Try global\n const global = context.getGlobal();\n if (global && parts[0] in global) {\n // @ts-ignore\n value = global[parts[0]];\n }\n }\n\n if (value === undefined) return undefined;\n\n // Navigate path\n for (let i = 1; i < parts.length; i++) {\n if (value === null || value === undefined) return undefined;\n\n try {\n if (value instanceof Map) {\n value = value.get(parts[i]);\n } else {\n // @ts-ignore\n value = value[parts[i]];\n }\n } catch {\n return undefined;\n }\n }\n\n return value;\n}\n","/**\n * Hover Information\n *\n * Provides hover information (type and value preview) for symbols\n * by introspecting live values in the execution context.\n *\n * @module lsp/hover\n */\n\nimport { parseIdentifierAtPosition, splitObjectPath } from './parse.js';\nimport { formatValueShort, getTypeName, getFunctionSignature } from './format.js';\n\n/**\n * @typedef {import('../session/context/interface.js').ExecutionContext} ExecutionContext\n * @typedef {import('../types/inspection.js').HoverResult} HoverResult\n */\n\n/**\n * Get hover information at cursor position\n *\n * @param {string} code - The code being edited\n * @param {number} cursor - Cursor position (0-indexed)\n * @param {ExecutionContext} context - Execution context for live values\n * @returns {HoverResult}\n */\nexport function getHoverInfo(code, cursor, context) {\n // Find identifier at cursor\n const identifier = parseIdentifierAtPosition(code, cursor);\n\n if (!identifier) {\n return { found: false };\n }\n\n // Resolve the value\n const value = resolveValue(identifier.full, context);\n\n // Check if it exists\n const exists = value !== undefined || hasVariable(identifier.full, context);\n\n if (!exists) {\n return { found: false };\n }\n\n /** @type {HoverResult} */\n const result = {\n found: true,\n name: identifier.full,\n type: getTypeName(value),\n };\n\n // Add signature for functions\n if (typeof value === 'function') {\n result.signature = getFunctionSignature(value);\n } else {\n // Add value preview for non-functions\n result.value = formatValueShort(value, 100);\n }\n\n return result;\n}\n\n/**\n * Resolve a value from an object path in the context\n * @param {string} path\n * @param {ExecutionContext} context\n * @returns {*}\n */\nfunction resolveValue(path, context) {\n const parts = splitObjectPath(path);\n if (parts.length === 0) return undefined;\n\n // Start with user variables or global\n let value = context.getVariable(parts[0]);\n\n if (value === undefined) {\n // Try global\n const global = context.getGlobal();\n if (global && parts[0] in global) {\n // @ts-ignore\n value = global[parts[0]];\n }\n }\n\n if (value === undefined) return undefined;\n\n // Navigate path\n for (let i = 1; i < parts.length; i++) {\n if (value === null || value === undefined) return undefined;\n\n try {\n if (value instanceof Map) {\n value = value.get(parts[i]);\n } else {\n // @ts-ignore\n value = value[parts[i]];\n }\n } catch {\n return undefined;\n }\n }\n\n return value;\n}\n\n/**\n * Check if a variable exists in context\n * @param {string} path\n * @param {ExecutionContext} context\n * @returns {boolean}\n */\nfunction hasVariable(path, context) {\n const parts = splitObjectPath(path);\n if (parts.length === 0) return false;\n\n if (context.hasVariable(parts[0])) {\n return true;\n }\n\n // Check global\n const global = context.getGlobal();\n if (global && parts[0] in global) {\n return true;\n }\n\n return false;\n}\n","/**\n * Symbol Inspection\n *\n * Provides detailed inspection information for symbols including\n * signature, documentation, source code, and children.\n *\n * @module lsp/inspect\n */\n\nimport { parseIdentifierAtPosition, splitObjectPath } from './parse.js';\nimport {\n formatValue,\n formatValueShort,\n getTypeName,\n getCompletionKind,\n getFunctionSignature,\n getFunctionSource,\n isExpandable,\n getSizeDescription,\n} from './format.js';\n\n/**\n * @typedef {import('../session/context/interface.js').ExecutionContext} ExecutionContext\n * @typedef {import('../types/inspection.js').InspectOptions} InspectOptions\n * @typedef {import('../types/inspection.js').InspectResult} InspectResult\n * @typedef {import('../types/variables.js').VariableInfo} VariableInfo\n */\n\n/**\n * Get detailed inspection information at cursor position\n *\n * @param {string} code - The code being edited\n * @param {number} cursor - Cursor position (0-indexed)\n * @param {ExecutionContext} context - Execution context for live values\n * @param {InspectOptions} [options]\n * @returns {InspectResult}\n */\nexport function getInspectInfo(code, cursor, context, options = {}) {\n const detail = options.detail ?? 0;\n\n // Find identifier at cursor\n const identifier = parseIdentifierAtPosition(code, cursor);\n\n if (!identifier) {\n return { found: false, source: 'runtime' };\n }\n\n // Resolve the value\n const value = resolveValue(identifier.full, context);\n\n // Check if it exists\n const exists = value !== undefined || hasVariable(identifier.full, context);\n\n if (!exists) {\n return { found: false, source: 'runtime' };\n }\n\n /** @type {InspectResult} */\n const result = {\n found: true,\n source: 'runtime',\n name: identifier.name,\n kind: getInspectKind(value),\n type: getTypeName(value),\n value: formatValueShort(value, 200),\n };\n\n // Add function-specific info\n if (typeof value === 'function') {\n result.signature = getFunctionSignature(value);\n\n // Detail level 1: add docstring\n if (detail >= 1) {\n result.docstring = getDocstring(value);\n }\n\n // Detail level 2: add source code\n if (detail >= 2) {\n result.sourceCode = getFunctionSource(value);\n }\n }\n\n // Add children for expandable values\n if (detail >= 1 && isExpandable(value)) {\n result.children = getChildren(value);\n }\n\n return result;\n}\n\n/**\n * Inspect a specific object path\n *\n * @param {string} path - Object path to inspect (e.g., \"obj.prop\")\n * @param {ExecutionContext} context\n * @param {InspectOptions} [options]\n * @returns {InspectResult}\n */\nexport function inspectPath(path, context, options = {}) {\n const detail = options.detail ?? 0;\n\n const value = resolveValue(path, context);\n const exists = value !== undefined || hasVariable(path, context);\n\n if (!exists) {\n return { found: false, source: 'runtime' };\n }\n\n const parts = splitObjectPath(path);\n const name = parts[parts.length - 1] || path;\n\n /** @type {InspectResult} */\n const result = {\n found: true,\n source: 'runtime',\n name,\n kind: getInspectKind(value),\n type: getTypeName(value),\n value: formatValueShort(value, 200),\n };\n\n if (typeof value === 'function') {\n result.signature = getFunctionSignature(value);\n\n if (detail >= 1) {\n result.docstring = getDocstring(value);\n }\n\n if (detail >= 2) {\n result.sourceCode = getFunctionSource(value);\n }\n }\n\n if (detail >= 1 && isExpandable(value)) {\n result.children = getChildren(value);\n }\n\n return result;\n}\n\n/**\n * Get kind string for inspection\n * @param {*} value\n * @returns {string}\n */\nfunction getInspectKind(value) {\n if (value === null) return 'null';\n if (value === undefined) return 'undefined';\n\n if (typeof value === 'function') {\n const str = value.toString();\n if (str.startsWith('class ')) return 'class';\n if (/^(async\\s+)?function\\s*\\*/.test(str)) return 'generator';\n if (str.includes('=>')) return 'arrow-function';\n return 'function';\n }\n\n if (Array.isArray(value)) return 'array';\n if (value instanceof Map) return 'map';\n if (value instanceof Set) return 'set';\n if (value instanceof Date) return 'date';\n if (value instanceof RegExp) return 'regexp';\n if (value instanceof Error) return 'error';\n if (value instanceof Promise) return 'promise';\n\n const type = typeof value;\n if (type === 'object') return 'object';\n\n return type;\n}\n\n/**\n * Get docstring for a function (if available)\n * @param {Function} fn\n * @returns {string | undefined}\n */\nfunction getDocstring(fn) {\n if (typeof fn !== 'function') return undefined;\n\n try {\n const source = fn.toString();\n\n // Try to find JSDoc-style comments\n // Look for /** ... */ before function declaration\n // This won't work for most runtime functions, but worth trying\n const jsdocMatch = source.match(/\\/\\*\\*([\\s\\S]*?)\\*\\//);\n if (jsdocMatch) {\n return jsdocMatch[1]\n .split('\\n')\n .map(line => line.replace(/^\\s*\\*\\s?/, '').trim())\n .filter(line => line && !line.startsWith('@'))\n .join('\\n')\n .trim();\n }\n\n // Check for built-in documentation (MDN-style)\n const builtinDocs = getBuiltinDocumentation(fn);\n if (builtinDocs) {\n return builtinDocs;\n }\n\n return undefined;\n } catch {\n return undefined;\n }\n}\n\n/**\n * Get documentation for built-in functions\n * @param {Function} fn\n * @returns {string | undefined}\n */\nfunction getBuiltinDocumentation(fn) {\n // Map of common built-in functions to their descriptions\n const docs = {\n // Array methods\n 'push': 'Adds elements to the end of an array and returns the new length.',\n 'pop': 'Removes the last element from an array and returns it.',\n 'shift': 'Removes the first element from an array and returns it.',\n 'unshift': 'Adds elements to the beginning of an array and returns the new length.',\n 'slice': 'Returns a shallow copy of a portion of an array.',\n 'splice': 'Changes the contents of an array by removing or replacing elements.',\n 'map': 'Creates a new array with the results of calling a function on every element.',\n 'filter': 'Creates a new array with all elements that pass a test.',\n 'reduce': 'Executes a reducer function on each element, resulting in a single value.',\n 'forEach': 'Executes a function once for each array element.',\n 'find': 'Returns the first element that satisfies a testing function.',\n 'findIndex': 'Returns the index of the first element that satisfies a testing function.',\n 'includes': 'Determines whether an array includes a certain value.',\n 'indexOf': 'Returns the first index at which a given element can be found.',\n 'join': 'Joins all elements of an array into a string.',\n 'sort': 'Sorts the elements of an array in place and returns the array.',\n 'reverse': 'Reverses the elements of an array in place.',\n 'concat': 'Merges two or more arrays into a new array.',\n 'flat': 'Creates a new array with all sub-array elements concatenated.',\n 'flatMap': 'Maps each element then flattens the result into a new array.',\n\n // String methods\n 'charAt': 'Returns the character at a specified index.',\n 'charCodeAt': 'Returns the Unicode value of the character at an index.',\n 'split': 'Splits a string into an array of substrings.',\n 'substring': 'Returns a portion of the string between two indices.',\n 'substr': 'Returns a portion of the string starting from an index.',\n 'toLowerCase': 'Returns the string converted to lowercase.',\n 'toUpperCase': 'Returns the string converted to uppercase.',\n 'trim': 'Removes whitespace from both ends of a string.',\n 'trimStart': 'Removes whitespace from the beginning of a string.',\n 'trimEnd': 'Removes whitespace from the end of a string.',\n 'replace': 'Returns a new string with some or all matches replaced.',\n 'replaceAll': 'Returns a new string with all matches replaced.',\n 'match': 'Retrieves the result of matching a string against a regex.',\n 'search': 'Searches for a match between a regex and the string.',\n 'startsWith': 'Determines whether a string begins with specified characters.',\n 'endsWith': 'Determines whether a string ends with specified characters.',\n 'padStart': 'Pads the string with another string until it reaches the given length.',\n 'padEnd': 'Pads the string with another string at the end.',\n 'repeat': 'Returns a new string with copies of the original string.',\n\n // Object methods\n 'hasOwnProperty': 'Returns a boolean indicating whether the object has the property.',\n 'toString': 'Returns a string representation of the object.',\n 'valueOf': 'Returns the primitive value of the object.',\n\n // Global functions\n 'parseInt': 'Parses a string argument and returns an integer.',\n 'parseFloat': 'Parses a string argument and returns a floating point number.',\n 'isNaN': 'Determines whether a value is NaN.',\n 'isFinite': 'Determines whether a value is a finite number.',\n 'encodeURI': 'Encodes a URI by replacing certain characters.',\n 'decodeURI': 'Decodes a URI previously created by encodeURI.',\n 'encodeURIComponent': 'Encodes a URI component by replacing certain characters.',\n 'decodeURIComponent': 'Decodes a URI component.',\n\n // JSON\n 'parse': 'Parses a JSON string and returns the JavaScript value.',\n 'stringify': 'Converts a JavaScript value to a JSON string.',\n\n // Math\n 'abs': 'Returns the absolute value of a number.',\n 'ceil': 'Rounds a number up to the next largest integer.',\n 'floor': 'Rounds a number down to the largest integer.',\n 'round': 'Rounds a number to the nearest integer.',\n 'max': 'Returns the largest of zero or more numbers.',\n 'min': 'Returns the smallest of zero or more numbers.',\n 'pow': 'Returns the base raised to the exponent power.',\n 'sqrt': 'Returns the square root of a number.',\n 'random': 'Returns a random number between 0 and 1.',\n 'sin': 'Returns the sine of a number.',\n 'cos': 'Returns the cosine of a number.',\n 'tan': 'Returns the tangent of a number.',\n 'log': 'Returns the natural logarithm of a number.',\n 'exp': 'Returns e raised to the power of a number.',\n\n // Console\n 'log': 'Outputs a message to the console.',\n 'error': 'Outputs an error message to the console.',\n 'warn': 'Outputs a warning message to the console.',\n 'info': 'Outputs an informational message to the console.',\n 'debug': 'Outputs a debug message to the console.',\n 'table': 'Displays tabular data as a table.',\n 'clear': 'Clears the console.',\n 'group': 'Creates a new inline group in the console.',\n 'groupEnd': 'Exits the current inline group in the console.',\n 'time': 'Starts a timer with a specified label.',\n 'timeEnd': 'Stops a timer and logs the elapsed time.',\n };\n\n const name = fn.name;\n return docs[name];\n}\n\n/**\n * Get children of an expandable value as VariableInfo[]\n * @param {*} value\n * @param {number} [maxChildren=100]\n * @returns {VariableInfo[]}\n */\nfunction getChildren(value, maxChildren = 100) {\n if (value === null || value === undefined) return [];\n\n /** @type {VariableInfo[]} */\n const children = [];\n\n if (Array.isArray(value)) {\n const items = value.slice(0, maxChildren);\n for (let i = 0; i < items.length; i++) {\n children.push(formatVariableInfo(String(i), items[i]));\n }\n } else if (value instanceof Map) {\n let count = 0;\n for (const [k, v] of value) {\n if (count >= maxChildren) break;\n children.push(formatVariableInfo(String(k), v));\n count++;\n }\n } else if (value instanceof Set) {\n let count = 0;\n for (const v of value) {\n if (count >= maxChildren) break;\n children.push(formatVariableInfo(String(count), v));\n count++;\n }\n } else if (typeof value === 'object') {\n const keys = Object.keys(value).slice(0, maxChildren);\n for (const key of keys) {\n try {\n children.push(formatVariableInfo(key, value[key]));\n } catch {\n children.push({\n name: key,\n type: 'unknown',\n value: '(inaccessible)',\n expandable: false,\n });\n }\n }\n }\n\n return children;\n}\n\n/**\n * Format a variable for display\n * @param {string} name\n * @param {*} value\n * @returns {VariableInfo}\n */\nfunction formatVariableInfo(name, value) {\n /** @type {VariableInfo} */\n const info = {\n name,\n type: getTypeName(value),\n value: formatValueShort(value, 100),\n expandable: isExpandable(value),\n };\n\n // Add size info\n const size = getSizeDescription(value);\n if (size) {\n info.size = size;\n }\n\n // Add length for arrays/strings\n if (Array.isArray(value)) {\n info.length = value.length;\n } else if (typeof value === 'string') {\n info.length = value.length;\n } else if (value instanceof Map || value instanceof Set) {\n info.length = value.size;\n }\n\n // Add keys preview for objects\n if (typeof value === 'object' && value !== null && !Array.isArray(value)) {\n if (!(value instanceof Map) && !(value instanceof Set)) {\n info.keys = Object.keys(value).slice(0, 10);\n }\n }\n\n return info;\n}\n\n/**\n * Resolve a value from an object path in the context\n * @param {string} path\n * @param {ExecutionContext} context\n * @returns {*}\n */\nfunction resolveValue(path, context) {\n const parts = splitObjectPath(path);\n if (parts.length === 0) return undefined;\n\n // Start with user variables or global\n let value = context.getVariable(parts[0]);\n\n if (value === undefined) {\n // Try global\n const global = context.getGlobal();\n if (global && parts[0] in global) {\n // @ts-ignore\n value = global[parts[0]];\n }\n }\n\n if (value === undefined) return undefined;\n\n // Navigate path\n for (let i = 1; i < parts.length; i++) {\n if (value === null || value === undefined) return undefined;\n\n try {\n if (value instanceof Map) {\n value = value.get(parts[i]);\n } else {\n // @ts-ignore\n value = value[parts[i]];\n }\n } catch {\n return undefined;\n }\n }\n\n return value;\n}\n\n/**\n * Check if a variable exists in context\n * @param {string} path\n * @param {ExecutionContext} context\n * @returns {boolean}\n */\nfunction hasVariable(path, context) {\n const parts = splitObjectPath(path);\n if (parts.length === 0) return false;\n\n if (context.hasVariable(parts[0])) {\n return true;\n }\n\n // Check global\n const global = context.getGlobal();\n if (global && parts[0] in global) {\n return true;\n }\n\n return false;\n}\n","/**\n * Variable Inspection\n *\n * Provides variable listing and detailed inspection for the\n * variables panel in notebook UIs.\n *\n * @module lsp/variables\n */\n\nimport { splitObjectPath } from './parse.js';\nimport {\n formatValue,\n formatValueShort,\n getTypeName,\n isExpandable,\n getSizeDescription,\n} from './format.js';\n\n/**\n * @typedef {import('../session/context/interface.js').ExecutionContext} ExecutionContext\n * @typedef {import('../types/variables.js').VariableFilter} VariableFilter\n * @typedef {import('../types/variables.js').VariableInfo} VariableInfo\n * @typedef {import('../types/variables.js').VariableDetailOptions} VariableDetailOptions\n * @typedef {import('../types/variables.js').VariableDetail} VariableDetail\n */\n\n/**\n * List all variables in the session namespace\n *\n * @param {ExecutionContext} context - Execution context\n * @param {VariableFilter} [filter] - Optional filter\n * @returns {VariableInfo[]}\n */\nexport function listVariables(context, filter = {}) {\n const vars = context.getVariables();\n const tracked = context.getTrackedVariables();\n\n /** @type {VariableInfo[]} */\n const result = [];\n\n for (const name of tracked) {\n if (!(name in vars)) continue;\n\n const value = vars[name];\n\n // Apply filters\n if (filter.excludePrivate && name.startsWith('_')) continue;\n if (filter.namePattern && !new RegExp(filter.namePattern).test(name)) continue;\n if (filter.types && !filter.types.includes(getTypeName(value))) continue;\n\n result.push(formatVariableInfo(name, value));\n }\n\n // Sort by name\n result.sort((a, b) => a.name.localeCompare(b.name));\n\n return result;\n}\n\n/**\n * Get detailed information about a variable\n *\n * @param {string} name - Variable name\n * @param {ExecutionContext} context - Execution context\n * @param {VariableDetailOptions} [options]\n * @returns {VariableDetail | null}\n */\nexport function getVariableDetail(name, context, options = {}) {\n let value = context.getVariable(name);\n\n // Navigate path\n if (options.path && options.path.length > 0) {\n for (const key of options.path) {\n if (value == null) return null;\n\n try {\n if (value instanceof Map) {\n value = value.get(key);\n } else {\n value = /** @type {*} */ (value)[key];\n }\n } catch {\n return null;\n }\n }\n }\n\n // Check if exists\n if (value === undefined && !context.hasVariable(name)) {\n return null;\n }\n\n const maxChildren = options.maxChildren ?? 100;\n const maxValueLength = options.maxValueLength ?? 1000;\n\n const info = formatVariableInfo(name, value);\n\n /** @type {VariableDetail} */\n const detail = {\n ...info,\n fullValue: formatValue(value, maxValueLength),\n truncated: false,\n };\n\n // Add children for expandable values\n if (isExpandable(value)) {\n const children = getChildren(value);\n detail.children = children.slice(0, maxChildren).map(\n ([k, v]) => formatVariableInfo(k, v)\n );\n detail.truncated = children.length > maxChildren;\n\n // Get methods and attributes for objects\n if (typeof value === 'object' && value !== null) {\n detail.methods = getMethods(value);\n detail.attributes = getAttributes(value);\n }\n }\n\n return detail;\n}\n\n/**\n * Expand a variable by path\n *\n * @param {string} baseName - Base variable name\n * @param {string[]} path - Path to expand\n * @param {ExecutionContext} context\n * @param {number} [maxChildren=100]\n * @returns {VariableInfo[] | null}\n */\nexport function expandVariable(baseName, path, context, maxChildren = 100) {\n let value = context.getVariable(baseName);\n\n if (value === undefined) return null;\n\n // Navigate path\n for (const key of path) {\n if (value == null) return null;\n\n try {\n if (value instanceof Map) {\n value = value.get(key);\n } else {\n value = /** @type {*} */ (value)[key];\n }\n } catch {\n return null;\n }\n }\n\n if (!isExpandable(value)) {\n return null;\n }\n\n const children = getChildren(value);\n return children.slice(0, maxChildren).map(([k, v]) => formatVariableInfo(k, v));\n}\n\n/**\n * Format a variable for display\n * @param {string} name\n * @param {*} value\n * @returns {VariableInfo}\n */\nexport function formatVariableInfo(name, value) {\n /** @type {VariableInfo} */\n const info = {\n name,\n type: getTypeName(value),\n value: formatValueShort(value, 100),\n expandable: isExpandable(value),\n };\n\n // Add size info\n const size = getSizeDescription(value);\n if (size) {\n info.size = size;\n }\n\n // Add length for arrays/strings\n if (Array.isArray(value)) {\n info.length = value.length;\n } else if (typeof value === 'string') {\n info.length = value.length;\n } else if (value instanceof Map || value instanceof Set) {\n info.length = value.size;\n }\n\n // Add shape for typed arrays\n if (ArrayBuffer.isView(value) && 'length' in value) {\n // @ts-ignore\n info.length = value.length;\n info.dtype = value.constructor.name.replace('Array', '').toLowerCase();\n }\n\n // Add keys preview for objects\n if (typeof value === 'object' && value !== null && !Array.isArray(value)) {\n if (!(value instanceof Map) && !(value instanceof Set) && !ArrayBuffer.isView(value)) {\n info.keys = Object.keys(value).slice(0, 10);\n }\n }\n\n return info;\n}\n\n/**\n * Get children of an expandable value\n * @param {*} value\n * @returns {Array<[string, *]>}\n */\nexport function getChildren(value) {\n if (value === null || value === undefined) return [];\n\n if (Array.isArray(value)) {\n return value.map((v, i) => [String(i), v]);\n }\n\n if (value instanceof Map) {\n return Array.from(value.entries()).map(([k, v]) => [String(k), v]);\n }\n\n if (value instanceof Set) {\n return Array.from(value).map((v, i) => [String(i), v]);\n }\n\n if (typeof value === 'object') {\n return Object.entries(value);\n }\n\n return [];\n}\n\n/**\n * Get method names of an object\n * @param {*} value\n * @returns {string[]}\n */\nexport function getMethods(value) {\n const methods = new Set();\n let obj = value;\n let depth = 0;\n\n while (obj != null && obj !== Object.prototype && depth < 3) {\n for (const name of Object.getOwnPropertyNames(obj)) {\n if (name === 'constructor') continue;\n\n try {\n if (typeof obj[name] === 'function') {\n methods.add(name);\n }\n } catch {\n // Skip inaccessible\n }\n }\n\n obj = Object.getPrototypeOf(obj);\n depth++;\n }\n\n return Array.from(methods).sort();\n}\n\n/**\n * Get attribute (non-method) names of an object\n * @param {*} value\n * @returns {string[]}\n */\nexport function getAttributes(value) {\n const attrs = [];\n\n for (const name of Object.getOwnPropertyNames(value)) {\n try {\n if (typeof value[name] !== 'function') {\n attrs.push(name);\n }\n } catch {\n // Skip inaccessible\n }\n }\n\n return attrs.sort();\n}\n","/**\n * Statement Completeness Checker\n *\n * Determines whether a piece of code is a complete statement that can\n * be executed, or if it needs more input (like an unclosed bracket).\n *\n * @module analysis/is-complete\n */\n\n/**\n * @typedef {import('../types/analysis.js').IsCompleteResult} IsCompleteResult\n */\n\n/**\n * Check if code is a complete statement\n *\n * @param {string} code - The code to check\n * @returns {IsCompleteResult}\n */\nexport function isComplete(code) {\n const trimmed = code.trim();\n\n // Empty code is complete\n if (!trimmed) {\n return { status: 'complete', indent: '' };\n }\n\n // Check bracket balance\n const bracketInfo = checkBrackets(trimmed);\n if (bracketInfo.unclosed > 0) {\n return {\n status: 'incomplete',\n indent: ' '.repeat(bracketInfo.unclosed),\n };\n }\n if (bracketInfo.unclosed < 0) {\n return { status: 'invalid', indent: '' };\n }\n\n // Check for unterminated strings\n const stringInfo = checkStrings(trimmed);\n if (stringInfo.unclosed) {\n return { status: 'incomplete', indent: '' };\n }\n\n // Check for trailing operators that suggest continuation\n if (endsWithContinuation(trimmed)) {\n return { status: 'incomplete', indent: '' };\n }\n\n // Check for incomplete template literals\n if (hasIncompleteTemplate(trimmed)) {\n return { status: 'incomplete', indent: '' };\n }\n\n // Try to parse to verify syntax\n const parseResult = tryParse(code);\n return parseResult;\n}\n\n/**\n * Check bracket balance\n * @param {string} code\n * @returns {{ unclosed: number }}\n */\nfunction checkBrackets(code) {\n let depth = 0;\n let inString = null;\n let inTemplate = false;\n let templateDepth = 0;\n let inLineComment = false;\n let inBlockComment = false;\n\n for (let i = 0; i < code.length; i++) {\n const char = code[i];\n const prev = code[i - 1];\n const next = code[i + 1];\n\n // Handle escape sequences in strings\n if ((inString || inTemplate) && prev === '\\\\') {\n continue;\n }\n\n // Handle comments\n if (!inString && !inTemplate && !inBlockComment && char === '/' && next === '/') {\n inLineComment = true;\n continue;\n }\n if (inLineComment && char === '\\n') {\n inLineComment = false;\n continue;\n }\n if (inLineComment) continue;\n\n if (!inString && !inTemplate && !inLineComment && char === '/' && next === '*') {\n inBlockComment = true;\n i++;\n continue;\n }\n if (inBlockComment && char === '*' && next === '/') {\n inBlockComment = false;\n i++;\n continue;\n }\n if (inBlockComment) continue;\n\n // Handle strings\n if (!inTemplate && (char === '\"' || char === \"'\")) {\n if (inString === char) {\n inString = null;\n } else if (!inString) {\n inString = char;\n }\n continue;\n }\n\n // Handle template literals\n if (char === '`') {\n if (inTemplate && templateDepth === 0) {\n inTemplate = false;\n } else if (!inString) {\n inTemplate = true;\n templateDepth = 0;\n }\n continue;\n }\n\n // Handle template expressions ${...}\n if (inTemplate && char === '$' && next === '{') {\n templateDepth++;\n continue;\n }\n if (inTemplate && templateDepth > 0 && char === '}') {\n templateDepth--;\n continue;\n }\n\n // Skip bracket counting inside strings\n if (inString) continue;\n if (inTemplate && templateDepth === 0) continue;\n\n // Count brackets\n if (char === '{' || char === '[' || char === '(') {\n depth++;\n } else if (char === '}' || char === ']' || char === ')') {\n depth--;\n }\n }\n\n return { unclosed: depth };\n}\n\n/**\n * Check for unterminated strings\n * @param {string} code\n * @returns {{ unclosed: boolean }}\n */\nfunction checkStrings(code) {\n let inString = null;\n let inTemplate = false;\n\n for (let i = 0; i < code.length; i++) {\n const char = code[i];\n const prev = code[i - 1];\n\n // Skip escaped characters\n if (prev === '\\\\') continue;\n\n // Skip comments\n if (!inString && !inTemplate && char === '/' && code[i + 1] === '/') {\n // Find end of line\n const newline = code.indexOf('\\n', i);\n if (newline === -1) break;\n i = newline;\n continue;\n }\n\n if (!inString && !inTemplate && char === '/' && code[i + 1] === '*') {\n const end = code.indexOf('*/', i + 2);\n if (end === -1) break;\n i = end + 1;\n continue;\n }\n\n // Track strings\n if (!inTemplate && (char === '\"' || char === \"'\")) {\n if (inString === char) {\n inString = null;\n } else if (!inString) {\n inString = char;\n }\n }\n\n // Track template literals\n if (!inString && char === '`') {\n inTemplate = !inTemplate;\n }\n }\n\n return { unclosed: inString !== null || inTemplate };\n}\n\n/**\n * Check if code ends with a continuation operator\n * @param {string} code\n * @returns {boolean}\n */\nfunction endsWithContinuation(code) {\n // Remove trailing whitespace and comments\n let trimmed = code.trim();\n\n // Remove trailing line comment\n const lines = trimmed.split('\\n');\n let lastLine = lines[lines.length - 1].trim();\n const commentIndex = findLineCommentStart(lastLine);\n if (commentIndex !== -1) {\n lastLine = lastLine.slice(0, commentIndex).trim();\n if (!lastLine) {\n // Line was only a comment, check previous lines\n for (let i = lines.length - 2; i >= 0; i--) {\n lastLine = lines[i].trim();\n const ci = findLineCommentStart(lastLine);\n if (ci !== -1) {\n lastLine = lastLine.slice(0, ci).trim();\n }\n if (lastLine) break;\n }\n }\n }\n\n if (!lastLine) return false;\n\n // Operators that suggest continuation\n const continuationOps = [\n '+', '-', '*', '/', '%', '**',\n '=', '+=', '-=', '*=', '/=', '%=',\n '==', '===', '!=', '!==',\n '<', '>', '<=', '>=',\n '&&', '||', '??',\n '&', '|', '^', '~',\n '<<', '>>', '>>>',\n '?', ':',\n ',',\n '.',\n '=>',\n ];\n\n for (const op of continuationOps) {\n if (lastLine.endsWith(op)) {\n return true;\n }\n }\n\n // Keywords that suggest continuation\n const continuationKeywords = [\n 'return', 'throw', 'new', 'typeof', 'void', 'delete',\n 'await', 'yield', 'in', 'of', 'instanceof',\n 'else', 'extends', 'implements',\n ];\n\n for (const kw of continuationKeywords) {\n if (lastLine === kw || lastLine.endsWith(' ' + kw)) {\n return true;\n }\n }\n\n return false;\n}\n\n/**\n * Find line comment start, accounting for strings\n * @param {string} line\n * @returns {number}\n */\nfunction findLineCommentStart(line) {\n let inString = null;\n\n for (let i = 0; i < line.length; i++) {\n const char = line[i];\n const prev = line[i - 1];\n\n if (prev === '\\\\') continue;\n\n if (!inString && (char === '\"' || char === \"'\" || char === '`')) {\n inString = char;\n } else if (inString === char) {\n inString = null;\n } else if (!inString && char === '/' && line[i + 1] === '/') {\n return i;\n }\n }\n\n return -1;\n}\n\n/**\n * Check for incomplete template literal expressions\n * @param {string} code\n * @returns {boolean}\n */\nfunction hasIncompleteTemplate(code) {\n let inTemplate = false;\n let expressionDepth = 0;\n\n for (let i = 0; i < code.length; i++) {\n const char = code[i];\n const prev = code[i - 1];\n const next = code[i + 1];\n\n if (prev === '\\\\') continue;\n\n if (char === '`') {\n if (inTemplate && expressionDepth === 0) {\n inTemplate = false;\n } else if (!inTemplate) {\n inTemplate = true;\n expressionDepth = 0;\n }\n } else if (inTemplate && char === '$' && next === '{') {\n expressionDepth++;\n i++;\n } else if (inTemplate && expressionDepth > 0) {\n if (char === '{') expressionDepth++;\n else if (char === '}') expressionDepth--;\n }\n }\n\n return inTemplate;\n}\n\n/**\n * Try to parse the code to check for syntax errors\n * @param {string} code\n * @returns {IsCompleteResult}\n */\nfunction tryParse(code) {\n try {\n // Try to parse as a function body\n new Function(code);\n return { status: 'complete', indent: '' };\n } catch (e) {\n if (e instanceof SyntaxError) {\n const msg = e.message.toLowerCase();\n\n // Patterns that indicate incomplete code\n const incompletePatterns = [\n 'unexpected end',\n 'unterminated',\n 'expected',\n 'missing',\n ];\n\n for (const pattern of incompletePatterns) {\n if (msg.includes(pattern)) {\n return { status: 'incomplete', indent: '' };\n }\n }\n\n // Other syntax errors are invalid\n return { status: 'invalid', indent: '' };\n }\n\n return { status: 'unknown', indent: '' };\n }\n}\n\n/**\n * Get suggested indent for continuation\n * @param {string} code\n * @returns {string}\n */\nexport function getSuggestedIndent(code) {\n const lines = code.split('\\n');\n const lastLine = lines[lines.length - 1];\n\n // Get current indent\n const match = lastLine.match(/^(\\s*)/);\n const currentIndent = match ? match[1] : '';\n\n // Check if we should increase indent\n const trimmed = lastLine.trim();\n const shouldIncrease =\n trimmed.endsWith('{') ||\n trimmed.endsWith('[') ||\n trimmed.endsWith('(') ||\n trimmed.endsWith(':') ||\n trimmed.endsWith('=>');\n\n if (shouldIncrease) {\n return currentIndent + ' ';\n }\n\n return currentIndent;\n}\n","/**\n * Code Formatting\n *\n * Formats JavaScript code. Can integrate with prettier if available,\n * otherwise provides basic formatting.\n *\n * @module analysis/format\n */\n\n/**\n * @typedef {import('../types/analysis.js').FormatResult} FormatResult\n */\n\n/**\n * @typedef {Object} FormatOptions\n * @property {number} [tabWidth=2] - Number of spaces per tab\n * @property {boolean} [useTabs=false] - Use tabs instead of spaces\n * @property {boolean} [semi=true] - Add semicolons\n * @property {boolean} [singleQuote=false] - Use single quotes\n * @property {number} [printWidth=80] - Line width\n */\n\n/** @type {any} */\nlet prettierInstance = null;\n\n/**\n * Set prettier instance for formatting\n * This allows external prettier to be provided\n *\n * @param {any} prettier - Prettier instance\n */\nexport function setPrettier(prettier) {\n prettierInstance = prettier;\n}\n\n/**\n * Check if prettier is available\n * @returns {boolean}\n */\nexport function hasPrettier() {\n return prettierInstance !== null;\n}\n\n/**\n * Format JavaScript code\n *\n * @param {string} code - Code to format\n * @param {FormatOptions} [options]\n * @returns {Promise<FormatResult>}\n */\nexport async function formatCode(code, options = {}) {\n // Try prettier first\n if (prettierInstance) {\n try {\n const formatted = await formatWithPrettier(code, options);\n return {\n formatted,\n changed: formatted !== code,\n };\n } catch (e) {\n // Prettier failed, fall back to basic formatting\n console.warn('Prettier formatting failed:', e);\n }\n }\n\n // Fall back to basic formatting\n const formatted = basicFormat(code, options);\n return {\n formatted,\n changed: formatted !== code,\n };\n}\n\n/**\n * Format with prettier\n * @param {string} code\n * @param {FormatOptions} options\n * @returns {Promise<string>}\n */\nasync function formatWithPrettier(code, options) {\n const prettierOptions = {\n parser: 'babel',\n tabWidth: options.tabWidth ?? 2,\n useTabs: options.useTabs ?? false,\n semi: options.semi ?? true,\n singleQuote: options.singleQuote ?? false,\n printWidth: options.printWidth ?? 80,\n };\n\n // prettier might be async or sync depending on version\n const result = prettierInstance.format(code, prettierOptions);\n return result instanceof Promise ? await result : result;\n}\n\n/**\n * Basic code formatting (no external dependencies)\n *\n * @param {string} code\n * @param {FormatOptions} options\n * @returns {string}\n */\nexport function basicFormat(code, options = {}) {\n const tabWidth = options.tabWidth ?? 2;\n const useTabs = options.useTabs ?? false;\n const semi = options.semi ?? true;\n const indent = useTabs ? '\\t' : ' '.repeat(tabWidth);\n\n let result = code;\n\n // Normalize line endings\n result = result.replace(/\\r\\n/g, '\\n').replace(/\\r/g, '\\n');\n\n // Normalize whitespace around operators\n result = normalizeOperatorSpacing(result);\n\n // Normalize comma spacing\n result = result.replace(/,\\s*/g, ', ');\n\n // Normalize colon spacing in objects\n result = normalizeColonSpacing(result);\n\n // Fix indentation\n result = fixIndentation(result, indent);\n\n // Add/remove trailing semicolons\n if (semi) {\n result = addSemicolons(result);\n }\n\n // Remove trailing whitespace\n result = result.split('\\n').map(line => line.trimEnd()).join('\\n');\n\n // Ensure single trailing newline\n result = result.trimEnd() + '\\n';\n\n return result;\n}\n\n/**\n * Normalize spacing around operators\n * @param {string} code\n * @returns {string}\n */\nfunction normalizeOperatorSpacing(code) {\n // This is tricky because we need to handle strings and regex\n // For now, do a simple replacement that might not be perfect\n\n // Binary operators (add spaces around)\n const binaryOps = [\n '===', '!==', '==', '!=',\n '<=', '>=', '<', '>',\n '&&', '||', '??',\n '+=', '-=', '*=', '/=', '%=',\n '**=', '&=', '|=', '^=',\n '<<=', '>>=', '>>>=',\n '=>',\n ];\n\n let result = code;\n\n // Process each operator (order matters - longer first)\n for (const op of binaryOps) {\n const escaped = op.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n // Only if not already properly spaced\n result = result.replace(\n new RegExp(`(\\\\S)${escaped}(\\\\S)`, 'g'),\n `$1 ${op} $2`\n );\n }\n\n // Single = assignment (but not ==, ===, =>, etc)\n result = result.replace(/(\\w)=(?![=>])(\\S)/g, '$1 = $2');\n\n return result;\n}\n\n/**\n * Normalize colon spacing in objects\n * @param {string} code\n * @returns {string}\n */\nfunction normalizeColonSpacing(code) {\n // Object property colons: add space after but not before\n // This is imperfect but handles common cases\n return code.replace(/(\\w+)\\s*:\\s*/g, '$1: ');\n}\n\n/**\n * Fix indentation based on bracket depth\n * @param {string} code\n * @param {string} indent\n * @returns {string}\n */\nfunction fixIndentation(code, indent) {\n const lines = code.split('\\n');\n const result = [];\n let depth = 0;\n\n for (const line of lines) {\n const trimmed = line.trim();\n\n if (!trimmed) {\n result.push('');\n continue;\n }\n\n // Check if line starts with closing bracket\n const startsWithClose = /^[}\\])]/.test(trimmed);\n if (startsWithClose && depth > 0) {\n depth--;\n }\n\n // Add indentation\n result.push(indent.repeat(depth) + trimmed);\n\n // Count bracket changes for next line\n const opens = (trimmed.match(/[{[(]/g) || []).length;\n const closes = (trimmed.match(/[}\\])]/g) || []).length;\n depth += opens - closes;\n\n // Ensure depth doesn't go negative\n if (depth < 0) depth = 0;\n }\n\n return result.join('\\n');\n}\n\n/**\n * Add semicolons to statements that need them\n * @param {string} code\n * @returns {string}\n */\nfunction addSemicolons(code) {\n const lines = code.split('\\n');\n const result = [];\n\n for (let i = 0; i < lines.length; i++) {\n let line = lines[i];\n const trimmed = line.trim();\n\n // Skip empty lines\n if (!trimmed) {\n result.push(line);\n continue;\n }\n\n // Skip lines that don't need semicolons\n const skipPatterns = [\n /^\\/\\//, // Comment\n /^\\/\\*/, // Block comment start\n /\\*\\/$/, // Block comment end\n /^\\*/, // Block comment middle\n /^import\\s/, // Import (might need semi, but complex)\n /^export\\s/, // Export\n /^if\\s*\\(/, // If\n /^else/, // Else\n /^for\\s*\\(/, // For\n /^while\\s*\\(/, // While\n /^do\\s*{?$/, // Do\n /^switch\\s*\\(/, // Switch\n /^try\\s*{?$/, // Try\n /^catch\\s*\\(/, // Catch\n /^finally\\s*{?$/, // Finally\n /^function\\s/, // Function declaration\n /^class\\s/, // Class\n /^async\\s+function/, // Async function\n /[{,]\\s*$/, // Ends with { or ,\n /^\\s*[}\\])]/, // Starts with closing bracket\n ];\n\n let needsSemi = true;\n for (const pattern of skipPatterns) {\n if (pattern.test(trimmed)) {\n needsSemi = false;\n break;\n }\n }\n\n // Already has semicolon\n if (trimmed.endsWith(';')) {\n needsSemi = false;\n }\n\n // Check if next non-empty line suggests continuation\n if (needsSemi) {\n for (let j = i + 1; j < lines.length; j++) {\n const nextTrimmed = lines[j].trim();\n if (!nextTrimmed) continue;\n if (/^[.?[]/.test(nextTrimmed)) {\n // Next line is continuation\n needsSemi = false;\n }\n break;\n }\n }\n\n if (needsSemi) {\n // Find where to insert semicolon (before trailing comment)\n const commentMatch = line.match(/^(.*?)(\\s*\\/\\/.*)$/);\n if (commentMatch) {\n line = commentMatch[1] + ';' + commentMatch[2];\n } else {\n line = line.trimEnd() + ';';\n }\n }\n\n result.push(line);\n }\n\n return result.join('\\n');\n}\n\n/**\n * Format HTML code (basic)\n * @param {string} code\n * @returns {string}\n */\nexport function formatHtml(code) {\n // Very basic HTML formatting\n let result = code;\n\n // Normalize line endings\n result = result.replace(/\\r\\n/g, '\\n').replace(/\\r/g, '\\n');\n\n // Add newlines after block elements\n result = result.replace(/(<\\/(?:div|p|ul|ol|li|h[1-6]|header|footer|section|article|nav|aside|main|table|tr|thead|tbody|form)>)/gi, '$1\\n');\n\n // Add newlines before block elements\n result = result.replace(/(<(?:div|p|ul|ol|li|h[1-6]|header|footer|section|article|nav|aside|main|table|tr|thead|tbody|form)(?:\\s[^>]*)?>)/gi, '\\n$1');\n\n // Remove multiple blank lines\n result = result.replace(/\\n{3,}/g, '\\n\\n');\n\n return result.trim() + '\\n';\n}\n\n/**\n * Format CSS code (basic)\n * @param {string} code\n * @returns {string}\n */\nexport function formatCss(code) {\n let result = code;\n\n // Normalize line endings\n result = result.replace(/\\r\\n/g, '\\n').replace(/\\r/g, '\\n');\n\n // Add newlines after { and ;\n result = result.replace(/\\{/g, ' {\\n');\n result = result.replace(/;/g, ';\\n');\n result = result.replace(/\\}/g, '\\n}\\n');\n\n // Fix property spacing\n result = result.replace(/:\\s*/g, ': ');\n\n // Fix indentation\n const lines = result.split('\\n');\n const formatted = [];\n let depth = 0;\n\n for (const line of lines) {\n const trimmed = line.trim();\n if (!trimmed) continue;\n\n if (trimmed === '}') depth--;\n formatted.push(' '.repeat(Math.max(0, depth)) + trimmed);\n if (trimmed.endsWith('{')) depth++;\n }\n\n return formatted.join('\\n') + '\\n';\n}\n","/**\n * Session Class\n *\n * A session is an isolated execution context that persists variables\n * across executions. It wraps an ExecutionContext and provides the\n * full MRP session API.\n *\n * @module session/session\n */\n\nimport { IframeContext } from './context/iframe.js';\nimport { MainContext } from './context/main.js';\nimport { extractDeclaredVariables } from '../transform/extract.js';\nimport { JavaScriptExecutor } from '../execute/javascript.js';\n\n// LSP Features\nimport { getCompletions } from '../lsp/complete.js';\nimport { getHoverInfo } from '../lsp/hover.js';\nimport { getInspectInfo } from '../lsp/inspect.js';\nimport {\n listVariables as lspListVariables,\n getVariableDetail as lspGetVariableDetail,\n} from '../lsp/variables.js';\n\n// Analysis Features\nimport { isComplete as analysisIsComplete } from '../analysis/is-complete.js';\nimport { formatCode } from '../analysis/format.js';\n\n/**\n * @typedef {import('../execute/registry.js').ExecutorRegistry} ExecutorRegistry\n * @typedef {import('../execute/interface.js').Executor} Executor\n */\n\n/**\n * @typedef {import('./context/interface.js').ExecutionContext} ExecutionContext\n * @typedef {import('./context/interface.js').RawExecutionResult} RawExecutionResult\n * @typedef {import('../types/session.js').SessionInfo} SessionInfo\n * @typedef {import('../types/session.js').CreateSessionOptions} CreateSessionOptions\n * @typedef {import('../types/session.js').IsolationMode} IsolationMode\n * @typedef {import('../types/execution.js').ExecuteOptions} ExecuteOptions\n * @typedef {import('../types/execution.js').ExecutionResult} ExecutionResult\n * @typedef {import('../types/execution.js').ExecutionError} ExecutionError\n * @typedef {import('../types/execution.js').DisplayData} DisplayData\n * @typedef {import('../types/streaming.js').StreamEvent} StreamEvent\n * @typedef {import('../types/completion.js').CompleteOptions} CompleteOptions\n * @typedef {import('../types/completion.js').CompletionResult} CompletionResult\n * @typedef {import('../types/inspection.js').InspectOptions} InspectOptions\n * @typedef {import('../types/inspection.js').InspectResult} InspectResult\n * @typedef {import('../types/inspection.js').HoverResult} HoverResult\n * @typedef {import('../types/variables.js').VariableFilter} VariableFilter\n * @typedef {import('../types/variables.js').VariableInfo} VariableInfo\n * @typedef {import('../types/variables.js').VariableDetailOptions} VariableDetailOptions\n * @typedef {import('../types/variables.js').VariableDetail} VariableDetail\n * @typedef {import('../types/analysis.js').IsCompleteResult} IsCompleteResult\n * @typedef {import('../types/analysis.js').FormatResult} FormatResult\n */\n\n/**\n * Generate a unique execution ID\n * @returns {string}\n */\nfunction generateExecId() {\n return `exec-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`;\n}\n\n/**\n * Session class - represents an isolated execution context\n */\nexport class Session {\n /** @type {string} */\n #id;\n\n /** @type {string} */\n #language;\n\n /** @type {IsolationMode} */\n #isolation;\n\n /** @type {Date} */\n #created;\n\n /** @type {Date} */\n #lastActivity;\n\n /** @type {number} */\n #executionCount = 0;\n\n /** @type {ExecutionContext} */\n #context;\n\n /** @type {ExecutorRegistry | null} */\n #executorRegistry = null;\n\n /** @type {JavaScriptExecutor} */\n #defaultJsExecutor;\n\n /** @type {Map<string, AbortController>} */\n #runningExecutions = new Map();\n\n /** @type {Map<string, (text: string) => void>} */\n #pendingInputs = new Map();\n\n /**\n * @param {string} id - Session ID\n * @param {CreateSessionOptions & { executorRegistry?: ExecutorRegistry }} [options]\n */\n constructor(id, options = {}) {\n this.#id = id;\n this.#language = options.language || 'javascript';\n this.#isolation = options.isolation || 'iframe';\n this.#created = new Date();\n this.#lastActivity = new Date();\n\n // Store executor registry if provided\n this.#executorRegistry = options.executorRegistry || null;\n\n // Create default JS executor for fallback\n this.#defaultJsExecutor = new JavaScriptExecutor();\n\n // Create the appropriate context\n this.#context = this.#createContext(options);\n }\n\n /**\n * Create the execution context based on isolation mode\n * @param {CreateSessionOptions} options\n * @returns {ExecutionContext}\n */\n #createContext(options) {\n switch (this.#isolation) {\n case 'none':\n return new MainContext({\n utilities: options.utilities,\n });\n\n case 'iframe':\n default:\n return new IframeContext({\n visible: false,\n allowMainAccess: options.allowMainAccess ?? false,\n utilities: options.utilities,\n });\n }\n }\n\n // ============================================================================\n // Properties\n // ============================================================================\n\n /** @returns {string} */\n get id() {\n return this.#id;\n }\n\n /** @returns {string} */\n get language() {\n return this.#language;\n }\n\n /** @returns {IsolationMode} */\n get isolation() {\n return this.#isolation;\n }\n\n /** @returns {Date} */\n get created() {\n return this.#created;\n }\n\n /** @returns {Date} */\n get lastActivity() {\n return this.#lastActivity;\n }\n\n /** @returns {number} */\n get executionCount() {\n return this.#executionCount;\n }\n\n // ============================================================================\n // Execution\n // ============================================================================\n\n /**\n * Execute code and return result\n * @param {string} code - Code to execute\n * @param {ExecuteOptions} [options]\n * @returns {Promise<ExecutionResult>}\n */\n async execute(code, options = {}) {\n const execId = options.execId || generateExecId();\n const language = options.language || this.#language;\n\n // Update activity\n this.#lastActivity = new Date();\n\n // Track execution\n const abortController = new AbortController();\n this.#runningExecutions.set(execId, abortController);\n\n try {\n // Get the executor for this language\n const executor = this.#getExecutor(language);\n\n // Execute using the executor\n const result = await executor.execute(code, this.#context, {\n ...options,\n execId,\n language,\n });\n\n // Update execution count\n if (options.storeHistory !== false) {\n this.#executionCount++;\n }\n\n // Update result with session's execution count\n result.executionCount = this.#executionCount;\n\n return result;\n } finally {\n this.#runningExecutions.delete(execId);\n }\n }\n\n /**\n * Get the executor for a language\n * @param {string} language\n * @returns {Executor}\n */\n #getExecutor(language) {\n // Try registry first\n if (this.#executorRegistry) {\n const executor = this.#executorRegistry.get(language);\n if (executor) return executor;\n }\n\n // Fall back to default JS executor for JavaScript\n const lang = language.toLowerCase();\n if (['javascript', 'js', 'ecmascript', 'es'].includes(lang)) {\n return this.#defaultJsExecutor;\n }\n\n // Return a no-op executor that reports unsupported language\n return {\n languages: [],\n async execute(code, context, options) {\n return {\n success: false,\n stdout: '',\n stderr: `No executor registered for language: ${language}`,\n error: {\n type: 'ExecutorError',\n message: `No executor registered for language: ${language}. Register an ExecutorRegistry with HTML/CSS executors to support this language.`,\n },\n displayData: [],\n assets: [],\n executionCount: 0,\n duration: 0,\n };\n },\n };\n }\n\n /**\n * Execute code with streaming output\n * @param {string} code - Code to execute\n * @param {ExecuteOptions} [options]\n * @returns {AsyncGenerator<StreamEvent>}\n */\n async *executeStream(code, options = {}) {\n const execId = options.execId || generateExecId();\n const language = options.language || this.#language;\n\n // Update activity\n this.#lastActivity = new Date();\n\n // Track execution\n const abortController = new AbortController();\n this.#runningExecutions.set(execId, abortController);\n\n // Event queue for stdin_request events\n /** @type {Array<import('../types/streaming.js').StdinRequestEvent>} */\n const stdinEventQueue = [];\n let stdinEventResolve = null;\n\n // Set up stdin handler on context to capture input requests\n // and yield stdin_request events\n const previousHandler = this.#context.getStdinHandler?.();\n\n if (this.#context.setStdinHandler) {\n this.#context.setStdinHandler((request) => {\n return new Promise((resolve, reject) => {\n // Store the resolver for when sendInput is called\n this.#pendingInputs.set(request.execId, resolve);\n\n // Queue the stdin_request event to be yielded\n stdinEventQueue.push({\n type: 'stdin_request',\n prompt: request.prompt,\n password: request.password,\n execId: request.execId,\n });\n\n // Wake up the event loop if waiting\n if (stdinEventResolve) {\n stdinEventResolve();\n stdinEventResolve = null;\n }\n\n // Set up abort handling\n abortController.signal.addEventListener('abort', () => {\n this.#pendingInputs.delete(request.execId);\n reject(new Error('Execution aborted'));\n }, { once: true });\n });\n });\n }\n\n try {\n // Get the executor for this language\n const executor = this.#getExecutor(language);\n\n // Use executor's streaming if available\n if (executor.executeStream) {\n let executionCount = this.#executionCount;\n\n for await (const event of executor.executeStream(code, this.#context, {\n ...options,\n execId,\n language,\n })) {\n // Yield any pending stdin_request events first\n while (stdinEventQueue.length > 0) {\n yield /** @type {import('../types/streaming.js').StdinRequestEvent} */ (stdinEventQueue.shift());\n }\n\n // Update execution count on result event\n if (event.type === 'result' && options.storeHistory !== false) {\n this.#executionCount++;\n event.result.executionCount = this.#executionCount;\n }\n yield event;\n }\n } else {\n // Fall back to wrapping execute()\n const timestamp = new Date().toISOString();\n\n yield /** @type {import('../types/streaming.js').StartEvent} */ ({\n type: 'start',\n execId,\n timestamp,\n });\n\n // Start execution in background so we can yield events\n const executionPromise = executor.execute(code, this.#context, {\n ...options,\n execId,\n language,\n });\n\n // Poll for stdin events while execution is running\n let result = null;\n let error = null;\n let done = false;\n\n executionPromise.then(r => {\n result = r;\n done = true;\n if (stdinEventResolve) {\n stdinEventResolve();\n stdinEventResolve = null;\n }\n }).catch(e => {\n error = e;\n done = true;\n if (stdinEventResolve) {\n stdinEventResolve();\n stdinEventResolve = null;\n }\n });\n\n // Wait for either stdin events or completion\n while (!done) {\n // Yield any pending stdin_request events\n while (stdinEventQueue.length > 0) {\n yield /** @type {import('../types/streaming.js').StdinRequestEvent} */ (stdinEventQueue.shift());\n }\n\n if (!done) {\n // Wait for next event\n await new Promise(resolve => {\n stdinEventResolve = resolve;\n // Also resolve on short timeout to check done flag\n setTimeout(resolve, 50);\n });\n }\n }\n\n // Yield any remaining stdin events\n while (stdinEventQueue.length > 0) {\n yield /** @type {import('../types/streaming.js').StdinRequestEvent} */ (stdinEventQueue.shift());\n }\n\n if (error) {\n yield /** @type {import('../types/streaming.js').ErrorEvent} */ ({\n type: 'error',\n error: {\n type: error instanceof Error ? error.name : 'Error',\n message: error instanceof Error ? error.message : String(error),\n traceback: error instanceof Error && error.stack ? error.stack.split('\\n') : undefined,\n },\n });\n } else if (result) {\n if (options.storeHistory !== false) {\n this.#executionCount++;\n }\n result.executionCount = this.#executionCount;\n\n if (result.stdout) {\n yield /** @type {import('../types/streaming.js').StdoutEvent} */ ({\n type: 'stdout',\n content: result.stdout,\n accumulated: result.stdout,\n });\n }\n\n if (result.stderr) {\n yield /** @type {import('../types/streaming.js').StderrEvent} */ ({\n type: 'stderr',\n content: result.stderr,\n accumulated: result.stderr,\n });\n }\n\n for (const display of result.displayData) {\n yield /** @type {import('../types/streaming.js').DisplayEvent} */ ({\n type: 'display',\n data: display.data,\n metadata: display.metadata,\n });\n }\n\n for (const asset of result.assets) {\n yield /** @type {import('../types/streaming.js').AssetEvent} */ ({\n type: 'asset',\n path: asset.path,\n url: asset.url,\n mimeType: asset.mimeType,\n assetType: asset.assetType,\n });\n }\n\n yield /** @type {import('../types/streaming.js').ResultEvent} */ ({\n type: 'result',\n result,\n });\n }\n\n yield /** @type {import('../types/streaming.js').DoneEvent} */ ({\n type: 'done',\n });\n }\n } finally {\n // Restore previous stdin handler\n if (this.#context.setStdinHandler) {\n this.#context.setStdinHandler(previousHandler || null);\n }\n this.#runningExecutions.delete(execId);\n }\n }\n\n /**\n * Set the executor registry\n * @param {ExecutorRegistry} registry\n */\n setExecutorRegistry(registry) {\n this.#executorRegistry = registry;\n }\n\n /**\n * Get the executor registry\n * @returns {ExecutorRegistry | null}\n */\n getExecutorRegistry() {\n return this.#executorRegistry;\n }\n\n /**\n * Get supported languages\n * @returns {string[]}\n */\n getSupportedLanguages() {\n if (this.#executorRegistry) {\n return this.#executorRegistry.languages();\n }\n return ['javascript', 'js', 'ecmascript', 'es'];\n }\n\n /**\n * Send input to a waiting execution\n * @param {string} execId - Execution ID\n * @param {string} text - Input text\n * @returns {boolean} Whether input was accepted\n */\n sendInput(execId, text) {\n const handler = this.#pendingInputs.get(execId);\n if (handler) {\n handler(text);\n this.#pendingInputs.delete(execId);\n return true;\n }\n return false;\n }\n\n /**\n * Interrupt a running execution\n * @param {string} [execId] - Specific execution ID, or all if not provided\n * @returns {boolean} Whether any execution was interrupted\n */\n interrupt(execId) {\n if (execId) {\n const controller = this.#runningExecutions.get(execId);\n if (controller) {\n controller.abort();\n this.#runningExecutions.delete(execId);\n return true;\n }\n return false;\n }\n\n // Interrupt all\n if (this.#runningExecutions.size > 0) {\n for (const controller of this.#runningExecutions.values()) {\n controller.abort();\n }\n this.#runningExecutions.clear();\n return true;\n }\n\n return false;\n }\n\n // ============================================================================\n // LSP Features (delegated to lsp/ modules)\n // ============================================================================\n\n /**\n * Get completions at cursor position\n * @param {string} code\n * @param {number} cursor\n * @param {CompleteOptions} [options]\n * @returns {CompletionResult}\n */\n complete(code, cursor, options = {}) {\n return getCompletions(code, cursor, this.#context, options);\n }\n\n /**\n * Get hover information at cursor position\n * @param {string} code\n * @param {number} cursor\n * @returns {HoverResult}\n */\n hover(code, cursor) {\n return getHoverInfo(code, cursor, this.#context);\n }\n\n /**\n * Get detailed inspection at cursor position\n * @param {string} code\n * @param {number} cursor\n * @param {InspectOptions} [options]\n * @returns {InspectResult}\n */\n inspect(code, cursor, options = {}) {\n return getInspectInfo(code, cursor, this.#context, options);\n }\n\n /**\n * List all variables in session\n * @param {VariableFilter} [filter]\n * @returns {VariableInfo[]}\n */\n listVariables(filter = {}) {\n return lspListVariables(this.#context, filter);\n }\n\n /**\n * Get detailed information about a variable\n * @param {string} name\n * @param {VariableDetailOptions} [options]\n * @returns {VariableDetail | null}\n */\n getVariable(name, options = {}) {\n return lspGetVariableDetail(name, this.#context, options);\n }\n\n // ============================================================================\n // Analysis\n // ============================================================================\n\n /**\n * Check if code is a complete statement\n * @param {string} code\n * @returns {IsCompleteResult}\n */\n isComplete(code) {\n return analysisIsComplete(code);\n }\n\n /**\n * Format code\n * @param {string} code\n * @returns {Promise<FormatResult>}\n */\n async format(code) {\n return formatCode(code);\n }\n\n // ============================================================================\n // Lifecycle\n // ============================================================================\n\n /**\n * Reset the session (clear variables but keep session)\n */\n reset() {\n this.#context.reset();\n this.#executionCount = 0;\n this.#lastActivity = new Date();\n }\n\n /**\n * Destroy the session and release resources\n */\n destroy() {\n // Cancel any running executions\n this.interrupt();\n\n // Destroy context\n this.#context.destroy();\n }\n\n /**\n * Get session info\n * @returns {SessionInfo}\n */\n getInfo() {\n return {\n id: this.#id,\n language: this.#language,\n created: this.#created.toISOString(),\n lastActivity: this.#lastActivity.toISOString(),\n executionCount: this.#executionCount,\n variableCount: this.#context.getTrackedVariables().size,\n isolation: this.#isolation,\n };\n }\n\n /**\n * Get the underlying execution context (for advanced use)\n * @returns {ExecutionContext}\n */\n getContext() {\n return this.#context;\n }\n}\n\n/**\n * Create a session\n * @param {string} id\n * @param {CreateSessionOptions} [options]\n * @returns {Session}\n */\nexport function createSession(id, options) {\n return new Session(id, options);\n}\n","/**\n * Session Manager\n *\n * Manages multiple sessions, handles creation/destruction,\n * and enforces limits.\n *\n * @module session/manager\n */\n\nimport { Session } from './session.js';\n\n/**\n * @typedef {import('../types/session.js').SessionInfo} SessionInfo\n * @typedef {import('../types/session.js').CreateSessionOptions} CreateSessionOptions\n */\n\n/**\n * @typedef {Object} SessionManagerOptions\n * @property {number} [maxSessions=10] - Maximum number of concurrent sessions\n * @property {string} [defaultLanguage='javascript'] - Default language for new sessions\n * @property {import('../types/session.js').IsolationMode} [defaultIsolation='iframe'] - Default isolation mode\n * @property {boolean} [defaultAllowMainAccess=false] - Default main access setting\n */\n\n/**\n * Generate a unique session ID\n * @returns {string}\n */\nfunction generateSessionId() {\n return `session-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`;\n}\n\n/**\n * Session Manager - manages multiple execution sessions\n */\nexport class SessionManager {\n /** @type {Map<string, Session>} */\n #sessions = new Map();\n\n /** @type {SessionManagerOptions} */\n #options;\n\n /**\n * @param {SessionManagerOptions} [options]\n */\n constructor(options = {}) {\n this.#options = {\n maxSessions: 10,\n defaultLanguage: 'javascript',\n defaultIsolation: 'iframe',\n defaultAllowMainAccess: false,\n ...options,\n };\n }\n\n // ============================================================================\n // Session Lifecycle\n // ============================================================================\n\n /**\n * Create a new session\n * @param {CreateSessionOptions} [options]\n * @returns {Session}\n * @throws {Error} If max sessions reached\n */\n create(options = {}) {\n // Check limits\n if (this.#sessions.size >= this.#options.maxSessions) {\n throw new Error(\n `Maximum sessions (${this.#options.maxSessions}) reached. ` +\n 'Destroy existing sessions before creating new ones.'\n );\n }\n\n // Generate ID if not provided\n const id = options.id || generateSessionId();\n\n // Check for duplicate ID\n if (this.#sessions.has(id)) {\n throw new Error(`Session with ID '${id}' already exists`);\n }\n\n // Merge with defaults\n const sessionOptions = {\n language: options.language || this.#options.defaultLanguage,\n isolation: options.isolation || this.#options.defaultIsolation,\n allowMainAccess: options.allowMainAccess ?? this.#options.defaultAllowMainAccess,\n utilities: options.utilities,\n executorRegistry: options.executorRegistry,\n };\n\n // Create session\n const session = new Session(id, sessionOptions);\n this.#sessions.set(id, session);\n\n return session;\n }\n\n /**\n * Get an existing session by ID\n * @param {string} id\n * @returns {Session | undefined}\n */\n get(id) {\n return this.#sessions.get(id);\n }\n\n /**\n * Get a session, creating it if it doesn't exist\n * @param {string} id\n * @param {CreateSessionOptions} [options]\n * @returns {Session}\n */\n getOrCreate(id, options = {}) {\n const existing = this.#sessions.get(id);\n if (existing) {\n return existing;\n }\n return this.create({ ...options, id });\n }\n\n /**\n * Check if a session exists\n * @param {string} id\n * @returns {boolean}\n */\n has(id) {\n return this.#sessions.has(id);\n }\n\n /**\n * Destroy a session by ID\n * @param {string} id\n * @returns {boolean} Whether a session was destroyed\n */\n destroy(id) {\n const session = this.#sessions.get(id);\n if (session) {\n session.destroy();\n this.#sessions.delete(id);\n return true;\n }\n return false;\n }\n\n /**\n * Destroy all sessions\n */\n destroyAll() {\n for (const session of this.#sessions.values()) {\n session.destroy();\n }\n this.#sessions.clear();\n }\n\n // ============================================================================\n // Session Queries\n // ============================================================================\n\n /**\n * List all sessions\n * @returns {SessionInfo[]}\n */\n list() {\n return Array.from(this.#sessions.values()).map((s) => s.getInfo());\n }\n\n /**\n * Get number of active sessions\n * @returns {number}\n */\n get size() {\n return this.#sessions.size;\n }\n\n /**\n * Get all session IDs\n * @returns {string[]}\n */\n get ids() {\n return Array.from(this.#sessions.keys());\n }\n\n /**\n * Get the maximum number of sessions allowed\n * @returns {number}\n */\n get maxSessions() {\n return this.#options.maxSessions;\n }\n\n /**\n * Iterate over sessions\n * @returns {IterableIterator<Session>}\n */\n [Symbol.iterator]() {\n return this.#sessions.values();\n }\n\n /**\n * Iterate over session entries\n * @returns {IterableIterator<[string, Session]>}\n */\n entries() {\n return this.#sessions.entries();\n }\n\n // ============================================================================\n // Bulk Operations\n // ============================================================================\n\n /**\n * Reset all sessions (clear variables but keep sessions)\n */\n resetAll() {\n for (const session of this.#sessions.values()) {\n session.reset();\n }\n }\n\n /**\n * Interrupt all running executions across all sessions\n * @returns {number} Number of sessions that had executions interrupted\n */\n interruptAll() {\n let count = 0;\n for (const session of this.#sessions.values()) {\n if (session.interrupt()) {\n count++;\n }\n }\n return count;\n }\n\n /**\n * Get sessions by language\n * @param {string} language\n * @returns {Session[]}\n */\n getByLanguage(language) {\n const results = [];\n for (const session of this.#sessions.values()) {\n if (session.language === language) {\n results.push(session);\n }\n }\n return results;\n }\n\n /**\n * Get the most recently active session\n * @returns {Session | undefined}\n */\n getMostRecent() {\n let mostRecent = undefined;\n let latestTime = 0;\n\n for (const session of this.#sessions.values()) {\n const time = session.lastActivity.getTime();\n if (time > latestTime) {\n latestTime = time;\n mostRecent = session;\n }\n }\n\n return mostRecent;\n }\n\n // ============================================================================\n // Cleanup\n // ============================================================================\n\n /**\n * Destroy sessions that have been inactive for a certain time\n * @param {number} maxIdleMs - Maximum idle time in milliseconds\n * @returns {number} Number of sessions destroyed\n */\n cleanupIdle(maxIdleMs) {\n const now = Date.now();\n const toDestroy = [];\n\n for (const [id, session] of this.#sessions) {\n if (now - session.lastActivity.getTime() > maxIdleMs) {\n toDestroy.push(id);\n }\n }\n\n for (const id of toDestroy) {\n this.destroy(id);\n }\n\n return toDestroy.length;\n }\n\n /**\n * Destroy oldest sessions to get under a certain count\n * @param {number} targetCount - Target number of sessions\n * @returns {number} Number of sessions destroyed\n */\n trimToCount(targetCount) {\n if (this.#sessions.size <= targetCount) {\n return 0;\n }\n\n // Sort by last activity (oldest first)\n const sorted = Array.from(this.#sessions.entries()).sort(\n ([, a], [, b]) => a.lastActivity.getTime() - b.lastActivity.getTime()\n );\n\n const toDestroy = sorted.slice(0, this.#sessions.size - targetCount);\n\n for (const [id] of toDestroy) {\n this.destroy(id);\n }\n\n return toDestroy.length;\n }\n}\n\n/**\n * Create a session manager\n * @param {SessionManagerOptions} [options]\n * @returns {SessionManager}\n */\nexport function createSessionManager(options) {\n return new SessionManager(options);\n}\n","/**\n * Executor Registry\n *\n * Manages language executors and routes execution requests\n * to the appropriate executor based on language.\n *\n * @module execute/registry\n */\n\n/**\n * @typedef {import('./interface.js').Executor} Executor\n * @typedef {import('../session/context/interface.js').ExecutionContext} ExecutionContext\n * @typedef {import('../types/execution.js').ExecuteOptions} ExecuteOptions\n * @typedef {import('../types/execution.js').ExecutionResult} ExecutionResult\n * @typedef {import('../types/streaming.js').StreamEvent} StreamEvent\n */\n\n/**\n * Registry for language executors\n */\nexport class ExecutorRegistry {\n /** @type {Map<string, Executor>} */\n #executors = new Map();\n\n /** @type {Map<string, string>} */\n #aliases = new Map();\n\n /**\n * Register an executor for one or more languages\n * @param {Executor} executor - The executor to register\n */\n register(executor) {\n for (const language of executor.languages) {\n const lang = language.toLowerCase();\n this.#executors.set(lang, executor);\n }\n }\n\n /**\n * Register a single language with an executor\n * @param {string} language - Language identifier\n * @param {Executor} executor - The executor\n */\n registerLanguage(language, executor) {\n this.#executors.set(language.toLowerCase(), executor);\n }\n\n /**\n * Register an alias for a language\n * @param {string} alias - The alias\n * @param {string} language - The target language\n */\n registerAlias(alias, language) {\n this.#aliases.set(alias.toLowerCase(), language.toLowerCase());\n }\n\n /**\n * Get the executor for a language\n * @param {string} language\n * @returns {Executor | undefined}\n */\n get(language) {\n const lang = language.toLowerCase();\n\n // Check direct registration\n let executor = this.#executors.get(lang);\n if (executor) return executor;\n\n // Check aliases\n const aliasTarget = this.#aliases.get(lang);\n if (aliasTarget) {\n return this.#executors.get(aliasTarget);\n }\n\n return undefined;\n }\n\n /**\n * Check if a language is supported\n * @param {string} language\n * @returns {boolean}\n */\n supports(language) {\n return this.get(language) !== undefined;\n }\n\n /**\n * Get all registered languages\n * @returns {string[]}\n */\n languages() {\n const langs = new Set([...this.#executors.keys(), ...this.#aliases.keys()]);\n return Array.from(langs).sort();\n }\n\n /**\n * Get all registered executors (deduplicated)\n * @returns {Executor[]}\n */\n executors() {\n return Array.from(new Set(this.#executors.values()));\n }\n\n /**\n * Execute code using the appropriate executor\n * @param {string} code - Code to execute\n * @param {string} language - Language identifier\n * @param {ExecutionContext} context - Execution context\n * @param {ExecuteOptions} [options] - Execution options\n * @returns {Promise<ExecutionResult>}\n */\n async execute(code, language, context, options = {}) {\n const executor = this.get(language);\n\n if (!executor) {\n return {\n success: false,\n stdout: '',\n stderr: `No executor registered for language: ${language}`,\n error: {\n type: 'ExecutorError',\n message: `No executor registered for language: ${language}`,\n },\n displayData: [],\n assets: [],\n executionCount: 0,\n duration: 0,\n };\n }\n\n return executor.execute(code, context, options);\n }\n\n /**\n * Execute code with streaming using the appropriate executor\n * @param {string} code - Code to execute\n * @param {string} language - Language identifier\n * @param {ExecutionContext} context - Execution context\n * @param {ExecuteOptions} [options] - Execution options\n * @returns {AsyncGenerator<StreamEvent>}\n */\n async *executeStream(code, language, context, options = {}) {\n const executor = this.get(language);\n\n if (!executor) {\n yield /** @type {import('../types/streaming.js').ErrorEvent} */ ({\n type: 'error',\n error: {\n type: 'ExecutorError',\n message: `No executor registered for language: ${language}`,\n },\n });\n yield /** @type {import('../types/streaming.js').DoneEvent} */ ({\n type: 'done',\n });\n return;\n }\n\n if (executor.executeStream) {\n yield* executor.executeStream(code, context, options);\n } else {\n // Fall back to non-streaming execution wrapped in events\n const execId = options.execId || `exec-${Date.now()}`;\n\n yield /** @type {import('../types/streaming.js').StartEvent} */ ({\n type: 'start',\n execId,\n timestamp: new Date().toISOString(),\n });\n\n try {\n const result = await executor.execute(code, context, options);\n\n if (result.stdout) {\n yield /** @type {import('../types/streaming.js').StdoutEvent} */ ({\n type: 'stdout',\n content: result.stdout,\n accumulated: result.stdout,\n });\n }\n\n if (result.stderr) {\n yield /** @type {import('../types/streaming.js').StderrEvent} */ ({\n type: 'stderr',\n content: result.stderr,\n accumulated: result.stderr,\n });\n }\n\n for (const display of result.displayData) {\n yield /** @type {import('../types/streaming.js').DisplayEvent} */ ({\n type: 'display',\n data: display.data,\n metadata: display.metadata,\n });\n }\n\n yield /** @type {import('../types/streaming.js').ResultEvent} */ ({\n type: 'result',\n result,\n });\n } catch (error) {\n yield /** @type {import('../types/streaming.js').ErrorEvent} */ ({\n type: 'error',\n error: {\n type: error instanceof Error ? error.name : 'Error',\n message: error instanceof Error ? error.message : String(error),\n },\n });\n }\n\n yield /** @type {import('../types/streaming.js').DoneEvent} */ ({\n type: 'done',\n });\n }\n }\n\n /**\n * Unregister a language\n * @param {string} language\n * @returns {boolean}\n */\n unregister(language) {\n const lang = language.toLowerCase();\n const hadExecutor = this.#executors.delete(lang);\n const hadAlias = this.#aliases.delete(lang);\n return hadExecutor || hadAlias;\n }\n\n /**\n * Clear all registered executors\n */\n clear() {\n this.#executors.clear();\n this.#aliases.clear();\n }\n}\n\n/**\n * Create an executor registry\n * @returns {ExecutorRegistry}\n */\nexport function createExecutorRegistry() {\n return new ExecutorRegistry();\n}\n","/**\n * HTML Executor\n *\n * Executes HTML cells by producing displayData with text/html MIME type.\n * Optionally extracts and executes inline scripts.\n *\n * @module execute/html\n */\n\nimport { BaseExecutor } from './interface.js';\n\n/**\n * @typedef {import('../session/context/interface.js').ExecutionContext} ExecutionContext\n * @typedef {import('../types/execution.js').ExecuteOptions} ExecuteOptions\n * @typedef {import('../types/execution.js').ExecutionResult} ExecutionResult\n * @typedef {import('../types/execution.js').DisplayData} DisplayData\n */\n\n/**\n * Regex to match script tags and capture their content\n */\nconst SCRIPT_REGEX = /<script[^>]*>([\\s\\S]*?)<\\/script>/gi;\n\n/**\n * Regex to match style tags and capture their content\n */\nconst STYLE_REGEX = /<style[^>]*>([\\s\\S]*?)<\\/style>/gi;\n\n/**\n * Extract script tags from HTML\n * @param {string} html\n * @returns {{ html: string, scripts: string[] }}\n */\nfunction extractScripts(html) {\n const scripts = [];\n\n const cleaned = html.replace(SCRIPT_REGEX, (_, content) => {\n if (content.trim()) {\n scripts.push(content);\n }\n return '';\n });\n\n return { html: cleaned, scripts };\n}\n\n/**\n * Extract style tags from HTML\n * @param {string} html\n * @returns {{ html: string, styles: string[] }}\n */\nfunction extractStyles(html) {\n const styles = [];\n\n const cleaned = html.replace(STYLE_REGEX, (_, content) => {\n if (content.trim()) {\n styles.push(content);\n }\n return '';\n });\n\n return { html: cleaned, styles };\n}\n\n/**\n * HTML executor - produces displayData for HTML content\n */\nexport class HtmlExecutor extends BaseExecutor {\n /** @type {readonly string[]} */\n languages = ['html', 'htm', 'xhtml'];\n\n /**\n * Execute HTML cell\n * @param {string} code - HTML content\n * @param {ExecutionContext} context - Execution context\n * @param {ExecuteOptions} [options] - Execution options\n * @returns {Promise<ExecutionResult>}\n */\n async execute(code, context, options = {}) {\n const startTime = performance.now();\n\n // Extract scripts and styles\n const { html: htmlWithoutScripts, scripts } = extractScripts(code);\n const { html: cleanHtml, styles } = extractStyles(htmlWithoutScripts);\n\n // Build display data\n /** @type {DisplayData[]} */\n const displayData = [];\n\n // Main HTML content\n displayData.push({\n data: {\n 'text/html': code, // Send original HTML including scripts/styles\n },\n metadata: {\n // Metadata for client to decide how to render\n hasScripts: scripts.length > 0,\n hasStyles: styles.length > 0,\n scriptCount: scripts.length,\n styleCount: styles.length,\n trusted: options.cellMeta?.trusted ?? false,\n // Client can use this to decide whether to execute scripts\n executeScripts: options.cellMeta?.executeScripts ?? true,\n },\n });\n\n // Optionally include cleaned HTML (without scripts/styles) as alternate\n if (scripts.length > 0 || styles.length > 0) {\n displayData.push({\n data: {\n 'text/html+safe': cleanHtml.trim(),\n },\n metadata: {\n description: 'HTML content with scripts and styles removed',\n },\n });\n }\n\n // Include extracted styles as separate CSS display data\n if (styles.length > 0) {\n displayData.push({\n data: {\n 'text/css': styles.join('\\n\\n'),\n },\n metadata: {\n source: 'extracted',\n description: 'Styles extracted from HTML',\n },\n });\n }\n\n const duration = performance.now() - startTime;\n\n // Build info message\n const parts = [];\n if (cleanHtml.trim()) parts.push('HTML');\n if (styles.length > 0) parts.push(`${styles.length} style${styles.length > 1 ? 's' : ''}`);\n if (scripts.length > 0) parts.push(`${scripts.length} script${scripts.length > 1 ? 's' : ''}`);\n\n return {\n success: true,\n stdout: `Rendered: ${parts.join(', ') || 'empty'}`,\n stderr: '',\n result: undefined,\n displayData,\n assets: [],\n executionCount: 0,\n duration,\n };\n }\n}\n\n/**\n * Create an HTML executor\n * @returns {HtmlExecutor}\n */\nexport function createHtmlExecutor() {\n return new HtmlExecutor();\n}\n\n// Export utilities for use by clients\nexport { extractScripts, extractStyles };\n","/**\n * CSS Executor\n *\n * Executes CSS cells by producing displayData with text/css MIME type.\n * Supports optional scoping to prevent style leakage.\n *\n * @module execute/css\n */\n\nimport { BaseExecutor } from './interface.js';\n\n/**\n * @typedef {import('../session/context/interface.js').ExecutionContext} ExecutionContext\n * @typedef {import('../types/execution.js').ExecuteOptions} ExecuteOptions\n * @typedef {import('../types/execution.js').ExecutionResult} ExecutionResult\n * @typedef {import('../types/execution.js').DisplayData} DisplayData\n */\n\n/**\n * Generate a unique scope class name\n * @param {string} [id] - Optional ID to include\n * @returns {string}\n */\nexport function generateScopeClass(id) {\n const suffix = id\n ? id.replace(/[^a-z0-9]/gi, '')\n : Math.random().toString(36).slice(2, 8);\n return `mrmd-scope-${suffix}`;\n}\n\n/**\n * Scope CSS selectors by prefixing them with a scope selector\n *\n * @param {string} css - CSS content\n * @param {string} scopeSelector - Scope selector (e.g., '.mrmd-scope-abc123')\n * @returns {string} Scoped CSS\n *\n * @example\n * scopeStyles('.card { color: red; }', '.scope-123')\n * // Returns: '.scope-123 .card { color: red; }'\n */\nexport function scopeStyles(css, scopeSelector) {\n return css.replace(\n /([^{}]+)\\{/g,\n (match, selectors) => {\n const scoped = selectors\n .split(',')\n .map((selector) => {\n const trimmed = selector.trim();\n\n // Don't scope special selectors\n if (\n // @-rules (media, keyframes, supports, etc.)\n trimmed.startsWith('@') ||\n // Keyframe percentages and keywords\n trimmed.startsWith('from') ||\n trimmed.startsWith('to') ||\n /^\\d+%$/.test(trimmed) ||\n // Empty selector\n !trimmed\n ) {\n return trimmed;\n }\n\n // Handle :root specially - replace with scope selector\n if (trimmed === ':root') {\n return scopeSelector;\n }\n\n // Handle :host (for shadow DOM compatibility)\n if (trimmed === ':host') {\n return scopeSelector;\n }\n\n // Handle * selector\n if (trimmed === '*') {\n return `${scopeSelector} *`;\n }\n\n // Handle html/body - scope to container instead\n if (trimmed === 'html' || trimmed === 'body') {\n return scopeSelector;\n }\n\n // Prefix the selector\n return `${scopeSelector} ${trimmed}`;\n })\n .join(', ');\n\n return `${scoped} {`;\n }\n );\n}\n\n/**\n * Parse CSS to extract rule information\n * @param {string} css\n * @returns {{ rules: number, selectors: string[], variables: string[] }}\n */\nfunction parseCssInfo(css) {\n const selectors = [];\n const variables = [];\n\n // Count rules (rough estimate by counting {)\n const rules = (css.match(/\\{/g) || []).length;\n\n // Extract selectors (before {)\n const selectorMatches = css.match(/([^{}]+)\\{/g) || [];\n for (const match of selectorMatches) {\n const selector = match.replace('{', '').trim();\n if (selector && !selector.startsWith('@')) {\n selectors.push(...selector.split(',').map((s) => s.trim()));\n }\n }\n\n // Extract CSS custom properties (--var-name)\n const varMatches = css.match(/--[\\w-]+/g) || [];\n variables.push(...new Set(varMatches));\n\n return { rules, selectors: selectors.slice(0, 10), variables: variables.slice(0, 10) };\n}\n\n/**\n * CSS executor - produces displayData for CSS content\n */\nexport class CssExecutor extends BaseExecutor {\n /** @type {readonly string[]} */\n languages = ['css', 'style', 'stylesheet'];\n\n /**\n * Execute CSS cell\n * @param {string} code - CSS content\n * @param {ExecutionContext} context - Execution context\n * @param {ExecuteOptions} [options] - Execution options\n * @returns {Promise<ExecutionResult>}\n */\n async execute(code, context, options = {}) {\n const startTime = performance.now();\n\n // Determine if scoping is requested\n const shouldScope = options.cellMeta?.scoped ?? options.cellMeta?.scope ?? false;\n const scopeId = options.execId || options.cellId || `css-${Date.now()}`;\n const scopeClass = shouldScope ? generateScopeClass(scopeId) : undefined;\n\n // Apply scoping if requested\n const processedCss = scopeClass ? scopeStyles(code, `.${scopeClass}`) : code;\n\n // Parse CSS for info\n const info = parseCssInfo(code);\n\n // Build display data\n /** @type {DisplayData[]} */\n const displayData = [\n {\n data: {\n 'text/css': processedCss,\n },\n metadata: {\n // Original CSS (before scoping)\n original: code !== processedCss ? code : undefined,\n // Scoping info\n scoped: !!scopeClass,\n scopeClass,\n // CSS info\n ruleCount: info.rules,\n selectors: info.selectors,\n customProperties: info.variables,\n // Client hints\n inject: options.cellMeta?.inject ?? true,\n target: options.cellMeta?.target,\n },\n },\n ];\n\n const duration = performance.now() - startTime;\n\n // Build info message\n const parts = [`${info.rules} rule${info.rules !== 1 ? 's' : ''}`];\n if (scopeClass) {\n parts.push(`scoped to .${scopeClass}`);\n }\n if (info.variables.length > 0) {\n parts.push(`${info.variables.length} variable${info.variables.length !== 1 ? 's' : ''}`);\n }\n\n return {\n success: true,\n stdout: `CSS: ${parts.join(', ')}`,\n stderr: '',\n result: undefined,\n displayData,\n assets: [],\n executionCount: 0,\n duration,\n };\n }\n}\n\n/**\n * Create a CSS executor\n * @returns {CssExecutor}\n */\nexport function createCssExecutor() {\n return new CssExecutor();\n}\n","/**\n * Execute Module\n *\n * Provides executors for different languages and the registry to manage them.\n *\n * @module execute\n */\n\n// Interface\nexport { BaseExecutor } from './interface.js';\n\n// Registry\nexport { ExecutorRegistry, createExecutorRegistry } from './registry.js';\n\n// Executors\nexport { JavaScriptExecutor, createJavaScriptExecutor } from './javascript.js';\nexport { HtmlExecutor, createHtmlExecutor, extractScripts, extractStyles } from './html.js';\nexport {\n CssExecutor,\n createCssExecutor,\n scopeStyles,\n generateScopeClass,\n} from './css.js';\n\n// Import for factory function\nimport { ExecutorRegistry } from './registry.js';\nimport { JavaScriptExecutor } from './javascript.js';\nimport { HtmlExecutor } from './html.js';\nimport { CssExecutor } from './css.js';\n\n/**\n * Create a registry with default executors registered\n * @returns {ExecutorRegistry}\n */\nexport function createDefaultExecutorRegistry() {\n const registry = new ExecutorRegistry();\n registry.register(new JavaScriptExecutor());\n registry.register(new HtmlExecutor());\n registry.register(new CssExecutor());\n return registry;\n}\n","/**\n * MRP Runtime\n *\n * Main entry point for the mrmd-js runtime. Implements the MRMD Runtime\n * Protocol (MRP) as a JavaScript API for browser-based execution.\n *\n * @module runtime\n */\n\nimport { SessionManager } from './session/manager.js';\nimport { createDefaultExecutorRegistry } from './execute/index.js';\nimport { RUNTIME_NAME, RUNTIME_VERSION, DEFAULT_MAX_SESSIONS } from './constants.js';\n\n/**\n * @typedef {import('./types/capabilities.js').Capabilities} Capabilities\n * @typedef {import('./types/capabilities.js').Features} Features\n * @typedef {import('./types/capabilities.js').BrowserEnvironment} BrowserEnvironment\n * @typedef {import('./types/session.js').SessionInfo} SessionInfo\n * @typedef {import('./types/session.js').CreateSessionOptions} CreateSessionOptions\n * @typedef {import('./types/session.js').IsolationMode} IsolationMode\n * @typedef {import('./types/execution.js').ExecuteOptions} ExecuteOptions\n * @typedef {import('./types/execution.js').ExecutionResult} ExecutionResult\n * @typedef {import('./types/streaming.js').StreamEvent} StreamEvent\n * @typedef {import('./types/completion.js').CompleteOptions} CompleteOptions\n * @typedef {import('./types/completion.js').CompletionResult} CompletionResult\n * @typedef {import('./types/inspection.js').InspectOptions} InspectOptions\n * @typedef {import('./types/inspection.js').InspectResult} InspectResult\n * @typedef {import('./types/inspection.js').HoverResult} HoverResult\n * @typedef {import('./types/variables.js').VariableFilter} VariableFilter\n * @typedef {import('./types/variables.js').VariableInfo} VariableInfo\n * @typedef {import('./types/variables.js').VariableDetailOptions} VariableDetailOptions\n * @typedef {import('./types/variables.js').VariableDetail} VariableDetail\n * @typedef {import('./types/analysis.js').IsCompleteResult} IsCompleteResult\n * @typedef {import('./types/analysis.js').FormatResult} FormatResult\n * @typedef {import('./session/session.js').Session} Session\n * @typedef {import('./execute/registry.js').ExecutorRegistry} ExecutorRegistry\n * @typedef {import('./execute/interface.js').Executor} Executor\n */\n\n/**\n * @typedef {Object} MrpRuntimeOptions\n * @property {number} [maxSessions] - Maximum concurrent sessions\n * @property {IsolationMode} [defaultIsolation='iframe'] - Default isolation mode\n * @property {boolean} [defaultAllowMainAccess=false] - Allow main window access by default\n */\n\n/**\n * Asset stored in the runtime\n * @typedef {Object} StoredAsset\n * @property {string} url - Blob URL\n * @property {string} mimeType - MIME type\n * @property {string} assetType - Asset type category\n * @property {number} size - Size in bytes\n */\n\n/**\n * Main MRP runtime for browser JavaScript\n *\n * @example\n * const runtime = new MrpRuntime();\n * const session = runtime.createSession({ language: 'javascript' });\n * const result = await session.execute('const x = 1 + 2; x');\n * console.log(result.resultString); // \"3\"\n */\nexport class MrpRuntime {\n /** @type {SessionManager} */\n #sessionManager;\n\n /** @type {ExecutorRegistry} */\n #executorRegistry;\n\n /** @type {MrpRuntimeOptions} */\n #options;\n\n /** @type {Map<string, StoredAsset>} */\n #assets = new Map();\n\n /**\n * Create a new MRP runtime\n * @param {MrpRuntimeOptions} [options]\n */\n constructor(options = {}) {\n this.#options = {\n maxSessions: options.maxSessions ?? DEFAULT_MAX_SESSIONS,\n defaultIsolation: options.defaultIsolation ?? 'iframe',\n defaultAllowMainAccess: options.defaultAllowMainAccess ?? false,\n };\n\n this.#executorRegistry = createDefaultExecutorRegistry();\n this.#sessionManager = new SessionManager({\n maxSessions: this.#options.maxSessions,\n });\n }\n\n // ============================================================================\n // Capabilities\n // ============================================================================\n\n /**\n * Get runtime capabilities (MRP /capabilities)\n * @returns {Capabilities}\n */\n getCapabilities() {\n return {\n runtime: RUNTIME_NAME,\n version: RUNTIME_VERSION,\n languages: this.#executorRegistry.languages(),\n features: this.#getFeatures(),\n defaultSession: 'default',\n maxSessions: this.#options.maxSessions ?? DEFAULT_MAX_SESSIONS,\n environment: this.#getEnvironment(),\n };\n }\n\n /**\n * Get feature flags\n * @returns {Features}\n */\n #getFeatures() {\n return {\n execute: true,\n executeStream: true,\n interrupt: true,\n complete: true,\n inspect: true,\n hover: true,\n variables: true,\n variableExpand: true,\n reset: true,\n isComplete: true,\n format: true,\n assets: true,\n };\n }\n\n /**\n * Get environment info\n * @returns {BrowserEnvironment}\n */\n #getEnvironment() {\n return {\n userAgent: typeof navigator !== 'undefined' ? navigator.userAgent : 'unknown',\n language: typeof navigator !== 'undefined' ? navigator.language : 'en',\n platform: typeof navigator !== 'undefined' ? navigator.platform : 'unknown',\n isSecureContext: typeof window !== 'undefined' ? window.isSecureContext : false,\n };\n }\n\n // ============================================================================\n // Sessions\n // ============================================================================\n\n /**\n * List all active sessions (MRP GET /sessions)\n * @returns {SessionInfo[]}\n */\n listSessions() {\n return this.#sessionManager.list();\n }\n\n /**\n * Create a new session (MRP POST /sessions)\n * @param {CreateSessionOptions} [options]\n * @returns {Session}\n */\n createSession(options = {}) {\n const session = this.#sessionManager.create({\n ...options,\n isolation: options.isolation ?? this.#options.defaultIsolation,\n allowMainAccess: options.allowMainAccess ?? this.#options.defaultAllowMainAccess,\n executorRegistry: this.#executorRegistry,\n });\n return session;\n }\n\n /**\n * Get a session by ID (MRP GET /sessions/{id})\n * @param {string} id\n * @returns {Session | undefined}\n */\n getSession(id) {\n return this.#sessionManager.get(id);\n }\n\n /**\n * Get or create a session\n * @param {string} id\n * @param {CreateSessionOptions} [options]\n * @returns {Session}\n */\n getOrCreateSession(id, options = {}) {\n const existing = this.#sessionManager.get(id);\n if (existing) return existing;\n\n return this.createSession({ ...options, id });\n }\n\n /**\n * Destroy a session (MRP DELETE /sessions/{id})\n * @param {string} id\n * @returns {boolean}\n */\n destroySession(id) {\n return this.#sessionManager.destroy(id);\n }\n\n /**\n * Reset a session (MRP POST /sessions/{id}/reset)\n * @param {string} id\n * @returns {boolean}\n */\n resetSession(id) {\n const session = this.#sessionManager.get(id);\n if (!session) return false;\n session.reset();\n return true;\n }\n\n // ============================================================================\n // Execution (convenience methods using default session)\n // ============================================================================\n\n /**\n * Execute code (MRP POST /execute)\n * @param {string} code\n * @param {ExecuteOptions} [options]\n * @returns {Promise<ExecutionResult>}\n */\n async execute(code, options = {}) {\n const session = this.getOrCreateSession(options.session ?? 'default');\n return session.execute(code, options);\n }\n\n /**\n * Execute code with streaming output (MRP POST /execute/stream)\n * @param {string} code\n * @param {ExecuteOptions} [options]\n * @returns {AsyncGenerator<StreamEvent>}\n */\n async *executeStream(code, options = {}) {\n const session = this.getOrCreateSession(options.session ?? 'default');\n yield* session.executeStream(code, options);\n }\n\n /**\n * Send input to a waiting execution (MRP POST /input)\n * @param {string} sessionId\n * @param {string} execId\n * @param {string} text\n * @returns {boolean}\n */\n sendInput(sessionId, execId, text) {\n const session = this.#sessionManager.get(sessionId);\n if (!session) return false;\n return session.sendInput(execId, text);\n }\n\n /**\n * Interrupt execution (MRP POST /interrupt)\n * @param {string} [sessionId]\n * @param {string} [execId]\n * @returns {boolean}\n */\n interrupt(sessionId, execId) {\n if (sessionId) {\n const session = this.#sessionManager.get(sessionId);\n if (!session) return false;\n return session.interrupt(execId);\n }\n\n // Interrupt all sessions\n return this.#sessionManager.interruptAll();\n }\n\n // ============================================================================\n // LSP Features (convenience methods)\n // ============================================================================\n\n /**\n * Get completions (MRP POST /complete)\n * @param {string} code\n * @param {number} cursor\n * @param {CompleteOptions} [options]\n * @returns {CompletionResult}\n */\n complete(code, cursor, options = {}) {\n const session = this.getOrCreateSession(options.session ?? 'default');\n return session.complete(code, cursor, options);\n }\n\n /**\n * Get hover info (MRP POST /hover)\n * @param {string} code\n * @param {number} cursor\n * @param {string} [sessionId='default']\n * @returns {HoverResult}\n */\n hover(code, cursor, sessionId = 'default') {\n const session = this.getOrCreateSession(sessionId);\n return session.hover(code, cursor);\n }\n\n /**\n * Get inspection info (MRP POST /inspect)\n * @param {string} code\n * @param {number} cursor\n * @param {InspectOptions} [options]\n * @returns {InspectResult}\n */\n inspect(code, cursor, options = {}) {\n const session = this.getOrCreateSession(options.session ?? 'default');\n return session.inspect(code, cursor, options);\n }\n\n /**\n * List variables (MRP POST /variables)\n * @param {VariableFilter} [filter]\n * @param {string} [sessionId='default']\n * @returns {VariableInfo[]}\n */\n listVariables(filter, sessionId = 'default') {\n const session = this.getOrCreateSession(sessionId);\n return session.listVariables(filter);\n }\n\n /**\n * Get variable detail (MRP POST /variables/{name})\n * @param {string} name\n * @param {VariableDetailOptions} [options]\n * @returns {VariableDetail | null}\n */\n getVariable(name, options = {}) {\n const session = this.getOrCreateSession(options.session ?? 'default');\n return session.getVariable(name, options);\n }\n\n // ============================================================================\n // Analysis\n // ============================================================================\n\n /**\n * Check if code is complete (MRP POST /is_complete)\n * @param {string} code\n * @param {string} [sessionId='default']\n * @returns {IsCompleteResult}\n */\n isComplete(code, sessionId = 'default') {\n const session = this.getOrCreateSession(sessionId);\n return session.isComplete(code);\n }\n\n /**\n * Format code (MRP POST /format)\n * @param {string} code\n * @param {string} [sessionId='default']\n * @returns {Promise<FormatResult>}\n */\n async format(code, sessionId = 'default') {\n const session = this.getOrCreateSession(sessionId);\n return session.format(code);\n }\n\n // ============================================================================\n // Assets\n // ============================================================================\n\n /**\n * Create an asset (blob URL)\n * @param {Blob | string} content\n * @param {string} mimeType\n * @param {string} [name]\n * @returns {import('./types/execution.js').Asset}\n */\n createAsset(content, mimeType, name) {\n const blob = typeof content === 'string'\n ? new Blob([content], { type: mimeType })\n : content;\n\n const url = URL.createObjectURL(blob);\n const path = name ?? `asset-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`;\n\n const assetType = mimeType.startsWith('image/')\n ? 'image'\n : mimeType === 'text/html'\n ? 'html'\n : mimeType === 'application/json'\n ? 'json'\n : 'other';\n\n this.#assets.set(path, {\n url,\n mimeType,\n assetType,\n size: blob.size,\n });\n\n return {\n path,\n url,\n mimeType,\n assetType,\n size: blob.size,\n };\n }\n\n /**\n * Get an asset by path (MRP GET /assets/{path})\n * @param {string} path\n * @returns {string | null} Blob URL or null if not found\n */\n getAsset(path) {\n const asset = this.#assets.get(path);\n return asset?.url ?? null;\n }\n\n /**\n * Get asset info\n * @param {string} path\n * @returns {StoredAsset | null}\n */\n getAssetInfo(path) {\n return this.#assets.get(path) ?? null;\n }\n\n /**\n * List all assets\n * @returns {Array<{ path: string } & StoredAsset>}\n */\n listAssets() {\n return Array.from(this.#assets.entries()).map(([path, asset]) => ({\n path,\n ...asset,\n }));\n }\n\n /**\n * Remove an asset\n * @param {string} path\n * @returns {boolean}\n */\n removeAsset(path) {\n const asset = this.#assets.get(path);\n if (!asset) return false;\n\n URL.revokeObjectURL(asset.url);\n this.#assets.delete(path);\n return true;\n }\n\n /**\n * Clear all assets\n */\n clearAssets() {\n for (const asset of this.#assets.values()) {\n URL.revokeObjectURL(asset.url);\n }\n this.#assets.clear();\n }\n\n // ============================================================================\n // Extensibility\n // ============================================================================\n\n /**\n * Register a custom executor for a language\n * @param {string} language\n * @param {Executor} executor\n */\n registerExecutor(language, executor) {\n this.#executorRegistry.register(language, executor);\n }\n\n /**\n * Register a language alias\n * @param {string} alias\n * @param {string} language\n */\n registerLanguageAlias(alias, language) {\n this.#executorRegistry.registerAlias(alias, language);\n }\n\n /**\n * Get the executor registry\n * @returns {ExecutorRegistry}\n */\n getExecutorRegistry() {\n return this.#executorRegistry;\n }\n\n /**\n * Get the session manager\n * @returns {SessionManager}\n */\n getSessionManager() {\n return this.#sessionManager;\n }\n\n // ============================================================================\n // Lifecycle\n // ============================================================================\n\n /**\n * Destroy the runtime and clean up all resources\n */\n destroy() {\n this.#sessionManager.destroyAll();\n this.clearAssets();\n }\n}\n\n/**\n * Create a new MRP runtime\n * @param {MrpRuntimeOptions} [options]\n * @returns {MrpRuntime}\n */\nexport function createRuntime(options) {\n return new MrpRuntime(options);\n}\n","/**\n * HTML Renderer\n *\n * Utility for rendering HTML displayData from cell execution.\n * Provides three rendering modes: direct, shadow, and scoped.\n *\n * @module utils/html-renderer\n */\n\n/**\n * @typedef {'direct' | 'shadow' | 'scoped'} RenderMode\n */\n\n/**\n * @typedef {Object} RenderOptions\n * @property {RenderMode} [mode='direct'] - Rendering mode\n * @property {string} [scopeClass] - Scope class for 'scoped' mode\n * @property {boolean} [executeScripts=true] - Execute inline scripts\n * @property {(error: Error, script: string) => void} [onScriptError] - Script error callback\n * @property {boolean} [clear=true] - Clear container before rendering\n */\n\n/**\n * @typedef {Object} RenderResult\n * @property {HTMLElement} container - Container element\n * @property {ShadowRoot} [shadowRoot] - Shadow root if shadow mode\n * @property {number} scriptsExecuted - Number of scripts executed\n * @property {Error[]} scriptErrors - Script errors\n */\n\n/** @type {Set<string>} */\nconst executedScripts = new Set();\n\n/**\n * HTML Renderer class for rendering displayData\n */\nexport class HtmlRenderer {\n /** @type {Map<string, Set<string>>} */\n #scriptHashes = new Map();\n\n /**\n * Render HTML string into a container\n *\n * @param {string} html - HTML string to render\n * @param {HTMLElement} container - Target container\n * @param {RenderOptions} [options]\n * @returns {RenderResult}\n */\n render(html, container, options = {}) {\n const mode = options.mode ?? 'direct';\n\n switch (mode) {\n case 'shadow':\n return this.#renderShadow(html, container, options);\n case 'scoped':\n return this.#renderScoped(html, container, options);\n case 'direct':\n default:\n return this.#renderDirect(html, container, options);\n }\n }\n\n /**\n * Render displayData into container\n *\n * @param {import('../types/execution.js').DisplayData} displayData\n * @param {HTMLElement} container\n * @param {RenderOptions} [options]\n * @returns {RenderResult}\n */\n renderDisplayData(displayData, container, options = {}) {\n const html = displayData.data['text/html'];\n if (!html) {\n return {\n container,\n scriptsExecuted: 0,\n scriptErrors: [],\n };\n }\n\n // Use scopeClass from metadata if available\n const scopeClass = options.scopeClass ?? displayData.metadata?.scopeClass;\n\n return this.render(html, container, {\n ...options,\n scopeClass: typeof scopeClass === 'string' ? scopeClass : undefined,\n });\n }\n\n /**\n * Render in direct mode (no isolation)\n * @param {string} html\n * @param {HTMLElement} container\n * @param {RenderOptions} options\n * @returns {RenderResult}\n */\n #renderDirect(html, container, options) {\n if (options.clear !== false) {\n container.innerHTML = '';\n }\n\n // Extract scripts before setting innerHTML\n const { content, scripts } = this.#extractScripts(html);\n\n // Append content\n const temp = document.createElement('div');\n temp.innerHTML = content;\n while (temp.firstChild) {\n container.appendChild(temp.firstChild);\n }\n\n // Execute scripts\n const { executed, errors } = this.#executeScripts(scripts, container, options);\n\n return {\n container,\n scriptsExecuted: executed,\n scriptErrors: errors,\n };\n }\n\n /**\n * Render in shadow mode (full isolation via Shadow DOM)\n * @param {string} html\n * @param {HTMLElement} container\n * @param {RenderOptions} options\n * @returns {RenderResult}\n */\n #renderShadow(html, container, options) {\n // Create or reuse shadow root\n let shadowRoot = container.shadowRoot;\n if (!shadowRoot) {\n shadowRoot = container.attachShadow({ mode: 'open' });\n }\n\n if (options.clear !== false) {\n shadowRoot.innerHTML = '';\n }\n\n // Extract scripts\n const { content, scripts } = this.#extractScripts(html);\n\n // Set content\n const temp = document.createElement('div');\n temp.innerHTML = content;\n while (temp.firstChild) {\n shadowRoot.appendChild(temp.firstChild);\n }\n\n // Execute scripts in shadow context\n const { executed, errors } = this.#executeScripts(scripts, shadowRoot, options);\n\n return {\n container,\n shadowRoot,\n scriptsExecuted: executed,\n scriptErrors: errors,\n };\n }\n\n /**\n * Render in scoped mode (CSS isolation via class prefixing)\n * @param {string} html\n * @param {HTMLElement} container\n * @param {RenderOptions} options\n * @returns {RenderResult}\n */\n #renderScoped(html, container, options) {\n const scopeClass = options.scopeClass ?? `mrmd-scope-${Date.now()}`;\n\n // Add scope class to container\n container.classList.add(scopeClass);\n\n if (options.clear !== false) {\n container.innerHTML = '';\n }\n\n // Extract scripts and styles\n const { content, scripts, styles } = this.#extractScriptsAndStyles(html);\n\n // Scope and append styles\n for (const style of styles) {\n const scopedCss = scopeStyles(style, `.${scopeClass}`);\n const styleEl = document.createElement('style');\n styleEl.textContent = scopedCss;\n container.appendChild(styleEl);\n }\n\n // Append content\n const temp = document.createElement('div');\n temp.innerHTML = content;\n while (temp.firstChild) {\n container.appendChild(temp.firstChild);\n }\n\n // Execute scripts\n const { executed, errors } = this.#executeScripts(scripts, container, options);\n\n return {\n container,\n scriptsExecuted: executed,\n scriptErrors: errors,\n };\n }\n\n /**\n * Extract scripts from HTML\n * @param {string} html\n * @returns {{ content: string, scripts: string[] }}\n */\n #extractScripts(html) {\n const scripts = [];\n const content = html.replace(/<script\\b[^>]*>([\\s\\S]*?)<\\/script>/gi, (match, code) => {\n scripts.push(code.trim());\n return '';\n });\n return { content, scripts };\n }\n\n /**\n * Extract scripts and styles from HTML\n * @param {string} html\n * @returns {{ content: string, scripts: string[], styles: string[] }}\n */\n #extractScriptsAndStyles(html) {\n const scripts = [];\n const styles = [];\n\n let content = html.replace(/<script\\b[^>]*>([\\s\\S]*?)<\\/script>/gi, (match, code) => {\n scripts.push(code.trim());\n return '';\n });\n\n content = content.replace(/<style\\b[^>]*>([\\s\\S]*?)<\\/style>/gi, (match, css) => {\n styles.push(css.trim());\n return '';\n });\n\n return { content, scripts, styles };\n }\n\n /**\n * Execute scripts\n * @param {string[]} scripts\n * @param {HTMLElement | ShadowRoot} context\n * @param {RenderOptions} options\n * @returns {{ executed: number, errors: Error[] }}\n */\n #executeScripts(scripts, context, options) {\n if (options.executeScripts === false) {\n return { executed: 0, errors: [] };\n }\n\n let executed = 0;\n const errors = [];\n\n for (const code of scripts) {\n if (!code) continue;\n\n // Skip already executed scripts (deduplication by content hash)\n const hash = this.#hashCode(code);\n if (executedScripts.has(hash)) {\n continue;\n }\n executedScripts.add(hash);\n\n try {\n // Create script element for proper execution\n const script = document.createElement('script');\n script.textContent = code;\n\n // Add to document to execute\n if (context instanceof ShadowRoot) {\n context.appendChild(script);\n } else {\n context.appendChild(script);\n }\n\n executed++;\n } catch (err) {\n const error = err instanceof Error ? err : new Error(String(err));\n errors.push(error);\n options.onScriptError?.(error, code);\n }\n }\n\n return { executed, errors };\n }\n\n /**\n * Simple hash function for deduplication\n * @param {string} str\n * @returns {string}\n */\n #hashCode(str) {\n let hash = 0;\n for (let i = 0; i < str.length; i++) {\n const char = str.charCodeAt(i);\n hash = ((hash << 5) - hash) + char;\n hash = hash & hash;\n }\n return hash.toString(36);\n }\n\n /**\n * Clear executed scripts cache (for re-execution)\n * @param {string} [execId] - Clear specific execution, or all if not provided\n */\n clearScripts(execId) {\n if (execId) {\n this.#scriptHashes.delete(execId);\n } else {\n this.#scriptHashes.clear();\n executedScripts.clear();\n }\n }\n}\n\n/**\n * Scope CSS selectors with a prefix\n * @param {string} css\n * @param {string} scopeSelector\n * @returns {string}\n */\nexport function scopeStyles(css, scopeSelector) {\n // Simple CSS scoping - prefix each selector\n // This is a basic implementation; a full parser would be more robust\n\n return css.replace(\n /([^\\r\\n,{}]+)(,(?=[^}]*{)|\\s*{)/g,\n (match, selector, suffix) => {\n // Don't scope @-rules\n if (selector.trim().startsWith('@')) {\n return match;\n }\n\n // Don't scope :root, html, body\n const trimmed = selector.trim();\n if (trimmed === ':root' || trimmed === 'html' || trimmed === 'body') {\n return `${scopeSelector}${suffix}`;\n }\n\n // Scope the selector\n return `${scopeSelector} ${selector.trim()}${suffix}`;\n }\n );\n}\n\n/**\n * Create a new HTML renderer\n * @returns {HtmlRenderer}\n */\nexport function createHtmlRenderer() {\n return new HtmlRenderer();\n}\n","/**\n * CSS Applicator\n *\n * Utility for applying CSS displayData from cell execution.\n * Manages stylesheet lifecycle and scoping.\n *\n * @module utils/css-applicator\n */\n\n/**\n * @typedef {Object} ApplyOptions\n * @property {string} [id] - Style element ID for updates\n * @property {string} [scope] - Scope selector to prefix rules\n * @property {boolean} [append=false] - Append instead of replace\n */\n\n/**\n * @typedef {Object} ApplyResult\n * @property {HTMLStyleElement} element - The style element\n * @property {string} id - Style element ID\n * @property {boolean} replaced - Whether an existing style was replaced\n */\n\nimport { scopeStyles } from './html-renderer.js';\n\n/**\n * CSS Applicator class\n */\nexport class CssApplicator {\n /** @type {Map<string, HTMLStyleElement>} */\n #styles = new Map();\n\n /** @type {HTMLElement} */\n #container;\n\n /**\n * Create CSS applicator\n * @param {HTMLElement} [container=document.head] - Container for style elements\n */\n constructor(container) {\n this.#container = container ?? document.head;\n }\n\n /**\n * Apply CSS string\n *\n * @param {string} css - CSS string\n * @param {ApplyOptions} [options]\n * @returns {ApplyResult}\n */\n apply(css, options = {}) {\n const id = options.id ?? `mrmd-style-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`;\n\n // Scope CSS if requested\n let processedCss = css;\n if (options.scope) {\n processedCss = scopeStyles(css, options.scope);\n }\n\n // Check for existing style with same ID\n let element = this.#styles.get(id);\n let replaced = false;\n\n if (element) {\n if (options.append) {\n element.textContent += '\\n' + processedCss;\n } else {\n element.textContent = processedCss;\n replaced = true;\n }\n } else {\n element = document.createElement('style');\n element.id = id;\n element.textContent = processedCss;\n this.#container.appendChild(element);\n this.#styles.set(id, element);\n }\n\n return { element, id, replaced };\n }\n\n /**\n * Apply CSS from displayData\n *\n * @param {import('../types/execution.js').DisplayData} displayData\n * @param {ApplyOptions} [options]\n * @returns {ApplyResult | null}\n */\n applyDisplayData(displayData, options = {}) {\n const css = displayData.data['text/css'];\n if (!css) return null;\n\n // Use metadata for options if available\n const id = options.id ?? (displayData.metadata?.id ? String(displayData.metadata.id) : undefined);\n const scope = options.scope ?? (displayData.metadata?.scope ? String(displayData.metadata.scope) : undefined);\n\n return this.apply(css, { ...options, id, scope });\n }\n\n /**\n * Remove a style by ID\n * @param {string} id\n * @returns {boolean}\n */\n remove(id) {\n const element = this.#styles.get(id);\n if (!element) return false;\n\n element.remove();\n this.#styles.delete(id);\n return true;\n }\n\n /**\n * Remove all managed styles\n */\n clear() {\n for (const element of this.#styles.values()) {\n element.remove();\n }\n this.#styles.clear();\n }\n\n /**\n * Get all managed style IDs\n * @returns {string[]}\n */\n list() {\n return Array.from(this.#styles.keys());\n }\n\n /**\n * Get a style element by ID\n * @param {string} id\n * @returns {HTMLStyleElement | undefined}\n */\n get(id) {\n return this.#styles.get(id);\n }\n}\n\n/**\n * Create a CSS applicator\n * @param {HTMLElement} [container]\n * @returns {CssApplicator}\n */\nexport function createCssApplicator(container) {\n return new CssApplicator(container);\n}\n","/**\n * ANSI to HTML Renderer\n *\n * Converts ANSI escape sequences to HTML with appropriate styling.\n * Useful for rendering terminal output from code execution.\n *\n * @module utils/ansi-renderer\n */\n\n/**\n * @typedef {Object} AnsiStyle\n * @property {string} [color] - Foreground color\n * @property {string} [background] - Background color\n * @property {boolean} [bold] - Bold text\n * @property {boolean} [dim] - Dim text\n * @property {boolean} [italic] - Italic text\n * @property {boolean} [underline] - Underlined text\n * @property {boolean} [strikethrough] - Strikethrough text\n * @property {boolean} [inverse] - Inverse colors\n */\n\n/**\n * ANSI color codes to CSS colors\n */\nconst COLORS = {\n 30: '#000000', // Black\n 31: '#cc0000', // Red\n 32: '#00cc00', // Green\n 33: '#cccc00', // Yellow\n 34: '#0000cc', // Blue\n 35: '#cc00cc', // Magenta\n 36: '#00cccc', // Cyan\n 37: '#cccccc', // White\n 90: '#666666', // Bright Black (Gray)\n 91: '#ff0000', // Bright Red\n 92: '#00ff00', // Bright Green\n 93: '#ffff00', // Bright Yellow\n 94: '#0000ff', // Bright Blue\n 95: '#ff00ff', // Bright Magenta\n 96: '#00ffff', // Bright Cyan\n 97: '#ffffff', // Bright White\n};\n\nconst BG_COLORS = {\n 40: '#000000',\n 41: '#cc0000',\n 42: '#00cc00',\n 43: '#cccc00',\n 44: '#0000cc',\n 45: '#cc00cc',\n 46: '#00cccc',\n 47: '#cccccc',\n 100: '#666666',\n 101: '#ff0000',\n 102: '#00ff00',\n 103: '#ffff00',\n 104: '#0000ff',\n 105: '#ff00ff',\n 106: '#00ffff',\n 107: '#ffffff',\n};\n\n/**\n * ANSI Renderer class\n */\nexport class AnsiRenderer {\n /** @type {boolean} */\n #escapeHtml = true;\n\n /**\n * Create ANSI renderer\n * @param {{ escapeHtml?: boolean }} [options]\n */\n constructor(options = {}) {\n this.#escapeHtml = options.escapeHtml !== false;\n }\n\n /**\n * Convert ANSI text to HTML\n *\n * @param {string} text - Text with ANSI escape sequences\n * @returns {string} HTML string\n */\n render(text) {\n if (!text) return '';\n\n /** @type {AnsiStyle} */\n let currentStyle = {};\n const parts = [];\n let currentText = '';\n\n // ANSI escape sequence regex\n const ansiRegex = /\\x1b\\[([0-9;]*)m/g;\n let lastIndex = 0;\n let match;\n\n while ((match = ansiRegex.exec(text)) !== null) {\n // Add text before this escape sequence\n const beforeText = text.slice(lastIndex, match.index);\n if (beforeText) {\n currentText += beforeText;\n }\n\n // Parse codes\n const codes = match[1].split(';').map(c => parseInt(c, 10) || 0);\n\n // Flush current text with current style\n if (currentText) {\n parts.push(this.#wrapWithStyle(currentText, currentStyle));\n currentText = '';\n }\n\n // Update style based on codes\n currentStyle = this.#updateStyle(currentStyle, codes);\n\n lastIndex = ansiRegex.lastIndex;\n }\n\n // Add remaining text\n const remainingText = text.slice(lastIndex);\n if (remainingText) {\n currentText += remainingText;\n }\n\n if (currentText) {\n parts.push(this.#wrapWithStyle(currentText, currentStyle));\n }\n\n return parts.join('');\n }\n\n /**\n * Render to a DOM element\n *\n * @param {string} text - ANSI text\n * @param {HTMLElement} container - Target container\n * @param {{ clear?: boolean }} [options]\n */\n renderTo(text, container, options = {}) {\n const html = this.render(text);\n\n if (options.clear !== false) {\n container.innerHTML = '';\n }\n\n const wrapper = document.createElement('pre');\n wrapper.className = 'ansi-output';\n wrapper.innerHTML = html;\n container.appendChild(wrapper);\n }\n\n /**\n * Update style based on ANSI codes\n * @param {AnsiStyle} style\n * @param {number[]} codes\n * @returns {AnsiStyle}\n */\n #updateStyle(style, codes) {\n const newStyle = { ...style };\n\n for (const code of codes) {\n if (code === 0) {\n // Reset all\n return {};\n } else if (code === 1) {\n newStyle.bold = true;\n } else if (code === 2) {\n newStyle.dim = true;\n } else if (code === 3) {\n newStyle.italic = true;\n } else if (code === 4) {\n newStyle.underline = true;\n } else if (code === 7) {\n newStyle.inverse = true;\n } else if (code === 9) {\n newStyle.strikethrough = true;\n } else if (code === 22) {\n newStyle.bold = false;\n newStyle.dim = false;\n } else if (code === 23) {\n newStyle.italic = false;\n } else if (code === 24) {\n newStyle.underline = false;\n } else if (code === 27) {\n newStyle.inverse = false;\n } else if (code === 29) {\n newStyle.strikethrough = false;\n } else if (code === 39) {\n delete newStyle.color;\n } else if (code === 49) {\n delete newStyle.background;\n } else if (code >= 30 && code <= 37) {\n newStyle.color = COLORS[code];\n } else if (code >= 40 && code <= 47) {\n newStyle.background = BG_COLORS[code];\n } else if (code >= 90 && code <= 97) {\n newStyle.color = COLORS[code];\n } else if (code >= 100 && code <= 107) {\n newStyle.background = BG_COLORS[code];\n }\n // TODO: 256 color and RGB support (38;5;n and 38;2;r;g;b)\n }\n\n return newStyle;\n }\n\n /**\n * Wrap text with style span\n * @param {string} text\n * @param {AnsiStyle} style\n * @returns {string}\n */\n #wrapWithStyle(text, style) {\n // Escape HTML if needed\n let escaped = text;\n if (this.#escapeHtml) {\n escaped = text\n .replace(/&/g, '&')\n .replace(/</g, '<')\n .replace(/>/g, '>')\n .replace(/\"/g, '"')\n .replace(/'/g, ''');\n }\n\n // No style needed\n if (Object.keys(style).length === 0) {\n return escaped;\n }\n\n // Build inline style\n const styles = [];\n\n if (style.color) {\n styles.push(`color:${style.color}`);\n }\n if (style.background) {\n styles.push(`background-color:${style.background}`);\n }\n if (style.bold) {\n styles.push('font-weight:bold');\n }\n if (style.dim) {\n styles.push('opacity:0.5');\n }\n if (style.italic) {\n styles.push('font-style:italic');\n }\n if (style.underline) {\n styles.push('text-decoration:underline');\n }\n if (style.strikethrough) {\n if (style.underline) {\n styles.push('text-decoration:underline line-through');\n } else {\n styles.push('text-decoration:line-through');\n }\n }\n\n if (styles.length === 0) {\n return escaped;\n }\n\n return `<span style=\"${styles.join(';')}\">${escaped}</span>`;\n }\n\n /**\n * Strip ANSI codes from text\n * @param {string} text\n * @returns {string}\n */\n static strip(text) {\n return text.replace(/\\x1b\\[[0-9;]*m/g, '');\n }\n}\n\n/**\n * Convert ANSI text to HTML (convenience function)\n * @param {string} text\n * @returns {string}\n */\nexport function ansiToHtml(text) {\n return new AnsiRenderer().render(text);\n}\n\n/**\n * Strip ANSI codes (convenience function)\n * @param {string} text\n * @returns {string}\n */\nexport function stripAnsi(text) {\n return AnsiRenderer.strip(text);\n}\n\n/**\n * Create an ANSI renderer\n * @param {{ escapeHtml?: boolean }} [options]\n * @returns {AnsiRenderer}\n */\nexport function createAnsiRenderer(options) {\n return new AnsiRenderer(options);\n}\n"],"names":["formatValue","resolveValue","hasVariable","getChildren","formatVariableInfo","lspListVariables","lspGetVariableDetail","analysisIsComplete","scopeStyles"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/constants.js","../src/session/console-capture.js","../src/session/context/iframe.js","../src/session/context/main.js","../src/transform/extract.js","../src/execute/interface.js","../src/transform/persistence.js","../src/transform/async.js","../src/execute/javascript.js","../src/lsp/parse.js","../src/lsp/format.js","../src/lsp/complete.js","../src/lsp/hover.js","../src/lsp/inspect.js","../src/lsp/variables.js","../src/analysis/is-complete.js","../src/analysis/format.js","../src/session/session.js","../src/session/manager.js","../src/execute/registry.js","../src/execute/html.js","../src/execute/css.js","../src/execute/index.js","../src/runtime.js","../src/utils/html-renderer.js","../src/utils/css-applicator.js","../src/utils/ansi-renderer.js"],"sourcesContent":["/**\n * Constants\n *\n * Runtime constants for mrmd-js.\n * @module constants\n */\n\n/** Runtime name */\nexport const RUNTIME_NAME = 'mrmd-js';\n\n/** Runtime version */\nexport const RUNTIME_VERSION = '2.0.0';\n\n/** Default session ID */\nexport const DEFAULT_SESSION = 'default';\n\n/** Default max sessions */\nexport const DEFAULT_MAX_SESSIONS = 10;\n\n/** Supported languages */\nexport const SUPPORTED_LANGUAGES = [\n 'javascript',\n 'js',\n 'html',\n 'htm',\n 'css',\n 'style',\n];\n\n/** Default features */\nexport const DEFAULT_FEATURES = {\n execute: true,\n executeStream: true,\n interrupt: false, // Limited in browser\n complete: true,\n inspect: true,\n hover: true,\n variables: true,\n variableExpand: true,\n reset: true,\n isComplete: true,\n format: true,\n assets: true,\n};\n","/**\n * Console Capture\n *\n * Intercepts console methods to capture output during execution.\n * @module session/console-capture\n */\n\n/**\n * @typedef {import('./context/interface.js').LogEntry} LogEntry\n */\n\n/**\n * Check if a value is a Promise\n * @param {*} value\n * @returns {boolean}\n */\nfunction isPromise(value) {\n return value && typeof value === 'object' && typeof value.then === 'function';\n}\n\n/**\n * Format arguments for logging\n * @param {Array<*>} args\n * @returns {string}\n */\nfunction formatArgs(args) {\n return args\n .map((arg) => {\n if (arg === null) return 'null';\n if (arg === undefined) return 'undefined';\n if (typeof arg === 'object') {\n try {\n return JSON.stringify(arg, null, 2);\n } catch {\n return String(arg);\n }\n }\n return String(arg);\n })\n .join(' ');\n}\n\n/**\n * Check args for Promises and return warning message if found\n * @param {Array<*>} args\n * @returns {string | null}\n */\nfunction checkForPromises(args) {\n for (const arg of args) {\n if (isPromise(arg)) {\n return '⚠️ Promise detected - this value needs to be awaited. ' +\n 'Add \"await\" before the async call, or assign it to get the resolved value.';\n }\n }\n return null;\n}\n\n/**\n * Create a console capture for a window context\n */\nexport class ConsoleCapture {\n /** @type {Window} */\n #context;\n\n /** @type {LogEntry[]} */\n #queue = [];\n\n /** @type {Partial<Console> | null} */\n #originalConsole = null;\n\n /** @type {boolean} */\n #active = false;\n\n /**\n * @param {Window} context - The window context to capture console from\n */\n constructor(context) {\n this.#context = context;\n }\n\n /**\n * Start capturing console output\n */\n start() {\n if (this.#active) return;\n\n const console = this.#context.console;\n\n // Save originals\n this.#originalConsole = {\n log: console.log.bind(console),\n info: console.info.bind(console),\n warn: console.warn.bind(console),\n error: console.error.bind(console),\n };\n\n // Intercept methods\n console.log = (...args) => {\n this.#queue.push({ type: 'log', args, timestamp: Date.now() });\n // Check for unresolved Promises and warn\n const promiseWarning = checkForPromises(args);\n if (promiseWarning) {\n this.#queue.push({ type: 'warn', args: [promiseWarning], timestamp: Date.now() });\n this.#originalConsole?.warn?.(promiseWarning);\n }\n this.#originalConsole?.log?.(...args);\n };\n\n console.info = (...args) => {\n this.#queue.push({ type: 'info', args, timestamp: Date.now() });\n // Check for unresolved Promises and warn\n const promiseWarning = checkForPromises(args);\n if (promiseWarning) {\n this.#queue.push({ type: 'warn', args: [promiseWarning], timestamp: Date.now() });\n this.#originalConsole?.warn?.(promiseWarning);\n }\n this.#originalConsole?.info?.(...args);\n };\n\n console.warn = (...args) => {\n this.#queue.push({ type: 'warn', args, timestamp: Date.now() });\n this.#originalConsole?.warn?.(...args);\n };\n\n console.error = (...args) => {\n this.#queue.push({ type: 'error', args, timestamp: Date.now() });\n this.#originalConsole?.error?.(...args);\n };\n\n this.#active = true;\n }\n\n /**\n * Stop capturing and restore original console\n */\n stop() {\n if (!this.#active || !this.#originalConsole) return;\n\n const console = this.#context.console;\n\n if (this.#originalConsole.log) {\n console.log = this.#originalConsole.log;\n }\n if (this.#originalConsole.info) {\n console.info = this.#originalConsole.info;\n }\n if (this.#originalConsole.warn) {\n console.warn = this.#originalConsole.warn;\n }\n if (this.#originalConsole.error) {\n console.error = this.#originalConsole.error;\n }\n\n this.#originalConsole = null;\n this.#active = false;\n }\n\n /**\n * Clear the log queue\n */\n clear() {\n this.#queue = [];\n }\n\n /**\n * Get captured logs and clear queue\n * @returns {LogEntry[]}\n */\n flush() {\n const logs = this.#queue;\n this.#queue = [];\n return logs;\n }\n\n /**\n * Get captured logs without clearing\n * @returns {LogEntry[]}\n */\n peek() {\n return [...this.#queue];\n }\n\n /**\n * Convert logs to stdout/stderr strings\n * @param {LogEntry[]} logs\n * @returns {{ stdout: string, stderr: string }}\n */\n static toOutput(logs) {\n const stdout = [];\n const stderr = [];\n\n for (const log of logs) {\n const formatted = formatArgs(log.args);\n if (log.type === 'error') {\n stderr.push(`Error: ${formatted}`);\n } else if (log.type === 'warn') {\n stderr.push(`Warning: ${formatted}`);\n } else {\n stdout.push(formatted);\n }\n }\n\n return {\n stdout: stdout.join('\\n'),\n stderr: stderr.join('\\n'),\n };\n }\n}\n\n/**\n * Create a console capture for a context\n * @param {Window} context\n * @returns {ConsoleCapture}\n */\nexport function createConsoleCapture(context) {\n return new ConsoleCapture(context);\n}\n","/**\n * Iframe Execution Context\n *\n * Executes JavaScript in an isolated iframe environment.\n * Variables persist in the iframe's global scope between executions.\n *\n * @module session/context/iframe\n */\n\nimport { ConsoleCapture } from '../console-capture.js';\n\n/**\n * @typedef {import('./interface.js').ExecutionContext} ExecutionContext\n * @typedef {import('./interface.js').RawExecutionResult} RawExecutionResult\n * @typedef {import('./interface.js').LogEntry} LogEntry\n */\n\n/**\n * @typedef {Object} StdinRequest\n * @property {string} prompt - Prompt text to display\n * @property {boolean} password - Whether to hide input\n * @property {string} execId - Execution ID for this request\n */\n\n/**\n * @callback OnStdinRequestCallback\n * @param {StdinRequest} request - The stdin request\n * @returns {Promise<string>} - Resolves with user input\n */\n\n/**\n * @typedef {Object} IframeContextOptions\n * @property {boolean} [visible=false] - Whether iframe is visible\n * @property {HTMLElement} [target] - Target element for visible iframe\n * @property {boolean} [allowMainAccess=true] - Allow access to main document\n * @property {Record<string, *>} [utilities] - Custom utilities to inject\n * @property {Partial<CSSStyleDeclaration>} [styles] - Styles for visible iframe\n */\n\n/**\n * Iframe-based execution context\n * @implements {ExecutionContext}\n */\nexport class IframeContext {\n /** @type {HTMLIFrameElement | null} */\n #iframe = null;\n\n /** @type {Window | null} */\n #ctx = null;\n\n /** @type {Set<string>} */\n #trackedVars = new Set();\n\n /** @type {ConsoleCapture | null} */\n #consoleCapture = null;\n\n /** @type {IframeContextOptions} */\n #options;\n\n /** @type {boolean} */\n #initialized = false;\n\n /** @type {OnStdinRequestCallback | null} */\n #onStdinRequest = null;\n\n /** @type {string} */\n #currentExecId = '';\n\n /**\n * @param {IframeContextOptions} [options]\n */\n constructor(options = {}) {\n this.#options = {\n visible: false,\n allowMainAccess: true,\n ...options,\n };\n }\n\n /**\n * Initialize the iframe\n */\n #initialize() {\n if (this.#initialized) return;\n\n // Create iframe\n this.#iframe = document.createElement('iframe');\n this.#iframe.sandbox.add('allow-scripts');\n this.#iframe.sandbox.add('allow-same-origin');\n\n if (this.#options.visible && this.#options.target) {\n // Visible mode\n const styles = this.#options.styles || {};\n this.#iframe.style.width = styles.width || '100%';\n this.#iframe.style.height = styles.height || '100%';\n this.#iframe.style.border = styles.border || 'none';\n this.#iframe.style.display = 'block';\n\n // Apply additional styles\n for (const [key, value] of Object.entries(styles)) {\n if (value && typeof value === 'string') {\n this.#iframe.style.setProperty(key, value);\n }\n }\n\n this.#options.target.appendChild(this.#iframe);\n } else {\n // Hidden mode\n this.#iframe.style.display = 'none';\n document.body.appendChild(this.#iframe);\n }\n\n // Get context\n this.#ctx = /** @type {Window} */ (this.#iframe.contentWindow);\n\n // Set up utilities\n this.#setupUtilities();\n\n // Set up console capture\n this.#consoleCapture = new ConsoleCapture(this.#ctx);\n this.#consoleCapture.start();\n\n // Initialize tracking set in iframe\n this.#ctx.__userVars__ = this.#trackedVars;\n\n this.#initialized = true;\n }\n\n /**\n * Set up utility functions in the context\n */\n #setupUtilities() {\n if (!this.#ctx) return;\n\n // Access to main document\n if (this.#options.allowMainAccess) {\n this.#ctx.mainDocument = document;\n this.#ctx.mainWindow = window;\n }\n\n // Sleep helper\n this.#ctx.sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));\n\n // Print helper\n this.#ctx.print = (...args) => {\n this.#ctx?.console.log(...args);\n };\n\n // Input helper - prompts for user input (like Python's input())\n // Returns a Promise that resolves when user provides input\n const self = this;\n this.#ctx.input = async (prompt = '', options = {}) => {\n // Print prompt to console (like Python does)\n if (prompt) {\n self.#ctx?.console.log(prompt);\n }\n\n // If no stdin handler is set, fall back to browser prompt()\n if (!self.#onStdinRequest) {\n const result = self.#ctx?.prompt(prompt) ?? '';\n return result;\n }\n\n // Request input from the external handler\n const request = {\n prompt: prompt,\n password: options.password ?? false,\n execId: self.#currentExecId,\n };\n\n try {\n const response = await self.#onStdinRequest(request);\n // Remove trailing newline if present (input() in Python strips it)\n return response.replace(/\\n$/, '');\n } catch (error) {\n // If cancelled, throw an error like Python's KeyboardInterrupt\n throw new Error('Input cancelled');\n }\n };\n\n // Display helper for rich output\n this.#ctx.display = (data, mimeType = 'text/plain') => {\n // Store for retrieval\n if (!this.#ctx.__displayQueue__) {\n this.#ctx.__displayQueue__ = [];\n }\n\n let content;\n if (typeof data === 'string') {\n content = data;\n } else if (data instanceof HTMLElement) {\n content = data.outerHTML;\n mimeType = 'text/html';\n } else {\n try {\n content = JSON.stringify(data, null, 2);\n mimeType = 'application/json';\n } catch {\n content = String(data);\n }\n }\n\n this.#ctx.__displayQueue__.push({ data: { [mimeType]: content }, metadata: {} });\n };\n\n // Inject custom utilities\n if (this.#options.utilities) {\n for (const [key, value] of Object.entries(this.#options.utilities)) {\n this.#ctx[key] = value;\n }\n }\n }\n\n /**\n * Set the stdin request handler\n * @param {OnStdinRequestCallback | null} handler\n */\n setStdinHandler(handler) {\n this.#onStdinRequest = handler;\n }\n\n /**\n * Get the current stdin request handler\n * @returns {OnStdinRequestCallback | null}\n */\n getStdinHandler() {\n return this.#onStdinRequest;\n }\n\n /**\n * Execute code in the iframe\n * @param {string} code - Already transformed/wrapped code from executor\n * @param {{ execId?: string }} [options] - Execution options\n * @returns {Promise<RawExecutionResult>}\n */\n async execute(code, options = {}) {\n this.#initialize();\n\n if (!this.#ctx) {\n throw new Error('Context not initialized');\n }\n\n // Set current execution ID for input() calls\n this.#currentExecId = options.execId || '';\n\n // Clear display queue\n this.#ctx.__displayQueue__ = [];\n\n // Clear console capture\n this.#consoleCapture?.clear();\n\n const startTime = performance.now();\n\n try {\n // Execute - code is already transformed/wrapped by the executor\n const result = await this.#ctx.eval(code);\n const duration = performance.now() - startTime;\n\n // Get logs\n const logs = this.#consoleCapture?.flush() || [];\n\n return {\n result,\n logs,\n duration,\n };\n } catch (error) {\n const duration = performance.now() - startTime;\n const logs = this.#consoleCapture?.flush() || [];\n\n return {\n result: undefined,\n logs,\n error: error instanceof Error ? error : new Error(String(error)),\n duration,\n };\n } finally {\n // Clear current exec ID\n this.#currentExecId = '';\n }\n }\n\n /**\n * Get all user-defined variables\n * @returns {Record<string, *>}\n */\n getVariables() {\n if (!this.#ctx) return {};\n\n const vars = {};\n for (const name of this.#trackedVars) {\n try {\n vars[name] = this.#ctx[name];\n } catch {\n // Skip inaccessible\n }\n }\n return vars;\n }\n\n /**\n * Get a specific variable\n * @param {string} name\n * @returns {*}\n */\n getVariable(name) {\n if (!this.#ctx) return undefined;\n return this.#ctx[name];\n }\n\n /**\n * Check if variable exists\n * @param {string} name\n * @returns {boolean}\n */\n hasVariable(name) {\n if (!this.#ctx) return false;\n return name in this.#ctx;\n }\n\n /**\n * Get the global object\n * @returns {Window}\n */\n getGlobal() {\n this.#initialize();\n return /** @type {Window} */ (this.#ctx);\n }\n\n /**\n * Track a declared variable\n * @param {string} name\n */\n trackVariable(name) {\n this.#trackedVars.add(name);\n }\n\n /**\n * Get tracked variable names\n * @returns {Set<string>}\n */\n getTrackedVariables() {\n return this.#trackedVars;\n }\n\n /**\n * Reset the context\n */\n reset() {\n if (!this.#initialized) return;\n\n // Destroy and reinitialize\n this.destroy();\n this.#initialized = false;\n this.#trackedVars = new Set();\n this.#initialize();\n }\n\n /**\n * Destroy the context\n */\n destroy() {\n this.#consoleCapture?.stop();\n this.#consoleCapture = null;\n\n if (this.#iframe) {\n this.#iframe.parentElement?.removeChild(this.#iframe);\n this.#iframe = null;\n }\n\n this.#ctx = null;\n this.#initialized = false;\n }\n\n /**\n * Check if this is main context\n * @returns {boolean}\n */\n isMainContext() {\n return false;\n }\n\n /**\n * Get the iframe element\n * @returns {HTMLIFrameElement | null}\n */\n getIframe() {\n return this.#iframe;\n }\n\n /**\n * Get display data queue\n * @returns {Array<{data: Record<string, string>, metadata: Record<string, *>}>}\n */\n getDisplayQueue() {\n return this.#ctx?.__displayQueue__ || [];\n }\n}\n\n/**\n * Create an iframe context\n * @param {IframeContextOptions} [options]\n * @returns {IframeContext}\n */\nexport function createIframeContext(options) {\n return new IframeContext(options);\n}\n","/**\n * Main Execution Context\n *\n * Executes JavaScript in the main window context (no isolation).\n * Provides full access to the page's DOM and state.\n *\n * @module session/context/main\n */\n\nimport { ConsoleCapture } from '../console-capture.js';\n\n/**\n * @typedef {import('./interface.js').ExecutionContext} ExecutionContext\n * @typedef {import('./interface.js').RawExecutionResult} RawExecutionResult\n */\n\n/**\n * @typedef {Object} StdinRequest\n * @property {string} prompt - Prompt text to display\n * @property {boolean} password - Whether to hide input\n * @property {string} execId - Execution ID for this request\n */\n\n/**\n * @callback OnStdinRequestCallback\n * @param {StdinRequest} request - The stdin request\n * @returns {Promise<string>} - Resolves with user input\n */\n\n/**\n * @typedef {Object} MainContextOptions\n * @property {Record<string, *>} [utilities] - Custom utilities to inject\n */\n\n/**\n * Main window execution context (no isolation)\n * @implements {ExecutionContext}\n */\nexport class MainContext {\n /** @type {Set<string>} */\n #trackedVars = new Set();\n\n /** @type {ConsoleCapture | null} */\n #consoleCapture = null;\n\n /** @type {MainContextOptions} */\n #options;\n\n /** @type {boolean} */\n #initialized = false;\n\n /** @type {Array<{data: Record<string, string>, metadata: Record<string, *>}>} */\n #displayQueue = [];\n\n /** @type {OnStdinRequestCallback | null} */\n #onStdinRequest = null;\n\n /** @type {string} */\n #currentExecId = '';\n\n /**\n * @param {MainContextOptions} [options]\n */\n constructor(options = {}) {\n this.#options = options;\n }\n\n /**\n * Initialize the context\n */\n #initialize() {\n if (this.#initialized) return;\n\n // Set up utilities on window\n this.#setupUtilities();\n\n // Set up console capture\n this.#consoleCapture = new ConsoleCapture(window);\n this.#consoleCapture.start();\n\n this.#initialized = true;\n }\n\n /**\n * Set up utility functions\n */\n #setupUtilities() {\n const self = this;\n\n // Sleep helper (if not already defined)\n if (!('sleep' in window)) {\n /** @type {*} */ (window).sleep = (ms) =>\n new Promise((resolve) => setTimeout(resolve, ms));\n }\n\n // Print helper\n if (!('print' in window) || typeof window.print !== 'function') {\n /** @type {*} */ (window).print = (...args) => {\n console.log(...args);\n };\n }\n\n // Input helper - prompts for user input (like Python's input())\n /** @type {*} */ (window).__mrmd_input__ = async (prompt = '', options = {}) => {\n // Print prompt to console (like Python does)\n if (prompt) {\n console.log(prompt);\n }\n\n // If no stdin handler is set, fall back to browser prompt()\n if (!self.#onStdinRequest) {\n const result = window.prompt(prompt) ?? '';\n return result;\n }\n\n // Request input from the external handler\n const request = {\n prompt: prompt,\n password: options.password ?? false,\n execId: self.#currentExecId,\n };\n\n try {\n const response = await self.#onStdinRequest(request);\n // Remove trailing newline if present (input() in Python strips it)\n return response.replace(/\\n$/, '');\n } catch (error) {\n // If cancelled, throw an error like Python's KeyboardInterrupt\n throw new Error('Input cancelled');\n }\n };\n\n // Expose as 'input' if not already defined\n if (!('input' in window)) {\n /** @type {*} */ (window).input = /** @type {*} */ (window).__mrmd_input__;\n }\n\n // Display helper\n /** @type {*} */ (window).__mrmd_display__ = (data, mimeType = 'text/plain') => {\n let content;\n if (typeof data === 'string') {\n content = data;\n } else if (data instanceof HTMLElement) {\n content = data.outerHTML;\n mimeType = 'text/html';\n } else {\n try {\n content = JSON.stringify(data, null, 2);\n mimeType = 'application/json';\n } catch {\n content = String(data);\n }\n }\n\n this.#displayQueue.push({ data: { [mimeType]: content }, metadata: {} });\n };\n\n // Inject custom utilities\n if (this.#options.utilities) {\n for (const [key, value] of Object.entries(this.#options.utilities)) {\n /** @type {*} */ (window)[key] = value;\n }\n }\n }\n\n /**\n * Set the stdin request handler\n * @param {OnStdinRequestCallback | null} handler\n */\n setStdinHandler(handler) {\n this.#onStdinRequest = handler;\n }\n\n /**\n * Get the current stdin request handler\n * @returns {OnStdinRequestCallback | null}\n */\n getStdinHandler() {\n return this.#onStdinRequest;\n }\n\n /**\n * Execute code in main context\n * @param {string} code - Already transformed/wrapped code from executor\n * @param {{ execId?: string }} [options] - Execution options\n * @returns {Promise<RawExecutionResult>}\n */\n async execute(code, options = {}) {\n this.#initialize();\n\n // Set current execution ID for input() calls\n this.#currentExecId = options.execId || '';\n\n // Clear display queue\n this.#displayQueue = [];\n\n // Clear console capture\n this.#consoleCapture?.clear();\n\n const startTime = performance.now();\n\n try {\n // Execute - code is already transformed/wrapped by the executor\n const result = await eval(code);\n const duration = performance.now() - startTime;\n\n // Get logs\n const logs = this.#consoleCapture?.flush() || [];\n\n return {\n result,\n logs,\n duration,\n };\n } catch (error) {\n const duration = performance.now() - startTime;\n const logs = this.#consoleCapture?.flush() || [];\n\n return {\n result: undefined,\n logs,\n error: error instanceof Error ? error : new Error(String(error)),\n duration,\n };\n } finally {\n // Clear current exec ID\n this.#currentExecId = '';\n }\n }\n\n /**\n * Get all user-defined variables\n * @returns {Record<string, *>}\n */\n getVariables() {\n const vars = {};\n for (const name of this.#trackedVars) {\n try {\n vars[name] = /** @type {*} */ (window)[name];\n } catch {\n // Skip inaccessible\n }\n }\n return vars;\n }\n\n /**\n * Get a specific variable\n * @param {string} name\n * @returns {*}\n */\n getVariable(name) {\n return /** @type {*} */ (window)[name];\n }\n\n /**\n * Check if variable exists\n * @param {string} name\n * @returns {boolean}\n */\n hasVariable(name) {\n return name in window;\n }\n\n /**\n * Get the global object\n * @returns {Window}\n */\n getGlobal() {\n return window;\n }\n\n /**\n * Track a declared variable\n * @param {string} name\n */\n trackVariable(name) {\n this.#trackedVars.add(name);\n }\n\n /**\n * Get tracked variable names\n * @returns {Set<string>}\n */\n getTrackedVariables() {\n return this.#trackedVars;\n }\n\n /**\n * Reset the context\n */\n reset() {\n // Delete tracked variables from window\n for (const name of this.#trackedVars) {\n try {\n delete /** @type {*} */ (window)[name];\n } catch {\n // Some properties can't be deleted\n }\n }\n this.#trackedVars = new Set();\n this.#displayQueue = [];\n }\n\n /**\n * Destroy the context\n */\n destroy() {\n this.#consoleCapture?.stop();\n this.#consoleCapture = null;\n\n // Clean up tracked variables\n this.reset();\n\n // Clean up utilities we added\n try {\n delete /** @type {*} */ (window).__mrmd_display__;\n } catch {\n // Ignore\n }\n\n this.#initialized = false;\n }\n\n /**\n * Check if this is main context\n * @returns {boolean}\n */\n isMainContext() {\n return true;\n }\n\n /**\n * Get the iframe element\n * @returns {null}\n */\n getIframe() {\n return null;\n }\n\n /**\n * Get display data queue\n * @returns {Array<{data: Record<string, string>, metadata: Record<string, *>}>}\n */\n getDisplayQueue() {\n return this.#displayQueue;\n }\n}\n\n/**\n * Create a main context\n * @param {MainContextOptions} [options]\n * @returns {MainContext}\n */\nexport function createMainContext(options) {\n return new MainContext(options);\n}\n","/**\n * Extract Transform\n *\n * Extracts declared variable names from code.\n * @module transform/extract\n */\n\n/**\n * Extract all variable names that will be declared by the code.\n * Handles var, let, const, function, and class declarations.\n *\n * @param {string} code - Source code\n * @returns {string[]} Array of declared variable names\n *\n * @example\n * extractDeclaredVariables('const x = 1; let { a, b } = obj; function foo() {}')\n * // Returns: ['x', 'a', 'b', 'foo']\n */\nexport function extractDeclaredVariables(code) {\n const variables = new Set();\n\n // Remove strings, comments to avoid false matches\n const cleaned = removeStringsAndComments(code);\n\n // Match var/let/const declarations\n // Handles: const x = 1, let x = 1, var x = 1\n // Handles: const { a, b } = obj, const [a, b] = arr\n const varPattern = /\\b(?:var|let|const)\\s+([^=;]+?)(?:\\s*=|\\s*;|\\s*$)/g;\n\n let match;\n while ((match = varPattern.exec(cleaned)) !== null) {\n const declaration = match[1].trim();\n extractNamesFromPattern(declaration, variables);\n }\n\n // Match function declarations\n const funcPattern = /\\bfunction\\s+([a-zA-Z_$][a-zA-Z0-9_$]*)\\s*\\(/g;\n while ((match = funcPattern.exec(cleaned)) !== null) {\n variables.add(match[1]);\n }\n\n // Match class declarations\n const classPattern = /\\bclass\\s+([a-zA-Z_$][a-zA-Z0-9_$]*)/g;\n while ((match = classPattern.exec(cleaned)) !== null) {\n variables.add(match[1]);\n }\n\n return Array.from(variables);\n}\n\n/**\n * Extract variable names from a destructuring pattern or simple identifier\n * @param {string} pattern\n * @param {Set<string>} variables\n */\nfunction extractNamesFromPattern(pattern, variables) {\n // Simple identifier\n const simpleMatch = pattern.match(/^([a-zA-Z_$][a-zA-Z0-9_$]*)$/);\n if (simpleMatch) {\n variables.add(simpleMatch[1]);\n return;\n }\n\n // Object destructuring { a, b: c, ...rest }\n if (pattern.startsWith('{')) {\n const inner = pattern.slice(1, -1);\n // Split by comma, handling nested braces\n const parts = splitByComma(inner);\n for (const part of parts) {\n const trimmed = part.trim();\n if (!trimmed) continue;\n\n // Handle rest: ...rest\n if (trimmed.startsWith('...')) {\n const name = trimmed.slice(3).trim();\n if (isValidIdentifier(name)) {\n variables.add(name);\n }\n continue;\n }\n\n // Handle rename: key: name or key: pattern\n const colonIdx = trimmed.indexOf(':');\n if (colonIdx !== -1) {\n const value = trimmed.slice(colonIdx + 1).trim();\n extractNamesFromPattern(value, variables);\n } else {\n // Simple: key (which is also the variable name)\n const name = trimmed.split('=')[0].trim(); // Handle default values\n if (isValidIdentifier(name)) {\n variables.add(name);\n }\n }\n }\n return;\n }\n\n // Array destructuring [a, b, ...rest]\n if (pattern.startsWith('[')) {\n const inner = pattern.slice(1, -1);\n const parts = splitByComma(inner);\n for (const part of parts) {\n const trimmed = part.trim();\n if (!trimmed) continue;\n\n // Handle rest: ...rest\n if (trimmed.startsWith('...')) {\n const name = trimmed.slice(3).trim();\n if (isValidIdentifier(name)) {\n variables.add(name);\n }\n continue;\n }\n\n // Handle nested destructuring or simple name\n const nameOrPattern = trimmed.split('=')[0].trim();\n extractNamesFromPattern(nameOrPattern, variables);\n }\n return;\n }\n\n // Multiple declarations: a, b, c (from var a, b, c)\n if (pattern.includes(',')) {\n const parts = splitByComma(pattern);\n for (const part of parts) {\n const trimmed = part.trim().split('=')[0].trim();\n if (isValidIdentifier(trimmed)) {\n variables.add(trimmed);\n }\n }\n }\n}\n\n/**\n * Split string by commas, respecting nested brackets\n * @param {string} str\n * @returns {string[]}\n */\nfunction splitByComma(str) {\n const parts = [];\n let current = '';\n let depth = 0;\n\n for (const char of str) {\n if ((char === '{' || char === '[' || char === '(')) {\n depth++;\n current += char;\n } else if ((char === '}' || char === ']' || char === ')')) {\n depth--;\n current += char;\n } else if (char === ',' && depth === 0) {\n parts.push(current);\n current = '';\n } else {\n current += char;\n }\n }\n\n if (current) {\n parts.push(current);\n }\n\n return parts;\n}\n\n/**\n * Check if string is a valid JavaScript identifier\n * @param {string} name\n * @returns {boolean}\n */\nfunction isValidIdentifier(name) {\n return /^[a-zA-Z_$][a-zA-Z0-9_$]*$/.test(name);\n}\n\n/**\n * Remove strings and comments from code\n * @param {string} code\n * @returns {string}\n */\nfunction removeStringsAndComments(code) {\n let result = '';\n let i = 0;\n\n while (i < code.length) {\n // Single-line comment\n if (code[i] === '/' && code[i + 1] === '/') {\n while (i < code.length && code[i] !== '\\n') i++;\n continue;\n }\n\n // Multi-line comment\n if (code[i] === '/' && code[i + 1] === '*') {\n i += 2;\n while (i < code.length && !(code[i] === '*' && code[i + 1] === '/')) i++;\n i += 2;\n continue;\n }\n\n // Template literal\n if (code[i] === '`') {\n result += ' ';\n i++;\n while (i < code.length) {\n if (code[i] === '\\\\') {\n i += 2;\n continue;\n }\n if (code[i] === '`') {\n i++;\n break;\n }\n if (code[i] === '$' && code[i + 1] === '{') {\n i += 2;\n let depth = 1;\n while (i < code.length && depth > 0) {\n if (code[i] === '{') depth++;\n else if (code[i] === '}') depth--;\n i++;\n }\n continue;\n }\n i++;\n }\n continue;\n }\n\n // String\n if (code[i] === '\"' || code[i] === \"'\") {\n const quote = code[i];\n result += ' ';\n i++;\n while (i < code.length) {\n if (code[i] === '\\\\') {\n i += 2;\n continue;\n }\n if (code[i] === quote) {\n i++;\n break;\n }\n i++;\n }\n continue;\n }\n\n result += code[i];\n i++;\n }\n\n return result;\n}\n","/**\n * Executor Interface\n *\n * Defines the contract for language executors.\n * Each executor handles one or more languages and produces MRP-compliant results.\n *\n * @module execute/interface\n */\n\n/**\n * @typedef {import('../session/context/interface.js').ExecutionContext} ExecutionContext\n * @typedef {import('../types/execution.js').ExecuteOptions} ExecuteOptions\n * @typedef {import('../types/execution.js').ExecutionResult} ExecutionResult\n * @typedef {import('../types/streaming.js').StreamEvent} StreamEvent\n */\n\n/**\n * @typedef {Object} Executor\n * @property {readonly string[]} languages - Language identifiers this executor handles\n * @property {function(string, ExecutionContext, ExecuteOptions=): Promise<ExecutionResult>} execute - Execute code\n * @property {function(string, ExecutionContext, ExecuteOptions=): AsyncGenerator<StreamEvent>} [executeStream] - Execute with streaming\n */\n\n/**\n * @typedef {Object} ExecutorConfig\n * @property {string[]} languages - Language identifiers to register\n */\n\n/**\n * Base class for executors (optional, executors can also be plain objects)\n * @abstract\n */\nexport class BaseExecutor {\n /** @type {readonly string[]} */\n languages = [];\n\n /**\n * Execute code\n * @param {string} code - Code to execute\n * @param {ExecutionContext} context - Execution context\n * @param {ExecuteOptions} [options] - Execution options\n * @returns {Promise<ExecutionResult>}\n * @abstract\n */\n async execute(code, context, options = {}) {\n throw new Error('execute() must be implemented by subclass');\n }\n\n /**\n * Execute code with streaming output\n * Default implementation wraps execute() result\n *\n * @param {string} code - Code to execute\n * @param {ExecutionContext} context - Execution context\n * @param {ExecuteOptions} [options] - Execution options\n * @returns {AsyncGenerator<StreamEvent>}\n */\n async *executeStream(code, context, options = {}) {\n const execId = options.execId || `exec-${Date.now()}`;\n const timestamp = new Date().toISOString();\n\n // Start event\n yield /** @type {import('../types/streaming.js').StartEvent} */ ({\n type: 'start',\n execId,\n timestamp,\n });\n\n try {\n // Execute\n const result = await this.execute(code, context, options);\n\n // Stream stdout\n if (result.stdout) {\n yield /** @type {import('../types/streaming.js').StdoutEvent} */ ({\n type: 'stdout',\n content: result.stdout,\n accumulated: result.stdout,\n });\n }\n\n // Stream stderr\n if (result.stderr) {\n yield /** @type {import('../types/streaming.js').StderrEvent} */ ({\n type: 'stderr',\n content: result.stderr,\n accumulated: result.stderr,\n });\n }\n\n // Stream display data\n for (const display of result.displayData) {\n yield /** @type {import('../types/streaming.js').DisplayEvent} */ ({\n type: 'display',\n data: display.data,\n metadata: display.metadata,\n });\n }\n\n // Stream assets\n for (const asset of result.assets) {\n yield /** @type {import('../types/streaming.js').AssetEvent} */ ({\n type: 'asset',\n path: asset.path,\n url: asset.url,\n mimeType: asset.mimeType,\n assetType: asset.assetType,\n });\n }\n\n // Result event\n yield /** @type {import('../types/streaming.js').ResultEvent} */ ({\n type: 'result',\n result,\n });\n } catch (error) {\n // Error event\n yield /** @type {import('../types/streaming.js').ErrorEvent} */ ({\n type: 'error',\n error: {\n type: error instanceof Error ? error.name : 'Error',\n message: error instanceof Error ? error.message : String(error),\n traceback: error instanceof Error && error.stack ? error.stack.split('\\n') : undefined,\n },\n });\n }\n\n // Done event\n yield /** @type {import('../types/streaming.js').DoneEvent} */ ({\n type: 'done',\n });\n }\n\n /**\n * Check if this executor supports a language\n * @param {string} language\n * @returns {boolean}\n */\n supports(language) {\n return this.languages.includes(language.toLowerCase());\n }\n}\n\nexport {};\n","/**\n * Persistence Transform\n *\n * Transforms const/let declarations to var for persistence across executions.\n * In a REPL, we want variables to persist between cells. const/let are\n * block-scoped and would be lost; var attaches to the global scope.\n *\n * @module transform/persistence\n */\n\n/**\n * Transform const/let declarations to var for persistence.\n *\n * @param {string} code - Source code\n * @returns {string} Transformed code\n *\n * @example\n * transformForPersistence('const x = 1; let y = 2;')\n * // Returns: 'var x = 1; var y = 2;'\n */\nexport function transformForPersistence(code) {\n // Use a state machine approach to avoid transforming inside strings/comments\n let result = '';\n let i = 0;\n const len = code.length;\n\n while (i < len) {\n // Check for single-line comment\n if (code[i] === '/' && code[i + 1] === '/') {\n const start = i;\n i += 2;\n while (i < len && code[i] !== '\\n') i++;\n result += code.slice(start, i);\n continue;\n }\n\n // Check for multi-line comment\n if (code[i] === '/' && code[i + 1] === '*') {\n const start = i;\n i += 2;\n while (i < len && !(code[i] === '*' && code[i + 1] === '/')) i++;\n i += 2;\n result += code.slice(start, i);\n continue;\n }\n\n // Check for template literal\n if (code[i] === '`') {\n const start = i;\n i++;\n while (i < len) {\n if (code[i] === '\\\\') {\n i += 2;\n continue;\n }\n if (code[i] === '`') {\n i++;\n break;\n }\n // Handle ${...} - need to track nested braces\n if (code[i] === '$' && code[i + 1] === '{') {\n i += 2;\n let braceDepth = 1;\n while (i < len && braceDepth > 0) {\n if (code[i] === '{') braceDepth++;\n else if (code[i] === '}') braceDepth--;\n i++;\n }\n continue;\n }\n i++;\n }\n result += code.slice(start, i);\n continue;\n }\n\n // Check for string (single or double quote)\n if (code[i] === '\"' || code[i] === \"'\") {\n const quote = code[i];\n const start = i;\n i++;\n while (i < len) {\n if (code[i] === '\\\\') {\n i += 2;\n continue;\n }\n if (code[i] === quote) {\n i++;\n break;\n }\n i++;\n }\n result += code.slice(start, i);\n continue;\n }\n\n // Check for regex (simple heuristic)\n if (code[i] === '/' && i > 0) {\n const prev = code[i - 1];\n // Regex can follow: ( = : [ ! & | ? { } ; , \\n\n if ('(=:[!&|?{};,\\n'.includes(prev) || /\\s/.test(prev)) {\n const start = i;\n i++;\n while (i < len) {\n if (code[i] === '\\\\') {\n i += 2;\n continue;\n }\n if (code[i] === '/') {\n i++;\n // Skip flags\n while (i < len && /[gimsuy]/.test(code[i])) i++;\n break;\n }\n if (code[i] === '\\n') break; // Invalid regex\n i++;\n }\n result += code.slice(start, i);\n continue;\n }\n }\n\n // Check for const/let keywords\n if (isWordBoundary(code, i)) {\n if (code.slice(i, i + 5) === 'const' && isWordBoundaryAfter(code, i + 5)) {\n result += 'var';\n i += 5;\n continue;\n }\n if (code.slice(i, i + 3) === 'let' && isWordBoundaryAfter(code, i + 3)) {\n result += 'var';\n i += 3;\n continue;\n }\n }\n\n result += code[i];\n i++;\n }\n\n return result;\n}\n\n/**\n * Check if position is at a word boundary\n * @param {string} code\n * @param {number} pos\n * @returns {boolean}\n */\nfunction isWordBoundary(code, pos) {\n if (pos === 0) return true;\n if (pos >= code.length) return true;\n\n const before = code[pos - 1];\n const after = code[pos];\n\n const isWordChar = (c) => /[a-zA-Z0-9_$]/.test(c);\n\n // Boundary if previous char is not a word char\n if (pos > 0 && isWordChar(before)) return false;\n // Or if position is at end and next char is not word char\n if (pos < code.length && !isWordChar(after)) return true;\n\n return true;\n}\n\n/**\n * Check if position after keyword is a word boundary\n * @param {string} code\n * @param {number} pos - Position after the keyword\n * @returns {boolean}\n */\nfunction isWordBoundaryAfter(code, pos) {\n if (pos >= code.length) return true;\n return !/[a-zA-Z0-9_$]/.test(code[pos]);\n}\n","/**\n * Async Transform\n *\n * Wraps code to support top-level await and auto-awaits common async patterns.\n * This makes JavaScript feel more linear like Python/R/Julia.\n * @module transform/async\n */\n\n/**\n * Patterns that should be auto-awaited\n * These are common async operations that return Promises\n */\nconst AUTO_AWAIT_PATTERNS = [\n // Fetch API\n /\\bfetch\\s*\\(/g,\n // Dynamic import\n /\\bimport\\s*\\(/g,\n // Response methods\n /\\.json\\s*\\(/g,\n /\\.text\\s*\\(/g,\n /\\.blob\\s*\\(/g,\n /\\.arrayBuffer\\s*\\(/g,\n /\\.formData\\s*\\(/g,\n // Common async patterns\n /\\.then\\s*\\(/g,\n /\\.catch\\s*\\(/g,\n /\\.finally\\s*\\(/g,\n];\n\n/**\n * Auto-insert await before common async function calls\n * This makes JavaScript feel more linear like Python/R\n *\n * @param {string} code - Source code\n * @returns {string} Code with auto-awaits inserted\n */\nfunction autoInsertAwaits(code) {\n // Don't process if code already uses await extensively\n // (user knows what they're doing)\n const awaitCount = (code.match(/\\bawait\\b/g) || []).length;\n const lines = code.split('\\n').length;\n if (awaitCount > lines / 2) {\n return code;\n }\n\n let result = code;\n\n // Track positions to avoid double-processing\n // We need to be careful not to add await before already-awaited expressions\n\n // First, temporarily replace existing awaits to protect them\n const awaitPlaceholders = [];\n result = result.replace(/\\bawait\\s+/g, (match) => {\n const placeholder = `__AWAIT_PLACEHOLDER_${awaitPlaceholders.length}__`;\n awaitPlaceholders.push(match);\n return placeholder;\n });\n\n // Also protect strings, comments, and template literals\n const protectedStrings = [];\n\n // Protect comments FIRST (before strings) to handle apostrophes in comments like \"doesn't\"\n result = result.replace(/\\/\\/[^\\n]*/g, (match) => {\n const placeholder = `__PROTECTED_${protectedStrings.length}__`;\n protectedStrings.push(match);\n return placeholder;\n });\n result = result.replace(/\\/\\*[\\s\\S]*?\\*\\//g, (match) => {\n const placeholder = `__PROTECTED_${protectedStrings.length}__`;\n protectedStrings.push(match);\n return placeholder;\n });\n\n // Protect template literals\n result = result.replace(/`(?:[^`\\\\]|\\\\.)*`/g, (match) => {\n const placeholder = `__PROTECTED_${protectedStrings.length}__`;\n protectedStrings.push(match);\n return placeholder;\n });\n\n // Protect strings (after comments, so apostrophes in comments don't interfere)\n result = result.replace(/\"(?:[^\"\\\\]|\\\\.)*\"/g, (match) => {\n const placeholder = `__PROTECTED_${protectedStrings.length}__`;\n protectedStrings.push(match);\n return placeholder;\n });\n result = result.replace(/'(?:[^'\\\\]|\\\\.)*'/g, (match) => {\n const placeholder = `__PROTECTED_${protectedStrings.length}__`;\n protectedStrings.push(match);\n return placeholder;\n });\n\n // Now auto-insert awaits for common patterns\n // fetch(...) -> await fetch(...)\n result = result.replace(/\\bfetch\\s*\\(/g, 'await fetch(');\n\n // import(...) -> await import(...)\n // But not \"import x from\" statements\n result = result.replace(/(?<![.\\w])import\\s*\\(/g, 'await import(');\n\n // .json() .text() .blob() etc on response objects\n // These methods also return Promises, so we need to await both:\n // response.json() -> await (await response).json()\n result = result.replace(/([a-zA-Z_$][a-zA-Z0-9_$]*)\\s*\\.\\s*json\\s*\\(\\s*\\)/g, 'await (await $1).json()');\n result = result.replace(/([a-zA-Z_$][a-zA-Z0-9_$]*)\\s*\\.\\s*text\\s*\\(\\s*\\)/g, 'await (await $1).text()');\n result = result.replace(/([a-zA-Z_$][a-zA-Z0-9_$]*)\\s*\\.\\s*blob\\s*\\(\\s*\\)/g, 'await (await $1).blob()');\n result = result.replace(/([a-zA-Z_$][a-zA-Z0-9_$]*)\\s*\\.\\s*arrayBuffer\\s*\\(\\s*\\)/g, 'await (await $1).arrayBuffer()');\n result = result.replace(/([a-zA-Z_$][a-zA-Z0-9_$]*)\\s*\\.\\s*formData\\s*\\(\\s*\\)/g, 'await (await $1).formData()');\n\n // Restore protected content\n for (let i = protectedStrings.length - 1; i >= 0; i--) {\n result = result.replace(`__PROTECTED_${i}__`, protectedStrings[i]);\n }\n\n // Restore existing awaits\n for (let i = awaitPlaceholders.length - 1; i >= 0; i--) {\n result = result.replace(`__AWAIT_PLACEHOLDER_${i}__`, awaitPlaceholders[i]);\n }\n\n // Clean up any double awaits we might have introduced\n result = result.replace(/\\bawait\\s+await\\b/g, 'await');\n\n return result;\n}\n\n/**\n * Check if code contains top-level await (or will after auto-insertion)\n * @param {string} code\n * @returns {boolean}\n */\nfunction hasTopLevelAwait(code) {\n // Simple check - look for await outside of async function/arrow\n // This is a heuristic; a proper check would need AST parsing\n\n // Remove strings, comments, and regex to avoid false positives\n // IMPORTANT: Remove comments FIRST to handle apostrophes in comments like \"doesn't\"\n const cleaned = code\n // Remove single-line comments FIRST (before strings)\n .replace(/\\/\\/[^\\n]*/g, '')\n // Remove multi-line comments\n .replace(/\\/\\*[\\s\\S]*?\\*\\//g, '')\n // Remove template literals\n .replace(/`[^`]*`/g, '')\n // Remove strings (after comments, so apostrophes in comments don't interfere)\n .replace(/\"(?:[^\"\\\\]|\\\\.)*\"/g, '')\n .replace(/'(?:[^'\\\\]|\\\\.)*'/g, '');\n\n // Track nesting depth of async contexts\n // This is simplified - real implementation would use AST\n let depth = 0;\n let i = 0;\n\n while (i < cleaned.length) {\n // Check for async function or async arrow\n if (cleaned.slice(i, i + 5) === 'async') {\n // Look ahead for function or arrow\n let j = i + 5;\n while (j < cleaned.length && /\\s/.test(cleaned[j])) j++;\n\n if (\n cleaned.slice(j, j + 8) === 'function' ||\n cleaned[j] === '('\n ) {\n // Found async context start\n depth++;\n }\n }\n\n // Track braces for context depth (simplified)\n if (cleaned[i] === '{') {\n // Already in async context, depth increases\n }\n if (cleaned[i] === '}') {\n // Could be end of async context\n if (depth > 0) depth--;\n }\n\n // Check for await at top level\n if (cleaned.slice(i, i + 5) === 'await') {\n const before = i > 0 ? cleaned[i - 1] : ' ';\n const after = i + 5 < cleaned.length ? cleaned[i + 5] : ' ';\n\n // Check it's a word boundary\n if (!/[a-zA-Z0-9_$]/.test(before) && !/[a-zA-Z0-9_$]/.test(after)) {\n // Found await - check if we're at top level\n // For simplicity, assume any await not deep in braces is top-level\n // A proper implementation would track async function scopes\n return true;\n }\n }\n\n i++;\n }\n\n return false;\n}\n\n/**\n * Wrap code for top-level await support\n *\n * Transforms code to run in an async IIFE that captures the last expression.\n *\n * @param {string} code - Source code\n * @returns {string} Wrapped code\n */\nexport function wrapForAsync(code) {\n const needsAsync = hasTopLevelAwait(code);\n\n // We always wrap to capture the return value\n // The wrapper captures the last expression value\n\n if (needsAsync) {\n return `(async () => {\n${code}\n})()`;\n }\n\n return `(() => {\n${code}\n})()`;\n}\n\n/**\n * Wrap code and capture the last expression value\n *\n * @param {string} code - Source code\n * @returns {string} Wrapped code that returns last expression\n */\nexport function wrapWithLastExpression(code) {\n // Auto-insert awaits for common async patterns (fetch, import, .json(), etc.)\n // This makes JavaScript feel more linear like Python/R/Julia\n const autoAwaitedCode = autoInsertAwaits(code);\n\n // Check if code needs async (either explicit await or auto-inserted)\n const needsAsync = hasTopLevelAwait(autoAwaitedCode);\n\n if (needsAsync) {\n // For code with await, wrap in async IIFE\n // This allows await to work at the \"top level\" of the user's code\n const asyncWrappedCode = `(async () => {\\n${autoAwaitedCode}\\n})()`;\n\n // Now wrap to capture the result\n // Use indirect eval (0, eval)() to run in global scope so var declarations persist\n const wrapped = `\n;(async function() {\n let __result__;\n try {\n __result__ = await (0, eval)(${JSON.stringify(asyncWrappedCode)});\n } catch (e) {\n if (e instanceof SyntaxError) {\n await (0, eval)(${JSON.stringify(asyncWrappedCode)});\n __result__ = undefined;\n } else {\n throw e;\n }\n }\n return __result__;\n})()`;\n return wrapped.trim();\n }\n\n // No async needed - use simpler synchronous wrapper\n // Use indirect eval (0, eval)() to run in global scope so var declarations persist\n // Note: Still use autoAwaitedCode in case auto-awaits were added but hasTopLevelAwait missed them\n const wrapped = `\n;(function() {\n let __result__;\n try {\n __result__ = (0, eval)(${JSON.stringify(autoAwaitedCode)});\n } catch (e) {\n if (e instanceof SyntaxError) {\n // Code might be statements, not expression\n (0, eval)(${JSON.stringify(autoAwaitedCode)});\n __result__ = undefined;\n } else {\n throw e;\n }\n }\n return __result__;\n})()`;\n\n return wrapped.trim();\n}\n","/**\n * JavaScript Executor\n *\n * Executes JavaScript code in an execution context.\n * Handles variable persistence, async/await, and console output.\n *\n * @module execute/javascript\n */\n\nimport { BaseExecutor } from './interface.js';\nimport { transformForPersistence } from '../transform/persistence.js';\nimport { wrapWithLastExpression } from '../transform/async.js';\nimport { extractDeclaredVariables } from '../transform/extract.js';\n\n/**\n * @typedef {import('../session/context/interface.js').ExecutionContext} ExecutionContext\n * @typedef {import('../types/execution.js').ExecuteOptions} ExecuteOptions\n * @typedef {import('../types/execution.js').ExecutionResult} ExecutionResult\n * @typedef {import('../types/execution.js').ExecutionError} ExecutionError\n * @typedef {import('../types/execution.js').DisplayData} DisplayData\n */\n\n/**\n * Format a value for display as a string\n * @param {*} value\n * @param {number} [maxLength=1000]\n * @returns {string | undefined}\n */\nfunction formatValue(value, maxLength = 1000) {\n if (value === undefined) return undefined;\n if (value === null) return 'null';\n\n if (typeof value === 'function') {\n return `[Function: ${value.name || 'anonymous'}]`;\n }\n\n if (typeof value === 'symbol') {\n return value.toString();\n }\n\n if (typeof value === 'object') {\n try {\n const json = JSON.stringify(value, null, 2);\n if (json.length > maxLength) {\n return json.slice(0, maxLength) + '...';\n }\n return json;\n } catch {\n return String(value);\n }\n }\n\n const str = String(value);\n if (str.length > maxLength) {\n return str.slice(0, maxLength) + '...';\n }\n return str;\n}\n\n/**\n * JavaScript executor\n */\nexport class JavaScriptExecutor extends BaseExecutor {\n /** @type {readonly string[]} */\n languages = ['javascript', 'js', 'ecmascript', 'es'];\n\n /**\n * Execute JavaScript code\n * @param {string} code - Code to execute\n * @param {ExecutionContext} context - Execution context\n * @param {ExecuteOptions} [options] - Execution options\n * @returns {Promise<ExecutionResult>}\n */\n async execute(code, context, options = {}) {\n const startTime = performance.now();\n\n // Extract and track declared variables\n const declaredVars = extractDeclaredVariables(code);\n for (const varName of declaredVars) {\n context.trackVariable(varName);\n }\n\n // Transform code for persistence (const/let → var)\n const transformed = transformForPersistence(code);\n\n // Wrap to capture last expression value and support async\n const wrapped = wrapWithLastExpression(transformed);\n\n try {\n // Execute in context (pass execId for input() support)\n let rawResult = await context.execute(wrapped, { execId: options.execId });\n\n // Auto-await if result is a Promise (catch cases not handled by auto-await transform)\n if (rawResult.result && typeof rawResult.result === 'object' && typeof rawResult.result.then === 'function') {\n try {\n rawResult.result = await rawResult.result;\n } catch (promiseError) {\n // Promise rejected - treat as error\n rawResult.error = promiseError instanceof Error ? promiseError : new Error(String(promiseError));\n rawResult.result = undefined;\n }\n }\n\n const duration = performance.now() - startTime;\n\n // Format result\n return this.#formatResult(rawResult, context, duration, options);\n } catch (error) {\n const duration = performance.now() - startTime;\n\n return {\n success: false,\n stdout: '',\n stderr: error instanceof Error ? `${error.name}: ${error.message}` : String(error),\n error: this.#formatError(error),\n displayData: [],\n assets: [],\n executionCount: 0,\n duration,\n };\n }\n }\n\n /**\n * Format raw execution result to MRP ExecutionResult\n * @param {import('../session/context/interface.js').RawExecutionResult} raw\n * @param {ExecutionContext} context\n * @param {number} duration\n * @param {ExecuteOptions} options\n * @returns {ExecutionResult}\n */\n #formatResult(raw, context, duration, options) {\n // Separate logs into stdout/stderr\n const stdout = raw.logs\n .filter((log) => log.type === 'log' || log.type === 'info')\n .map((log) => log.args.map((arg) => formatValue(arg) ?? '').join(' '))\n .join('\\n');\n\n const stderr = raw.logs\n .filter((log) => log.type === 'error' || log.type === 'warn')\n .map((log) => {\n const prefix = log.type === 'error' ? 'Error: ' : 'Warning: ';\n return prefix + log.args.map((arg) => formatValue(arg) ?? '').join(' ');\n })\n .join('\\n');\n\n // Format error if present\n /** @type {ExecutionError | undefined} */\n let error;\n if (raw.error) {\n error = this.#formatError(raw.error);\n }\n\n // Get display data from context\n /** @type {DisplayData[]} */\n const displayData = 'getDisplayQueue' in context ? context.getDisplayQueue() : [];\n\n return {\n success: !raw.error,\n stdout,\n stderr,\n result: raw.result,\n resultString: formatValue(raw.result),\n error,\n displayData,\n assets: [],\n executionCount: 0, // Will be set by session\n duration,\n };\n }\n\n /**\n * Format an error\n * @param {*} error\n * @returns {ExecutionError}\n */\n #formatError(error) {\n if (error instanceof Error) {\n /** @type {ExecutionError} */\n const formatted = {\n type: error.name,\n message: error.message,\n traceback: error.stack?.split('\\n'),\n };\n\n // Try to extract line/column from stack\n const lineMatch = error.stack?.match(/:(\\d+):(\\d+)/);\n if (lineMatch) {\n formatted.line = parseInt(lineMatch[1], 10);\n formatted.column = parseInt(lineMatch[2], 10);\n }\n\n return formatted;\n }\n\n return {\n type: 'Error',\n message: String(error),\n };\n }\n}\n\n/**\n * Create a JavaScript executor\n * @returns {JavaScriptExecutor}\n */\nexport function createJavaScriptExecutor() {\n return new JavaScriptExecutor();\n}\n","/**\n * Code Parsing Utilities\n *\n * Utilities for parsing JavaScript code to extract identifiers,\n * determine completion context, and find symbol boundaries.\n *\n * @module lsp/parse\n */\n\n/**\n * @typedef {Object} IdentifierInfo\n * @property {string} name - The identifier name\n * @property {string} full - Full path (e.g., \"obj.prop\" or \"arr[0]\")\n * @property {number} start - Start position in code\n * @property {number} end - End position in code\n */\n\n/**\n * @typedef {'member' | 'global' | 'bracket' | 'string' | 'comment' | 'none'} CompletionContextType\n */\n\n/**\n * @typedef {Object} CompletionContext\n * @property {CompletionContextType} type - Context type\n * @property {string} prefix - What user has typed\n * @property {string} [object] - Object path for member access\n * @property {number} start - Start of completion region\n * @property {number} end - End of completion region\n */\n\n// Characters that can be part of an identifier\nconst ID_START = /[$_a-zA-Z]/;\nconst ID_CONTINUE = /[$_a-zA-Z0-9]/;\n\n// JavaScript keywords\nconst KEYWORDS = new Set([\n 'await', 'break', 'case', 'catch', 'class', 'const', 'continue',\n 'debugger', 'default', 'delete', 'do', 'else', 'enum', 'export',\n 'extends', 'false', 'finally', 'for', 'function', 'if', 'import',\n 'in', 'instanceof', 'let', 'new', 'null', 'return', 'static',\n 'super', 'switch', 'this', 'throw', 'true', 'try', 'typeof',\n 'undefined', 'var', 'void', 'while', 'with', 'yield',\n // Future reserved\n 'implements', 'interface', 'package', 'private', 'protected', 'public',\n]);\n\n// Common globals to suggest\nconst COMMON_GLOBALS = [\n 'Array', 'Boolean', 'Date', 'Error', 'Function', 'JSON', 'Map',\n 'Math', 'Number', 'Object', 'Promise', 'Proxy', 'Reflect', 'RegExp',\n 'Set', 'String', 'Symbol', 'WeakMap', 'WeakSet',\n 'console', 'fetch', 'setTimeout', 'setInterval', 'clearTimeout',\n 'clearInterval', 'parseInt', 'parseFloat', 'isNaN', 'isFinite',\n 'encodeURI', 'decodeURI', 'encodeURIComponent', 'decodeURIComponent',\n];\n\n/**\n * Check if a character is an identifier start\n * @param {string} char\n * @returns {boolean}\n */\nexport function isIdentifierStart(char) {\n return ID_START.test(char);\n}\n\n/**\n * Check if a character is an identifier continuation\n * @param {string} char\n * @returns {boolean}\n */\nexport function isIdentifierPart(char) {\n return ID_CONTINUE.test(char);\n}\n\n/**\n * Check if a string is a JavaScript keyword\n * @param {string} str\n * @returns {boolean}\n */\nexport function isKeyword(str) {\n return KEYWORDS.has(str);\n}\n\n/**\n * Get all JavaScript keywords\n * @returns {string[]}\n */\nexport function getKeywords() {\n return Array.from(KEYWORDS);\n}\n\n/**\n * Get common global names\n * @returns {string[]}\n */\nexport function getCommonGlobals() {\n return COMMON_GLOBALS;\n}\n\n/**\n * Find the identifier at a given position in code\n * @param {string} code\n * @param {number} cursor - Cursor position (0-indexed)\n * @returns {IdentifierInfo | null}\n */\nexport function parseIdentifierAtPosition(code, cursor) {\n if (!code || cursor < 0 || cursor > code.length) {\n return null;\n }\n\n // Find the start of the identifier chain (handles obj.prop.sub)\n let start = cursor;\n let parenDepth = 0;\n let bracketDepth = 0;\n\n // Walk backwards to find the start\n while (start > 0) {\n const char = code[start - 1];\n\n // Handle brackets for array access\n if (char === ']') {\n bracketDepth++;\n start--;\n continue;\n }\n if (char === '[') {\n if (bracketDepth > 0) {\n bracketDepth--;\n start--;\n continue;\n }\n break;\n }\n\n // Skip over bracket contents\n if (bracketDepth > 0) {\n start--;\n continue;\n }\n\n // Handle dots for member access\n if (char === '.') {\n start--;\n continue;\n }\n\n // Handle identifier characters\n if (isIdentifierPart(char)) {\n start--;\n continue;\n }\n\n // Handle closing paren (for function calls like foo().bar)\n if (char === ')') {\n parenDepth++;\n start--;\n continue;\n }\n if (char === '(') {\n if (parenDepth > 0) {\n parenDepth--;\n start--;\n continue;\n }\n break;\n }\n\n // Skip over paren contents\n if (parenDepth > 0) {\n start--;\n continue;\n }\n\n // Stop at any other character\n break;\n }\n\n // Find the end of the identifier\n let end = cursor;\n while (end < code.length && isIdentifierPart(code[end])) {\n end++;\n }\n\n if (start === end) {\n return null;\n }\n\n const full = code.slice(start, end);\n\n // Extract just the last identifier name\n const lastDot = full.lastIndexOf('.');\n const name = lastDot >= 0 ? full.slice(lastDot + 1) : full;\n\n return {\n name,\n full,\n start,\n end,\n };\n}\n\n/**\n * Determine the completion context at cursor position\n * @param {string} code\n * @param {number} cursor\n * @returns {CompletionContext}\n */\nexport function parseCompletionContext(code, cursor) {\n // Default result\n const defaultResult = {\n type: /** @type {CompletionContextType} */ ('none'),\n prefix: '',\n start: cursor,\n end: cursor,\n };\n\n if (!code || cursor < 0 || cursor > code.length) {\n return defaultResult;\n }\n\n // Check if we're in a string or comment\n const contextType = getStringOrCommentContext(code, cursor);\n if (contextType === 'string' || contextType === 'comment') {\n return { type: contextType, prefix: '', start: cursor, end: cursor };\n }\n\n // Find what's immediately before the cursor\n let pos = cursor - 1;\n\n // Skip whitespace\n while (pos >= 0 && /\\s/.test(code[pos])) {\n pos--;\n }\n\n if (pos < 0) {\n return { type: 'global', prefix: '', start: cursor, end: cursor };\n }\n\n // Check for member access (dot notation)\n if (code[pos] === '.') {\n // Find the object before the dot\n const objectEnd = pos;\n const objectInfo = parseIdentifierAtPosition(code, objectEnd);\n\n if (objectInfo) {\n return {\n type: 'member',\n prefix: '',\n object: objectInfo.full,\n start: cursor,\n end: cursor,\n };\n }\n\n return { type: 'member', prefix: '', object: '', start: cursor, end: cursor };\n }\n\n // Check if we're typing an identifier\n if (isIdentifierPart(code[pos])) {\n // Walk back to find the start\n let start = pos;\n while (start > 0 && isIdentifierPart(code[start - 1])) {\n start--;\n }\n\n const prefix = code.slice(start, cursor);\n\n // Check what's before this identifier\n let beforeStart = start - 1;\n while (beforeStart >= 0 && /\\s/.test(code[beforeStart])) {\n beforeStart--;\n }\n\n if (beforeStart >= 0 && code[beforeStart] === '.') {\n // Member access with partial identifier\n const objectEnd = beforeStart;\n const objectInfo = parseIdentifierAtPosition(code, objectEnd);\n\n return {\n type: 'member',\n prefix,\n object: objectInfo?.full ?? '',\n start,\n end: cursor,\n };\n }\n\n // Global identifier\n return {\n type: 'global',\n prefix,\n start,\n end: cursor,\n };\n }\n\n // Check for bracket access\n if (code[pos] === '[') {\n // Find the object before the bracket\n const objectEnd = pos;\n const objectInfo = parseIdentifierAtPosition(code, objectEnd);\n\n if (objectInfo) {\n return {\n type: 'bracket',\n prefix: '',\n object: objectInfo.full,\n start: cursor,\n end: cursor,\n };\n }\n }\n\n return { type: 'global', prefix: '', start: cursor, end: cursor };\n}\n\n/**\n * Determine if cursor is inside a string or comment\n * @param {string} code\n * @param {number} cursor\n * @returns {'string' | 'comment' | null}\n */\nexport function getStringOrCommentContext(code, cursor) {\n let inSingleQuote = false;\n let inDoubleQuote = false;\n let inTemplate = false;\n let inLineComment = false;\n let inBlockComment = false;\n\n for (let i = 0; i < cursor && i < code.length; i++) {\n const char = code[i];\n const next = code[i + 1];\n const prev = code[i - 1];\n\n // Skip escaped characters in strings\n if ((inSingleQuote || inDoubleQuote || inTemplate) && prev === '\\\\') {\n continue;\n }\n\n // Line comment\n if (!inSingleQuote && !inDoubleQuote && !inTemplate && !inBlockComment) {\n if (char === '/' && next === '/') {\n inLineComment = true;\n i++; // Skip next char\n continue;\n }\n }\n\n // Block comment\n if (!inSingleQuote && !inDoubleQuote && !inTemplate && !inLineComment) {\n if (char === '/' && next === '*') {\n inBlockComment = true;\n i++;\n continue;\n }\n if (inBlockComment && char === '*' && next === '/') {\n inBlockComment = false;\n i++;\n continue;\n }\n }\n\n // End line comment at newline\n if (inLineComment && char === '\\n') {\n inLineComment = false;\n continue;\n }\n\n // Strings\n if (!inLineComment && !inBlockComment) {\n if (char === \"'\" && !inDoubleQuote && !inTemplate) {\n inSingleQuote = !inSingleQuote;\n continue;\n }\n if (char === '\"' && !inSingleQuote && !inTemplate) {\n inDoubleQuote = !inDoubleQuote;\n continue;\n }\n if (char === '`' && !inSingleQuote && !inDoubleQuote) {\n inTemplate = !inTemplate;\n continue;\n }\n }\n }\n\n if (inSingleQuote || inDoubleQuote || inTemplate) {\n return 'string';\n }\n if (inLineComment || inBlockComment) {\n return 'comment';\n }\n return null;\n}\n\n/**\n * Extract the word at cursor position (simpler than full identifier)\n * @param {string} code\n * @param {number} cursor\n * @returns {{word: string, start: number, end: number}}\n */\nexport function getWordAtCursor(code, cursor) {\n let start = cursor;\n let end = cursor;\n\n // Walk backwards\n while (start > 0 && isIdentifierPart(code[start - 1])) {\n start--;\n }\n\n // Walk forwards\n while (end < code.length && isIdentifierPart(code[end])) {\n end++;\n }\n\n return {\n word: code.slice(start, end),\n start,\n end,\n };\n}\n\n/**\n * Split an object path into parts\n * e.g., \"obj.prop[0].name\" → [\"obj\", \"prop\", \"0\", \"name\"]\n * @param {string} path\n * @returns {string[]}\n */\nexport function splitObjectPath(path) {\n const parts = [];\n let current = '';\n let inBracket = false;\n\n for (const char of path) {\n if (char === '.' && !inBracket) {\n if (current) parts.push(current);\n current = '';\n } else if (char === '[') {\n if (current) parts.push(current);\n current = '';\n inBracket = true;\n } else if (char === ']') {\n if (current) parts.push(current);\n current = '';\n inBracket = false;\n } else if (char === '\"' || char === \"'\") {\n // Skip quotes in bracket notation\n continue;\n } else {\n current += char;\n }\n }\n\n if (current) parts.push(current);\n return parts;\n}\n","/**\n * Value Formatting Utilities\n *\n * Utilities for formatting JavaScript values for display in\n * completions, hover, and variable inspection.\n *\n * @module lsp/format\n */\n\n/**\n * Format a value for display as a string\n * @param {*} value\n * @param {number} [maxLength=1000]\n * @returns {string | undefined}\n */\nexport function formatValue(value, maxLength = 1000) {\n if (value === undefined) return undefined;\n if (value === null) return 'null';\n\n if (typeof value === 'function') {\n const name = value.name || 'anonymous';\n return `[Function: ${name}]`;\n }\n\n if (typeof value === 'symbol') {\n return value.toString();\n }\n\n if (value instanceof Error) {\n return `${value.name}: ${value.message}`;\n }\n\n if (value instanceof RegExp) {\n return value.toString();\n }\n\n if (value instanceof Date) {\n return value.toISOString();\n }\n\n if (value instanceof Map) {\n const preview = Array.from(value.entries())\n .slice(0, 5)\n .map(([k, v]) => `${formatValueShort(k)} => ${formatValueShort(v)}`)\n .join(', ');\n const more = value.size > 5 ? `, ... (${value.size} total)` : '';\n return `Map(${value.size}) {${preview}${more}}`;\n }\n\n if (value instanceof Set) {\n const preview = Array.from(value)\n .slice(0, 5)\n .map(formatValueShort)\n .join(', ');\n const more = value.size > 5 ? `, ... (${value.size} total)` : '';\n return `Set(${value.size}) {${preview}${more}}`;\n }\n\n if (Array.isArray(value)) {\n const preview = value.slice(0, 5).map(formatValueShort).join(', ');\n const more = value.length > 5 ? `, ... (${value.length} total)` : '';\n return `[${preview}${more}]`;\n }\n\n if (typeof value === 'object') {\n try {\n const json = JSON.stringify(value, null, 2);\n if (json.length > maxLength) {\n return json.slice(0, maxLength) + '...';\n }\n return json;\n } catch {\n return String(value);\n }\n }\n\n const str = String(value);\n if (str.length > maxLength) {\n return str.slice(0, maxLength) + '...';\n }\n return str;\n}\n\n/**\n * Format a value for short display (single line, truncated)\n * @param {*} value\n * @param {number} [maxLength=50]\n * @returns {string}\n */\nexport function formatValueShort(value, maxLength = 50) {\n if (value === undefined) return 'undefined';\n if (value === null) return 'null';\n\n if (typeof value === 'string') {\n const truncated = value.length > maxLength - 2\n ? value.slice(0, maxLength - 5) + '...'\n : value;\n return JSON.stringify(truncated);\n }\n\n if (typeof value === 'number' || typeof value === 'boolean') {\n return String(value);\n }\n\n if (typeof value === 'function') {\n return `ƒ ${value.name || 'anonymous'}()`;\n }\n\n if (typeof value === 'symbol') {\n return value.toString();\n }\n\n if (Array.isArray(value)) {\n return `Array(${value.length})`;\n }\n\n if (value instanceof Date) {\n return value.toISOString();\n }\n\n if (value instanceof RegExp) {\n const str = value.toString();\n return str.length > maxLength ? str.slice(0, maxLength - 3) + '...' : str;\n }\n\n if (value instanceof Map) {\n return `Map(${value.size})`;\n }\n\n if (value instanceof Set) {\n return `Set(${value.size})`;\n }\n\n if (value instanceof Error) {\n return `${value.name}: ${value.message.slice(0, 30)}`;\n }\n\n if (typeof value === 'object') {\n const constructor = value.constructor?.name;\n if (constructor && constructor !== 'Object') {\n return constructor;\n }\n const keys = Object.keys(value);\n return `{${keys.slice(0, 3).join(', ')}${keys.length > 3 ? ', ...' : ''}}`;\n }\n\n return String(value).slice(0, maxLength);\n}\n\n/**\n * Get type name for a value\n * @param {*} value\n * @returns {string}\n */\nexport function getTypeName(value) {\n if (value === null) return 'null';\n if (value === undefined) return 'undefined';\n if (Array.isArray(value)) return 'Array';\n if (value instanceof Date) return 'Date';\n if (value instanceof RegExp) return 'RegExp';\n if (value instanceof Error) return value.constructor.name;\n if (value instanceof Map) return 'Map';\n if (value instanceof Set) return 'Set';\n if (value instanceof WeakMap) return 'WeakMap';\n if (value instanceof WeakSet) return 'WeakSet';\n if (value instanceof Promise) return 'Promise';\n if (value instanceof ArrayBuffer) return 'ArrayBuffer';\n\n // Typed arrays\n if (ArrayBuffer.isView(value)) {\n return value.constructor.name;\n }\n\n const type = typeof value;\n if (type === 'object') {\n const constructor = value.constructor;\n if (constructor && constructor.name !== 'Object') {\n return constructor.name;\n }\n return 'Object';\n }\n\n return type;\n}\n\n/**\n * Get the kind of a value for completion icons\n * @param {*} value\n * @returns {import('../types/completion.js').CompletionKind}\n */\nexport function getCompletionKind(value) {\n if (value === null || value === undefined) {\n return 'value';\n }\n\n if (typeof value === 'function') {\n // Check if it's a class (constructor)\n if (/^class\\s/.test(value.toString())) {\n return 'class';\n }\n return 'function';\n }\n\n if (typeof value === 'object') {\n if (Array.isArray(value)) return 'variable';\n if (value instanceof Map || value instanceof Set) return 'variable';\n return 'variable';\n }\n\n return 'value';\n}\n\n/**\n * Check if a value is expandable (has children)\n * @param {*} value\n * @returns {boolean}\n */\nexport function isExpandable(value) {\n if (value === null || value === undefined) return false;\n if (typeof value === 'object') return true;\n if (typeof value === 'function') return true;\n return false;\n}\n\n/**\n * Get function signature from a function\n * @param {Function} fn\n * @returns {string}\n */\nexport function getFunctionSignature(fn) {\n if (typeof fn !== 'function') return '';\n\n const str = fn.toString();\n\n // Handle arrow functions\n if (str.startsWith('(') || /^[a-zA-Z_$][a-zA-Z0-9_$]*\\s*=>/.test(str)) {\n const match = str.match(/^(\\([^)]*\\)|[a-zA-Z_$][a-zA-Z0-9_$]*)\\s*=>/);\n if (match) {\n const params = match[1].startsWith('(') ? match[1] : `(${match[1]})`;\n return `${params} => ...`;\n }\n }\n\n // Handle regular functions\n const funcMatch = str.match(/^(?:async\\s+)?function\\s*([^(]*)\\(([^)]*)\\)/);\n if (funcMatch) {\n const name = funcMatch[1].trim() || fn.name || 'anonymous';\n const params = funcMatch[2];\n return `function ${name}(${params})`;\n }\n\n // Handle method shorthand\n const methodMatch = str.match(/^(?:async\\s+)?([a-zA-Z_$][a-zA-Z0-9_$]*)\\s*\\(([^)]*)\\)/);\n if (methodMatch) {\n return `${methodMatch[1]}(${methodMatch[2]})`;\n }\n\n // Handle class\n if (str.startsWith('class')) {\n return `class ${fn.name || 'anonymous'}`;\n }\n\n // Fallback\n const name = fn.name || 'anonymous';\n const length = fn.length;\n const params = Array(length).fill('arg').map((a, i) => `${a}${i}`).join(', ');\n return `${name}(${params})`;\n}\n\n/**\n * Get source code for a function (if available)\n * @param {Function} fn\n * @returns {string | undefined}\n */\nexport function getFunctionSource(fn) {\n if (typeof fn !== 'function') return undefined;\n\n try {\n const source = fn.toString();\n // Check if it's native code\n if (source.includes('[native code]')) {\n return undefined;\n }\n return source;\n } catch {\n return undefined;\n }\n}\n\n/**\n * Get size description for a value\n * @param {*} value\n * @returns {string | undefined}\n */\nexport function getSizeDescription(value) {\n if (Array.isArray(value)) {\n return `${value.length} items`;\n }\n if (value instanceof Map || value instanceof Set) {\n return `${value.size} items`;\n }\n if (typeof value === 'string') {\n return `${value.length} chars`;\n }\n if (typeof value === 'object' && value !== null) {\n const keys = Object.keys(value);\n return `${keys.length} keys`;\n }\n return undefined;\n}\n","/**\n * Code Completion\n *\n * Provides runtime-aware code completions by introspecting live values\n * in the execution context.\n *\n * @module lsp/complete\n */\n\nimport {\n parseCompletionContext,\n splitObjectPath,\n isKeyword,\n getKeywords,\n getCommonGlobals,\n} from './parse.js';\n\nimport {\n formatValueShort,\n getTypeName,\n getCompletionKind,\n getFunctionSignature,\n} from './format.js';\n\n/**\n * @typedef {import('../session/context/interface.js').ExecutionContext} ExecutionContext\n * @typedef {import('../types/completion.js').CompletionResult} CompletionResult\n * @typedef {import('../types/completion.js').CompletionItem} CompletionItem\n * @typedef {import('../types/completion.js').CompleteOptions} CompleteOptions\n */\n\n/**\n * Get completions at cursor position\n *\n * @param {string} code - The code being edited\n * @param {number} cursor - Cursor position (0-indexed)\n * @param {ExecutionContext} context - Execution context for live values\n * @param {CompleteOptions} [options]\n * @returns {CompletionResult}\n */\nexport function getCompletions(code, cursor, context, options = {}) {\n const ctx = parseCompletionContext(code, cursor);\n\n // Don't complete inside strings or comments\n if (ctx.type === 'string' || ctx.type === 'comment') {\n return {\n matches: [],\n cursorStart: cursor,\n cursorEnd: cursor,\n source: 'runtime',\n };\n }\n\n /** @type {CompletionItem[]} */\n let matches = [];\n\n switch (ctx.type) {\n case 'member':\n matches = getMemberCompletions(ctx.object || '', ctx.prefix, context);\n break;\n\n case 'bracket':\n matches = getBracketCompletions(ctx.object || '', context);\n break;\n\n case 'global':\n default:\n matches = getGlobalCompletions(ctx.prefix, context);\n break;\n }\n\n // Filter by prefix\n if (ctx.prefix) {\n const lowerPrefix = ctx.prefix.toLowerCase();\n matches = matches.filter(item =>\n item.label.toLowerCase().startsWith(lowerPrefix)\n );\n }\n\n // Sort by priority and name\n matches.sort((a, b) => {\n const priorityDiff = (a.sortPriority ?? 50) - (b.sortPriority ?? 50);\n if (priorityDiff !== 0) return priorityDiff;\n return a.label.localeCompare(b.label);\n });\n\n return {\n matches,\n cursorStart: ctx.start,\n cursorEnd: ctx.end,\n source: 'runtime',\n };\n}\n\n/**\n * Get completions for member access (dot notation)\n * @param {string} objectPath\n * @param {string} prefix\n * @param {ExecutionContext} context\n * @returns {CompletionItem[]}\n */\nfunction getMemberCompletions(objectPath, prefix, context) {\n if (!objectPath) return [];\n\n // Resolve the object in context\n const value = resolveValue(objectPath, context);\n if (value === undefined && !objectPath.includes('.')) {\n // Check if it's a global\n const global = context.getGlobal();\n if (global && objectPath in global) {\n // @ts-ignore\n return getPropertiesOf(global[objectPath]);\n }\n }\n\n if (value === undefined || value === null) {\n return [];\n }\n\n return getPropertiesOf(value);\n}\n\n/**\n * Get completions for bracket access\n * @param {string} objectPath\n * @param {ExecutionContext} context\n * @returns {CompletionItem[]}\n */\nfunction getBracketCompletions(objectPath, context) {\n const value = resolveValue(objectPath, context);\n\n if (Array.isArray(value)) {\n // Suggest indices\n return value.slice(0, 20).map((_, i) => ({\n label: String(i),\n kind: /** @type {const} */ ('value'),\n detail: getTypeName(value[i]),\n valuePreview: formatValueShort(value[i]),\n sortPriority: 10,\n }));\n }\n\n if (value instanceof Map) {\n // Suggest keys\n return Array.from(value.keys()).slice(0, 20).map(key => ({\n label: String(key),\n insertText: typeof key === 'string' ? `\"${key}\"` : String(key),\n kind: /** @type {const} */ ('property'),\n detail: getTypeName(value.get(key)),\n valuePreview: formatValueShort(value.get(key)),\n sortPriority: 10,\n }));\n }\n\n if (typeof value === 'object' && value !== null) {\n // Suggest string keys\n return Object.keys(value).slice(0, 50).map(key => ({\n label: key,\n insertText: `\"${key}\"`,\n kind: /** @type {const} */ ('property'),\n detail: getTypeName(value[key]),\n valuePreview: formatValueShort(value[key]),\n sortPriority: 10,\n }));\n }\n\n return [];\n}\n\n/**\n * Get completions for global context\n * @param {string} prefix\n * @param {ExecutionContext} context\n * @returns {CompletionItem[]}\n */\nfunction getGlobalCompletions(prefix, context) {\n /** @type {CompletionItem[]} */\n const items = [];\n\n // 1. User-defined variables (highest priority)\n const userVars = context.getVariables();\n for (const [name, value] of Object.entries(userVars)) {\n items.push({\n label: name,\n kind: getCompletionKind(value),\n detail: getTypeName(value),\n valuePreview: formatValueShort(value),\n type: getTypeName(value),\n sortPriority: 10,\n });\n }\n\n // 2. Keywords\n for (const keyword of getKeywords()) {\n items.push({\n label: keyword,\n kind: 'keyword',\n sortPriority: 60,\n });\n }\n\n // 3. Common globals\n const global = context.getGlobal();\n for (const name of getCommonGlobals()) {\n if (name in userVars) continue; // Skip if user defined\n\n try {\n // @ts-ignore\n const value = global?.[name];\n if (value !== undefined) {\n items.push({\n label: name,\n kind: getCompletionKind(value),\n detail: getTypeName(value),\n type: getTypeName(value),\n sortPriority: 40,\n });\n }\n } catch {\n // Skip inaccessible\n }\n }\n\n // 4. Add some built-in globals that might be useful\n const builtinGlobals = ['globalThis', 'window', 'document', 'navigator', 'location'];\n for (const name of builtinGlobals) {\n if (name in userVars) continue;\n try {\n // @ts-ignore\n const value = global?.[name];\n if (value !== undefined) {\n items.push({\n label: name,\n kind: 'variable',\n detail: getTypeName(value),\n sortPriority: 50,\n });\n }\n } catch {\n // Skip inaccessible\n }\n }\n\n return items;\n}\n\n/**\n * Get all properties of an object as completion items\n * @param {*} value\n * @returns {CompletionItem[]}\n */\nfunction getPropertiesOf(value) {\n /** @type {CompletionItem[]} */\n const items = [];\n const seen = new Set();\n\n // Walk prototype chain\n let obj = value;\n let depth = 0;\n\n while (obj != null && depth < 5) {\n const names = Object.getOwnPropertyNames(obj);\n\n for (const name of names) {\n if (seen.has(name)) continue;\n if (name === 'constructor') continue; // Skip constructor\n seen.add(name);\n\n try {\n const descriptor = Object.getOwnPropertyDescriptor(obj, name);\n const propValue = descriptor?.get ? undefined : value[name];\n\n /** @type {CompletionItem} */\n const item = {\n label: name,\n kind: typeof propValue === 'function' ? 'method' : 'property',\n sortPriority: depth === 0 ? 20 : 30 + depth,\n };\n\n if (propValue !== undefined) {\n item.detail = getTypeName(propValue);\n item.type = getTypeName(propValue);\n\n if (typeof propValue === 'function') {\n item.detail = getFunctionSignature(propValue);\n } else {\n item.valuePreview = formatValueShort(propValue);\n }\n } else if (descriptor?.get) {\n item.detail = '(getter)';\n }\n\n items.push(item);\n } catch {\n // Skip inaccessible properties\n items.push({\n label: name,\n kind: 'property',\n detail: '(inaccessible)',\n sortPriority: 90,\n });\n }\n }\n\n obj = Object.getPrototypeOf(obj);\n depth++;\n }\n\n return items;\n}\n\n/**\n * Resolve a value from an object path in the context\n * @param {string} path\n * @param {ExecutionContext} context\n * @returns {*}\n */\nfunction resolveValue(path, context) {\n const parts = splitObjectPath(path);\n if (parts.length === 0) return undefined;\n\n // Start with user variables or global\n let value = context.getVariable(parts[0]);\n\n if (value === undefined) {\n // Try global\n const global = context.getGlobal();\n if (global && parts[0] in global) {\n // @ts-ignore\n value = global[parts[0]];\n }\n }\n\n if (value === undefined) return undefined;\n\n // Navigate path\n for (let i = 1; i < parts.length; i++) {\n if (value === null || value === undefined) return undefined;\n\n try {\n if (value instanceof Map) {\n value = value.get(parts[i]);\n } else {\n // @ts-ignore\n value = value[parts[i]];\n }\n } catch {\n return undefined;\n }\n }\n\n return value;\n}\n","/**\n * Hover Information\n *\n * Provides hover information (type and value preview) for symbols\n * by introspecting live values in the execution context.\n *\n * @module lsp/hover\n */\n\nimport { parseIdentifierAtPosition, splitObjectPath } from './parse.js';\nimport { formatValueShort, getTypeName, getFunctionSignature } from './format.js';\n\n/**\n * @typedef {import('../session/context/interface.js').ExecutionContext} ExecutionContext\n * @typedef {import('../types/inspection.js').HoverResult} HoverResult\n */\n\n/**\n * Get hover information at cursor position\n *\n * @param {string} code - The code being edited\n * @param {number} cursor - Cursor position (0-indexed)\n * @param {ExecutionContext} context - Execution context for live values\n * @returns {HoverResult}\n */\nexport function getHoverInfo(code, cursor, context) {\n // Find identifier at cursor\n const identifier = parseIdentifierAtPosition(code, cursor);\n\n if (!identifier) {\n return { found: false };\n }\n\n // Resolve the value\n const value = resolveValue(identifier.full, context);\n\n // Check if it exists\n const exists = value !== undefined || hasVariable(identifier.full, context);\n\n if (!exists) {\n return { found: false };\n }\n\n /** @type {HoverResult} */\n const result = {\n found: true,\n name: identifier.full,\n type: getTypeName(value),\n };\n\n // Add signature for functions\n if (typeof value === 'function') {\n result.signature = getFunctionSignature(value);\n } else {\n // Add value preview for non-functions\n result.value = formatValueShort(value, 100);\n }\n\n return result;\n}\n\n/**\n * Resolve a value from an object path in the context\n * @param {string} path\n * @param {ExecutionContext} context\n * @returns {*}\n */\nfunction resolveValue(path, context) {\n const parts = splitObjectPath(path);\n if (parts.length === 0) return undefined;\n\n // Start with user variables or global\n let value = context.getVariable(parts[0]);\n\n if (value === undefined) {\n // Try global\n const global = context.getGlobal();\n if (global && parts[0] in global) {\n // @ts-ignore\n value = global[parts[0]];\n }\n }\n\n if (value === undefined) return undefined;\n\n // Navigate path\n for (let i = 1; i < parts.length; i++) {\n if (value === null || value === undefined) return undefined;\n\n try {\n if (value instanceof Map) {\n value = value.get(parts[i]);\n } else {\n // @ts-ignore\n value = value[parts[i]];\n }\n } catch {\n return undefined;\n }\n }\n\n return value;\n}\n\n/**\n * Check if a variable exists in context\n * @param {string} path\n * @param {ExecutionContext} context\n * @returns {boolean}\n */\nfunction hasVariable(path, context) {\n const parts = splitObjectPath(path);\n if (parts.length === 0) return false;\n\n if (context.hasVariable(parts[0])) {\n return true;\n }\n\n // Check global\n const global = context.getGlobal();\n if (global && parts[0] in global) {\n return true;\n }\n\n return false;\n}\n","/**\n * Symbol Inspection\n *\n * Provides detailed inspection information for symbols including\n * signature, documentation, source code, and children.\n *\n * @module lsp/inspect\n */\n\nimport { parseIdentifierAtPosition, splitObjectPath } from './parse.js';\nimport {\n formatValue,\n formatValueShort,\n getTypeName,\n getCompletionKind,\n getFunctionSignature,\n getFunctionSource,\n isExpandable,\n getSizeDescription,\n} from './format.js';\n\n/**\n * @typedef {import('../session/context/interface.js').ExecutionContext} ExecutionContext\n * @typedef {import('../types/inspection.js').InspectOptions} InspectOptions\n * @typedef {import('../types/inspection.js').InspectResult} InspectResult\n * @typedef {import('../types/variables.js').VariableInfo} VariableInfo\n */\n\n/**\n * Get detailed inspection information at cursor position\n *\n * @param {string} code - The code being edited\n * @param {number} cursor - Cursor position (0-indexed)\n * @param {ExecutionContext} context - Execution context for live values\n * @param {InspectOptions} [options]\n * @returns {InspectResult}\n */\nexport function getInspectInfo(code, cursor, context, options = {}) {\n const detail = options.detail ?? 0;\n\n // Find identifier at cursor\n const identifier = parseIdentifierAtPosition(code, cursor);\n\n if (!identifier) {\n return { found: false, source: 'runtime' };\n }\n\n // Resolve the value\n const value = resolveValue(identifier.full, context);\n\n // Check if it exists\n const exists = value !== undefined || hasVariable(identifier.full, context);\n\n if (!exists) {\n return { found: false, source: 'runtime' };\n }\n\n /** @type {InspectResult} */\n const result = {\n found: true,\n source: 'runtime',\n name: identifier.name,\n kind: getInspectKind(value),\n type: getTypeName(value),\n value: formatValueShort(value, 200),\n };\n\n // Add function-specific info\n if (typeof value === 'function') {\n result.signature = getFunctionSignature(value);\n\n // Detail level 1: add docstring\n if (detail >= 1) {\n result.docstring = getDocstring(value);\n }\n\n // Detail level 2: add source code\n if (detail >= 2) {\n result.sourceCode = getFunctionSource(value);\n }\n }\n\n // Add children for expandable values\n if (detail >= 1 && isExpandable(value)) {\n result.children = getChildren(value);\n }\n\n return result;\n}\n\n/**\n * Inspect a specific object path\n *\n * @param {string} path - Object path to inspect (e.g., \"obj.prop\")\n * @param {ExecutionContext} context\n * @param {InspectOptions} [options]\n * @returns {InspectResult}\n */\nexport function inspectPath(path, context, options = {}) {\n const detail = options.detail ?? 0;\n\n const value = resolveValue(path, context);\n const exists = value !== undefined || hasVariable(path, context);\n\n if (!exists) {\n return { found: false, source: 'runtime' };\n }\n\n const parts = splitObjectPath(path);\n const name = parts[parts.length - 1] || path;\n\n /** @type {InspectResult} */\n const result = {\n found: true,\n source: 'runtime',\n name,\n kind: getInspectKind(value),\n type: getTypeName(value),\n value: formatValueShort(value, 200),\n };\n\n if (typeof value === 'function') {\n result.signature = getFunctionSignature(value);\n\n if (detail >= 1) {\n result.docstring = getDocstring(value);\n }\n\n if (detail >= 2) {\n result.sourceCode = getFunctionSource(value);\n }\n }\n\n if (detail >= 1 && isExpandable(value)) {\n result.children = getChildren(value);\n }\n\n return result;\n}\n\n/**\n * Get kind string for inspection\n * @param {*} value\n * @returns {string}\n */\nfunction getInspectKind(value) {\n if (value === null) return 'null';\n if (value === undefined) return 'undefined';\n\n if (typeof value === 'function') {\n const str = value.toString();\n if (str.startsWith('class ')) return 'class';\n if (/^(async\\s+)?function\\s*\\*/.test(str)) return 'generator';\n if (str.includes('=>')) return 'arrow-function';\n return 'function';\n }\n\n if (Array.isArray(value)) return 'array';\n if (value instanceof Map) return 'map';\n if (value instanceof Set) return 'set';\n if (value instanceof Date) return 'date';\n if (value instanceof RegExp) return 'regexp';\n if (value instanceof Error) return 'error';\n if (value instanceof Promise) return 'promise';\n\n const type = typeof value;\n if (type === 'object') return 'object';\n\n return type;\n}\n\n/**\n * Get docstring for a function (if available)\n * @param {Function} fn\n * @returns {string | undefined}\n */\nfunction getDocstring(fn) {\n if (typeof fn !== 'function') return undefined;\n\n try {\n const source = fn.toString();\n\n // Try to find JSDoc-style comments\n // Look for /** ... */ before function declaration\n // This won't work for most runtime functions, but worth trying\n const jsdocMatch = source.match(/\\/\\*\\*([\\s\\S]*?)\\*\\//);\n if (jsdocMatch) {\n return jsdocMatch[1]\n .split('\\n')\n .map(line => line.replace(/^\\s*\\*\\s?/, '').trim())\n .filter(line => line && !line.startsWith('@'))\n .join('\\n')\n .trim();\n }\n\n // Check for built-in documentation (MDN-style)\n const builtinDocs = getBuiltinDocumentation(fn);\n if (builtinDocs) {\n return builtinDocs;\n }\n\n return undefined;\n } catch {\n return undefined;\n }\n}\n\n/**\n * Get documentation for built-in functions\n * @param {Function} fn\n * @returns {string | undefined}\n */\nfunction getBuiltinDocumentation(fn) {\n // Map of common built-in functions to their descriptions\n const docs = {\n // Array methods\n 'push': 'Adds elements to the end of an array and returns the new length.',\n 'pop': 'Removes the last element from an array and returns it.',\n 'shift': 'Removes the first element from an array and returns it.',\n 'unshift': 'Adds elements to the beginning of an array and returns the new length.',\n 'slice': 'Returns a shallow copy of a portion of an array.',\n 'splice': 'Changes the contents of an array by removing or replacing elements.',\n 'map': 'Creates a new array with the results of calling a function on every element.',\n 'filter': 'Creates a new array with all elements that pass a test.',\n 'reduce': 'Executes a reducer function on each element, resulting in a single value.',\n 'forEach': 'Executes a function once for each array element.',\n 'find': 'Returns the first element that satisfies a testing function.',\n 'findIndex': 'Returns the index of the first element that satisfies a testing function.',\n 'includes': 'Determines whether an array includes a certain value.',\n 'indexOf': 'Returns the first index at which a given element can be found.',\n 'join': 'Joins all elements of an array into a string.',\n 'sort': 'Sorts the elements of an array in place and returns the array.',\n 'reverse': 'Reverses the elements of an array in place.',\n 'concat': 'Merges two or more arrays into a new array.',\n 'flat': 'Creates a new array with all sub-array elements concatenated.',\n 'flatMap': 'Maps each element then flattens the result into a new array.',\n\n // String methods\n 'charAt': 'Returns the character at a specified index.',\n 'charCodeAt': 'Returns the Unicode value of the character at an index.',\n 'split': 'Splits a string into an array of substrings.',\n 'substring': 'Returns a portion of the string between two indices.',\n 'substr': 'Returns a portion of the string starting from an index.',\n 'toLowerCase': 'Returns the string converted to lowercase.',\n 'toUpperCase': 'Returns the string converted to uppercase.',\n 'trim': 'Removes whitespace from both ends of a string.',\n 'trimStart': 'Removes whitespace from the beginning of a string.',\n 'trimEnd': 'Removes whitespace from the end of a string.',\n 'replace': 'Returns a new string with some or all matches replaced.',\n 'replaceAll': 'Returns a new string with all matches replaced.',\n 'match': 'Retrieves the result of matching a string against a regex.',\n 'search': 'Searches for a match between a regex and the string.',\n 'startsWith': 'Determines whether a string begins with specified characters.',\n 'endsWith': 'Determines whether a string ends with specified characters.',\n 'padStart': 'Pads the string with another string until it reaches the given length.',\n 'padEnd': 'Pads the string with another string at the end.',\n 'repeat': 'Returns a new string with copies of the original string.',\n\n // Object methods\n 'hasOwnProperty': 'Returns a boolean indicating whether the object has the property.',\n 'toString': 'Returns a string representation of the object.',\n 'valueOf': 'Returns the primitive value of the object.',\n\n // Global functions\n 'parseInt': 'Parses a string argument and returns an integer.',\n 'parseFloat': 'Parses a string argument and returns a floating point number.',\n 'isNaN': 'Determines whether a value is NaN.',\n 'isFinite': 'Determines whether a value is a finite number.',\n 'encodeURI': 'Encodes a URI by replacing certain characters.',\n 'decodeURI': 'Decodes a URI previously created by encodeURI.',\n 'encodeURIComponent': 'Encodes a URI component by replacing certain characters.',\n 'decodeURIComponent': 'Decodes a URI component.',\n\n // JSON\n 'parse': 'Parses a JSON string and returns the JavaScript value.',\n 'stringify': 'Converts a JavaScript value to a JSON string.',\n\n // Math\n 'abs': 'Returns the absolute value of a number.',\n 'ceil': 'Rounds a number up to the next largest integer.',\n 'floor': 'Rounds a number down to the largest integer.',\n 'round': 'Rounds a number to the nearest integer.',\n 'max': 'Returns the largest of zero or more numbers.',\n 'min': 'Returns the smallest of zero or more numbers.',\n 'pow': 'Returns the base raised to the exponent power.',\n 'sqrt': 'Returns the square root of a number.',\n 'random': 'Returns a random number between 0 and 1.',\n 'sin': 'Returns the sine of a number.',\n 'cos': 'Returns the cosine of a number.',\n 'tan': 'Returns the tangent of a number.',\n 'log': 'Returns the natural logarithm of a number.',\n 'exp': 'Returns e raised to the power of a number.',\n\n // Console\n 'log': 'Outputs a message to the console.',\n 'error': 'Outputs an error message to the console.',\n 'warn': 'Outputs a warning message to the console.',\n 'info': 'Outputs an informational message to the console.',\n 'debug': 'Outputs a debug message to the console.',\n 'table': 'Displays tabular data as a table.',\n 'clear': 'Clears the console.',\n 'group': 'Creates a new inline group in the console.',\n 'groupEnd': 'Exits the current inline group in the console.',\n 'time': 'Starts a timer with a specified label.',\n 'timeEnd': 'Stops a timer and logs the elapsed time.',\n };\n\n const name = fn.name;\n return docs[name];\n}\n\n/**\n * Get children of an expandable value as VariableInfo[]\n * @param {*} value\n * @param {number} [maxChildren=100]\n * @returns {VariableInfo[]}\n */\nfunction getChildren(value, maxChildren = 100) {\n if (value === null || value === undefined) return [];\n\n /** @type {VariableInfo[]} */\n const children = [];\n\n if (Array.isArray(value)) {\n const items = value.slice(0, maxChildren);\n for (let i = 0; i < items.length; i++) {\n children.push(formatVariableInfo(String(i), items[i]));\n }\n } else if (value instanceof Map) {\n let count = 0;\n for (const [k, v] of value) {\n if (count >= maxChildren) break;\n children.push(formatVariableInfo(String(k), v));\n count++;\n }\n } else if (value instanceof Set) {\n let count = 0;\n for (const v of value) {\n if (count >= maxChildren) break;\n children.push(formatVariableInfo(String(count), v));\n count++;\n }\n } else if (typeof value === 'object') {\n const keys = Object.keys(value).slice(0, maxChildren);\n for (const key of keys) {\n try {\n children.push(formatVariableInfo(key, value[key]));\n } catch {\n children.push({\n name: key,\n type: 'unknown',\n value: '(inaccessible)',\n expandable: false,\n });\n }\n }\n }\n\n return children;\n}\n\n/**\n * Format a variable for display\n * @param {string} name\n * @param {*} value\n * @returns {VariableInfo}\n */\nfunction formatVariableInfo(name, value) {\n /** @type {VariableInfo} */\n const info = {\n name,\n type: getTypeName(value),\n value: formatValueShort(value, 100),\n expandable: isExpandable(value),\n };\n\n // Add size info\n const size = getSizeDescription(value);\n if (size) {\n info.size = size;\n }\n\n // Add length for arrays/strings\n if (Array.isArray(value)) {\n info.length = value.length;\n } else if (typeof value === 'string') {\n info.length = value.length;\n } else if (value instanceof Map || value instanceof Set) {\n info.length = value.size;\n }\n\n // Add keys preview for objects\n if (typeof value === 'object' && value !== null && !Array.isArray(value)) {\n if (!(value instanceof Map) && !(value instanceof Set)) {\n info.keys = Object.keys(value).slice(0, 10);\n }\n }\n\n return info;\n}\n\n/**\n * Resolve a value from an object path in the context\n * @param {string} path\n * @param {ExecutionContext} context\n * @returns {*}\n */\nfunction resolveValue(path, context) {\n const parts = splitObjectPath(path);\n if (parts.length === 0) return undefined;\n\n // Start with user variables or global\n let value = context.getVariable(parts[0]);\n\n if (value === undefined) {\n // Try global\n const global = context.getGlobal();\n if (global && parts[0] in global) {\n // @ts-ignore\n value = global[parts[0]];\n }\n }\n\n if (value === undefined) return undefined;\n\n // Navigate path\n for (let i = 1; i < parts.length; i++) {\n if (value === null || value === undefined) return undefined;\n\n try {\n if (value instanceof Map) {\n value = value.get(parts[i]);\n } else {\n // @ts-ignore\n value = value[parts[i]];\n }\n } catch {\n return undefined;\n }\n }\n\n return value;\n}\n\n/**\n * Check if a variable exists in context\n * @param {string} path\n * @param {ExecutionContext} context\n * @returns {boolean}\n */\nfunction hasVariable(path, context) {\n const parts = splitObjectPath(path);\n if (parts.length === 0) return false;\n\n if (context.hasVariable(parts[0])) {\n return true;\n }\n\n // Check global\n const global = context.getGlobal();\n if (global && parts[0] in global) {\n return true;\n }\n\n return false;\n}\n","/**\n * Variable Inspection\n *\n * Provides variable listing and detailed inspection for the\n * variables panel in notebook UIs.\n *\n * @module lsp/variables\n */\n\nimport { splitObjectPath } from './parse.js';\nimport {\n formatValue,\n formatValueShort,\n getTypeName,\n isExpandable,\n getSizeDescription,\n} from './format.js';\n\n/**\n * @typedef {import('../session/context/interface.js').ExecutionContext} ExecutionContext\n * @typedef {import('../types/variables.js').VariableFilter} VariableFilter\n * @typedef {import('../types/variables.js').VariableInfo} VariableInfo\n * @typedef {import('../types/variables.js').VariableDetailOptions} VariableDetailOptions\n * @typedef {import('../types/variables.js').VariableDetail} VariableDetail\n */\n\n/**\n * List all variables in the session namespace\n *\n * @param {ExecutionContext} context - Execution context\n * @param {VariableFilter} [filter] - Optional filter\n * @returns {VariableInfo[]}\n */\nexport function listVariables(context, filter = {}) {\n const vars = context.getVariables();\n const tracked = context.getTrackedVariables();\n\n /** @type {VariableInfo[]} */\n const result = [];\n\n for (const name of tracked) {\n if (!(name in vars)) continue;\n\n const value = vars[name];\n\n // Apply filters\n if (filter.excludePrivate && name.startsWith('_')) continue;\n if (filter.namePattern && !new RegExp(filter.namePattern).test(name)) continue;\n if (filter.types && !filter.types.includes(getTypeName(value))) continue;\n\n result.push(formatVariableInfo(name, value));\n }\n\n // Sort by name\n result.sort((a, b) => a.name.localeCompare(b.name));\n\n return result;\n}\n\n/**\n * Get detailed information about a variable\n *\n * @param {string} name - Variable name\n * @param {ExecutionContext} context - Execution context\n * @param {VariableDetailOptions} [options]\n * @returns {VariableDetail | null}\n */\nexport function getVariableDetail(name, context, options = {}) {\n let value = context.getVariable(name);\n\n // Navigate path\n if (options.path && options.path.length > 0) {\n for (const key of options.path) {\n if (value == null) return null;\n\n try {\n if (value instanceof Map) {\n value = value.get(key);\n } else {\n value = /** @type {*} */ (value)[key];\n }\n } catch {\n return null;\n }\n }\n }\n\n // Check if exists\n if (value === undefined && !context.hasVariable(name)) {\n return null;\n }\n\n const maxChildren = options.maxChildren ?? 100;\n const maxValueLength = options.maxValueLength ?? 1000;\n\n const info = formatVariableInfo(name, value);\n\n /** @type {VariableDetail} */\n const detail = {\n ...info,\n fullValue: formatValue(value, maxValueLength),\n truncated: false,\n };\n\n // Add children for expandable values\n if (isExpandable(value)) {\n const children = getChildren(value);\n detail.children = children.slice(0, maxChildren).map(\n ([k, v]) => formatVariableInfo(k, v)\n );\n detail.truncated = children.length > maxChildren;\n\n // Get methods and attributes for objects\n if (typeof value === 'object' && value !== null) {\n detail.methods = getMethods(value);\n detail.attributes = getAttributes(value);\n }\n }\n\n return detail;\n}\n\n/**\n * Expand a variable by path\n *\n * @param {string} baseName - Base variable name\n * @param {string[]} path - Path to expand\n * @param {ExecutionContext} context\n * @param {number} [maxChildren=100]\n * @returns {VariableInfo[] | null}\n */\nexport function expandVariable(baseName, path, context, maxChildren = 100) {\n let value = context.getVariable(baseName);\n\n if (value === undefined) return null;\n\n // Navigate path\n for (const key of path) {\n if (value == null) return null;\n\n try {\n if (value instanceof Map) {\n value = value.get(key);\n } else {\n value = /** @type {*} */ (value)[key];\n }\n } catch {\n return null;\n }\n }\n\n if (!isExpandable(value)) {\n return null;\n }\n\n const children = getChildren(value);\n return children.slice(0, maxChildren).map(([k, v]) => formatVariableInfo(k, v));\n}\n\n/**\n * Format a variable for display\n * @param {string} name\n * @param {*} value\n * @returns {VariableInfo}\n */\nexport function formatVariableInfo(name, value) {\n /** @type {VariableInfo} */\n const info = {\n name,\n type: getTypeName(value),\n value: formatValueShort(value, 100),\n expandable: isExpandable(value),\n };\n\n // Add size info\n const size = getSizeDescription(value);\n if (size) {\n info.size = size;\n }\n\n // Add length for arrays/strings\n if (Array.isArray(value)) {\n info.length = value.length;\n } else if (typeof value === 'string') {\n info.length = value.length;\n } else if (value instanceof Map || value instanceof Set) {\n info.length = value.size;\n }\n\n // Add shape for typed arrays\n if (ArrayBuffer.isView(value) && 'length' in value) {\n // @ts-ignore\n info.length = value.length;\n info.dtype = value.constructor.name.replace('Array', '').toLowerCase();\n }\n\n // Add keys preview for objects\n if (typeof value === 'object' && value !== null && !Array.isArray(value)) {\n if (!(value instanceof Map) && !(value instanceof Set) && !ArrayBuffer.isView(value)) {\n info.keys = Object.keys(value).slice(0, 10);\n }\n }\n\n return info;\n}\n\n/**\n * Get children of an expandable value\n * @param {*} value\n * @returns {Array<[string, *]>}\n */\nexport function getChildren(value) {\n if (value === null || value === undefined) return [];\n\n if (Array.isArray(value)) {\n return value.map((v, i) => [String(i), v]);\n }\n\n if (value instanceof Map) {\n return Array.from(value.entries()).map(([k, v]) => [String(k), v]);\n }\n\n if (value instanceof Set) {\n return Array.from(value).map((v, i) => [String(i), v]);\n }\n\n if (typeof value === 'object') {\n return Object.entries(value);\n }\n\n return [];\n}\n\n/**\n * Get method names of an object\n * @param {*} value\n * @returns {string[]}\n */\nexport function getMethods(value) {\n const methods = new Set();\n let obj = value;\n let depth = 0;\n\n while (obj != null && obj !== Object.prototype && depth < 3) {\n for (const name of Object.getOwnPropertyNames(obj)) {\n if (name === 'constructor') continue;\n\n try {\n if (typeof obj[name] === 'function') {\n methods.add(name);\n }\n } catch {\n // Skip inaccessible\n }\n }\n\n obj = Object.getPrototypeOf(obj);\n depth++;\n }\n\n return Array.from(methods).sort();\n}\n\n/**\n * Get attribute (non-method) names of an object\n * @param {*} value\n * @returns {string[]}\n */\nexport function getAttributes(value) {\n const attrs = [];\n\n for (const name of Object.getOwnPropertyNames(value)) {\n try {\n if (typeof value[name] !== 'function') {\n attrs.push(name);\n }\n } catch {\n // Skip inaccessible\n }\n }\n\n return attrs.sort();\n}\n","/**\n * Statement Completeness Checker\n *\n * Determines whether a piece of code is a complete statement that can\n * be executed, or if it needs more input (like an unclosed bracket).\n *\n * @module analysis/is-complete\n */\n\n/**\n * @typedef {import('../types/analysis.js').IsCompleteResult} IsCompleteResult\n */\n\n/**\n * Check if code is a complete statement\n *\n * @param {string} code - The code to check\n * @returns {IsCompleteResult}\n */\nexport function isComplete(code) {\n const trimmed = code.trim();\n\n // Empty code is complete\n if (!trimmed) {\n return { status: 'complete', indent: '' };\n }\n\n // Check bracket balance\n const bracketInfo = checkBrackets(trimmed);\n if (bracketInfo.unclosed > 0) {\n return {\n status: 'incomplete',\n indent: ' '.repeat(bracketInfo.unclosed),\n };\n }\n if (bracketInfo.unclosed < 0) {\n return { status: 'invalid', indent: '' };\n }\n\n // Check for unterminated strings\n const stringInfo = checkStrings(trimmed);\n if (stringInfo.unclosed) {\n return { status: 'incomplete', indent: '' };\n }\n\n // Check for trailing operators that suggest continuation\n if (endsWithContinuation(trimmed)) {\n return { status: 'incomplete', indent: '' };\n }\n\n // Check for incomplete template literals\n if (hasIncompleteTemplate(trimmed)) {\n return { status: 'incomplete', indent: '' };\n }\n\n // Try to parse to verify syntax\n const parseResult = tryParse(code);\n return parseResult;\n}\n\n/**\n * Check bracket balance\n * @param {string} code\n * @returns {{ unclosed: number }}\n */\nfunction checkBrackets(code) {\n let depth = 0;\n let inString = null;\n let inTemplate = false;\n let templateDepth = 0;\n let inLineComment = false;\n let inBlockComment = false;\n\n for (let i = 0; i < code.length; i++) {\n const char = code[i];\n const prev = code[i - 1];\n const next = code[i + 1];\n\n // Handle escape sequences in strings\n if ((inString || inTemplate) && prev === '\\\\') {\n continue;\n }\n\n // Handle comments\n if (!inString && !inTemplate && !inBlockComment && char === '/' && next === '/') {\n inLineComment = true;\n continue;\n }\n if (inLineComment && char === '\\n') {\n inLineComment = false;\n continue;\n }\n if (inLineComment) continue;\n\n if (!inString && !inTemplate && !inLineComment && char === '/' && next === '*') {\n inBlockComment = true;\n i++;\n continue;\n }\n if (inBlockComment && char === '*' && next === '/') {\n inBlockComment = false;\n i++;\n continue;\n }\n if (inBlockComment) continue;\n\n // Handle strings\n if (!inTemplate && (char === '\"' || char === \"'\")) {\n if (inString === char) {\n inString = null;\n } else if (!inString) {\n inString = char;\n }\n continue;\n }\n\n // Handle template literals\n if (char === '`') {\n if (inTemplate && templateDepth === 0) {\n inTemplate = false;\n } else if (!inString) {\n inTemplate = true;\n templateDepth = 0;\n }\n continue;\n }\n\n // Handle template expressions ${...}\n if (inTemplate && char === '$' && next === '{') {\n templateDepth++;\n continue;\n }\n if (inTemplate && templateDepth > 0 && char === '}') {\n templateDepth--;\n continue;\n }\n\n // Skip bracket counting inside strings\n if (inString) continue;\n if (inTemplate && templateDepth === 0) continue;\n\n // Count brackets\n if (char === '{' || char === '[' || char === '(') {\n depth++;\n } else if (char === '}' || char === ']' || char === ')') {\n depth--;\n }\n }\n\n return { unclosed: depth };\n}\n\n/**\n * Check for unterminated strings\n * @param {string} code\n * @returns {{ unclosed: boolean }}\n */\nfunction checkStrings(code) {\n let inString = null;\n let inTemplate = false;\n\n for (let i = 0; i < code.length; i++) {\n const char = code[i];\n const prev = code[i - 1];\n\n // Skip escaped characters\n if (prev === '\\\\') continue;\n\n // Skip comments\n if (!inString && !inTemplate && char === '/' && code[i + 1] === '/') {\n // Find end of line\n const newline = code.indexOf('\\n', i);\n if (newline === -1) break;\n i = newline;\n continue;\n }\n\n if (!inString && !inTemplate && char === '/' && code[i + 1] === '*') {\n const end = code.indexOf('*/', i + 2);\n if (end === -1) break;\n i = end + 1;\n continue;\n }\n\n // Track strings\n if (!inTemplate && (char === '\"' || char === \"'\")) {\n if (inString === char) {\n inString = null;\n } else if (!inString) {\n inString = char;\n }\n }\n\n // Track template literals\n if (!inString && char === '`') {\n inTemplate = !inTemplate;\n }\n }\n\n return { unclosed: inString !== null || inTemplate };\n}\n\n/**\n * Check if code ends with a continuation operator\n * @param {string} code\n * @returns {boolean}\n */\nfunction endsWithContinuation(code) {\n // Remove trailing whitespace and comments\n let trimmed = code.trim();\n\n // Remove trailing line comment\n const lines = trimmed.split('\\n');\n let lastLine = lines[lines.length - 1].trim();\n const commentIndex = findLineCommentStart(lastLine);\n if (commentIndex !== -1) {\n lastLine = lastLine.slice(0, commentIndex).trim();\n if (!lastLine) {\n // Line was only a comment, check previous lines\n for (let i = lines.length - 2; i >= 0; i--) {\n lastLine = lines[i].trim();\n const ci = findLineCommentStart(lastLine);\n if (ci !== -1) {\n lastLine = lastLine.slice(0, ci).trim();\n }\n if (lastLine) break;\n }\n }\n }\n\n if (!lastLine) return false;\n\n // Operators that suggest continuation\n const continuationOps = [\n '+', '-', '*', '/', '%', '**',\n '=', '+=', '-=', '*=', '/=', '%=',\n '==', '===', '!=', '!==',\n '<', '>', '<=', '>=',\n '&&', '||', '??',\n '&', '|', '^', '~',\n '<<', '>>', '>>>',\n '?', ':',\n ',',\n '.',\n '=>',\n ];\n\n for (const op of continuationOps) {\n if (lastLine.endsWith(op)) {\n return true;\n }\n }\n\n // Keywords that suggest continuation\n const continuationKeywords = [\n 'return', 'throw', 'new', 'typeof', 'void', 'delete',\n 'await', 'yield', 'in', 'of', 'instanceof',\n 'else', 'extends', 'implements',\n ];\n\n for (const kw of continuationKeywords) {\n if (lastLine === kw || lastLine.endsWith(' ' + kw)) {\n return true;\n }\n }\n\n return false;\n}\n\n/**\n * Find line comment start, accounting for strings\n * @param {string} line\n * @returns {number}\n */\nfunction findLineCommentStart(line) {\n let inString = null;\n\n for (let i = 0; i < line.length; i++) {\n const char = line[i];\n const prev = line[i - 1];\n\n if (prev === '\\\\') continue;\n\n if (!inString && (char === '\"' || char === \"'\" || char === '`')) {\n inString = char;\n } else if (inString === char) {\n inString = null;\n } else if (!inString && char === '/' && line[i + 1] === '/') {\n return i;\n }\n }\n\n return -1;\n}\n\n/**\n * Check for incomplete template literal expressions\n * @param {string} code\n * @returns {boolean}\n */\nfunction hasIncompleteTemplate(code) {\n let inTemplate = false;\n let expressionDepth = 0;\n\n for (let i = 0; i < code.length; i++) {\n const char = code[i];\n const prev = code[i - 1];\n const next = code[i + 1];\n\n if (prev === '\\\\') continue;\n\n if (char === '`') {\n if (inTemplate && expressionDepth === 0) {\n inTemplate = false;\n } else if (!inTemplate) {\n inTemplate = true;\n expressionDepth = 0;\n }\n } else if (inTemplate && char === '$' && next === '{') {\n expressionDepth++;\n i++;\n } else if (inTemplate && expressionDepth > 0) {\n if (char === '{') expressionDepth++;\n else if (char === '}') expressionDepth--;\n }\n }\n\n return inTemplate;\n}\n\n/**\n * Try to parse the code to check for syntax errors\n * @param {string} code\n * @returns {IsCompleteResult}\n */\nfunction tryParse(code) {\n try {\n // Try to parse as a function body\n new Function(code);\n return { status: 'complete', indent: '' };\n } catch (e) {\n if (e instanceof SyntaxError) {\n const msg = e.message.toLowerCase();\n\n // Patterns that indicate incomplete code\n const incompletePatterns = [\n 'unexpected end',\n 'unterminated',\n 'expected',\n 'missing',\n ];\n\n for (const pattern of incompletePatterns) {\n if (msg.includes(pattern)) {\n return { status: 'incomplete', indent: '' };\n }\n }\n\n // Other syntax errors are invalid\n return { status: 'invalid', indent: '' };\n }\n\n return { status: 'unknown', indent: '' };\n }\n}\n\n/**\n * Get suggested indent for continuation\n * @param {string} code\n * @returns {string}\n */\nexport function getSuggestedIndent(code) {\n const lines = code.split('\\n');\n const lastLine = lines[lines.length - 1];\n\n // Get current indent\n const match = lastLine.match(/^(\\s*)/);\n const currentIndent = match ? match[1] : '';\n\n // Check if we should increase indent\n const trimmed = lastLine.trim();\n const shouldIncrease =\n trimmed.endsWith('{') ||\n trimmed.endsWith('[') ||\n trimmed.endsWith('(') ||\n trimmed.endsWith(':') ||\n trimmed.endsWith('=>');\n\n if (shouldIncrease) {\n return currentIndent + ' ';\n }\n\n return currentIndent;\n}\n","/**\n * Code Formatting\n *\n * Formats JavaScript code. Can integrate with prettier if available,\n * otherwise provides basic formatting.\n *\n * @module analysis/format\n */\n\n/**\n * @typedef {import('../types/analysis.js').FormatResult} FormatResult\n */\n\n/**\n * @typedef {Object} FormatOptions\n * @property {number} [tabWidth=2] - Number of spaces per tab\n * @property {boolean} [useTabs=false] - Use tabs instead of spaces\n * @property {boolean} [semi=true] - Add semicolons\n * @property {boolean} [singleQuote=false] - Use single quotes\n * @property {number} [printWidth=80] - Line width\n */\n\n/** @type {any} */\nlet prettierInstance = null;\n\n/**\n * Set prettier instance for formatting\n * This allows external prettier to be provided\n *\n * @param {any} prettier - Prettier instance\n */\nexport function setPrettier(prettier) {\n prettierInstance = prettier;\n}\n\n/**\n * Check if prettier is available\n * @returns {boolean}\n */\nexport function hasPrettier() {\n return prettierInstance !== null;\n}\n\n/**\n * Format JavaScript code\n *\n * @param {string} code - Code to format\n * @param {FormatOptions} [options]\n * @returns {Promise<FormatResult>}\n */\nexport async function formatCode(code, options = {}) {\n // Try prettier first\n if (prettierInstance) {\n try {\n const formatted = await formatWithPrettier(code, options);\n return {\n formatted,\n changed: formatted !== code,\n };\n } catch (e) {\n // Prettier failed, fall back to basic formatting\n console.warn('Prettier formatting failed:', e);\n }\n }\n\n // Fall back to basic formatting\n const formatted = basicFormat(code, options);\n return {\n formatted,\n changed: formatted !== code,\n };\n}\n\n/**\n * Format with prettier\n * @param {string} code\n * @param {FormatOptions} options\n * @returns {Promise<string>}\n */\nasync function formatWithPrettier(code, options) {\n const prettierOptions = {\n parser: 'babel',\n tabWidth: options.tabWidth ?? 2,\n useTabs: options.useTabs ?? false,\n semi: options.semi ?? true,\n singleQuote: options.singleQuote ?? false,\n printWidth: options.printWidth ?? 80,\n };\n\n // prettier might be async or sync depending on version\n const result = prettierInstance.format(code, prettierOptions);\n return result instanceof Promise ? await result : result;\n}\n\n/**\n * Basic code formatting (no external dependencies)\n *\n * @param {string} code\n * @param {FormatOptions} options\n * @returns {string}\n */\nexport function basicFormat(code, options = {}) {\n const tabWidth = options.tabWidth ?? 2;\n const useTabs = options.useTabs ?? false;\n const semi = options.semi ?? true;\n const indent = useTabs ? '\\t' : ' '.repeat(tabWidth);\n\n let result = code;\n\n // Normalize line endings\n result = result.replace(/\\r\\n/g, '\\n').replace(/\\r/g, '\\n');\n\n // Normalize whitespace around operators\n result = normalizeOperatorSpacing(result);\n\n // Normalize comma spacing\n result = result.replace(/,\\s*/g, ', ');\n\n // Normalize colon spacing in objects\n result = normalizeColonSpacing(result);\n\n // Fix indentation\n result = fixIndentation(result, indent);\n\n // Add/remove trailing semicolons\n if (semi) {\n result = addSemicolons(result);\n }\n\n // Remove trailing whitespace\n result = result.split('\\n').map(line => line.trimEnd()).join('\\n');\n\n // Ensure single trailing newline\n result = result.trimEnd() + '\\n';\n\n return result;\n}\n\n/**\n * Normalize spacing around operators\n * @param {string} code\n * @returns {string}\n */\nfunction normalizeOperatorSpacing(code) {\n // This is tricky because we need to handle strings and regex\n // For now, do a simple replacement that might not be perfect\n\n // Binary operators (add spaces around)\n const binaryOps = [\n '===', '!==', '==', '!=',\n '<=', '>=', '<', '>',\n '&&', '||', '??',\n '+=', '-=', '*=', '/=', '%=',\n '**=', '&=', '|=', '^=',\n '<<=', '>>=', '>>>=',\n '=>',\n ];\n\n let result = code;\n\n // Process each operator (order matters - longer first)\n for (const op of binaryOps) {\n const escaped = op.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n // Only if not already properly spaced\n result = result.replace(\n new RegExp(`(\\\\S)${escaped}(\\\\S)`, 'g'),\n `$1 ${op} $2`\n );\n }\n\n // Single = assignment (but not ==, ===, =>, etc)\n result = result.replace(/(\\w)=(?![=>])(\\S)/g, '$1 = $2');\n\n return result;\n}\n\n/**\n * Normalize colon spacing in objects\n * @param {string} code\n * @returns {string}\n */\nfunction normalizeColonSpacing(code) {\n // Object property colons: add space after but not before\n // This is imperfect but handles common cases\n return code.replace(/(\\w+)\\s*:\\s*/g, '$1: ');\n}\n\n/**\n * Fix indentation based on bracket depth\n * @param {string} code\n * @param {string} indent\n * @returns {string}\n */\nfunction fixIndentation(code, indent) {\n const lines = code.split('\\n');\n const result = [];\n let depth = 0;\n\n for (const line of lines) {\n const trimmed = line.trim();\n\n if (!trimmed) {\n result.push('');\n continue;\n }\n\n // Check if line starts with closing bracket\n const startsWithClose = /^[}\\])]/.test(trimmed);\n if (startsWithClose && depth > 0) {\n depth--;\n }\n\n // Add indentation\n result.push(indent.repeat(depth) + trimmed);\n\n // Count bracket changes for next line\n const opens = (trimmed.match(/[{[(]/g) || []).length;\n const closes = (trimmed.match(/[}\\])]/g) || []).length;\n depth += opens - closes;\n\n // Ensure depth doesn't go negative\n if (depth < 0) depth = 0;\n }\n\n return result.join('\\n');\n}\n\n/**\n * Add semicolons to statements that need them\n * @param {string} code\n * @returns {string}\n */\nfunction addSemicolons(code) {\n const lines = code.split('\\n');\n const result = [];\n\n for (let i = 0; i < lines.length; i++) {\n let line = lines[i];\n const trimmed = line.trim();\n\n // Skip empty lines\n if (!trimmed) {\n result.push(line);\n continue;\n }\n\n // Skip lines that don't need semicolons\n const skipPatterns = [\n /^\\/\\//, // Comment\n /^\\/\\*/, // Block comment start\n /\\*\\/$/, // Block comment end\n /^\\*/, // Block comment middle\n /^import\\s/, // Import (might need semi, but complex)\n /^export\\s/, // Export\n /^if\\s*\\(/, // If\n /^else/, // Else\n /^for\\s*\\(/, // For\n /^while\\s*\\(/, // While\n /^do\\s*{?$/, // Do\n /^switch\\s*\\(/, // Switch\n /^try\\s*{?$/, // Try\n /^catch\\s*\\(/, // Catch\n /^finally\\s*{?$/, // Finally\n /^function\\s/, // Function declaration\n /^class\\s/, // Class\n /^async\\s+function/, // Async function\n /[{,]\\s*$/, // Ends with { or ,\n /^\\s*[}\\])]/, // Starts with closing bracket\n ];\n\n let needsSemi = true;\n for (const pattern of skipPatterns) {\n if (pattern.test(trimmed)) {\n needsSemi = false;\n break;\n }\n }\n\n // Already has semicolon\n if (trimmed.endsWith(';')) {\n needsSemi = false;\n }\n\n // Check if next non-empty line suggests continuation\n if (needsSemi) {\n for (let j = i + 1; j < lines.length; j++) {\n const nextTrimmed = lines[j].trim();\n if (!nextTrimmed) continue;\n if (/^[.?[]/.test(nextTrimmed)) {\n // Next line is continuation\n needsSemi = false;\n }\n break;\n }\n }\n\n if (needsSemi) {\n // Find where to insert semicolon (before trailing comment)\n const commentMatch = line.match(/^(.*?)(\\s*\\/\\/.*)$/);\n if (commentMatch) {\n line = commentMatch[1] + ';' + commentMatch[2];\n } else {\n line = line.trimEnd() + ';';\n }\n }\n\n result.push(line);\n }\n\n return result.join('\\n');\n}\n\n/**\n * Format HTML code (basic)\n * @param {string} code\n * @returns {string}\n */\nexport function formatHtml(code) {\n // Very basic HTML formatting\n let result = code;\n\n // Normalize line endings\n result = result.replace(/\\r\\n/g, '\\n').replace(/\\r/g, '\\n');\n\n // Add newlines after block elements\n result = result.replace(/(<\\/(?:div|p|ul|ol|li|h[1-6]|header|footer|section|article|nav|aside|main|table|tr|thead|tbody|form)>)/gi, '$1\\n');\n\n // Add newlines before block elements\n result = result.replace(/(<(?:div|p|ul|ol|li|h[1-6]|header|footer|section|article|nav|aside|main|table|tr|thead|tbody|form)(?:\\s[^>]*)?>)/gi, '\\n$1');\n\n // Remove multiple blank lines\n result = result.replace(/\\n{3,}/g, '\\n\\n');\n\n return result.trim() + '\\n';\n}\n\n/**\n * Format CSS code (basic)\n * @param {string} code\n * @returns {string}\n */\nexport function formatCss(code) {\n let result = code;\n\n // Normalize line endings\n result = result.replace(/\\r\\n/g, '\\n').replace(/\\r/g, '\\n');\n\n // Add newlines after { and ;\n result = result.replace(/\\{/g, ' {\\n');\n result = result.replace(/;/g, ';\\n');\n result = result.replace(/\\}/g, '\\n}\\n');\n\n // Fix property spacing\n result = result.replace(/:\\s*/g, ': ');\n\n // Fix indentation\n const lines = result.split('\\n');\n const formatted = [];\n let depth = 0;\n\n for (const line of lines) {\n const trimmed = line.trim();\n if (!trimmed) continue;\n\n if (trimmed === '}') depth--;\n formatted.push(' '.repeat(Math.max(0, depth)) + trimmed);\n if (trimmed.endsWith('{')) depth++;\n }\n\n return formatted.join('\\n') + '\\n';\n}\n","/**\n * Session Class\n *\n * A session is an isolated execution context that persists variables\n * across executions. It wraps an ExecutionContext and provides the\n * full MRP session API.\n *\n * @module session/session\n */\n\nimport { IframeContext } from './context/iframe.js';\nimport { MainContext } from './context/main.js';\nimport { extractDeclaredVariables } from '../transform/extract.js';\nimport { JavaScriptExecutor } from '../execute/javascript.js';\n\n// LSP Features\nimport { getCompletions } from '../lsp/complete.js';\nimport { getHoverInfo } from '../lsp/hover.js';\nimport { getInspectInfo } from '../lsp/inspect.js';\nimport {\n listVariables as lspListVariables,\n getVariableDetail as lspGetVariableDetail,\n} from '../lsp/variables.js';\n\n// Analysis Features\nimport { isComplete as analysisIsComplete } from '../analysis/is-complete.js';\nimport { formatCode } from '../analysis/format.js';\n\n/**\n * @typedef {import('../execute/registry.js').ExecutorRegistry} ExecutorRegistry\n * @typedef {import('../execute/interface.js').Executor} Executor\n */\n\n/**\n * @typedef {import('./context/interface.js').ExecutionContext} ExecutionContext\n * @typedef {import('./context/interface.js').RawExecutionResult} RawExecutionResult\n * @typedef {import('../types/session.js').SessionInfo} SessionInfo\n * @typedef {import('../types/session.js').CreateSessionOptions} CreateSessionOptions\n * @typedef {import('../types/session.js').IsolationMode} IsolationMode\n * @typedef {import('../types/execution.js').ExecuteOptions} ExecuteOptions\n * @typedef {import('../types/execution.js').ExecutionResult} ExecutionResult\n * @typedef {import('../types/execution.js').ExecutionError} ExecutionError\n * @typedef {import('../types/execution.js').DisplayData} DisplayData\n * @typedef {import('../types/streaming.js').StreamEvent} StreamEvent\n * @typedef {import('../types/completion.js').CompleteOptions} CompleteOptions\n * @typedef {import('../types/completion.js').CompletionResult} CompletionResult\n * @typedef {import('../types/inspection.js').InspectOptions} InspectOptions\n * @typedef {import('../types/inspection.js').InspectResult} InspectResult\n * @typedef {import('../types/inspection.js').HoverResult} HoverResult\n * @typedef {import('../types/variables.js').VariableFilter} VariableFilter\n * @typedef {import('../types/variables.js').VariableInfo} VariableInfo\n * @typedef {import('../types/variables.js').VariableDetailOptions} VariableDetailOptions\n * @typedef {import('../types/variables.js').VariableDetail} VariableDetail\n * @typedef {import('../types/analysis.js').IsCompleteResult} IsCompleteResult\n * @typedef {import('../types/analysis.js').FormatResult} FormatResult\n */\n\n/**\n * Generate a unique execution ID\n * @returns {string}\n */\nfunction generateExecId() {\n return `exec-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`;\n}\n\n/**\n * Session class - represents an isolated execution context\n */\nexport class Session {\n /** @type {string} */\n #id;\n\n /** @type {string} */\n #language;\n\n /** @type {IsolationMode} */\n #isolation;\n\n /** @type {Date} */\n #created;\n\n /** @type {Date} */\n #lastActivity;\n\n /** @type {number} */\n #executionCount = 0;\n\n /** @type {ExecutionContext} */\n #context;\n\n /** @type {ExecutorRegistry | null} */\n #executorRegistry = null;\n\n /** @type {JavaScriptExecutor} */\n #defaultJsExecutor;\n\n /** @type {Map<string, AbortController>} */\n #runningExecutions = new Map();\n\n /** @type {Map<string, (text: string) => void>} */\n #pendingInputs = new Map();\n\n /**\n * @param {string} id - Session ID\n * @param {CreateSessionOptions & { executorRegistry?: ExecutorRegistry }} [options]\n */\n constructor(id, options = {}) {\n this.#id = id;\n this.#language = options.language || 'javascript';\n this.#isolation = options.isolation || 'iframe';\n this.#created = new Date();\n this.#lastActivity = new Date();\n\n // Store executor registry if provided\n this.#executorRegistry = options.executorRegistry || null;\n\n // Create default JS executor for fallback\n this.#defaultJsExecutor = new JavaScriptExecutor();\n\n // Create the appropriate context\n this.#context = this.#createContext(options);\n }\n\n /**\n * Create the execution context based on isolation mode\n * @param {CreateSessionOptions} options\n * @returns {ExecutionContext}\n */\n #createContext(options) {\n switch (this.#isolation) {\n case 'none':\n return new MainContext({\n utilities: options.utilities,\n });\n\n case 'iframe':\n default:\n return new IframeContext({\n visible: false,\n allowMainAccess: options.allowMainAccess ?? false,\n utilities: options.utilities,\n });\n }\n }\n\n // ============================================================================\n // Properties\n // ============================================================================\n\n /** @returns {string} */\n get id() {\n return this.#id;\n }\n\n /** @returns {string} */\n get language() {\n return this.#language;\n }\n\n /** @returns {IsolationMode} */\n get isolation() {\n return this.#isolation;\n }\n\n /** @returns {Date} */\n get created() {\n return this.#created;\n }\n\n /** @returns {Date} */\n get lastActivity() {\n return this.#lastActivity;\n }\n\n /** @returns {number} */\n get executionCount() {\n return this.#executionCount;\n }\n\n // ============================================================================\n // Execution\n // ============================================================================\n\n /**\n * Execute code and return result\n * @param {string} code - Code to execute\n * @param {ExecuteOptions} [options]\n * @returns {Promise<ExecutionResult>}\n */\n async execute(code, options = {}) {\n const execId = options.execId || generateExecId();\n const language = options.language || this.#language;\n\n // Update activity\n this.#lastActivity = new Date();\n\n // Track execution\n const abortController = new AbortController();\n this.#runningExecutions.set(execId, abortController);\n\n try {\n // Get the executor for this language\n const executor = this.#getExecutor(language);\n\n // Execute using the executor\n const result = await executor.execute(code, this.#context, {\n ...options,\n execId,\n language,\n });\n\n // Update execution count\n if (options.storeHistory !== false) {\n this.#executionCount++;\n }\n\n // Update result with session's execution count\n result.executionCount = this.#executionCount;\n\n return result;\n } finally {\n this.#runningExecutions.delete(execId);\n }\n }\n\n /**\n * Get the executor for a language\n * @param {string} language\n * @returns {Executor}\n */\n #getExecutor(language) {\n // Try registry first\n if (this.#executorRegistry) {\n const executor = this.#executorRegistry.get(language);\n if (executor) return executor;\n }\n\n // Fall back to default JS executor for JavaScript\n const lang = language.toLowerCase();\n if (['javascript', 'js', 'ecmascript', 'es'].includes(lang)) {\n return this.#defaultJsExecutor;\n }\n\n // Return a no-op executor that reports unsupported language\n return {\n languages: [],\n async execute(code, context, options) {\n return {\n success: false,\n stdout: '',\n stderr: `No executor registered for language: ${language}`,\n error: {\n type: 'ExecutorError',\n message: `No executor registered for language: ${language}. Register an ExecutorRegistry with HTML/CSS executors to support this language.`,\n },\n displayData: [],\n assets: [],\n executionCount: 0,\n duration: 0,\n };\n },\n };\n }\n\n /**\n * Execute code with streaming output\n * @param {string} code - Code to execute\n * @param {ExecuteOptions} [options]\n * @returns {AsyncGenerator<StreamEvent>}\n */\n async *executeStream(code, options = {}) {\n const execId = options.execId || generateExecId();\n const language = options.language || this.#language;\n\n // Update activity\n this.#lastActivity = new Date();\n\n // Track execution\n const abortController = new AbortController();\n this.#runningExecutions.set(execId, abortController);\n\n // Event queue for stdin_request events\n /** @type {Array<import('../types/streaming.js').StdinRequestEvent>} */\n const stdinEventQueue = [];\n let stdinEventResolve = null;\n\n // Set up stdin handler on context to capture input requests\n // and yield stdin_request events\n const previousHandler = this.#context.getStdinHandler?.();\n\n if (this.#context.setStdinHandler) {\n this.#context.setStdinHandler((request) => {\n return new Promise((resolve, reject) => {\n // Store the resolver for when sendInput is called\n this.#pendingInputs.set(request.execId, resolve);\n\n // Queue the stdin_request event to be yielded\n stdinEventQueue.push({\n type: 'stdin_request',\n prompt: request.prompt,\n password: request.password,\n execId: request.execId,\n });\n\n // Wake up the event loop if waiting\n if (stdinEventResolve) {\n stdinEventResolve();\n stdinEventResolve = null;\n }\n\n // Set up abort handling\n abortController.signal.addEventListener('abort', () => {\n this.#pendingInputs.delete(request.execId);\n reject(new Error('Execution aborted'));\n }, { once: true });\n });\n });\n }\n\n try {\n // Get the executor for this language\n const executor = this.#getExecutor(language);\n\n // Use executor's streaming if available\n if (executor.executeStream) {\n let executionCount = this.#executionCount;\n\n for await (const event of executor.executeStream(code, this.#context, {\n ...options,\n execId,\n language,\n })) {\n // Yield any pending stdin_request events first\n while (stdinEventQueue.length > 0) {\n yield /** @type {import('../types/streaming.js').StdinRequestEvent} */ (stdinEventQueue.shift());\n }\n\n // Update execution count on result event\n if (event.type === 'result' && options.storeHistory !== false) {\n this.#executionCount++;\n event.result.executionCount = this.#executionCount;\n }\n yield event;\n }\n } else {\n // Fall back to wrapping execute()\n const timestamp = new Date().toISOString();\n\n yield /** @type {import('../types/streaming.js').StartEvent} */ ({\n type: 'start',\n execId,\n timestamp,\n });\n\n // Start execution in background so we can yield events\n const executionPromise = executor.execute(code, this.#context, {\n ...options,\n execId,\n language,\n });\n\n // Poll for stdin events while execution is running\n let result = null;\n let error = null;\n let done = false;\n\n executionPromise.then(r => {\n result = r;\n done = true;\n if (stdinEventResolve) {\n stdinEventResolve();\n stdinEventResolve = null;\n }\n }).catch(e => {\n error = e;\n done = true;\n if (stdinEventResolve) {\n stdinEventResolve();\n stdinEventResolve = null;\n }\n });\n\n // Wait for either stdin events or completion\n while (!done) {\n // Yield any pending stdin_request events\n while (stdinEventQueue.length > 0) {\n yield /** @type {import('../types/streaming.js').StdinRequestEvent} */ (stdinEventQueue.shift());\n }\n\n if (!done) {\n // Wait for next event\n await new Promise(resolve => {\n stdinEventResolve = resolve;\n // Also resolve on short timeout to check done flag\n setTimeout(resolve, 50);\n });\n }\n }\n\n // Yield any remaining stdin events\n while (stdinEventQueue.length > 0) {\n yield /** @type {import('../types/streaming.js').StdinRequestEvent} */ (stdinEventQueue.shift());\n }\n\n if (error) {\n yield /** @type {import('../types/streaming.js').ErrorEvent} */ ({\n type: 'error',\n error: {\n type: error instanceof Error ? error.name : 'Error',\n message: error instanceof Error ? error.message : String(error),\n traceback: error instanceof Error && error.stack ? error.stack.split('\\n') : undefined,\n },\n });\n } else if (result) {\n if (options.storeHistory !== false) {\n this.#executionCount++;\n }\n result.executionCount = this.#executionCount;\n\n if (result.stdout) {\n yield /** @type {import('../types/streaming.js').StdoutEvent} */ ({\n type: 'stdout',\n content: result.stdout,\n accumulated: result.stdout,\n });\n }\n\n if (result.stderr) {\n yield /** @type {import('../types/streaming.js').StderrEvent} */ ({\n type: 'stderr',\n content: result.stderr,\n accumulated: result.stderr,\n });\n }\n\n for (const display of result.displayData) {\n yield /** @type {import('../types/streaming.js').DisplayEvent} */ ({\n type: 'display',\n data: display.data,\n metadata: display.metadata,\n });\n }\n\n for (const asset of result.assets) {\n yield /** @type {import('../types/streaming.js').AssetEvent} */ ({\n type: 'asset',\n path: asset.path,\n url: asset.url,\n mimeType: asset.mimeType,\n assetType: asset.assetType,\n });\n }\n\n yield /** @type {import('../types/streaming.js').ResultEvent} */ ({\n type: 'result',\n result,\n });\n }\n\n yield /** @type {import('../types/streaming.js').DoneEvent} */ ({\n type: 'done',\n });\n }\n } finally {\n // Restore previous stdin handler\n if (this.#context.setStdinHandler) {\n this.#context.setStdinHandler(previousHandler || null);\n }\n this.#runningExecutions.delete(execId);\n }\n }\n\n /**\n * Set the executor registry\n * @param {ExecutorRegistry} registry\n */\n setExecutorRegistry(registry) {\n this.#executorRegistry = registry;\n }\n\n /**\n * Get the executor registry\n * @returns {ExecutorRegistry | null}\n */\n getExecutorRegistry() {\n return this.#executorRegistry;\n }\n\n /**\n * Get supported languages\n * @returns {string[]}\n */\n getSupportedLanguages() {\n if (this.#executorRegistry) {\n return this.#executorRegistry.languages();\n }\n return ['javascript', 'js', 'ecmascript', 'es'];\n }\n\n /**\n * Send input to a waiting execution\n * @param {string} execId - Execution ID\n * @param {string} text - Input text\n * @returns {boolean} Whether input was accepted\n */\n sendInput(execId, text) {\n const handler = this.#pendingInputs.get(execId);\n if (handler) {\n handler(text);\n this.#pendingInputs.delete(execId);\n return true;\n }\n return false;\n }\n\n /**\n * Interrupt a running execution\n * @param {string} [execId] - Specific execution ID, or all if not provided\n * @returns {boolean} Whether any execution was interrupted\n */\n interrupt(execId) {\n if (execId) {\n const controller = this.#runningExecutions.get(execId);\n if (controller) {\n controller.abort();\n this.#runningExecutions.delete(execId);\n return true;\n }\n return false;\n }\n\n // Interrupt all\n if (this.#runningExecutions.size > 0) {\n for (const controller of this.#runningExecutions.values()) {\n controller.abort();\n }\n this.#runningExecutions.clear();\n return true;\n }\n\n return false;\n }\n\n // ============================================================================\n // LSP Features (delegated to lsp/ modules)\n // ============================================================================\n\n /**\n * Get completions at cursor position\n * @param {string} code\n * @param {number} cursor\n * @param {CompleteOptions} [options]\n * @returns {CompletionResult}\n */\n complete(code, cursor, options = {}) {\n return getCompletions(code, cursor, this.#context, options);\n }\n\n /**\n * Get hover information at cursor position\n * @param {string} code\n * @param {number} cursor\n * @returns {HoverResult}\n */\n hover(code, cursor) {\n return getHoverInfo(code, cursor, this.#context);\n }\n\n /**\n * Get detailed inspection at cursor position\n * @param {string} code\n * @param {number} cursor\n * @param {InspectOptions} [options]\n * @returns {InspectResult}\n */\n inspect(code, cursor, options = {}) {\n return getInspectInfo(code, cursor, this.#context, options);\n }\n\n /**\n * List all variables in session\n * @param {VariableFilter} [filter]\n * @returns {VariableInfo[]}\n */\n listVariables(filter = {}) {\n return lspListVariables(this.#context, filter);\n }\n\n /**\n * Get detailed information about a variable\n * @param {string} name\n * @param {VariableDetailOptions} [options]\n * @returns {VariableDetail | null}\n */\n getVariable(name, options = {}) {\n return lspGetVariableDetail(name, this.#context, options);\n }\n\n // ============================================================================\n // Analysis\n // ============================================================================\n\n /**\n * Check if code is a complete statement\n * @param {string} code\n * @returns {IsCompleteResult}\n */\n isComplete(code) {\n return analysisIsComplete(code);\n }\n\n /**\n * Format code\n * @param {string} code\n * @returns {Promise<FormatResult>}\n */\n async format(code) {\n return formatCode(code);\n }\n\n // ============================================================================\n // Lifecycle\n // ============================================================================\n\n /**\n * Reset the session (clear variables but keep session)\n */\n reset() {\n this.#context.reset();\n this.#executionCount = 0;\n this.#lastActivity = new Date();\n }\n\n /**\n * Destroy the session and release resources\n */\n destroy() {\n // Cancel any running executions\n this.interrupt();\n\n // Destroy context\n this.#context.destroy();\n }\n\n /**\n * Get session info\n * @returns {SessionInfo}\n */\n getInfo() {\n return {\n id: this.#id,\n language: this.#language,\n created: this.#created.toISOString(),\n lastActivity: this.#lastActivity.toISOString(),\n executionCount: this.#executionCount,\n variableCount: this.#context.getTrackedVariables().size,\n isolation: this.#isolation,\n };\n }\n\n /**\n * Get the underlying execution context (for advanced use)\n * @returns {ExecutionContext}\n */\n getContext() {\n return this.#context;\n }\n}\n\n/**\n * Create a session\n * @param {string} id\n * @param {CreateSessionOptions} [options]\n * @returns {Session}\n */\nexport function createSession(id, options) {\n return new Session(id, options);\n}\n","/**\n * Session Manager\n *\n * Manages multiple sessions, handles creation/destruction,\n * and enforces limits.\n *\n * @module session/manager\n */\n\nimport { Session } from './session.js';\n\n/**\n * @typedef {import('../types/session.js').SessionInfo} SessionInfo\n * @typedef {import('../types/session.js').CreateSessionOptions} CreateSessionOptions\n */\n\n/**\n * @typedef {Object} SessionManagerOptions\n * @property {number} [maxSessions=10] - Maximum number of concurrent sessions\n * @property {string} [defaultLanguage='javascript'] - Default language for new sessions\n * @property {import('../types/session.js').IsolationMode} [defaultIsolation='iframe'] - Default isolation mode\n * @property {boolean} [defaultAllowMainAccess=false] - Default main access setting\n */\n\n/**\n * Generate a unique session ID\n * @returns {string}\n */\nfunction generateSessionId() {\n return `session-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`;\n}\n\n/**\n * Session Manager - manages multiple execution sessions\n */\nexport class SessionManager {\n /** @type {Map<string, Session>} */\n #sessions = new Map();\n\n /** @type {SessionManagerOptions} */\n #options;\n\n /**\n * @param {SessionManagerOptions} [options]\n */\n constructor(options = {}) {\n this.#options = {\n maxSessions: 10,\n defaultLanguage: 'javascript',\n defaultIsolation: 'iframe',\n defaultAllowMainAccess: false,\n ...options,\n };\n }\n\n // ============================================================================\n // Session Lifecycle\n // ============================================================================\n\n /**\n * Create a new session\n * @param {CreateSessionOptions} [options]\n * @returns {Session}\n * @throws {Error} If max sessions reached\n */\n create(options = {}) {\n // Check limits\n if (this.#sessions.size >= this.#options.maxSessions) {\n throw new Error(\n `Maximum sessions (${this.#options.maxSessions}) reached. ` +\n 'Destroy existing sessions before creating new ones.'\n );\n }\n\n // Generate ID if not provided\n const id = options.id || generateSessionId();\n\n // Check for duplicate ID\n if (this.#sessions.has(id)) {\n throw new Error(`Session with ID '${id}' already exists`);\n }\n\n // Merge with defaults\n const sessionOptions = {\n language: options.language || this.#options.defaultLanguage,\n isolation: options.isolation || this.#options.defaultIsolation,\n allowMainAccess: options.allowMainAccess ?? this.#options.defaultAllowMainAccess,\n utilities: options.utilities,\n executorRegistry: options.executorRegistry,\n };\n\n // Create session\n const session = new Session(id, sessionOptions);\n this.#sessions.set(id, session);\n\n return session;\n }\n\n /**\n * Get an existing session by ID\n * @param {string} id\n * @returns {Session | undefined}\n */\n get(id) {\n return this.#sessions.get(id);\n }\n\n /**\n * Get a session, creating it if it doesn't exist\n * @param {string} id\n * @param {CreateSessionOptions} [options]\n * @returns {Session}\n */\n getOrCreate(id, options = {}) {\n const existing = this.#sessions.get(id);\n if (existing) {\n return existing;\n }\n return this.create({ ...options, id });\n }\n\n /**\n * Check if a session exists\n * @param {string} id\n * @returns {boolean}\n */\n has(id) {\n return this.#sessions.has(id);\n }\n\n /**\n * Destroy a session by ID\n * @param {string} id\n * @returns {boolean} Whether a session was destroyed\n */\n destroy(id) {\n const session = this.#sessions.get(id);\n if (session) {\n session.destroy();\n this.#sessions.delete(id);\n return true;\n }\n return false;\n }\n\n /**\n * Destroy all sessions\n */\n destroyAll() {\n for (const session of this.#sessions.values()) {\n session.destroy();\n }\n this.#sessions.clear();\n }\n\n // ============================================================================\n // Session Queries\n // ============================================================================\n\n /**\n * List all sessions\n * @returns {SessionInfo[]}\n */\n list() {\n return Array.from(this.#sessions.values()).map((s) => s.getInfo());\n }\n\n /**\n * Get number of active sessions\n * @returns {number}\n */\n get size() {\n return this.#sessions.size;\n }\n\n /**\n * Get all session IDs\n * @returns {string[]}\n */\n get ids() {\n return Array.from(this.#sessions.keys());\n }\n\n /**\n * Get the maximum number of sessions allowed\n * @returns {number}\n */\n get maxSessions() {\n return this.#options.maxSessions;\n }\n\n /**\n * Iterate over sessions\n * @returns {IterableIterator<Session>}\n */\n [Symbol.iterator]() {\n return this.#sessions.values();\n }\n\n /**\n * Iterate over session entries\n * @returns {IterableIterator<[string, Session]>}\n */\n entries() {\n return this.#sessions.entries();\n }\n\n // ============================================================================\n // Bulk Operations\n // ============================================================================\n\n /**\n * Reset all sessions (clear variables but keep sessions)\n */\n resetAll() {\n for (const session of this.#sessions.values()) {\n session.reset();\n }\n }\n\n /**\n * Interrupt all running executions across all sessions\n * @returns {number} Number of sessions that had executions interrupted\n */\n interruptAll() {\n let count = 0;\n for (const session of this.#sessions.values()) {\n if (session.interrupt()) {\n count++;\n }\n }\n return count;\n }\n\n /**\n * Get sessions by language\n * @param {string} language\n * @returns {Session[]}\n */\n getByLanguage(language) {\n const results = [];\n for (const session of this.#sessions.values()) {\n if (session.language === language) {\n results.push(session);\n }\n }\n return results;\n }\n\n /**\n * Get the most recently active session\n * @returns {Session | undefined}\n */\n getMostRecent() {\n let mostRecent = undefined;\n let latestTime = 0;\n\n for (const session of this.#sessions.values()) {\n const time = session.lastActivity.getTime();\n if (time > latestTime) {\n latestTime = time;\n mostRecent = session;\n }\n }\n\n return mostRecent;\n }\n\n // ============================================================================\n // Cleanup\n // ============================================================================\n\n /**\n * Destroy sessions that have been inactive for a certain time\n * @param {number} maxIdleMs - Maximum idle time in milliseconds\n * @returns {number} Number of sessions destroyed\n */\n cleanupIdle(maxIdleMs) {\n const now = Date.now();\n const toDestroy = [];\n\n for (const [id, session] of this.#sessions) {\n if (now - session.lastActivity.getTime() > maxIdleMs) {\n toDestroy.push(id);\n }\n }\n\n for (const id of toDestroy) {\n this.destroy(id);\n }\n\n return toDestroy.length;\n }\n\n /**\n * Destroy oldest sessions to get under a certain count\n * @param {number} targetCount - Target number of sessions\n * @returns {number} Number of sessions destroyed\n */\n trimToCount(targetCount) {\n if (this.#sessions.size <= targetCount) {\n return 0;\n }\n\n // Sort by last activity (oldest first)\n const sorted = Array.from(this.#sessions.entries()).sort(\n ([, a], [, b]) => a.lastActivity.getTime() - b.lastActivity.getTime()\n );\n\n const toDestroy = sorted.slice(0, this.#sessions.size - targetCount);\n\n for (const [id] of toDestroy) {\n this.destroy(id);\n }\n\n return toDestroy.length;\n }\n}\n\n/**\n * Create a session manager\n * @param {SessionManagerOptions} [options]\n * @returns {SessionManager}\n */\nexport function createSessionManager(options) {\n return new SessionManager(options);\n}\n","/**\n * Executor Registry\n *\n * Manages language executors and routes execution requests\n * to the appropriate executor based on language.\n *\n * @module execute/registry\n */\n\n/**\n * @typedef {import('./interface.js').Executor} Executor\n * @typedef {import('../session/context/interface.js').ExecutionContext} ExecutionContext\n * @typedef {import('../types/execution.js').ExecuteOptions} ExecuteOptions\n * @typedef {import('../types/execution.js').ExecutionResult} ExecutionResult\n * @typedef {import('../types/streaming.js').StreamEvent} StreamEvent\n */\n\n/**\n * Registry for language executors\n */\nexport class ExecutorRegistry {\n /** @type {Map<string, Executor>} */\n #executors = new Map();\n\n /** @type {Map<string, string>} */\n #aliases = new Map();\n\n /**\n * Register an executor for one or more languages\n * @param {Executor} executor - The executor to register\n */\n register(executor) {\n for (const language of executor.languages) {\n const lang = language.toLowerCase();\n this.#executors.set(lang, executor);\n }\n }\n\n /**\n * Register a single language with an executor\n * @param {string} language - Language identifier\n * @param {Executor} executor - The executor\n */\n registerLanguage(language, executor) {\n this.#executors.set(language.toLowerCase(), executor);\n }\n\n /**\n * Register an alias for a language\n * @param {string} alias - The alias\n * @param {string} language - The target language\n */\n registerAlias(alias, language) {\n this.#aliases.set(alias.toLowerCase(), language.toLowerCase());\n }\n\n /**\n * Get the executor for a language\n * @param {string} language\n * @returns {Executor | undefined}\n */\n get(language) {\n const lang = language.toLowerCase();\n\n // Check direct registration\n let executor = this.#executors.get(lang);\n if (executor) return executor;\n\n // Check aliases\n const aliasTarget = this.#aliases.get(lang);\n if (aliasTarget) {\n return this.#executors.get(aliasTarget);\n }\n\n return undefined;\n }\n\n /**\n * Check if a language is supported\n * @param {string} language\n * @returns {boolean}\n */\n supports(language) {\n return this.get(language) !== undefined;\n }\n\n /**\n * Get all registered languages\n * @returns {string[]}\n */\n languages() {\n const langs = new Set([...this.#executors.keys(), ...this.#aliases.keys()]);\n return Array.from(langs).sort();\n }\n\n /**\n * Get all registered executors (deduplicated)\n * @returns {Executor[]}\n */\n executors() {\n return Array.from(new Set(this.#executors.values()));\n }\n\n /**\n * Execute code using the appropriate executor\n * @param {string} code - Code to execute\n * @param {string} language - Language identifier\n * @param {ExecutionContext} context - Execution context\n * @param {ExecuteOptions} [options] - Execution options\n * @returns {Promise<ExecutionResult>}\n */\n async execute(code, language, context, options = {}) {\n const executor = this.get(language);\n\n if (!executor) {\n return {\n success: false,\n stdout: '',\n stderr: `No executor registered for language: ${language}`,\n error: {\n type: 'ExecutorError',\n message: `No executor registered for language: ${language}`,\n },\n displayData: [],\n assets: [],\n executionCount: 0,\n duration: 0,\n };\n }\n\n return executor.execute(code, context, options);\n }\n\n /**\n * Execute code with streaming using the appropriate executor\n * @param {string} code - Code to execute\n * @param {string} language - Language identifier\n * @param {ExecutionContext} context - Execution context\n * @param {ExecuteOptions} [options] - Execution options\n * @returns {AsyncGenerator<StreamEvent>}\n */\n async *executeStream(code, language, context, options = {}) {\n const executor = this.get(language);\n\n if (!executor) {\n yield /** @type {import('../types/streaming.js').ErrorEvent} */ ({\n type: 'error',\n error: {\n type: 'ExecutorError',\n message: `No executor registered for language: ${language}`,\n },\n });\n yield /** @type {import('../types/streaming.js').DoneEvent} */ ({\n type: 'done',\n });\n return;\n }\n\n if (executor.executeStream) {\n yield* executor.executeStream(code, context, options);\n } else {\n // Fall back to non-streaming execution wrapped in events\n const execId = options.execId || `exec-${Date.now()}`;\n\n yield /** @type {import('../types/streaming.js').StartEvent} */ ({\n type: 'start',\n execId,\n timestamp: new Date().toISOString(),\n });\n\n try {\n const result = await executor.execute(code, context, options);\n\n if (result.stdout) {\n yield /** @type {import('../types/streaming.js').StdoutEvent} */ ({\n type: 'stdout',\n content: result.stdout,\n accumulated: result.stdout,\n });\n }\n\n if (result.stderr) {\n yield /** @type {import('../types/streaming.js').StderrEvent} */ ({\n type: 'stderr',\n content: result.stderr,\n accumulated: result.stderr,\n });\n }\n\n for (const display of result.displayData) {\n yield /** @type {import('../types/streaming.js').DisplayEvent} */ ({\n type: 'display',\n data: display.data,\n metadata: display.metadata,\n });\n }\n\n yield /** @type {import('../types/streaming.js').ResultEvent} */ ({\n type: 'result',\n result,\n });\n } catch (error) {\n yield /** @type {import('../types/streaming.js').ErrorEvent} */ ({\n type: 'error',\n error: {\n type: error instanceof Error ? error.name : 'Error',\n message: error instanceof Error ? error.message : String(error),\n },\n });\n }\n\n yield /** @type {import('../types/streaming.js').DoneEvent} */ ({\n type: 'done',\n });\n }\n }\n\n /**\n * Unregister a language\n * @param {string} language\n * @returns {boolean}\n */\n unregister(language) {\n const lang = language.toLowerCase();\n const hadExecutor = this.#executors.delete(lang);\n const hadAlias = this.#aliases.delete(lang);\n return hadExecutor || hadAlias;\n }\n\n /**\n * Clear all registered executors\n */\n clear() {\n this.#executors.clear();\n this.#aliases.clear();\n }\n}\n\n/**\n * Create an executor registry\n * @returns {ExecutorRegistry}\n */\nexport function createExecutorRegistry() {\n return new ExecutorRegistry();\n}\n","/**\n * HTML Executor\n *\n * Executes HTML cells by producing displayData with text/html MIME type.\n * Optionally extracts and executes inline scripts.\n *\n * @module execute/html\n */\n\nimport { BaseExecutor } from './interface.js';\n\n/**\n * @typedef {import('../session/context/interface.js').ExecutionContext} ExecutionContext\n * @typedef {import('../types/execution.js').ExecuteOptions} ExecuteOptions\n * @typedef {import('../types/execution.js').ExecutionResult} ExecutionResult\n * @typedef {import('../types/execution.js').DisplayData} DisplayData\n */\n\n/**\n * Regex to match script tags and capture their content\n */\nconst SCRIPT_REGEX = /<script[^>]*>([\\s\\S]*?)<\\/script>/gi;\n\n/**\n * Regex to match style tags and capture their content\n */\nconst STYLE_REGEX = /<style[^>]*>([\\s\\S]*?)<\\/style>/gi;\n\n/**\n * Extract script tags from HTML\n * @param {string} html\n * @returns {{ html: string, scripts: string[] }}\n */\nfunction extractScripts(html) {\n const scripts = [];\n\n const cleaned = html.replace(SCRIPT_REGEX, (_, content) => {\n if (content.trim()) {\n scripts.push(content);\n }\n return '';\n });\n\n return { html: cleaned, scripts };\n}\n\n/**\n * Extract style tags from HTML\n * @param {string} html\n * @returns {{ html: string, styles: string[] }}\n */\nfunction extractStyles(html) {\n const styles = [];\n\n const cleaned = html.replace(STYLE_REGEX, (_, content) => {\n if (content.trim()) {\n styles.push(content);\n }\n return '';\n });\n\n return { html: cleaned, styles };\n}\n\n/**\n * HTML executor - produces displayData for HTML content\n */\nexport class HtmlExecutor extends BaseExecutor {\n /** @type {readonly string[]} */\n languages = ['html', 'htm', 'xhtml'];\n\n /**\n * Execute HTML cell\n * @param {string} code - HTML content\n * @param {ExecutionContext} context - Execution context\n * @param {ExecuteOptions} [options] - Execution options\n * @returns {Promise<ExecutionResult>}\n */\n async execute(code, context, options = {}) {\n const startTime = performance.now();\n\n // Extract scripts and styles\n const { html: htmlWithoutScripts, scripts } = extractScripts(code);\n const { html: cleanHtml, styles } = extractStyles(htmlWithoutScripts);\n\n // Build display data\n /** @type {DisplayData[]} */\n const displayData = [];\n\n // Main HTML content\n displayData.push({\n data: {\n 'text/html': code, // Send original HTML including scripts/styles\n },\n metadata: {\n // Metadata for client to decide how to render\n hasScripts: scripts.length > 0,\n hasStyles: styles.length > 0,\n scriptCount: scripts.length,\n styleCount: styles.length,\n trusted: options.cellMeta?.trusted ?? false,\n // Client can use this to decide whether to execute scripts\n executeScripts: options.cellMeta?.executeScripts ?? true,\n },\n });\n\n // Optionally include cleaned HTML (without scripts/styles) as alternate\n if (scripts.length > 0 || styles.length > 0) {\n displayData.push({\n data: {\n 'text/html+safe': cleanHtml.trim(),\n },\n metadata: {\n description: 'HTML content with scripts and styles removed',\n },\n });\n }\n\n // Include extracted styles as separate CSS display data\n if (styles.length > 0) {\n displayData.push({\n data: {\n 'text/css': styles.join('\\n\\n'),\n },\n metadata: {\n source: 'extracted',\n description: 'Styles extracted from HTML',\n },\n });\n }\n\n const duration = performance.now() - startTime;\n\n // Build info message\n const parts = [];\n if (cleanHtml.trim()) parts.push('HTML');\n if (styles.length > 0) parts.push(`${styles.length} style${styles.length > 1 ? 's' : ''}`);\n if (scripts.length > 0) parts.push(`${scripts.length} script${scripts.length > 1 ? 's' : ''}`);\n\n return {\n success: true,\n stdout: `Rendered: ${parts.join(', ') || 'empty'}`,\n stderr: '',\n result: undefined,\n displayData,\n assets: [],\n executionCount: 0,\n duration,\n };\n }\n}\n\n/**\n * Create an HTML executor\n * @returns {HtmlExecutor}\n */\nexport function createHtmlExecutor() {\n return new HtmlExecutor();\n}\n\n// Export utilities for use by clients\nexport { extractScripts, extractStyles };\n","/**\n * CSS Executor\n *\n * Executes CSS cells by producing displayData with text/css MIME type.\n * Supports optional scoping to prevent style leakage.\n *\n * @module execute/css\n */\n\nimport { BaseExecutor } from './interface.js';\n\n/**\n * @typedef {import('../session/context/interface.js').ExecutionContext} ExecutionContext\n * @typedef {import('../types/execution.js').ExecuteOptions} ExecuteOptions\n * @typedef {import('../types/execution.js').ExecutionResult} ExecutionResult\n * @typedef {import('../types/execution.js').DisplayData} DisplayData\n */\n\n/**\n * Generate a unique scope class name\n * @param {string} [id] - Optional ID to include\n * @returns {string}\n */\nexport function generateScopeClass(id) {\n const suffix = id\n ? id.replace(/[^a-z0-9]/gi, '')\n : Math.random().toString(36).slice(2, 8);\n return `mrmd-scope-${suffix}`;\n}\n\n/**\n * Scope CSS selectors by prefixing them with a scope selector\n *\n * @param {string} css - CSS content\n * @param {string} scopeSelector - Scope selector (e.g., '.mrmd-scope-abc123')\n * @returns {string} Scoped CSS\n *\n * @example\n * scopeStyles('.card { color: red; }', '.scope-123')\n * // Returns: '.scope-123 .card { color: red; }'\n */\nexport function scopeStyles(css, scopeSelector) {\n return css.replace(\n /([^{}]+)\\{/g,\n (match, selectors) => {\n const scoped = selectors\n .split(',')\n .map((selector) => {\n const trimmed = selector.trim();\n\n // Don't scope special selectors\n if (\n // @-rules (media, keyframes, supports, etc.)\n trimmed.startsWith('@') ||\n // Keyframe percentages and keywords\n trimmed.startsWith('from') ||\n trimmed.startsWith('to') ||\n /^\\d+%$/.test(trimmed) ||\n // Empty selector\n !trimmed\n ) {\n return trimmed;\n }\n\n // Handle :root specially - replace with scope selector\n if (trimmed === ':root') {\n return scopeSelector;\n }\n\n // Handle :host (for shadow DOM compatibility)\n if (trimmed === ':host') {\n return scopeSelector;\n }\n\n // Handle * selector\n if (trimmed === '*') {\n return `${scopeSelector} *`;\n }\n\n // Handle html/body - scope to container instead\n if (trimmed === 'html' || trimmed === 'body') {\n return scopeSelector;\n }\n\n // Prefix the selector\n return `${scopeSelector} ${trimmed}`;\n })\n .join(', ');\n\n return `${scoped} {`;\n }\n );\n}\n\n/**\n * Parse CSS to extract rule information\n * @param {string} css\n * @returns {{ rules: number, selectors: string[], variables: string[] }}\n */\nfunction parseCssInfo(css) {\n const selectors = [];\n const variables = [];\n\n // Count rules (rough estimate by counting {)\n const rules = (css.match(/\\{/g) || []).length;\n\n // Extract selectors (before {)\n const selectorMatches = css.match(/([^{}]+)\\{/g) || [];\n for (const match of selectorMatches) {\n const selector = match.replace('{', '').trim();\n if (selector && !selector.startsWith('@')) {\n selectors.push(...selector.split(',').map((s) => s.trim()));\n }\n }\n\n // Extract CSS custom properties (--var-name)\n const varMatches = css.match(/--[\\w-]+/g) || [];\n variables.push(...new Set(varMatches));\n\n return { rules, selectors: selectors.slice(0, 10), variables: variables.slice(0, 10) };\n}\n\n/**\n * CSS executor - produces displayData for CSS content\n */\nexport class CssExecutor extends BaseExecutor {\n /** @type {readonly string[]} */\n languages = ['css', 'style', 'stylesheet'];\n\n /**\n * Execute CSS cell\n * @param {string} code - CSS content\n * @param {ExecutionContext} context - Execution context\n * @param {ExecuteOptions} [options] - Execution options\n * @returns {Promise<ExecutionResult>}\n */\n async execute(code, context, options = {}) {\n const startTime = performance.now();\n\n // Determine if scoping is requested\n const shouldScope = options.cellMeta?.scoped ?? options.cellMeta?.scope ?? false;\n const scopeId = options.execId || options.cellId || `css-${Date.now()}`;\n const scopeClass = shouldScope ? generateScopeClass(scopeId) : undefined;\n\n // Apply scoping if requested\n const processedCss = scopeClass ? scopeStyles(code, `.${scopeClass}`) : code;\n\n // Parse CSS for info\n const info = parseCssInfo(code);\n\n // Build display data\n /** @type {DisplayData[]} */\n const displayData = [\n {\n data: {\n 'text/css': processedCss,\n },\n metadata: {\n // Original CSS (before scoping)\n original: code !== processedCss ? code : undefined,\n // Scoping info\n scoped: !!scopeClass,\n scopeClass,\n // CSS info\n ruleCount: info.rules,\n selectors: info.selectors,\n customProperties: info.variables,\n // Client hints\n inject: options.cellMeta?.inject ?? true,\n target: options.cellMeta?.target,\n },\n },\n ];\n\n const duration = performance.now() - startTime;\n\n // Build info message\n const parts = [`${info.rules} rule${info.rules !== 1 ? 's' : ''}`];\n if (scopeClass) {\n parts.push(`scoped to .${scopeClass}`);\n }\n if (info.variables.length > 0) {\n parts.push(`${info.variables.length} variable${info.variables.length !== 1 ? 's' : ''}`);\n }\n\n return {\n success: true,\n stdout: `CSS: ${parts.join(', ')}`,\n stderr: '',\n result: undefined,\n displayData,\n assets: [],\n executionCount: 0,\n duration,\n };\n }\n}\n\n/**\n * Create a CSS executor\n * @returns {CssExecutor}\n */\nexport function createCssExecutor() {\n return new CssExecutor();\n}\n","/**\n * Execute Module\n *\n * Provides executors for different languages and the registry to manage them.\n *\n * @module execute\n */\n\n// Interface\nexport { BaseExecutor } from './interface.js';\n\n// Registry\nexport { ExecutorRegistry, createExecutorRegistry } from './registry.js';\n\n// Executors\nexport { JavaScriptExecutor, createJavaScriptExecutor } from './javascript.js';\nexport { HtmlExecutor, createHtmlExecutor, extractScripts, extractStyles } from './html.js';\nexport {\n CssExecutor,\n createCssExecutor,\n scopeStyles,\n generateScopeClass,\n} from './css.js';\n\n// Import for factory function\nimport { ExecutorRegistry } from './registry.js';\nimport { JavaScriptExecutor } from './javascript.js';\nimport { HtmlExecutor } from './html.js';\nimport { CssExecutor } from './css.js';\n\n/**\n * Create a registry with default executors registered\n * @returns {ExecutorRegistry}\n */\nexport function createDefaultExecutorRegistry() {\n const registry = new ExecutorRegistry();\n registry.register(new JavaScriptExecutor());\n registry.register(new HtmlExecutor());\n registry.register(new CssExecutor());\n return registry;\n}\n","/**\n * MRP Runtime\n *\n * Main entry point for the mrmd-js runtime. Implements the MRMD Runtime\n * Protocol (MRP) as a JavaScript API for browser-based execution.\n *\n * @module runtime\n */\n\nimport { SessionManager } from './session/manager.js';\nimport { createDefaultExecutorRegistry } from './execute/index.js';\nimport { RUNTIME_NAME, RUNTIME_VERSION, DEFAULT_MAX_SESSIONS } from './constants.js';\n\n/**\n * @typedef {import('./types/capabilities.js').Capabilities} Capabilities\n * @typedef {import('./types/capabilities.js').Features} Features\n * @typedef {import('./types/capabilities.js').BrowserEnvironment} BrowserEnvironment\n * @typedef {import('./types/session.js').SessionInfo} SessionInfo\n * @typedef {import('./types/session.js').CreateSessionOptions} CreateSessionOptions\n * @typedef {import('./types/session.js').IsolationMode} IsolationMode\n * @typedef {import('./types/execution.js').ExecuteOptions} ExecuteOptions\n * @typedef {import('./types/execution.js').ExecutionResult} ExecutionResult\n * @typedef {import('./types/streaming.js').StreamEvent} StreamEvent\n * @typedef {import('./types/completion.js').CompleteOptions} CompleteOptions\n * @typedef {import('./types/completion.js').CompletionResult} CompletionResult\n * @typedef {import('./types/inspection.js').InspectOptions} InspectOptions\n * @typedef {import('./types/inspection.js').InspectResult} InspectResult\n * @typedef {import('./types/inspection.js').HoverResult} HoverResult\n * @typedef {import('./types/variables.js').VariableFilter} VariableFilter\n * @typedef {import('./types/variables.js').VariableInfo} VariableInfo\n * @typedef {import('./types/variables.js').VariableDetailOptions} VariableDetailOptions\n * @typedef {import('./types/variables.js').VariableDetail} VariableDetail\n * @typedef {import('./types/analysis.js').IsCompleteResult} IsCompleteResult\n * @typedef {import('./types/analysis.js').FormatResult} FormatResult\n * @typedef {import('./session/session.js').Session} Session\n * @typedef {import('./execute/registry.js').ExecutorRegistry} ExecutorRegistry\n * @typedef {import('./execute/interface.js').Executor} Executor\n */\n\n/**\n * @typedef {Object} MrpRuntimeOptions\n * @property {number} [maxSessions] - Maximum concurrent sessions\n * @property {IsolationMode} [defaultIsolation='iframe'] - Default isolation mode\n * @property {boolean} [defaultAllowMainAccess=false] - Allow main window access by default\n */\n\n/**\n * Asset stored in the runtime\n * @typedef {Object} StoredAsset\n * @property {string} url - Blob URL\n * @property {string} mimeType - MIME type\n * @property {string} assetType - Asset type category\n * @property {number} size - Size in bytes\n */\n\n/**\n * Main MRP runtime for browser JavaScript\n *\n * @example\n * const runtime = new MrpRuntime();\n * const session = runtime.createSession({ language: 'javascript' });\n * const result = await session.execute('const x = 1 + 2; x');\n * console.log(result.resultString); // \"3\"\n */\nexport class MrpRuntime {\n /** @type {SessionManager} */\n #sessionManager;\n\n /** @type {ExecutorRegistry} */\n #executorRegistry;\n\n /** @type {MrpRuntimeOptions} */\n #options;\n\n /** @type {Map<string, StoredAsset>} */\n #assets = new Map();\n\n /**\n * Create a new MRP runtime\n * @param {MrpRuntimeOptions} [options]\n */\n constructor(options = {}) {\n this.#options = {\n maxSessions: options.maxSessions ?? DEFAULT_MAX_SESSIONS,\n defaultIsolation: options.defaultIsolation ?? 'iframe',\n defaultAllowMainAccess: options.defaultAllowMainAccess ?? false,\n };\n\n this.#executorRegistry = createDefaultExecutorRegistry();\n this.#sessionManager = new SessionManager({\n maxSessions: this.#options.maxSessions,\n });\n }\n\n // ============================================================================\n // Capabilities\n // ============================================================================\n\n /**\n * Get runtime capabilities (MRP /capabilities)\n * @returns {Capabilities}\n */\n getCapabilities() {\n return {\n runtime: RUNTIME_NAME,\n version: RUNTIME_VERSION,\n languages: this.#executorRegistry.languages(),\n features: this.#getFeatures(),\n defaultSession: 'default',\n maxSessions: this.#options.maxSessions ?? DEFAULT_MAX_SESSIONS,\n environment: this.#getEnvironment(),\n };\n }\n\n /**\n * Get feature flags\n * @returns {Features}\n */\n #getFeatures() {\n return {\n execute: true,\n executeStream: true,\n interrupt: true,\n complete: true,\n inspect: true,\n hover: true,\n variables: true,\n variableExpand: true,\n reset: true,\n isComplete: true,\n format: true,\n assets: true,\n };\n }\n\n /**\n * Get environment info\n * @returns {BrowserEnvironment}\n */\n #getEnvironment() {\n return {\n userAgent: typeof navigator !== 'undefined' ? navigator.userAgent : 'unknown',\n language: typeof navigator !== 'undefined' ? navigator.language : 'en',\n platform: typeof navigator !== 'undefined' ? navigator.platform : 'unknown',\n isSecureContext: typeof window !== 'undefined' ? window.isSecureContext : false,\n };\n }\n\n // ============================================================================\n // Sessions\n // ============================================================================\n\n /**\n * List all active sessions (MRP GET /sessions)\n * @returns {SessionInfo[]}\n */\n listSessions() {\n return this.#sessionManager.list();\n }\n\n /**\n * Create a new session (MRP POST /sessions)\n * @param {CreateSessionOptions} [options]\n * @returns {Session}\n */\n createSession(options = {}) {\n const session = this.#sessionManager.create({\n ...options,\n isolation: options.isolation ?? this.#options.defaultIsolation,\n allowMainAccess: options.allowMainAccess ?? this.#options.defaultAllowMainAccess,\n executorRegistry: this.#executorRegistry,\n });\n return session;\n }\n\n /**\n * Get a session by ID (MRP GET /sessions/{id})\n * @param {string} id\n * @returns {Session | undefined}\n */\n getSession(id) {\n return this.#sessionManager.get(id);\n }\n\n /**\n * Get or create a session\n * @param {string} id\n * @param {CreateSessionOptions} [options]\n * @returns {Session}\n */\n getOrCreateSession(id, options = {}) {\n const existing = this.#sessionManager.get(id);\n if (existing) return existing;\n\n return this.createSession({ ...options, id });\n }\n\n /**\n * Destroy a session (MRP DELETE /sessions/{id})\n * @param {string} id\n * @returns {boolean}\n */\n destroySession(id) {\n return this.#sessionManager.destroy(id);\n }\n\n /**\n * Reset a session (MRP POST /sessions/{id}/reset)\n * @param {string} id\n * @returns {boolean}\n */\n resetSession(id) {\n const session = this.#sessionManager.get(id);\n if (!session) return false;\n session.reset();\n return true;\n }\n\n // ============================================================================\n // Execution (convenience methods using default session)\n // ============================================================================\n\n /**\n * Execute code (MRP POST /execute)\n * @param {string} code\n * @param {ExecuteOptions} [options]\n * @returns {Promise<ExecutionResult>}\n */\n async execute(code, options = {}) {\n const session = this.getOrCreateSession(options.session ?? 'default');\n return session.execute(code, options);\n }\n\n /**\n * Execute code with streaming output (MRP POST /execute/stream)\n * @param {string} code\n * @param {ExecuteOptions} [options]\n * @returns {AsyncGenerator<StreamEvent>}\n */\n async *executeStream(code, options = {}) {\n const session = this.getOrCreateSession(options.session ?? 'default');\n yield* session.executeStream(code, options);\n }\n\n /**\n * Send input to a waiting execution (MRP POST /input)\n * @param {string} sessionId\n * @param {string} execId\n * @param {string} text\n * @returns {boolean}\n */\n sendInput(sessionId, execId, text) {\n const session = this.#sessionManager.get(sessionId);\n if (!session) return false;\n return session.sendInput(execId, text);\n }\n\n /**\n * Interrupt execution (MRP POST /interrupt)\n * @param {string} [sessionId]\n * @param {string} [execId]\n * @returns {boolean}\n */\n interrupt(sessionId, execId) {\n if (sessionId) {\n const session = this.#sessionManager.get(sessionId);\n if (!session) return false;\n return session.interrupt(execId);\n }\n\n // Interrupt all sessions\n return this.#sessionManager.interruptAll();\n }\n\n // ============================================================================\n // LSP Features (convenience methods)\n // ============================================================================\n\n /**\n * Get completions (MRP POST /complete)\n * @param {string} code\n * @param {number} cursor\n * @param {CompleteOptions} [options]\n * @returns {CompletionResult}\n */\n complete(code, cursor, options = {}) {\n const session = this.getOrCreateSession(options.session ?? 'default');\n return session.complete(code, cursor, options);\n }\n\n /**\n * Get hover info (MRP POST /hover)\n * @param {string} code\n * @param {number} cursor\n * @param {string} [sessionId='default']\n * @returns {HoverResult}\n */\n hover(code, cursor, sessionId = 'default') {\n const session = this.getOrCreateSession(sessionId);\n return session.hover(code, cursor);\n }\n\n /**\n * Get inspection info (MRP POST /inspect)\n * @param {string} code\n * @param {number} cursor\n * @param {InspectOptions} [options]\n * @returns {InspectResult}\n */\n inspect(code, cursor, options = {}) {\n const session = this.getOrCreateSession(options.session ?? 'default');\n return session.inspect(code, cursor, options);\n }\n\n /**\n * List variables (MRP POST /variables)\n * @param {VariableFilter} [filter]\n * @param {string} [sessionId='default']\n * @returns {VariableInfo[]}\n */\n listVariables(filter, sessionId = 'default') {\n const session = this.getOrCreateSession(sessionId);\n return session.listVariables(filter);\n }\n\n /**\n * Get variable detail (MRP POST /variables/{name})\n * @param {string} name\n * @param {VariableDetailOptions} [options]\n * @returns {VariableDetail | null}\n */\n getVariable(name, options = {}) {\n const session = this.getOrCreateSession(options.session ?? 'default');\n return session.getVariable(name, options);\n }\n\n // ============================================================================\n // Analysis\n // ============================================================================\n\n /**\n * Check if code is complete (MRP POST /is_complete)\n * @param {string} code\n * @param {string} [sessionId='default']\n * @returns {IsCompleteResult}\n */\n isComplete(code, sessionId = 'default') {\n const session = this.getOrCreateSession(sessionId);\n return session.isComplete(code);\n }\n\n /**\n * Format code (MRP POST /format)\n * @param {string} code\n * @param {string} [sessionId='default']\n * @returns {Promise<FormatResult>}\n */\n async format(code, sessionId = 'default') {\n const session = this.getOrCreateSession(sessionId);\n return session.format(code);\n }\n\n // ============================================================================\n // Assets\n // ============================================================================\n\n /**\n * Create an asset (blob URL)\n * @param {Blob | string} content\n * @param {string} mimeType\n * @param {string} [name]\n * @returns {import('./types/execution.js').Asset}\n */\n createAsset(content, mimeType, name) {\n const blob = typeof content === 'string'\n ? new Blob([content], { type: mimeType })\n : content;\n\n const url = URL.createObjectURL(blob);\n const path = name ?? `asset-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`;\n\n const assetType = mimeType.startsWith('image/')\n ? 'image'\n : mimeType === 'text/html'\n ? 'html'\n : mimeType === 'application/json'\n ? 'json'\n : 'other';\n\n this.#assets.set(path, {\n url,\n mimeType,\n assetType,\n size: blob.size,\n });\n\n return {\n path,\n url,\n mimeType,\n assetType,\n size: blob.size,\n };\n }\n\n /**\n * Get an asset by path (MRP GET /assets/{path})\n * @param {string} path\n * @returns {string | null} Blob URL or null if not found\n */\n getAsset(path) {\n const asset = this.#assets.get(path);\n return asset?.url ?? null;\n }\n\n /**\n * Get asset info\n * @param {string} path\n * @returns {StoredAsset | null}\n */\n getAssetInfo(path) {\n return this.#assets.get(path) ?? null;\n }\n\n /**\n * List all assets\n * @returns {Array<{ path: string } & StoredAsset>}\n */\n listAssets() {\n return Array.from(this.#assets.entries()).map(([path, asset]) => ({\n path,\n ...asset,\n }));\n }\n\n /**\n * Remove an asset\n * @param {string} path\n * @returns {boolean}\n */\n removeAsset(path) {\n const asset = this.#assets.get(path);\n if (!asset) return false;\n\n URL.revokeObjectURL(asset.url);\n this.#assets.delete(path);\n return true;\n }\n\n /**\n * Clear all assets\n */\n clearAssets() {\n for (const asset of this.#assets.values()) {\n URL.revokeObjectURL(asset.url);\n }\n this.#assets.clear();\n }\n\n // ============================================================================\n // Extensibility\n // ============================================================================\n\n /**\n * Register a custom executor for a language\n * @param {string} language\n * @param {Executor} executor\n */\n registerExecutor(language, executor) {\n this.#executorRegistry.register(language, executor);\n }\n\n /**\n * Register a language alias\n * @param {string} alias\n * @param {string} language\n */\n registerLanguageAlias(alias, language) {\n this.#executorRegistry.registerAlias(alias, language);\n }\n\n /**\n * Get the executor registry\n * @returns {ExecutorRegistry}\n */\n getExecutorRegistry() {\n return this.#executorRegistry;\n }\n\n /**\n * Get the session manager\n * @returns {SessionManager}\n */\n getSessionManager() {\n return this.#sessionManager;\n }\n\n // ============================================================================\n // Lifecycle\n // ============================================================================\n\n /**\n * Destroy the runtime and clean up all resources\n */\n destroy() {\n this.#sessionManager.destroyAll();\n this.clearAssets();\n }\n}\n\n/**\n * Create a new MRP runtime\n * @param {MrpRuntimeOptions} [options]\n * @returns {MrpRuntime}\n */\nexport function createRuntime(options) {\n return new MrpRuntime(options);\n}\n","/**\n * HTML Renderer\n *\n * Utility for rendering HTML displayData from cell execution.\n * Provides three rendering modes: direct, shadow, and scoped.\n *\n * @module utils/html-renderer\n */\n\n/**\n * @typedef {'direct' | 'shadow' | 'scoped'} RenderMode\n */\n\n/**\n * @typedef {Object} RenderOptions\n * @property {RenderMode} [mode='direct'] - Rendering mode\n * @property {string} [scopeClass] - Scope class for 'scoped' mode\n * @property {boolean} [executeScripts=true] - Execute inline scripts\n * @property {(error: Error, script: string) => void} [onScriptError] - Script error callback\n * @property {boolean} [clear=true] - Clear container before rendering\n */\n\n/**\n * @typedef {Object} RenderResult\n * @property {HTMLElement} container - Container element\n * @property {ShadowRoot} [shadowRoot] - Shadow root if shadow mode\n * @property {number} scriptsExecuted - Number of scripts executed\n * @property {Error[]} scriptErrors - Script errors\n */\n\n/** @type {Set<string>} */\nconst executedScripts = new Set();\n\n/**\n * HTML Renderer class for rendering displayData\n */\nexport class HtmlRenderer {\n /** @type {Map<string, Set<string>>} */\n #scriptHashes = new Map();\n\n /**\n * Render HTML string into a container\n *\n * @param {string} html - HTML string to render\n * @param {HTMLElement} container - Target container\n * @param {RenderOptions} [options]\n * @returns {RenderResult}\n */\n render(html, container, options = {}) {\n const mode = options.mode ?? 'direct';\n\n switch (mode) {\n case 'shadow':\n return this.#renderShadow(html, container, options);\n case 'scoped':\n return this.#renderScoped(html, container, options);\n case 'direct':\n default:\n return this.#renderDirect(html, container, options);\n }\n }\n\n /**\n * Render displayData into container\n *\n * @param {import('../types/execution.js').DisplayData} displayData\n * @param {HTMLElement} container\n * @param {RenderOptions} [options]\n * @returns {RenderResult}\n */\n renderDisplayData(displayData, container, options = {}) {\n const html = displayData.data['text/html'];\n if (!html) {\n return {\n container,\n scriptsExecuted: 0,\n scriptErrors: [],\n };\n }\n\n // Use scopeClass from metadata if available\n const scopeClass = options.scopeClass ?? displayData.metadata?.scopeClass;\n\n return this.render(html, container, {\n ...options,\n scopeClass: typeof scopeClass === 'string' ? scopeClass : undefined,\n });\n }\n\n /**\n * Render in direct mode (no isolation)\n * @param {string} html\n * @param {HTMLElement} container\n * @param {RenderOptions} options\n * @returns {RenderResult}\n */\n #renderDirect(html, container, options) {\n if (options.clear !== false) {\n container.innerHTML = '';\n }\n\n // Extract scripts before setting innerHTML\n const { content, scripts } = this.#extractScripts(html);\n\n // Append content\n const temp = document.createElement('div');\n temp.innerHTML = content;\n while (temp.firstChild) {\n container.appendChild(temp.firstChild);\n }\n\n // Execute scripts\n const { executed, errors } = this.#executeScripts(scripts, container, options);\n\n return {\n container,\n scriptsExecuted: executed,\n scriptErrors: errors,\n };\n }\n\n /**\n * Render in shadow mode (full isolation via Shadow DOM)\n * @param {string} html\n * @param {HTMLElement} container\n * @param {RenderOptions} options\n * @returns {RenderResult}\n */\n #renderShadow(html, container, options) {\n // Create or reuse shadow root\n let shadowRoot = container.shadowRoot;\n if (!shadowRoot) {\n shadowRoot = container.attachShadow({ mode: 'open' });\n }\n\n if (options.clear !== false) {\n shadowRoot.innerHTML = '';\n }\n\n // Extract scripts\n const { content, scripts } = this.#extractScripts(html);\n\n // Set content\n const temp = document.createElement('div');\n temp.innerHTML = content;\n while (temp.firstChild) {\n shadowRoot.appendChild(temp.firstChild);\n }\n\n // Execute scripts in shadow context\n const { executed, errors } = this.#executeScripts(scripts, shadowRoot, options);\n\n return {\n container,\n shadowRoot,\n scriptsExecuted: executed,\n scriptErrors: errors,\n };\n }\n\n /**\n * Render in scoped mode (CSS isolation via class prefixing)\n * @param {string} html\n * @param {HTMLElement} container\n * @param {RenderOptions} options\n * @returns {RenderResult}\n */\n #renderScoped(html, container, options) {\n const scopeClass = options.scopeClass ?? `mrmd-scope-${Date.now()}`;\n\n // Add scope class to container\n container.classList.add(scopeClass);\n\n if (options.clear !== false) {\n container.innerHTML = '';\n }\n\n // Extract scripts and styles\n const { content, scripts, styles } = this.#extractScriptsAndStyles(html);\n\n // Scope and append styles\n for (const style of styles) {\n const scopedCss = scopeStyles(style, `.${scopeClass}`);\n const styleEl = document.createElement('style');\n styleEl.textContent = scopedCss;\n container.appendChild(styleEl);\n }\n\n // Append content\n const temp = document.createElement('div');\n temp.innerHTML = content;\n while (temp.firstChild) {\n container.appendChild(temp.firstChild);\n }\n\n // Execute scripts\n const { executed, errors } = this.#executeScripts(scripts, container, options);\n\n return {\n container,\n scriptsExecuted: executed,\n scriptErrors: errors,\n };\n }\n\n /**\n * Extract scripts from HTML\n * @param {string} html\n * @returns {{ content: string, scripts: string[] }}\n */\n #extractScripts(html) {\n const scripts = [];\n const content = html.replace(/<script\\b[^>]*>([\\s\\S]*?)<\\/script>/gi, (match, code) => {\n scripts.push(code.trim());\n return '';\n });\n return { content, scripts };\n }\n\n /**\n * Extract scripts and styles from HTML\n * @param {string} html\n * @returns {{ content: string, scripts: string[], styles: string[] }}\n */\n #extractScriptsAndStyles(html) {\n const scripts = [];\n const styles = [];\n\n let content = html.replace(/<script\\b[^>]*>([\\s\\S]*?)<\\/script>/gi, (match, code) => {\n scripts.push(code.trim());\n return '';\n });\n\n content = content.replace(/<style\\b[^>]*>([\\s\\S]*?)<\\/style>/gi, (match, css) => {\n styles.push(css.trim());\n return '';\n });\n\n return { content, scripts, styles };\n }\n\n /**\n * Execute scripts\n * @param {string[]} scripts\n * @param {HTMLElement | ShadowRoot} context\n * @param {RenderOptions} options\n * @returns {{ executed: number, errors: Error[] }}\n */\n #executeScripts(scripts, context, options) {\n if (options.executeScripts === false) {\n return { executed: 0, errors: [] };\n }\n\n let executed = 0;\n const errors = [];\n\n for (const code of scripts) {\n if (!code) continue;\n\n // Skip already executed scripts (deduplication by content hash)\n const hash = this.#hashCode(code);\n if (executedScripts.has(hash)) {\n continue;\n }\n executedScripts.add(hash);\n\n try {\n // Create script element for proper execution\n const script = document.createElement('script');\n script.textContent = code;\n\n // Add to document to execute\n if (context instanceof ShadowRoot) {\n context.appendChild(script);\n } else {\n context.appendChild(script);\n }\n\n executed++;\n } catch (err) {\n const error = err instanceof Error ? err : new Error(String(err));\n errors.push(error);\n options.onScriptError?.(error, code);\n }\n }\n\n return { executed, errors };\n }\n\n /**\n * Simple hash function for deduplication\n * @param {string} str\n * @returns {string}\n */\n #hashCode(str) {\n let hash = 0;\n for (let i = 0; i < str.length; i++) {\n const char = str.charCodeAt(i);\n hash = ((hash << 5) - hash) + char;\n hash = hash & hash;\n }\n return hash.toString(36);\n }\n\n /**\n * Clear executed scripts cache (for re-execution)\n * @param {string} [execId] - Clear specific execution, or all if not provided\n */\n clearScripts(execId) {\n if (execId) {\n this.#scriptHashes.delete(execId);\n } else {\n this.#scriptHashes.clear();\n executedScripts.clear();\n }\n }\n}\n\n/**\n * Scope CSS selectors with a prefix\n * @param {string} css\n * @param {string} scopeSelector\n * @returns {string}\n */\nexport function scopeStyles(css, scopeSelector) {\n // Simple CSS scoping - prefix each selector\n // This is a basic implementation; a full parser would be more robust\n\n return css.replace(\n /([^\\r\\n,{}]+)(,(?=[^}]*{)|\\s*{)/g,\n (match, selector, suffix) => {\n // Don't scope @-rules\n if (selector.trim().startsWith('@')) {\n return match;\n }\n\n // Don't scope :root, html, body\n const trimmed = selector.trim();\n if (trimmed === ':root' || trimmed === 'html' || trimmed === 'body') {\n return `${scopeSelector}${suffix}`;\n }\n\n // Scope the selector\n return `${scopeSelector} ${selector.trim()}${suffix}`;\n }\n );\n}\n\n/**\n * Create a new HTML renderer\n * @returns {HtmlRenderer}\n */\nexport function createHtmlRenderer() {\n return new HtmlRenderer();\n}\n","/**\n * CSS Applicator\n *\n * Utility for applying CSS displayData from cell execution.\n * Manages stylesheet lifecycle and scoping.\n *\n * @module utils/css-applicator\n */\n\n/**\n * @typedef {Object} ApplyOptions\n * @property {string} [id] - Style element ID for updates\n * @property {string} [scope] - Scope selector to prefix rules\n * @property {boolean} [append=false] - Append instead of replace\n */\n\n/**\n * @typedef {Object} ApplyResult\n * @property {HTMLStyleElement} element - The style element\n * @property {string} id - Style element ID\n * @property {boolean} replaced - Whether an existing style was replaced\n */\n\nimport { scopeStyles } from './html-renderer.js';\n\n/**\n * CSS Applicator class\n */\nexport class CssApplicator {\n /** @type {Map<string, HTMLStyleElement>} */\n #styles = new Map();\n\n /** @type {HTMLElement} */\n #container;\n\n /**\n * Create CSS applicator\n * @param {HTMLElement} [container=document.head] - Container for style elements\n */\n constructor(container) {\n this.#container = container ?? document.head;\n }\n\n /**\n * Apply CSS string\n *\n * @param {string} css - CSS string\n * @param {ApplyOptions} [options]\n * @returns {ApplyResult}\n */\n apply(css, options = {}) {\n const id = options.id ?? `mrmd-style-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`;\n\n // Scope CSS if requested\n let processedCss = css;\n if (options.scope) {\n processedCss = scopeStyles(css, options.scope);\n }\n\n // Check for existing style with same ID\n let element = this.#styles.get(id);\n let replaced = false;\n\n if (element) {\n if (options.append) {\n element.textContent += '\\n' + processedCss;\n } else {\n element.textContent = processedCss;\n replaced = true;\n }\n } else {\n element = document.createElement('style');\n element.id = id;\n element.textContent = processedCss;\n this.#container.appendChild(element);\n this.#styles.set(id, element);\n }\n\n return { element, id, replaced };\n }\n\n /**\n * Apply CSS from displayData\n *\n * @param {import('../types/execution.js').DisplayData} displayData\n * @param {ApplyOptions} [options]\n * @returns {ApplyResult | null}\n */\n applyDisplayData(displayData, options = {}) {\n const css = displayData.data['text/css'];\n if (!css) return null;\n\n // Use metadata for options if available\n const id = options.id ?? (displayData.metadata?.id ? String(displayData.metadata.id) : undefined);\n const scope = options.scope ?? (displayData.metadata?.scope ? String(displayData.metadata.scope) : undefined);\n\n return this.apply(css, { ...options, id, scope });\n }\n\n /**\n * Remove a style by ID\n * @param {string} id\n * @returns {boolean}\n */\n remove(id) {\n const element = this.#styles.get(id);\n if (!element) return false;\n\n element.remove();\n this.#styles.delete(id);\n return true;\n }\n\n /**\n * Remove all managed styles\n */\n clear() {\n for (const element of this.#styles.values()) {\n element.remove();\n }\n this.#styles.clear();\n }\n\n /**\n * Get all managed style IDs\n * @returns {string[]}\n */\n list() {\n return Array.from(this.#styles.keys());\n }\n\n /**\n * Get a style element by ID\n * @param {string} id\n * @returns {HTMLStyleElement | undefined}\n */\n get(id) {\n return this.#styles.get(id);\n }\n}\n\n/**\n * Create a CSS applicator\n * @param {HTMLElement} [container]\n * @returns {CssApplicator}\n */\nexport function createCssApplicator(container) {\n return new CssApplicator(container);\n}\n","/**\n * ANSI to HTML Renderer\n *\n * Converts ANSI escape sequences to HTML with appropriate styling.\n * Useful for rendering terminal output from code execution.\n *\n * @module utils/ansi-renderer\n */\n\n/**\n * @typedef {Object} AnsiStyle\n * @property {string} [color] - Foreground color\n * @property {string} [background] - Background color\n * @property {boolean} [bold] - Bold text\n * @property {boolean} [dim] - Dim text\n * @property {boolean} [italic] - Italic text\n * @property {boolean} [underline] - Underlined text\n * @property {boolean} [strikethrough] - Strikethrough text\n * @property {boolean} [inverse] - Inverse colors\n */\n\n/**\n * ANSI color codes to CSS colors\n */\nconst COLORS = {\n 30: '#000000', // Black\n 31: '#cc0000', // Red\n 32: '#00cc00', // Green\n 33: '#cccc00', // Yellow\n 34: '#0000cc', // Blue\n 35: '#cc00cc', // Magenta\n 36: '#00cccc', // Cyan\n 37: '#cccccc', // White\n 90: '#666666', // Bright Black (Gray)\n 91: '#ff0000', // Bright Red\n 92: '#00ff00', // Bright Green\n 93: '#ffff00', // Bright Yellow\n 94: '#0000ff', // Bright Blue\n 95: '#ff00ff', // Bright Magenta\n 96: '#00ffff', // Bright Cyan\n 97: '#ffffff', // Bright White\n};\n\nconst BG_COLORS = {\n 40: '#000000',\n 41: '#cc0000',\n 42: '#00cc00',\n 43: '#cccc00',\n 44: '#0000cc',\n 45: '#cc00cc',\n 46: '#00cccc',\n 47: '#cccccc',\n 100: '#666666',\n 101: '#ff0000',\n 102: '#00ff00',\n 103: '#ffff00',\n 104: '#0000ff',\n 105: '#ff00ff',\n 106: '#00ffff',\n 107: '#ffffff',\n};\n\n/**\n * ANSI Renderer class\n */\nexport class AnsiRenderer {\n /** @type {boolean} */\n #escapeHtml = true;\n\n /**\n * Create ANSI renderer\n * @param {{ escapeHtml?: boolean }} [options]\n */\n constructor(options = {}) {\n this.#escapeHtml = options.escapeHtml !== false;\n }\n\n /**\n * Convert ANSI text to HTML\n *\n * @param {string} text - Text with ANSI escape sequences\n * @returns {string} HTML string\n */\n render(text) {\n if (!text) return '';\n\n /** @type {AnsiStyle} */\n let currentStyle = {};\n const parts = [];\n let currentText = '';\n\n // ANSI escape sequence regex\n const ansiRegex = /\\x1b\\[([0-9;]*)m/g;\n let lastIndex = 0;\n let match;\n\n while ((match = ansiRegex.exec(text)) !== null) {\n // Add text before this escape sequence\n const beforeText = text.slice(lastIndex, match.index);\n if (beforeText) {\n currentText += beforeText;\n }\n\n // Parse codes\n const codes = match[1].split(';').map(c => parseInt(c, 10) || 0);\n\n // Flush current text with current style\n if (currentText) {\n parts.push(this.#wrapWithStyle(currentText, currentStyle));\n currentText = '';\n }\n\n // Update style based on codes\n currentStyle = this.#updateStyle(currentStyle, codes);\n\n lastIndex = ansiRegex.lastIndex;\n }\n\n // Add remaining text\n const remainingText = text.slice(lastIndex);\n if (remainingText) {\n currentText += remainingText;\n }\n\n if (currentText) {\n parts.push(this.#wrapWithStyle(currentText, currentStyle));\n }\n\n return parts.join('');\n }\n\n /**\n * Render to a DOM element\n *\n * @param {string} text - ANSI text\n * @param {HTMLElement} container - Target container\n * @param {{ clear?: boolean }} [options]\n */\n renderTo(text, container, options = {}) {\n const html = this.render(text);\n\n if (options.clear !== false) {\n container.innerHTML = '';\n }\n\n const wrapper = document.createElement('pre');\n wrapper.className = 'ansi-output';\n wrapper.innerHTML = html;\n container.appendChild(wrapper);\n }\n\n /**\n * Update style based on ANSI codes\n * @param {AnsiStyle} style\n * @param {number[]} codes\n * @returns {AnsiStyle}\n */\n #updateStyle(style, codes) {\n const newStyle = { ...style };\n\n for (const code of codes) {\n if (code === 0) {\n // Reset all\n return {};\n } else if (code === 1) {\n newStyle.bold = true;\n } else if (code === 2) {\n newStyle.dim = true;\n } else if (code === 3) {\n newStyle.italic = true;\n } else if (code === 4) {\n newStyle.underline = true;\n } else if (code === 7) {\n newStyle.inverse = true;\n } else if (code === 9) {\n newStyle.strikethrough = true;\n } else if (code === 22) {\n newStyle.bold = false;\n newStyle.dim = false;\n } else if (code === 23) {\n newStyle.italic = false;\n } else if (code === 24) {\n newStyle.underline = false;\n } else if (code === 27) {\n newStyle.inverse = false;\n } else if (code === 29) {\n newStyle.strikethrough = false;\n } else if (code === 39) {\n delete newStyle.color;\n } else if (code === 49) {\n delete newStyle.background;\n } else if (code >= 30 && code <= 37) {\n newStyle.color = COLORS[code];\n } else if (code >= 40 && code <= 47) {\n newStyle.background = BG_COLORS[code];\n } else if (code >= 90 && code <= 97) {\n newStyle.color = COLORS[code];\n } else if (code >= 100 && code <= 107) {\n newStyle.background = BG_COLORS[code];\n }\n // TODO: 256 color and RGB support (38;5;n and 38;2;r;g;b)\n }\n\n return newStyle;\n }\n\n /**\n * Wrap text with style span\n * @param {string} text\n * @param {AnsiStyle} style\n * @returns {string}\n */\n #wrapWithStyle(text, style) {\n // Escape HTML if needed\n let escaped = text;\n if (this.#escapeHtml) {\n escaped = text\n .replace(/&/g, '&')\n .replace(/</g, '<')\n .replace(/>/g, '>')\n .replace(/\"/g, '"')\n .replace(/'/g, ''');\n }\n\n // No style needed\n if (Object.keys(style).length === 0) {\n return escaped;\n }\n\n // Build inline style\n const styles = [];\n\n if (style.color) {\n styles.push(`color:${style.color}`);\n }\n if (style.background) {\n styles.push(`background-color:${style.background}`);\n }\n if (style.bold) {\n styles.push('font-weight:bold');\n }\n if (style.dim) {\n styles.push('opacity:0.5');\n }\n if (style.italic) {\n styles.push('font-style:italic');\n }\n if (style.underline) {\n styles.push('text-decoration:underline');\n }\n if (style.strikethrough) {\n if (style.underline) {\n styles.push('text-decoration:underline line-through');\n } else {\n styles.push('text-decoration:line-through');\n }\n }\n\n if (styles.length === 0) {\n return escaped;\n }\n\n return `<span style=\"${styles.join(';')}\">${escaped}</span>`;\n }\n\n /**\n * Strip ANSI codes from text\n * @param {string} text\n * @returns {string}\n */\n static strip(text) {\n return text.replace(/\\x1b\\[[0-9;]*m/g, '');\n }\n}\n\n/**\n * Convert ANSI text to HTML (convenience function)\n * @param {string} text\n * @returns {string}\n */\nexport function ansiToHtml(text) {\n return new AnsiRenderer().render(text);\n}\n\n/**\n * Strip ANSI codes (convenience function)\n * @param {string} text\n * @returns {string}\n */\nexport function stripAnsi(text) {\n return AnsiRenderer.strip(text);\n}\n\n/**\n * Create an ANSI renderer\n * @param {{ escapeHtml?: boolean }} [options]\n * @returns {AnsiRenderer}\n */\nexport function createAnsiRenderer(options) {\n return new AnsiRenderer(options);\n}\n"],"names":["formatValue","resolveValue","hasVariable","getChildren","formatVariableInfo","lspListVariables","lspGetVariableDetail","analysisIsComplete","scopeStyles"],"mappings":"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"}
|