diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 117daf119..cf164ab2b 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -10,7 +10,6 @@ updates: cooldown: default-days: 7 exclude: - - 'chrome-devtools-frontend' - 'puppeteer*' - 'lighthouse' - '@google/genai' @@ -23,17 +22,12 @@ updates: dependency-type: development exclude-patterns: - 'puppeteer*' - - 'chrome-devtools-frontend' - '@modelcontextprotocol/sdk' - 'yargs' - 'debug' - 'core-js' patterns: - '*' - # breaks often so better to roll separetely. - bundled-devtools: - patterns: - - 'chrome-devtools-frontend' bundled: patterns: - 'puppeteer*' @@ -56,3 +50,13 @@ updates: all: patterns: - '*' + - package-ecosystem: 'gitsubmodule' + directory: '/' + schedule: + interval: 'daily' + time: '06:00' + timezone: 'Europe/Berlin' + cooldown: + default-days: 7 + exclude: + - 'devtools-frontend' diff --git a/.github/workflows/pre-release.yml b/.github/workflows/pre-release.yml index afddc4291..02841f2ff 100644 --- a/.github/workflows/pre-release.yml +++ b/.github/workflows/pre-release.yml @@ -1,6 +1,7 @@ name: Pre-release -permissions: read-all +permissions: + contents: read on: workflow_dispatch: @@ -17,6 +18,8 @@ jobs: uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: fetch-depth: 2 + submodules: true + submodule-depth: 1 - name: Set up Node.js uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0 diff --git a/.github/workflows/presubmit.yml b/.github/workflows/presubmit.yml index 8e2429e2a..05069595f 100644 --- a/.github/workflows/presubmit.yml +++ b/.github/workflows/presubmit.yml @@ -1,6 +1,7 @@ name: Check code before submitting -permissions: read-all +permissions: + contents: read on: merge_group: @@ -19,6 +20,8 @@ jobs: uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: fetch-depth: 2 + submodules: true + submodule-depth: 1 - name: Set up Node.js uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0 @@ -41,6 +44,8 @@ jobs: uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: fetch-depth: 2 + submodules: true + submodule-depth: 1 - name: Set up Node.js uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0 diff --git a/.github/workflows/publish-to-mcp-registry-on-tag.yml b/.github/workflows/publish-to-mcp-registry-on-tag.yml index f81ae82f6..a8bbfd316 100644 --- a/.github/workflows/publish-to-mcp-registry-on-tag.yml +++ b/.github/workflows/publish-to-mcp-registry-on-tag.yml @@ -20,6 +20,8 @@ jobs: uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: fetch-depth: 2 + submodules: true + submodule-depth: 1 - name: Set up Node.js uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0 diff --git a/.github/workflows/publish-to-npm-on-tag.yml b/.github/workflows/publish-to-npm-on-tag.yml index 5c40a62ca..06ed2820e 100644 --- a/.github/workflows/publish-to-npm-on-tag.yml +++ b/.github/workflows/publish-to-npm-on-tag.yml @@ -20,6 +20,8 @@ jobs: uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: fetch-depth: 2 + submodules: true + submodule-depth: 1 - name: Set up Node.js uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0 diff --git a/.github/workflows/run-tests.yml b/.github/workflows/run-tests.yml index 78093ba6e..519e69b9a 100644 --- a/.github/workflows/run-tests.yml +++ b/.github/workflows/run-tests.yml @@ -1,6 +1,7 @@ name: Compile and run tests -permissions: read-all +permissions: + contents: read on: merge_group: @@ -30,6 +31,8 @@ jobs: uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: fetch-depth: 2 + submodules: true + submodule-depth: 1 - name: Set up Node.js uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0 diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 000000000..ecb99aae6 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "devtools-frontend"] + path = devtools-frontend + url = https://github.com/ChromeDevTools/devtools-frontend.git diff --git a/.prettierignore b/.prettierignore index 86703e37d..34de6a12c 100644 --- a/.prettierignore +++ b/.prettierignore @@ -1,6 +1,7 @@ # Prettier-only ignores. CHANGELOG.md src/third_party/lighthouse-devtools-mcp-bundle.js +devtools-frontend # Release-please formatting brakes CI checks .claude-plugin/plugin.json diff --git a/devtools-frontend b/devtools-frontend new file mode 160000 index 000000000..7d894409f --- /dev/null +++ b/devtools-frontend @@ -0,0 +1 @@ +Subproject commit 7d894409f0d2c0389c55c6655b7fc7e8c8bc9259 diff --git a/eslint.config.mjs b/eslint.config.mjs index f6d18818b..a0fd58d02 100644 --- a/eslint.config.mjs +++ b/eslint.config.mjs @@ -17,6 +17,7 @@ export default defineConfig([ globalIgnores([ '**/node_modules', '**/build/', + 'devtools-frontend/**', 'tests/tools/fixtures/', 'tests/fixtures/', 'src/third_party/lighthouse-devtools-mcp-bundle.js', @@ -133,9 +134,9 @@ export default defineConfig([ { patterns: [ { - regex: '.*chrome-devtools-frontend/(?!mcp/mcp.js$).*', + regex: '.*devtools-frontend/(?!mcp/mcp.js$).*', message: - 'Import only the devtools-frontend code exported via node_modules/chrome-devtools-frontend/mcp/mcp.js', + 'Import only the devtools-frontend code exported via devtools-frontend/mcp/mcp.js', }, ], }, diff --git a/package.json b/package.json index 2fa9bc0be..e2b33384d 100644 --- a/package.json +++ b/package.json @@ -67,7 +67,6 @@ "@types/yargs": "^17.0.33", "@typescript-eslint/eslint-plugin": "^8.43.0", "@typescript-eslint/parser": "^8.43.0", - "chrome-devtools-frontend": "1.0.1672557", "core-js": "3.49.0", "debug": "4.4.3", "eslint": "^10.7.0", diff --git a/rollup.config.mjs b/rollup.config.mjs index d07ae06b2..78a9cb0cc 100644 --- a/rollup.config.mjs +++ b/rollup.config.mjs @@ -193,7 +193,7 @@ const bundleDependency = ( return arr.join('\n'); }); - // Manual license handling for chrome-devtools-frontend third_party + // Manual license handling for devtools-frontend third_party const tsConfig = JSON.parse( fs.readFileSync( path.join(process.cwd(), 'tsconfig.json'), @@ -201,16 +201,14 @@ const bundleDependency = ( ), ); const thirdPartyDirectories = tsConfig.include.filter(location => - location.includes( - 'node_modules/chrome-devtools-frontend/front_end/third_party', - ), + location.includes('devtools-frontend/front_end/third_party'), ); const manualLicenses = []; - // Add chrome-devtools-frontend main license + // Add devtools-frontend main license const cdtfLicensePath = path.join( process.cwd(), - 'node_modules/chrome-devtools-frontend/LICENSE', + 'devtools-frontend/LICENSE', ); if (fs.existsSync(cdtfLicensePath)) { manualLicenses.push( diff --git a/scripts/post-build.ts b/scripts/post-build.ts index b40837f67..396597470 100644 --- a/scripts/post-build.ts +++ b/scripts/post-build.ts @@ -19,10 +19,17 @@ function writeFile(filePath: string, content: string): void { } function main(): void { - const devtoolsThirdPartyPath = - 'node_modules/chrome-devtools-frontend/front_end/third_party'; - const devtoolsFrontEndCorePath = - 'node_modules/chrome-devtools-frontend/front_end/core'; + const devtoolsTs = path.join( + process.cwd(), + 'src', + 'third_party', + 'devtools.ts', + ); + if (fs.existsSync(devtoolsTs)) { + fs.unlinkSync(devtoolsTs); + } + const devtoolsThirdPartyPath = 'devtools-frontend/front_end/third_party'; + const devtoolsFrontEndCorePath = 'devtools-frontend/front_end/core'; // Create i18n mock const i18nDir = path.join(BUILD_DIR, devtoolsFrontEndCorePath, 'i18n'); @@ -60,6 +67,30 @@ export const css = { cssLanguage: { parser: { parse: () => ({ topNode: { getChil `; writeFile(codeMirrorFile, codeMirrorContent); + // Create skills mocks + const skillsDir = path.join( + BUILD_DIR, + 'devtools-frontend', + 'front_end', + 'models', + 'ai_assistance', + 'skills', + ); + fs.mkdirSync(skillsDir, {recursive: true}); + const skillMockContent = ` +export const skill = { + name: '', + description: '', + tools: [], + systemPrompt: '', +}; +export default skill; +`; + writeFile(path.join(skillsDir, 'accessibility.skill.js'), skillMockContent); + writeFile(path.join(skillsDir, 'network.skill.js'), skillMockContent); + writeFile(path.join(skillsDir, 'performance.skill.js'), skillMockContent); + writeFile(path.join(skillsDir, 'styling.skill.js'), skillMockContent); + // Create root mock const rootDir = path.join(BUILD_DIR, devtoolsFrontEndCorePath, 'root'); fs.mkdirSync(rootDir, {recursive: true}); @@ -113,8 +144,7 @@ export const ExperimentName = { ); const codemirrorSrcDir = path.join( process.cwd(), - 'node_modules', - 'chrome-devtools-frontend', + 'devtools-frontend', 'front_end', 'third_party', 'codemirror', @@ -135,9 +165,9 @@ export const ExperimentName = { copyDevToolsDescriptionFiles(); } -function copyDevToolsDescriptionFiles() { +function copyDevToolsDescriptionFiles(): void { const devtoolsIssuesDescriptionPath = - 'node_modules/chrome-devtools-frontend/front_end/models/issues_manager/descriptions'; + 'devtools-frontend/front_end/models/issues_manager/descriptions'; const sourceDir = path.join(process.cwd(), devtoolsIssuesDescriptionPath); const destDir = path.join( BUILD_DIR, diff --git a/scripts/prepare.ts b/scripts/prepare.ts index 1f05cf4c1..411118cab 100644 --- a/scripts/prepare.ts +++ b/scripts/prepare.ts @@ -4,22 +4,16 @@ * SPDX-License-Identifier: Apache-2.0 */ -import {readFileSync, writeFileSync} from 'node:fs'; -import {rm} from 'node:fs/promises'; +import {execSync} from 'node:child_process'; +import {existsSync, readFileSync, writeFileSync} from 'node:fs'; import {resolve} from 'node:path'; const projectRoot = process.cwd(); -const filesToRemove = [ - 'node_modules/chrome-devtools-frontend/package.json', - 'node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/testing', - 'node_modules/chrome-devtools-frontend/front_end/third_party/intl-messageformat/package/package.json', -]; - /** * Removes the conflicting global HTMLElementEventMap declaration from * @paulirish/trace_engine/models/trace/ModelImpl.d.ts to avoid TS2717 error - * when both chrome-devtools-frontend and @paulirish/trace_engine declare + * when both devtools-frontend and @paulirish/trace_engine declare * the same property. */ function removeConflictingGlobalDeclaration(): void { @@ -27,6 +21,9 @@ function removeConflictingGlobalDeclaration(): void { projectRoot, 'node_modules/@paulirish/trace_engine/models/trace/ModelImpl.d.ts', ); + if (!existsSync(filePath)) { + return; + } console.log( 'Removing conflicting global declaration from @paulirish/trace_engine...', ); @@ -41,40 +38,44 @@ function removeConflictingGlobalDeclaration(): void { console.log('Successfully removed conflicting global declaration.'); } -async function main() { - console.log('Running prepare script to clean up chrome-devtools-frontend...'); - for (const file of filesToRemove) { - const fullPath = resolve(projectRoot, file); - console.log(`Removing: ${file}`); +function ensureSubmodule(): void { + const devtoolsFrontendDir = resolve(projectRoot, 'devtools-frontend'); + const mcpEntry = resolve(devtoolsFrontendDir, 'mcp', 'mcp.ts'); + + if (existsSync(mcpEntry)) { + console.log('devtools-frontend submodule is ready.'); + return; + } + + console.log('Initializing devtools-frontend submodule...'); + try { + execSync('git submodule update --init --recursive --depth 1', { + cwd: projectRoot, + stdio: 'inherit', + }); + } catch (submoduleError) { + console.warn('git submodule update failed:', submoduleError); + } + + if (!existsSync(mcpEntry)) { + console.log('Fetching devtools-frontend...'); try { - await rm(fullPath, {recursive: true, force: true}); - } catch (error) { - console.error(`Failed to remove ${file}:`, error); - process.exit(1); + execSync( + 'git clone --depth 1 https://github.com/ChromeDevTools/devtools-frontend.git devtools-frontend', + { + cwd: projectRoot, + stdio: 'inherit', + }, + ); + } catch (cloneError) { + console.error('Failed to clone devtools-frontend:', cloneError); } } - console.log('Clean up of chrome-devtools-frontend complete.'); - - removeConflictingGlobalDeclaration(); - mockAiAssistanceFiles(); } -function mockAiAssistanceFiles(): void { - const patchAgentPath = resolve( - projectRoot, - 'node_modules/chrome-devtools-frontend/front_end/models/ai_assistance/agents/PatchAgent.ts', - ); - writeFileSync(patchAgentPath, 'export class PatchAgent {}', 'utf-8'); - - const skillRegistryPath = resolve( - projectRoot, - 'node_modules/chrome-devtools-frontend/front_end/models/ai_assistance/skills/SkillRegistry.ts', - ); - const skillRegistryContent = `export class SkillRegistry {} -export const SKILLS: any = { styling: {}, network: {}, accessibility: {} }; -`; - writeFileSync(skillRegistryPath, skillRegistryContent, 'utf-8'); - console.log('Successfully mocked AI assistance files.'); +function main(): void { + ensureSubmodule(); + removeConflictingGlobalDeclaration(); } -void main(); +main(); diff --git a/src/devtools/devtools.d.ts b/src/devtools/devtools.d.ts index fbd640307..278a16fa1 100644 --- a/src/devtools/devtools.d.ts +++ b/src/devtools/devtools.d.ts @@ -9,3 +9,15 @@ declare module '*.css.js' { const styles: CSSInJS; export default styles; } + +declare module '*.skill.js' { + interface Skill { + name: 'styling' | 'network' | 'accessibility' | 'performance'; + description: string; + allowedTools: string[]; + instructions: string; + } + const skill: Skill; + export {skill}; + export default skill; +} diff --git a/src/third_party/devtools-formatter-worker.ts b/src/third_party/devtools-formatter-worker.ts index 9a6539bf2..beb887a48 100644 --- a/src/third_party/devtools-formatter-worker.ts +++ b/src/third_party/devtools-formatter-worker.ts @@ -5,4 +5,4 @@ */ // eslint-disable-next-line no-restricted-imports -import '../../node_modules/chrome-devtools-frontend/front_end/entrypoints/formatter_worker/formatter_worker-entrypoint.js'; +import '../../devtools-frontend/front_end/entrypoints/formatter_worker/formatter_worker-entrypoint.js'; diff --git a/src/third_party/devtools-heap-snapshot-worker.ts b/src/third_party/devtools-heap-snapshot-worker.ts index ce5dcc562..db1754f06 100644 --- a/src/third_party/devtools-heap-snapshot-worker.ts +++ b/src/third_party/devtools-heap-snapshot-worker.ts @@ -5,4 +5,4 @@ */ // eslint-disable-next-line no-restricted-imports -import '../../node_modules/chrome-devtools-frontend/front_end/entrypoints/heap_snapshot_worker/heap_snapshot_worker-entrypoint.js'; +import '../../devtools-frontend/front_end/entrypoints/heap_snapshot_worker/heap_snapshot_worker-entrypoint.js'; diff --git a/src/third_party/index.ts b/src/third_party/index.ts index d1a1114e2..dfdf342a9 100644 --- a/src/third_party/index.ts +++ b/src/third_party/index.ts @@ -89,4 +89,4 @@ export const generateReport = generateReportImpl as ( format: string, ) => string; -export * as DevTools from '../../node_modules/chrome-devtools-frontend/mcp/mcp.js'; +export * as DevTools from '../../devtools-frontend/mcp/mcp.js'; diff --git a/tests/third_party_notices.test.js.snapshot b/tests/third_party_notices.test.js.snapshot index 48c18c361..0baa3d035 100644 --- a/tests/third_party_notices.test.js.snapshot +++ b/tests/third_party_notices.test.js.snapshot @@ -844,6 +844,13 @@ IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +-------------------- DEPENDENCY DIVIDER -------------------- + +Name: marked +URL: https://marked.js.org +Version: +License: MIT + -------------------- DEPENDENCY DIVIDER -------------------- Name: chrome-devtools-frontend diff --git a/tsconfig.json b/tsconfig.json index 7d0086d5e..5281842f0 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -8,6 +8,7 @@ "ESNext.Iterator", "ESNext.Collection" ], + "typeRoots": ["./node_modules/@types"], "types": ["node", "filesystem"], "moduleResolution": "bundler", "outDir": "./build", @@ -26,65 +27,81 @@ "include": [ "src/**/*.ts", "tests/**/*.ts", - "node_modules/chrome-devtools-frontend/front_end/core/common", - "node_modules/chrome-devtools-frontend/front_end/core/host", - "node_modules/chrome-devtools-frontend/front_end/core/i18n", - "node_modules/chrome-devtools-frontend/front_end/core/platform", - "node_modules/chrome-devtools-frontend/front_end/core/protocol_client", - "node_modules/chrome-devtools-frontend/front_end/core/root", - "node_modules/chrome-devtools-frontend/front_end/core/sdk", - "node_modules/chrome-devtools-frontend/front_end/core/text_utils", - "node_modules/chrome-devtools-frontend/front_end/entrypoints/formatter_worker", - "node_modules/chrome-devtools-frontend/front_end/entrypoints/heap_snapshot_worker", - "node_modules/chrome-devtools-frontend/front_end/foundation/foundation.ts", - "node_modules/chrome-devtools-frontend/front_end/foundation/Universe.ts", - "node_modules/chrome-devtools-frontend/front_end/generated", - "node_modules/chrome-devtools-frontend/front_end/legacy/legacy-defs.d.ts", - "node_modules/chrome-devtools-frontend/front_end/models/ai_assistance/**/*.ts", - "node_modules/chrome-devtools-frontend/front_end/models/annotations", - "node_modules/chrome-devtools-frontend/front_end/models/autofill_manager", - "node_modules/chrome-devtools-frontend/front_end/models/bindings", - "node_modules/chrome-devtools-frontend/front_end/models/breakpoints", - "node_modules/chrome-devtools-frontend/front_end/models/cpu_profile", - "node_modules/chrome-devtools-frontend/front_end/models/crux-manager", - "node_modules/chrome-devtools-frontend/front_end/models/emulation", - "node_modules/chrome-devtools-frontend/front_end/models/formatter", - "node_modules/chrome-devtools-frontend/front_end/models/geometry", - "node_modules/chrome-devtools-frontend/front_end/models/greendev", - "node_modules/chrome-devtools-frontend/front_end/models/heap_snapshot", - "node_modules/chrome-devtools-frontend/front_end/models/issues_manager", - "node_modules/chrome-devtools-frontend/front_end/models/javascript_metadata", - "node_modules/chrome-devtools-frontend/front_end/models/live-metrics", - "node_modules/chrome-devtools-frontend/front_end/models/logs", - "node_modules/chrome-devtools-frontend/front_end/models/network_time_calculator", - "node_modules/chrome-devtools-frontend/front_end/models/persistence", - "node_modules/chrome-devtools-frontend/front_end/models/project_settings", - "node_modules/chrome-devtools-frontend/front_end/models/source_map_scopes", - "node_modules/chrome-devtools-frontend/front_end/models/stack_trace", - "node_modules/chrome-devtools-frontend/front_end/models/text_utils", - "node_modules/chrome-devtools-frontend/front_end/models/trace_source_maps_resolver", - "node_modules/chrome-devtools-frontend/front_end/models/trace", - "node_modules/chrome-devtools-frontend/front_end/models/badges", - "node_modules/chrome-devtools-frontend/front_end/services/tracing", - "node_modules/chrome-devtools-frontend/front_end/models/workspace", - "node_modules/chrome-devtools-frontend/front_end/models/workspace_diff", - "node_modules/chrome-devtools-frontend/front_end/panels/issues/IssueAggregator.ts", - "node_modules/chrome-devtools-frontend/front_end/third_party/acorn", - "node_modules/chrome-devtools-frontend/front_end/third_party/codemirror", - "node_modules/chrome-devtools-frontend/front_end/third_party/diff", - "node_modules/chrome-devtools-frontend/front_end/third_party/i18n", - "node_modules/chrome-devtools-frontend/front_end/third_party/intl-messageformat", - "node_modules/chrome-devtools-frontend/front_end/third_party/legacy-javascript", - "node_modules/chrome-devtools-frontend/front_end/third_party/marked", - "node_modules/chrome-devtools-frontend/front_end/third_party/source-map-scopes-codec", - "node_modules/chrome-devtools-frontend/front_end/third_party/third-party-web", - "node_modules/chrome-devtools-frontend/mcp" + "devtools-frontend/front_end/core/common", + "devtools-frontend/front_end/core/host", + "devtools-frontend/front_end/core/i18n", + "devtools-frontend/front_end/core/platform", + "devtools-frontend/front_end/core/protocol_client/CDPConnection.ts", + "devtools-frontend/front_end/core/protocol_client/ConnectionTransport.ts", + "devtools-frontend/front_end/core/protocol_client/DevToolsCDPConnection.ts", + "devtools-frontend/front_end/core/protocol_client/InspectorBackend.ts", + "devtools-frontend/front_end/core/protocol_client/protocol_client.ts", + "devtools-frontend/front_end/core/root", + "devtools-frontend/front_end/core/sdk", + "devtools-frontend/front_end/core/text_utils", + "devtools-frontend/front_end/entrypoints/formatter_worker", + "devtools-frontend/front_end/entrypoints/heap_snapshot_worker", + "devtools-frontend/front_end/foundation/foundation.ts", + "devtools-frontend/front_end/foundation/Universe.ts", + "devtools-frontend/front_end/generated", + "devtools-frontend/front_end/legacy/legacy-defs.d.ts", + "devtools-frontend/front_end/models/ai_assistance/data_formatters", + "devtools-frontend/front_end/models/ai_assistance/performance", + "devtools-frontend/front_end/models/annotations", + "devtools-frontend/front_end/models/autofill_manager", + "devtools-frontend/front_end/models/bindings", + "devtools-frontend/front_end/models/breakpoints", + "devtools-frontend/front_end/models/cpu_profile", + "devtools-frontend/front_end/models/crux-manager", + "devtools-frontend/front_end/models/emulation", + "devtools-frontend/front_end/models/formatter", + "devtools-frontend/front_end/models/geometry", + "devtools-frontend/front_end/models/greendev", + "devtools-frontend/front_end/models/heap_snapshot", + "devtools-frontend/front_end/models/issues_manager", + "devtools-frontend/front_end/models/javascript_metadata", + "devtools-frontend/front_end/models/live-metrics", + "devtools-frontend/front_end/models/logs", + "devtools-frontend/front_end/models/network_time_calculator", + "devtools-frontend/front_end/models/persistence", + "devtools-frontend/front_end/models/project_settings", + "devtools-frontend/front_end/models/source_map_scopes", + "devtools-frontend/front_end/models/stack_trace", + "devtools-frontend/front_end/models/text_utils", + "devtools-frontend/front_end/models/trace_source_maps_resolver", + "devtools-frontend/front_end/models/trace", + "devtools-frontend/front_end/models/badges", + "devtools-frontend/front_end/services/tracing", + "devtools-frontend/front_end/models/workspace", + "devtools-frontend/front_end/models/workspace_diff", + "devtools-frontend/front_end/panels/issues/IssueAggregator.ts", + "devtools-frontend/front_end/third_party/acorn", + "devtools-frontend/front_end/third_party/codemirror", + "devtools-frontend/front_end/third_party/diff", + "devtools-frontend/front_end/third_party/i18n", + "devtools-frontend/front_end/third_party/intl-messageformat", + "devtools-frontend/front_end/third_party/legacy-javascript", + "devtools-frontend/front_end/third_party/marked", + "devtools-frontend/front_end/third_party/source-map-scopes-codec", + "devtools-frontend/front_end/third_party/third-party-web" ], "exclude": [ - "node_modules/chrome-devtools-frontend/**/*.test.ts", - "node_modules/chrome-devtools-frontend/**/*.test.api.ts" + "devtools-frontend/node_modules", + "devtools-frontend/node_modules/**/*", + "devtools-frontend/**/*.test.ts", + "devtools-frontend/**/*.test.api.ts", + "devtools-frontend/front_end/models/trace/lantern/testing/**", + "devtools-frontend/front_end/models/ai_assistance/skills/**", + "devtools-frontend/front_end/models/ai_assistance/agents/**", + "devtools-frontend/front_end/models/ai_assistance/tools/**", + "devtools-frontend/front_end/models/ai_assistance/contexts/**", + "devtools-frontend/front_end/third_party/puppeteer/**", + "devtools-frontend/front_end/third_party/puppeteer-legacy/**", + "devtools-frontend/front_end/panels/recorder/**", + "devtools-frontend/front_end/services/puppeteer/**", + "devtools-frontend/front_end/core/protocol_client/PuppeteerDevToolsConnection.ts" ], "files": [ - "node_modules/chrome-devtools-frontend/front_end/third_party/acorn/package/dist/acorn.mjs" + "devtools-frontend/front_end/third_party/acorn/package/dist/acorn.mjs" ] }