@narumitw/pi-chrome-devtools 0.53.3 → 0.54.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +28 -11
- package/dist/chunks/{browser-settings-menu-SR7KLZT6.js → browser-settings-menu-GQAXLWZ7.ts} +25 -3
- package/dist/chunks/browser-settings-menu-GQAXLWZ7.ts.map +7 -0
- package/dist/chunks/{chunk-4KMN4SFF.js → chunk-5T2WEIYN.ts} +2 -2
- package/dist/chunks/{chunk-F5VG35UI.js → chunk-TVVYQ5KM.ts} +55 -7
- package/dist/chunks/chunk-TVVYQ5KM.ts.map +7 -0
- package/dist/chunks/{chunk-MZCGM6D3.js → chunk-WOFI2A72.ts} +337 -88
- package/dist/chunks/chunk-WOFI2A72.ts.map +7 -0
- package/dist/chunks/{menu-YR4VRT7D.js → menu-Z26D6XSI.ts} +7 -7
- package/dist/chunks/{menu-YR4VRT7D.js.map → menu-Z26D6XSI.ts.map} +1 -1
- package/dist/chunks/{tools-6R7Z6HWJ.js → tools-DSYQPFF3.ts} +3 -3
- package/dist/index.ts +45 -21
- package/dist/index.ts.map +2 -2
- package/package.json +3 -3
- package/src/browser-settings-menu.ts +23 -0
- package/src/chrome-devtools.ts +48 -15
- package/src/lazy-tools.ts +350 -26
- package/src/menu.ts +3 -3
- package/src/settings.ts +65 -1
- package/src/tool-selector.ts +95 -40
- package/dist/chunks/browser-settings-menu-SR7KLZT6.js.map +0 -7
- package/dist/chunks/chunk-F5VG35UI.js.map +0 -7
- package/dist/chunks/chunk-MZCGM6D3.js.map +0 -7
- /package/dist/chunks/{chunk-4KMN4SFF.js.map → chunk-5T2WEIYN.ts.map} +0 -0
- /package/dist/chunks/{tools-6R7Z6HWJ.js.map → tools-DSYQPFF3.ts.map} +0 -0
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../src/lazy-tools.ts", "../../src/display.ts", "../../src/tool-selector.ts"],
|
|
4
|
-
"sourcesContent": ["import { defineTool, type ExtensionAPI, type ExtensionContext } from \"@earendil-works/pi-coding-agent\";\nimport { Type } from \"typebox\";\nimport { webMcpEnabled } from \"./runtime.js\";\nimport { CHROME_DEVTOOLS_TOOL_NAMES, type ChromeDevToolsToolName, isWebMcpToolName } from \"./tool-names.js\";\n\nexport const CHROME_DEVTOOLS_LOAD_TOOL_NAME = \"chrome_devtools_load\";\n\nconst AVAILABLE_TOOLS_STORE = Symbol.for(\"@narumitw/pi-chrome-devtools.available-tools-store\");\ntype ChromeDevtoolsGlobal = typeof globalThis & {\n [AVAILABLE_TOOLS_STORE]?: WeakMap<ExtensionAPI, Set<ChromeDevToolsToolName>>;\n};\nconst sharedGlobal = globalThis as ChromeDevtoolsGlobal;\nconst existingAvailableToolsStore = sharedGlobal[AVAILABLE_TOOLS_STORE];\nconst availableToolsByApi = existingAvailableToolsStore ?? new WeakMap<ExtensionAPI, Set<ChromeDevToolsToolName>>();\nif (!existingAvailableToolsStore) sharedGlobal[AVAILABLE_TOOLS_STORE] = availableToolsByApi;\nconst lazyExposureByApi = new WeakMap<ExtensionAPI, boolean>();\nconst sessionOwnerByApi = new WeakMap<ExtensionAPI, object>();\n\nconst SEARCH_TEXT: Record<ChromeDevToolsToolName, string> = {\n chrome_devtools_list_pages: \"list open inspectable chrome browser pages tabs targets\",\n chrome_devtools_select_page: \"select choose active chrome browser page tab target\",\n chrome_devtools_navigate: \"navigate open create chrome browser page url website\",\n chrome_devtools_evaluate: \"evaluate run javascript expression dom inspect chrome browser page\",\n chrome_devtools_screenshot: \"capture screenshot png image visual chrome browser page\",\n chrome_devtools_webmcp_list_tools: \"list discover page provided website webmcp tools capabilities experimental\",\n chrome_devtools_webmcp_call_tool: \"call invoke page provided website webmcp tool confirmation experimental\",\n};\n\nexport function setChromeDevtoolsSessionOwner(pi: ExtensionAPI, owner: object) {\n sessionOwnerByApi.set(pi, owner);\n}\n\nexport function initializeAvailableChromeDevtoolsTools(pi: ExtensionAPI) {\n if (availableToolsByApi.has(pi)) return;\n const activeTools = new Set(pi.getActiveTools());\n setAvailableTools(\n pi,\n CHROME_DEVTOOLS_TOOL_NAMES.filter((name) => activeTools.has(name)),\n );\n}\n\nexport function configureChromeDevtoolsToolExposure(\n pi: ExtensionAPI,\n availableTools: readonly ChromeDevToolsToolName[],\n model?: ExtensionContext[\"model\"],\n) {\n setAvailableTools(pi, availableTools);\n const available = effectiveAvailableTools(pi);\n const lazyExposure = supportsNativeDeferredToolLoading(model);\n lazyExposureByApi.set(pi, lazyExposure);\n const exposedTools = lazyExposure ? [] : CHROME_DEVTOOLS_TOOL_NAMES.filter((name) => available.has(name));\n const nonCapabilityTools = pi\n .getActiveTools()\n .filter((name) => !CHROME_DEVTOOLS_TOOL_NAMES.includes(name as ChromeDevToolsToolName));\n pi.setActiveTools(unique([...nonCapabilityTools, CHROME_DEVTOOLS_LOAD_TOOL_NAME, ...exposedTools]));\n}\n\nexport function requireEagerChromeDevtoolsToolExposure(pi: ExtensionAPI) {\n lazyExposureByApi.set(pi, false);\n const active = pi.getActiveTools();\n const available = availableChromeDevtoolsTools(pi);\n pi.setActiveTools(unique([...active, CHROME_DEVTOOLS_LOAD_TOOL_NAME, ...available]));\n}\n\nexport function applyAvailableChromeDevtoolsTools(pi: ExtensionAPI, availableTools: readonly ChromeDevToolsToolName[]) {\n setAvailableTools(pi, availableTools);\n const available = effectiveAvailableTools(pi);\n const lazyExposure = lazyExposureByApi.get(pi) === true;\n const active = pi\n .getActiveTools()\n .filter(\n (name) =>\n !CHROME_DEVTOOLS_TOOL_NAMES.includes(name as ChromeDevToolsToolName) ||\n (lazyExposure && available.has(name as ChromeDevToolsToolName)),\n );\n const eagerTools = lazyExposure ? [] : CHROME_DEVTOOLS_TOOL_NAMES.filter((name) => available.has(name));\n pi.setActiveTools(unique([...active, CHROME_DEVTOOLS_LOAD_TOOL_NAME, ...eagerTools]));\n}\n\nexport function chromeDevtoolsToolExposureMode(pi: ExtensionAPI) {\n return lazyExposureByApi.get(pi) === true ? \"native deferred\" : \"eager\";\n}\n\nexport function supportsNativeDeferredToolLoading(model: ExtensionContext[\"model\"]): boolean {\n if (!model) return false;\n if (model.api === \"anthropic-messages\") {\n // Fireworks Messages requires the canonical ToolSearch/tool_search loader name.\n // chrome_devtools_load stays package-specific so independently installed loaders cannot collide.\n if (model.provider === \"fireworks\") return false;\n const configured = compatBoolean(model.compat, \"supportsToolReferences\");\n if (configured !== undefined) return configured;\n if (model.provider !== \"anthropic\" || model.id.includes(\"haiku\")) return false;\n const version = model.id.match(/^claude-(?:opus|sonnet|fable)-(\\d+)(?:-(\\d+))?(?:-|$)/);\n if (!version) return false;\n const major = Number(version[1]);\n const minor = version[2] && version[2].length < 8 ? Number(version[2]) : 0;\n return major > 4 || (major === 4 && minor >= 5);\n }\n if (model.api === \"openai-completions\") {\n return compatString(model.compat, \"deferredToolsMode\") === \"kimi\";\n }\n if (model.api === \"openai-responses\" || model.api === \"openai-codex-responses\") {\n return (\n compatBoolean(model.compat, \"supportsAdditionalTools\") === true ||\n compatBoolean(model.compat, \"supportsToolSearch\") === true\n );\n }\n return false;\n}\n\nexport function availableChromeDevtoolsTools(pi: ExtensionAPI) {\n const available = effectiveAvailableTools(pi);\n return CHROME_DEVTOOLS_TOOL_NAMES.filter((name) => available.has(name));\n}\n\nexport function configuredChromeDevtoolsTools(pi: ExtensionAPI) {\n const available = availableToolsByApi.get(pi) ?? new Set();\n return CHROME_DEVTOOLS_TOOL_NAMES.filter((name) => available.has(name));\n}\n\nexport function createChromeDevtoolsLoadTool(pi: ExtensionAPI) {\n return defineTool({\n name: CHROME_DEVTOOLS_LOAD_TOOL_NAME,\n label: \"Chrome DevTools: Load Tools\",\n description:\n \"Find and enable Chrome DevTools browser tools relevant to a task. Loaded tools remain available for the session.\",\n promptSnippet: \"Load Chrome DevTools browser capabilities on demand\",\n promptGuidelines: [\n \"Use chrome_devtools_load when a task requires inspecting or controlling a Chrome browser and the needed chrome_devtools_* capability is not active.\",\n ],\n parameters: Type.Object({\n query: Type.String({\n description: \"Browser capability or task to find tools for.\",\n maxLength: 500,\n }),\n limit: Type.Optional(\n Type.Integer({\n description: \"Maximum tools to load. Defaults to 3.\",\n minimum: 1,\n maximum: 5,\n }),\n ),\n }),\n async execute(_toolCallId, params, signal, _onUpdate, ctx) {\n signal?.throwIfAborted();\n setChromeDevtoolsSessionOwner(pi, ctx.sessionManager);\n const available = new Set(availableChromeDevtoolsTools(pi));\n const matches = matchChromeDevtoolsTools(params.query, params.limit ?? 3, available);\n const active = pi.getActiveTools();\n const activeSet = new Set(active);\n const added = matches.filter((name) => !activeSet.has(name));\n if (added.length > 0) {\n pi.setActiveTools(unique([...active, ...added]));\n }\n\n const text =\n matches.length === 0\n ? \"No available Chrome DevTools tools matched the query.\"\n : added.length > 0\n ? `Loaded Chrome DevTools tools: ${added.join(\", \")}`\n : `Matching Chrome DevTools tools are already loaded: ${matches.join(\", \")}`;\n return {\n content: [{ type: \"text\" as const, text }],\n details: { matches, added },\n };\n },\n });\n}\n\nfunction matchChromeDevtoolsTools(query: string, limit: number, available: ReadonlySet<ChromeDevToolsToolName>) {\n const terms = query\n .toLowerCase()\n .split(/[^a-z0-9]+/)\n .filter((term) => term.length >= 2);\n if (terms.length === 0) return [];\n return CHROME_DEVTOOLS_TOOL_NAMES.filter((name) => available.has(name))\n .map((name, index) => ({\n name,\n index,\n score: terms.reduce((score, term) => score + (SEARCH_TEXT[name].includes(term) ? 1 : 0), 0),\n }))\n .filter((match) => match.score > 0)\n .sort((left, right) => right.score - left.score || left.index - right.index)\n .slice(0, limit)\n .map((match) => match.name);\n}\n\nfunction setAvailableTools(pi: ExtensionAPI, availableTools: readonly ChromeDevToolsToolName[]) {\n const available = new Set(availableTools);\n availableToolsByApi.set(pi, available);\n return available;\n}\n\nfunction effectiveAvailableTools(pi: ExtensionAPI) {\n const configured = availableToolsByApi.get(pi) ?? new Set();\n const owner = sessionOwnerByApi.get(pi);\n const enabled = owner !== undefined && webMcpEnabled(owner);\n return new Set(\n CHROME_DEVTOOLS_TOOL_NAMES.filter((name) => configured.has(name) && (enabled || !isWebMcpToolName(name))),\n );\n}\n\nfunction compatBoolean(value: unknown, key: string) {\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) return undefined;\n const record = value as Record<string, unknown>;\n return typeof record[key] === \"boolean\" ? record[key] : undefined;\n}\n\nfunction compatString(value: unknown, key: string) {\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) return undefined;\n const record = value as Record<string, unknown>;\n return typeof record[key] === \"string\" ? record[key] : undefined;\n}\n\nfunction unique(values: readonly string[]) {\n return [...new Set(values)];\n}\n", "const MAX_SANITIZER_INPUT_CODE_UNITS = 50_000;\nconst graphemeSegmenter = new Intl.Segmenter(undefined, { granularity: \"grapheme\" });\n\nexport function sanitizeChromeDevtoolsDisplay(value: string, maxCharacters = 50_000) {\n const inputWasTruncated = value.length > MAX_SANITIZER_INPUT_CODE_UNITS;\n const boundedInput = inputWasTruncated ? truncateAtGraphemeBoundary(value, MAX_SANITIZER_INPUT_CODE_UNITS) : value;\n const normalizedLineEndings = boundedInput.replace(/\\r\\n/g, \"\\n\");\n // Neutralize controls without parsing untrusted terminal sequences; keep printable payload visible.\n const sanitized = Array.from(normalizedLineEndings, (character) => {\n const codePoint = character.codePointAt(0) ?? 0;\n const unsafeControl =\n (codePoint >= 0 && codePoint <= 8) ||\n (codePoint >= 11 && codePoint <= 31) ||\n (codePoint >= 127 && codePoint <= 159);\n const unsafeBidi = (codePoint >= 0x202a && codePoint <= 0x202e) || (codePoint >= 0x2066 && codePoint <= 0x2069);\n const loneSurrogate = character.length === 1 && codePoint >= 0xd800 && codePoint <= 0xdfff;\n return unsafeControl || unsafeBidi || loneSurrogate ? \"\uFFFD\" : character;\n }).join(\"\");\n const outputLimit = Math.min(maxCharacters, MAX_SANITIZER_INPUT_CODE_UNITS);\n if (!inputWasTruncated && sanitized.length <= outputLimit) return sanitized;\n\n return `${truncateAtGraphemeBoundary(sanitized, Math.max(0, outputLimit - 1))}\u2026`;\n}\n\nfunction truncateAtGraphemeBoundary(value: string, maxCodeUnits: number) {\n if (value.length <= maxCodeUnits) return value;\n const boundedLookahead = value.slice(0, Math.max(0, maxCodeUnits) + 2);\n let safeEnd = 0;\n for (const { index, segment } of graphemeSegmenter.segment(boundedLookahead)) {\n const segmentEnd = index + segment.length;\n if (segmentEnd > maxCodeUnits) break;\n safeEnd = segmentEnd;\n }\n return value.slice(0, safeEnd);\n}\n", "import type { ExtensionAPI, ExtensionCommandContext } from \"@earendil-works/pi-coding-agent\";\nimport {\n browserCandidateHint,\n browserLifecycleState,\n browserSettingsForOwner,\n devToolsEndpoint,\n endpointConfigHint,\n endpointSourceLabel,\n launchAttemptLines,\n launchHint,\n launchModeLabel,\n managedBrowserForOwner,\n} from \"./browser-manager.js\";\nimport { sanitizeChromeDevtoolsDisplay } from \"./display.js\";\nimport {\n applyAvailableChromeDevtoolsTools,\n availableChromeDevtoolsTools,\n CHROME_DEVTOOLS_LOAD_TOOL_NAME,\n chromeDevtoolsToolExposureMode,\n} from \"./lazy-tools.js\";\nimport { invalidateWebMcpOperations, state, webMcpEnabled } from \"./runtime.js\";\nimport { loadSettings, saveSettings, settingsFilePath } from \"./settings.js\";\nimport {\n CHROME_DEVTOOLS_TOOL_NAMES,\n type ChromeDevToolsToolName,\n CORE_CHROME_DEVTOOLS_TOOL_NAMES,\n isWebMcpToolName,\n} from \"./tool-names.js\";\n\nexport { sanitizeChromeDevtoolsDisplay };\n\ntype CommandContext = ExtensionCommandContext;\n\nfunction unique<T>(values: T[]) {\n return Array.from(new Set(values));\n}\n\nfunction formatError(error: unknown) {\n return error instanceof Error ? error.message : String(error);\n}\n\ninterface ToolStatusSummary {\n availabilityStatus: \"enabled\" | \"disabled\" | \"partial\";\n availableChromeToolCount: number;\n loadedChromeToolCount: number;\n activeNonChromeToolCount: number;\n capabilityCount: number;\n}\n\ntype ToolSelectionSaveResult = \"saved\" | \"active-tools-changed\" | \"failed\";\n\nexport async function updateChromeDevtoolsTools(\n pi: ExtensionAPI,\n ctx: CommandContext,\n selectedTools: readonly ChromeDevToolsToolName[],\n action: string,\n) {\n const generation = state.sessionGeneration;\n const result = await transactSelectedTools(pi, ctx, selectedTools, generation);\n if (result !== \"saved\" || generation !== state.sessionGeneration) return;\n const status = await buildToolStatusMessage(pi, ctx.sessionManager);\n if (generation !== state.sessionGeneration) return;\n ctx.ui.notify(`Chrome DevTools tool catalog ${action}.\\n\\n${status}`, \"info\");\n}\n\nexport async function setSelectedChromeDevtoolsTools(\n pi: ExtensionAPI,\n ctx: CommandContext,\n selectedTools: readonly ChromeDevToolsToolName[],\n expectedActiveTools: readonly ChromeDevToolsToolName[],\n): Promise<ToolSelectionSaveResult> {\n return transactSelectedTools(pi, ctx, selectedTools, state.sessionGeneration, expectedActiveTools);\n}\n\nlet toolTransactionQueue = Promise.resolve();\n\nexport async function waitForChromeDevtoolsSettings(): Promise<void> {\n await toolTransactionQueue;\n}\n\nfunction transactSelectedTools(\n pi: ExtensionAPI,\n ctx: CommandContext,\n selectedTools: readonly ChromeDevToolsToolName[],\n expectedGeneration: number,\n expectedActiveTools?: readonly ChromeDevToolsToolName[],\n): Promise<ToolSelectionSaveResult> {\n const operation = toolTransactionQueue.then(() =>\n transactSelectedToolsNow(pi, ctx, selectedTools, expectedGeneration, expectedActiveTools),\n );\n toolTransactionQueue = operation.then(\n () => undefined,\n () => undefined,\n );\n return operation;\n}\n\nasync function transactSelectedToolsNow(\n pi: ExtensionAPI,\n ctx: CommandContext,\n selectedTools: readonly ChromeDevToolsToolName[],\n expectedGeneration: number,\n expectedActiveTools?: readonly ChromeDevToolsToolName[],\n): Promise<ToolSelectionSaveResult> {\n if (expectedGeneration !== state.sessionGeneration) return \"failed\";\n if (expectedActiveTools && !arraysEqual(availableChromeDevtoolsTools(pi), expectedActiveTools)) {\n ctx.ui.notify(\n \"Browser tool selection changed while review was open. Review the current state, then apply again.\",\n \"warning\",\n );\n return \"active-tools-changed\";\n }\n const previousActiveTools = pi.getActiveTools();\n const previousAvailableTools = availableChromeDevtoolsTools(pi);\n try {\n const previousWebMcpTools = previousAvailableTools.filter(isWebMcpToolName);\n const selectedWebMcpTools = selectedTools.filter(isWebMcpToolName);\n if (!arraysEqual(previousWebMcpTools, selectedWebMcpTools)) {\n invalidateWebMcpOperations(ctx.sessionManager, \"Chrome DevTools WebMCP gateway availability changed\");\n }\n applyChromeDevtoolsTools(pi, selectedTools);\n await persistSettings(selectedTools);\n return expectedGeneration === state.sessionGeneration ? \"saved\" : \"failed\";\n } catch (error) {\n let rollbackError: unknown;\n try {\n applyAvailableChromeDevtoolsTools(pi, previousAvailableTools);\n const currentNonChromeTools = pi\n .getActiveTools()\n .filter((name) => !CHROME_DEVTOOLS_TOOL_NAMES.includes(name as ChromeDevToolsToolName));\n const previousLoadedChromeTools = previousActiveTools.filter((name) =>\n CHROME_DEVTOOLS_TOOL_NAMES.includes(name as ChromeDevToolsToolName),\n );\n const restoredChromeTools =\n chromeDevtoolsToolExposureMode(pi) === \"eager\" ? previousAvailableTools : previousLoadedChromeTools;\n pi.setActiveTools(unique([...currentNonChromeTools, ...restoredChromeTools]));\n } catch (caught) {\n rollbackError = caught;\n }\n if (expectedGeneration !== state.sessionGeneration) return \"failed\";\n ctx.ui.notify(\n sanitizeChromeDevtoolsDisplay(\n rollbackError\n ? `Chrome DevTools settings save failed: ${formatError(error)}; active-tool rollback failed: ${formatError(rollbackError)}`\n : `Chrome DevTools settings save failed; active tools restored: ${formatError(error)}`,\n ),\n \"warning\",\n );\n return \"failed\";\n }\n}\n\nfunction arraysEqual<T>(left: readonly T[], right: readonly T[]) {\n return left.length === right.length && left.every((value, index) => value === right[index]);\n}\n\nexport function applyChromeDevtoolsTools(pi: ExtensionAPI, selectedTools: readonly ChromeDevToolsToolName[]) {\n applyAvailableChromeDevtoolsTools(pi, selectedTools);\n}\n\nfunction getToolStatusSummary(pi: ExtensionAPI, owner: object): ToolStatusSummary {\n const chromeToolNames = new Set<string>(CHROME_DEVTOOLS_TOOL_NAMES);\n const activeToolNames = new Set(pi.getActiveTools());\n const loadedChromeToolCount = CHROME_DEVTOOLS_TOOL_NAMES.filter((name) => activeToolNames.has(name)).length;\n const availableChromeToolCount = availableChromeDevtoolsTools(pi).length;\n const activeNonChromeToolCount = Array.from(activeToolNames).filter(\n (name) => !chromeToolNames.has(name) && name !== CHROME_DEVTOOLS_LOAD_TOOL_NAME,\n ).length;\n const capabilityCount = effectiveCatalog(owner).length;\n const availabilityStatus =\n availableChromeToolCount === capabilityCount ? \"enabled\" : availableChromeToolCount === 0 ? \"disabled\" : \"partial\";\n\n return {\n availabilityStatus,\n availableChromeToolCount,\n loadedChromeToolCount,\n activeNonChromeToolCount,\n capabilityCount,\n };\n}\n\nexport async function buildToolStatusMessage(pi: ExtensionAPI, owner: object) {\n const summary = getToolStatusSummary(pi, owner);\n const persistedSetting = await persistedSettingLabel();\n return sanitizeChromeDevtoolsDisplay(\n [\n `Chrome DevTools tools available: ${formatRuntimeStatus(summary)}`,\n `Tool exposure: ${chromeDevtoolsToolExposureMode(pi)}`,\n `Loaded capability tools this session: ${summary.loadedChromeToolCount}/${summary.capabilityCount}`,\n `WebMCP: ${webMcpEnabled(owner) ? \"enabled \u00B7 experimental \u00B7 confirmation required for every call\" : \"disabled \u00B7 experimental\"}`,\n `Loader: ${pi.getActiveTools().includes(CHROME_DEVTOOLS_LOAD_TOOL_NAME) ? \"active\" : \"inactive\"}`,\n `Persisted tool catalog: ${persistedSetting}`,\n ...browserSettingsStatusLines(owner),\n ...(state.settingsNotice ? [`Settings note: ${state.settingsNotice}`] : []),\n `Other active tools preserved: ${summary.activeNonChromeToolCount}`,\n `Endpoint: ${devToolsEndpoint(owner)}`,\n `Endpoint source: ${endpointSourceLabel(owner)}`,\n `Launch mode: ${launchModeLabel(owner)}`,\n ...launchAttemptLines(owner),\n ].join(\"\\n\"),\n );\n}\n\nexport function buildQuickstartMessage(owner: object) {\n return buildSettingsSetupMessage(owner);\n}\n\nexport function buildBrowserStatusMessage(owner?: object) {\n const browser = browserSettingsForOwner(owner);\n const lifecycle = browserLifecycleState(owner);\n const webMcpIsEnabled = owner ? webMcpEnabled(owner) : false;\n const browserState =\n lifecycle === \"starting\"\n ? \"starting managed browser\"\n : lifecycle === \"running\"\n ? \"managed browser running\"\n : lifecycle === \"exited\"\n ? \"managed browser exited\"\n : lifecycle === \"failed\"\n ? \"last launch failed\"\n : \"not started; connection has not been checked\";\n const needsRecovery = lifecycle === \"exited\" || lifecycle === \"failed\";\n return sanitizeChromeDevtoolsDisplay(\n [\n `Browser: ${browserState}`,\n \"Viewing this status does not probe the endpoint or launch Chrome.\",\n `Endpoint: ${devToolsEndpoint(owner)}`,\n `Endpoint source: ${endpointSourceLabel(owner)}`,\n `Launch mode: ${launchModeLabel(owner)}`,\n `Unpacked extensions: ${browser.extensionPaths.length} (${browser.extensionPathsSource})`,\n `WebMCP: ${webMcpIsEnabled ? \"enabled \u00B7 experimental\" : \"disabled \u00B7 experimental\"}`,\n ...(webMcpIsEnabled && !managedBrowserForOwner(owner)?.ready\n ? [\"WebMCP warning: attached browser profiles may contain everyday authenticated sessions and sensitive state.\"]\n : []),\n ...(browser.extensionPaths.length > 0\n ? [\"Unpacked extensions execute trusted browser code in an isolated managed browser.\"]\n : []),\n ...launchAttemptLines(owner),\n ...(needsRecovery ? [launchHint(owner), endpointConfigHint()] : []),\n ].join(\"\\n\"),\n );\n}\n\nexport function buildSettingsSetupMessage(owner: object) {\n return sanitizeChromeDevtoolsDisplay(\n [\n `Chrome DevTools endpoint: ${devToolsEndpoint(owner)}`,\n `Endpoint source: ${endpointSourceLabel(owner)}`,\n `Launch mode: ${launchModeLabel(owner)}`,\n ...browserSettingsStatusLines(owner),\n launchHint(owner),\n browserCandidateHint(owner),\n ...launchAttemptLines(owner),\n endpointConfigHint(),\n ].join(\"\\n\"),\n );\n}\n\nfunction browserSettingsStatusLines(owner: object) {\n const browser = browserSettingsForOwner(owner);\n const extensionPaths = browser.extensionPaths;\n const extensionLines =\n extensionPaths.length > 0 ? extensionPaths.map((extensionPath) => ` - ${extensionPath}`) : [\" - none\"];\n return [\n `Settings file: ${state.settingsFilePath ?? settingsFilePath()} (user)`,\n ...(state.projectSettingsFilePath\n ? [\n `Project settings: ${state.projectSettingsFilePath} (${state.projectSettingsTrusted ? \"trusted\" : \"untrusted; ignored\"})`,\n ]\n : []),\n `Auto-launch: ${browser.autoLaunchEnabled ? \"on\" : \"off\"} (${browser.autoLaunchSource})`,\n `Browser executable: ${browser.executablePath ?? \"automatic discovery\"} (${browser.executablePathSource})`,\n `Unpacked extensions (${browser.extensionPathsSource}):`,\n ...extensionLines,\n `WebMCP: ${webMcpEnabled(owner) ? \"enabled \u00B7 experimental \u00B7 every call requires confirmation\" : \"disabled \u00B7 experimental\"}`,\n \"Confirmed menu settings apply before the next browser connection; manual JSON edits require /reload or session replacement.\",\n ...(extensionPaths.length > 0\n ? [\"Unpacked extensions require Chrome for Testing or Chromium and execute trusted browser code.\"]\n : []),\n ];\n}\n\nexport function buildCommandGuide(owner: object) {\n return [\n \"Chrome DevTools commands:\",\n `WebMCP: ${webMcpEnabled(owner) ? \"enabled\" : \"disabled\"} \u00B7 experimental \u00B7 every page-provided call requires confirmation`,\n \"/chrome-devtools \u2014 open this menu\",\n \"/chrome-devtools help \u2014 show command usage\",\n \"/chrome-devtools quickstart \u2014 show endpoint and launch help\",\n \"/chrome-devtools status \u2014 show tool and settings status\",\n \"/chrome-devtools settings \u2014 edit browser connection settings\",\n \"/chrome-devtools tools \u2014 choose available Chrome DevTools tools\",\n \"/chrome-devtools toggle|select \u2014 compatibility aliases for tools\",\n \"/chrome-devtools enable|on \u2014 make all Chrome DevTools tools available\",\n \"/chrome-devtools disable|off \u2014 make all Chrome DevTools capability tools unavailable\",\n ].join(\"\\n\");\n}\n\nexport function allChromeDevtoolsTools(owner: object) {\n return effectiveCatalog(owner);\n}\n\nexport function orderedChromeDevtoolsTools(selectedTools: ReadonlySet<ChromeDevToolsToolName>) {\n return CHROME_DEVTOOLS_TOOL_NAMES.filter((toolName) => selectedTools.has(toolName));\n}\n\nfunction formatRuntimeStatus(summary: ToolStatusSummary) {\n return `${summary.availabilityStatus} (${summary.availableChromeToolCount}/${summary.capabilityCount} available)`;\n}\n\nasync function persistedSettingLabel() {\n const settings = await loadSettings();\n if (settings.kind === \"loaded\" && settings.settings.tools) {\n return formatPersistedSelection(settings.settings.tools);\n }\n if (settings.kind === \"invalid\") {\n return `none; current active-tool policy preserved (invalid settings ignored: ${settings.reason})`;\n }\n return \"none; current active-tool policy preserved\";\n}\n\nfunction formatPersistedSelection(tools: readonly ChromeDevToolsToolName[]) {\n if (tools.length === CHROME_DEVTOOLS_TOOL_NAMES.length) {\n return `all available (${tools.length}/${CHROME_DEVTOOLS_TOOL_NAMES.length} selected)`;\n }\n if (tools.length === 0) return `all unavailable (0/${CHROME_DEVTOOLS_TOOL_NAMES.length} selected)`;\n return `${tools.length}/${CHROME_DEVTOOLS_TOOL_NAMES.length} selected: ${tools.join(\", \")}`;\n}\n\nfunction effectiveCatalog(owner: object): ChromeDevToolsToolName[] {\n return webMcpEnabled(owner) ? [...CHROME_DEVTOOLS_TOOL_NAMES] : [...CORE_CHROME_DEVTOOLS_TOOL_NAMES];\n}\n\nasync function persistSettings(selectedTools: readonly ChromeDevToolsToolName[]) {\n await saveSettings({ tools: [...selectedTools], updatedAt: Date.now() });\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["unique"]
|
|
7
|
-
}
|
|
File without changes
|
|
File without changes
|