Skip to content

Apply strict code-quality lint rules to scripts tree (Fixes #2282) - #2284

Merged
acoliver merged 9 commits into
mainfrom
issue2282
Jul 1, 2026
Merged

Apply strict code-quality lint rules to scripts tree (Fixes #2282)#2284
acoliver merged 9 commits into
mainfrom
issue2282

Conversation

@acoliver

Copy link
Copy Markdown
Collaborator

Summary

Extends the repository's strict code-quality ESLint layer (SonarJS maintainability, regex correctness, and size/complexity limits) to the scripts/** tree and scripts/tests/**, which previously received only the base ESLint recommended layer. Build/dev scripts are now held to the same maintainability bar as packages/*/src, without adding any inline suppressions or weakening existing guardrails.

Fixes #2282

What changed

eslint.config.js — new scripts quality block

Adds a config block targeting scripts/**/*.{ts,tsx,js,mjs,cjs} with the curated quality rule set, applying non-type-aware parity with the packages source block:

  • Size/complexity: complexity (25), max-lines (800), max-lines-per-function (80), sonarjs/cognitive-complexity (30)
  • SonarJS maintainability: nested-control-flow, no-collapsible-if, no-identical-functions, no-inconsistent-returns, no-nested-conditional, too-many-break-or-continue-in-loop, expression-complexity, duplicated-branches
  • Regex correctness: slow-regex, no-invalid-regexp, stateful-regex, unicode-aware-regex, no-regex-spaces, no-control-regex
  • General quality: prefer-const, eqeqeq, no-var, object-shorthand, arrow-body-style, no-else-return, no-lonely-if, etc.
  • Non-type-aware TS quality: no-explicit-any, array-type, consistent-type-assertions, no-unused-vars, etc.

Intentionally excluded (documented rationale in config): no-console (scripts legitimately log to stdout/stderr), type-aware TS rules like no-floating-promises/strict-boolean-expressions (scripts have no tsconfig project, so type-aware analysis is unavailable), import/* rules (package-resolution policies specific to application packages), and React rules (no UI in scripts).

Three centralized carve-outs (all tagged // eslint-policy-allow-off: #2282)

  1. scripts/tests/** to max-lines-per-function: off (parity with the existing packages test-file policy in the vitest config block).
  2. scripts/check-eslint-guard.js to structural complexity/size rules off. This is a ~5000-line hand-written character-level state machine for git-diff/ESLint-config policy analysis; its nesting is inherent to the parser (mirrors the Break up text-buffer.ts (2,375 lines) #1577/Break up subagent.ts (2,064 lines) #1581 decomposition model). Non-structural quality rules still apply.
  3. scripts/tests/eslint-guard.test.js to max-lines: off. The exhaustive fixture for the guard parser; splitting is coupled to the guard's own decomposition. All other quality rules still apply.

Violation fixes (~117 across ~45 scripts)

All newly-exposed violations fixed at root cause — no inline suppressions, no severity downgrades, no threshold increases:

  • Decomposed oversized functions (e.g. check-storage-import-boundary.mjs, preflight-import-inventory.mjs, check-settings-boundary.js, aggregate_evals.js, tmux-harness.js)
  • Extracted helpers and applied guard clauses to flatten nested-control-flow and reduce complexity
  • Rewrote catastrophic-backtracking regexes (version.js, tmux-harness-helpers.mjs)
  • scripts/start.js: replaced the backtracking --localstorage-file removal regex with an equivalent manual scanner that faithfully preserves the original semantics (verified against the original regex on 13 representative cases, including whitespace around the equals sign, tab separators, and value-not-starting-with-dash)

tmux-harness.js split

Split tmux-harness.js (1273 lines) into tmux-harness.js + tmux-harness-helpers.mjs + tmux-harness-io.mjs + tmux-harness-steps.mjs to get under the 800-line max-lines limit, preserving the public API (all 63 existing tests pass).

Behavioral regression test

New scripts/tests/scripts-quality-coverage.test.ts uses eslint --print-config to assert:

  • Representative .js/.cjs/.mjs/.ts scripts receive the quality rules (complexity, sonarjs/slow-regex, sonarjs/no-collapsible-if, etc.)
  • no-console is NOT enabled for scripts
  • The test-file carve-out (max-lines-per-function: off) and the guard-parser/fixture carve-outs apply correctly while other quality rules remain enabled

Verification

  • npm run lint — passes
  • npm run build — passes
  • npm run format — passes
  • npm run lint:eslint-guard — 0 violations in changed files
  • npx eslint scripts/**/*.{ts,tsx,js,mjs,cjs} — 0 errors (all 117 violations resolved)
  • Scripts test suite — passes (including the new coverage test, 8/8, and tmux-harness, 63/63)
  • Open Code Review (ocr, --timeout 20) — reviewed all 50 files; the 6 findings referenced packages/core/src files outside this PR's diff (pre-existing code not touched here), so they are out of scope
  • scripts/start.js scanner — verified behaviorally equivalent to the original regex on 13 edge cases

Note: npm run typecheck has pre-existing failures in packages/cli and packages/providers (LoadBalancerSelectionChanged) that are unrelated to this PR — those files are not in this diff.

Acceptance criteria

  • scripts and scripts/tests receive the intended strict code-quality lint rules
  • npm run lint and npm run lint:eslint-guard pass without inline suppressions
  • The effective config for representative scripts files shows the quality rules enabled (asserted by the new behavioral test)
  • Exceptions centralized in eslint.config.js with explicit rationale

Extend the SonarJS maintainability, regex-correctness, and size/complexity
guardrails that protect packages/*/src to the scripts/** tree and
scripts/tests/**, which previously received only the base ESLint recommended
layer. Build/dev scripts are now held to the same quality bar as application
source.

- eslint.config.js: add a scripts quality block with the curated rule set
  (non-type-aware parity with packages). no-console, type-aware TS rules,
  import/*, and React rules are intentionally excluded with documented
  rationale (scripts have no tsconfig and legitimately log to stdout/stderr).
- Three centralized, tagged carve-outs (all eslint-policy-allow-off: #2282):
  scripts/tests max-lines-per-function (test parity), check-eslint-guard.js
  (inherent state-machine parser complexity), eslint-guard.test.js
  (exhaustive fixture max-lines).
- Fix all ~117 newly-exposed violations at root cause across ~45 scripts:
  decompose oversized functions, extract helpers, reduce nesting, and rewrite
  catastrophic-backtracking regexes. No inline suppressions added.
- scripts/start.js: replace backtracking regex with an equivalent manual
  scanner that preserves the original removal semantics (whitespace around
  equals, tab separators, value-not-starting-with-dash).
- tmux-harness.js: split into helpers/io/steps modules (preserves public API)
  to get under the 800-line limit.
- Add behavioral regression test (scripts-quality-coverage.test.ts) verifying
  scripts files receive the quality rules and the carve-outs are in place.
@coderabbitai

coderabbitai Bot commented Jun 30, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

Warning

Review limit reached

You’ve reached a temporary PR review limit under our Fair Usage Limits Policy.

Your recent review volume is higher than typical usage, so adaptive limits are currently applied.

Next review available in: 10 minutes

Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available.
You're only billed for reviews past your plan's rate limits ($0.25/file).

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: 3b70ca61-4d06-4040-997f-41d1c7b1e277

📥 Commits

Reviewing files that changed from the base of the PR and between 1554244 and d34bbc4.

📒 Files selected for processing (6)
  • scripts/eslint-guard/added-config-checks.mjs
  • scripts/eslint-guard/bypass-detector.mjs
  • scripts/eslint-guard/diff-state-tracking.mjs
  • scripts/eslint-guard/directive-scanner.mjs
  • scripts/eslint-guard/git.mjs
  • scripts/eslint-guard/rule-config.mjs

Walkthrough

Extends strict ESLint quality rules to scripts/, adds effective-config coverage, and refactors many scripts, guards, codemods, and tests into smaller helpers and modules.

Changes

Issue #2282 — Scripts lint expansion and refactors

Layer / File(s) Summary
Scripts quality rules and coverage
eslint.config.js, scripts/tests/eslint-guard.test.js, scripts/tests/scripts-quality-coverage.test.ts
Applies strict scripts ESLint overrides and verifies the effective rule set, including scripts-test carve-outs and git-tracked suppression checks.
ESLint-guard parsing and diff pipeline
scripts/eslint-guard/*
Adds shared constants, rule parsing, diff-context helpers, structural state tracking, directive scanning, git diff plumbing, and added-rule comparison checks for the ESLint guard.
Boundary and inventory scanners
scripts/check-storage-import-boundary.mjs, scripts/preflight-import-inventory.mjs, scripts/check-settings-boundary.js, scripts/check-cli-import-boundary.mjs, scripts/check-lockfile.js, scripts/check-storage-package-cycle.mjs, scripts/eslint-guard/scanners.mjs, scripts/eslint-guard/cli-scanner.mjs, scripts/eslint-guard/config-scanner.mjs, scripts/eslint-guard/violations.mjs
Refactors storage, CLI, inventory, package, and repository scanners into helper-based flows with smaller visitors, dispatchers, classifiers, and violation formatting.
Telemetry, release, and runtime tooling
scripts/local_telemetry.js, scripts/telemetry_gcp.js, scripts/telemetry_utils.js, scripts/ollama-logging-proxy.cjs, scripts/lint.js, scripts/start.js, scripts/sandbox_command.js, scripts/update-homebrew-formula.js, scripts/verify-bun-workspace-links.mjs, scripts/aggregate_evals.js, scripts/bind-release-deps.js, scripts/test-acp-integration.mjs, scripts/test-mcp-server.js, scripts/preinstall.cjs, scripts/version.js, scripts/get-release-version.js
Refactors telemetry startup, logging proxy, lint/startup helpers, Homebrew publishing, workspace-link verification, evaluation aggregation, release dependency binding, and versioning scripts into smaller helpers and shared state.
Codemods and rewrite helpers
scripts/codemods/*, scripts/codemod-import-type-annotations.mjs, scripts/tests/publish-integrity.test.ts
Refactors codemods and integrity-test helpers to centralize per-node, per-location, per-iteration, and per-character rewrite logic.
Small fixes and test helper updates
scripts/check-build-status.js, scripts/clean.js, scripts/generate-keybindings-doc.ts, scripts/generate-settings-doc.ts, scripts/generate-settings-schema.ts, scripts/issue2208-tui-repro.mjs, scripts/tests/bun-workspaces.test.ts, scripts/tests/interactive-ui.test.ts, scripts/tests/loading-indicator-nowrap.test.js, scripts/tests/providers-directive-guard.test.js, scripts/tests/scrollback-regression.test.js, scripts/tests/ui-image-harness.test.js, scripts/tests/cli-import-boundary.test.js, scripts/tests/scripts-quality-coverage.test.ts
Applies small parsing, control-flow, and helper updates across scripts and tests.
Tmux harness modularization
scripts/tmux-harness.js, scripts/tmux-harness-helpers.mjs, scripts/tmux-harness-io.mjs, scripts/tmux-harness-steps.mjs
Splits the tmux harness into reusable helper, I/O, and step-executor modules while preserving the original API surface.

Estimated code review effort

🎯 5 (Critical) | ⏱️ ~120 minutes

Possibly related PRs

  • vybestack/llxprt-code#2096: Directly updates scripts/check-eslint-guard.js and scripts/tests/eslint-guard.test.js, which are part of the lint-guard coverage extended here.
  • vybestack/llxprt-code#2265: Continues the same CLI import-boundary guard area touched by scripts/check-cli-import-boundary.mjs and its test updates in this PR.
  • vybestack/llxprt-code#1222: Introduced the Homebrew publishing flow that is further refactored in scripts/update-homebrew-formula.js here.

Suggested labels

maintainer:e2e:ok

🐇 I hopped through scripts with careful feet,
Split helper burrows, neat and neat.
ESLint watches with a sharper eye,
While tmux and tests keep passing by.

🚥 Pre-merge checks | ✅ 4
✅ Passed checks (4 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly summarizes the main change: applying strict lint rules to the scripts tree and links the tracked issue.
Description check ✅ Passed The description covers the summary, changes, verification, and acceptance criteria, though it does not follow the exact template headings.
Linked Issues check ✅ Passed The changes align with #2282 by extending strict quality linting to scripts/tests, centralizing carve-outs, and fixing exposed violations without suppressions.
Out of Scope Changes check ✅ Passed The additional refactors and module splits are tied to satisfying the new lint rules and tests, with no clear unrelated scope creep.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch issue2282

Comment @coderabbitai help to get the list of available commands.

@github-actions github-actions Bot added the maintainer:e2e:ok Trusted contributor; maintainer-approved E2E run label Jun 30, 2026
@github-actions

github-actions Bot commented Jun 30, 2026

Copy link
Copy Markdown
Contributor

LLxprt PR Review – PR #2284

Issue Alignment: Strong. The PR extends the strict SonarJS/regex/size ESLint layer to scripts/** and scripts/tests/**, exactly matching #2282. The new eslint.config.js block is well-scoped with documented carve-outs (no-console, type-aware rules, import rules, React rules). The massive diff (+9072/-7948) is largely driven by necessary lint-compliance fixes and the decomposition of scripts/check-eslint-guard.js into 13 modules.

Side Effects: The new rules could fail CI for unmodified scripts, but this PR includes the fixes. Carve-outs for scripts/tests/** (max-lines-per-function off) and eslint-guard.test.js (max-lines off) are documented and reasonable. No production code behavior changes were identified beyond the guard decomposition.

Code Quality: The guard decomposition is a significant improvement—check-diff.mjs, directive-scanner.mjs, rule-config.mjs, etc., show clean separation of concerns. Refactorings in preflight-import-inventory.mjs, publish-integrity.test.ts, and tmux-harness.js demonstrate genuine structural improvement, not just whitespace fixes. The start.js regex-to-manual-scanner change addresses slow-regex with equivalent semantics.

Tests and Coverage: Increase. scripts/tests/scripts-quality-coverage.test.ts is a strong behavioral regression test (8 cases) that invokes eslint --print-config against real files and asserts effective rule severities—no mock theater. It verifies both the new strict rules and the documented carve-outs. eslint-guard.test.js gained tests for git-untracked file handling.

Verdict: Ready. The implementation fully resolves #2282 with meaningful automated tests, documented policy exceptions, and systematic code-quality improvements. The large surface area is inherent to applying lint rules across an entire tree; the changes are consistent and well-contained.

@github-actions

github-actions Bot commented Jun 30, 2026

Copy link
Copy Markdown
Contributor

Code Coverage Summary

Package Lines Statements Functions Branches
CLI 56.95% 56.95% 59.04% 82.45%
Core 77.33% 77.33% 74.54% 83.56%
CLI Package - Full Text Report
-------------------|---------|----------|---------|---------|-------------------
File               | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s 
-------------------|---------|----------|---------|---------|-------------------
All files          |   56.95 |    82.45 |   59.04 |   56.95 |                   
 src               |   73.66 |    70.84 |   86.66 |   73.66 |                   
  cli.tsx          |   75.37 |    68.42 |     100 |   75.37 | ...20-222,231-235 
  ...tBootstrap.ts |   96.66 |       75 |     100 |   96.66 | 40                
  cliBootstrap.tsx |   68.22 |    55.55 |   89.65 |   68.22 | ...18,821-825,830 
  ...nBootstrap.ts |   71.58 |    63.63 |   83.33 |   71.58 | ...49-259,264-265 
  ...nDispatch.tsx |    52.6 |    81.48 |   66.66 |    52.6 | ...67-369,442-610 
  ...st-helpers.ts |       0 |        0 |       0 |       0 | 1-50              
  ...ractiveCli.ts |   89.64 |    85.18 |   86.66 |   89.64 | ...94-301,327-329 
  ...liCommands.ts |   97.26 |       70 |     100 |   97.26 | 40-41             
  ...CliSupport.ts |   91.07 |    79.79 |     100 |   91.07 | ...14,332-333,414 
  ...activeAuth.ts |      60 |    68.42 |     100 |      60 | ...91-106,110-119 
 src/auth          |   98.07 |    81.25 |     100 |   98.07 |                   
  ...gs-adapter.ts |   98.07 |    81.25 |     100 |   98.07 | 76                
 src/commands      |   78.35 |      100 |   44.44 |   78.35 |                   
  extensions.tsx   |   55.88 |      100 |       0 |   55.88 | 25-38,42          
  hooks.ts         |   61.53 |      100 |       0 |   61.53 | 14-17,20          
  mcp.ts           |   94.11 |      100 |      50 |   94.11 | 26                
  skills.tsx       |     100 |      100 |     100 |     100 |                   
  utils.ts         |     100 |      100 |     100 |     100 |                   
 ...nds/extensions |   73.98 |    92.93 |   67.18 |   73.98 |                   
  config.ts        |   93.93 |    91.83 |     100 |   93.93 | ...72-173,204-209 
  disable.ts       |     100 |      100 |     100 |     100 |                   
  enable.ts        |     100 |      100 |     100 |     100 |                   
  install.ts       |   80.48 |    76.92 |    87.5 |   80.48 | ...63,199,202-209 
  link.ts          |   64.81 |    83.33 |      25 |   64.81 | 31,54-65,67-72    
  list.ts          |      90 |      100 |   33.33 |      90 | 35-37             
  new.ts           |     100 |      100 |     100 |     100 |                   
  settings.ts      |   72.13 |      100 |      70 |   72.13 | 32-80,218-222,225 
  uninstall.ts     |   78.43 |      100 |   66.66 |   78.43 | 54-59,62-66       
  update.ts        |   10.06 |      100 |       0 |   10.06 | ...73-192,194-199 
  utils.ts         |   13.33 |      100 |       0 |   13.33 | 29-60             
  validate.ts      |   89.36 |     87.5 |      75 |   89.36 | 50-53,60,112-116  
 .../hooks/scripts |       0 |        0 |       0 |       0 |                   
  on-start.js      |       0 |        0 |       0 |       0 | 1-8               
 ...les/mcp-server |       0 |        0 |       0 |       0 |                   
  example.js       |       0 |        0 |       0 |       0 | 1-60              
 ...commands/hooks |    7.18 |      100 |       0 |    7.18 |                   
  migrate.ts       |    7.18 |      100 |       0 |    7.18 | ...00-210,212-214 
 src/commands/mcp  |   96.95 |    86.15 |   94.44 |   96.95 |                   
  add.ts           |   99.56 |    93.33 |     100 |   99.56 | 142               
  list.ts          |   90.51 |    82.14 |      80 |   90.51 | ...13-115,148-150 
  remove.ts        |     100 |    71.42 |     100 |     100 | 21-25             
 ...ommands/skills |   60.98 |     92.3 |   31.25 |   60.98 |                   
  disable.ts       |      54 |      100 |   33.33 |      54 | 40-52,54-63       
  enable.ts        |   72.22 |      100 |   33.33 |   72.22 | 33-37,39-43       
  install.ts       |   42.69 |      100 |      25 |   42.69 | ...71-100,102-109 
  list.ts          |   84.93 |       80 |   33.33 |   84.93 | ...9,92-96,98-100 
  uninstall.ts     |   57.89 |      100 |   33.33 |   57.89 | 47-64,66-71       
 src/config        |   87.68 |    85.33 |   90.17 |   87.68 |                   
  ...deResolver.ts |   94.54 |    95.45 |     100 |   94.54 | 50-52             
  auth.ts          |   84.21 |    82.35 |     100 |   84.21 | 17-18,21-22,52-53 
  cliArgParser.ts  |   93.36 |    91.11 |     100 |   93.36 | ...22-223,286-289 
  config.ts        |     100 |      100 |     100 |     100 |                   
  configBuilder.ts |   95.83 |    95.45 |      90 |   95.83 | ...12-213,254-255 
  ...mentLoader.ts |   83.47 |    53.84 |     100 |   83.47 | ...33-135,143-146 
  extension.ts     |   74.85 |    88.38 |   79.06 |   74.85 | ...28-929,932-933 
  ...iveContext.ts |   93.75 |    91.66 |     100 |   93.75 | 79,81,87-92,232   
  ...iateConfig.ts |   97.45 |      100 |     100 |   97.45 | 155-157           
  keyBindings.ts   |     100 |      100 |     100 |     100 |                   
  ...rverConfig.ts |   83.33 |    94.44 |     100 |   83.33 | 23-39             
  pathMigration.ts |   84.27 |    80.18 |     100 |   84.27 | ...97,703,711-714 
  paths.ts         |     100 |      100 |     100 |     100 |                   
  policy.ts        |   80.76 |      100 |      50 |   80.76 | 45-49             
  ...figRuntime.ts |   89.37 |    88.23 |     100 |   89.37 | ...97-504,515-518 
  ...eBootstrap.ts |   91.79 |    87.42 |     100 |   91.79 | ...04-806,815-816 
  ...Resolution.ts |   78.66 |    76.74 |     100 |   78.66 | ...87-290,303-311 
  ...pplication.ts |   92.12 |       80 |     100 |   92.12 | ...,92-93,109,176 
  ...elResolver.ts |    93.1 |    81.25 |     100 |    93.1 | 41,43-44,80       
  sandboxConfig.ts |   69.81 |    51.48 |   88.46 |   69.81 | ...80-581,593-594 
  ...oxProfiles.ts |    8.53 |      100 |       0 |    8.53 | 47-48,51-129      
  settingPaths.ts  |     100 |      100 |     100 |     100 |                   
  ...validation.ts |   86.99 |    80.62 |     100 |   86.99 | ...02,404,406,408 
  settings.ts      |   83.37 |    85.98 |   69.23 |   83.37 | ...75-476,523-524 
  ...ingsLegacy.ts |    70.9 |    81.81 |     100 |    70.9 | 48-52,56-67       
  ...ingsLoader.ts |   94.11 |    81.39 |     100 |   94.11 | ...78,108-109,137 
  settingsMerge.ts |   99.51 |    95.65 |     100 |   99.51 | 128-129           
  ...Migrations.ts |   95.67 |    91.66 |     100 |   95.67 | 22-24,48-49,55-56 
  ...ingsSchema.ts |     100 |      100 |     100 |     100 |                   
  ...Governance.ts |   95.16 |    91.17 |     100 |   95.16 | 47-48,129-132     
  ...tedFolders.ts |   95.58 |       96 |     100 |   95.58 | 93,120-126        
  welcomeConfig.ts |   22.41 |      100 |       0 |   22.41 | ...71,74-79,82-83 
  yargsOptions.ts  |   98.73 |    96.77 |    87.5 |   98.73 | 144,153-156       
 ...fig/extensions |   76.28 |     84.5 |   87.38 |   76.28 |                   
  consent.ts       |   88.03 |    85.71 |     100 |   88.03 | ...76-377,380-381 
  ...ionConsent.ts |   87.38 |    76.66 |     100 |   87.38 | ...,64-67,113-116 
  ...Enablement.ts |   94.02 |       96 |     100 |   94.02 | ...15-221,284-286 
  ...sionLoader.ts |   91.92 |    88.46 |     100 |   91.92 | ...20-221,229-233 
  ...onSettings.ts |     100 |      100 |     100 |     100 |                   
  github.ts        |   61.73 |    81.73 |      68 |   61.73 | ...49-650,660-663 
  hookSchema.ts    |     100 |      100 |     100 |     100 |                   
  ...ntegration.ts |   55.31 |    84.78 |      50 |   55.31 | ...61,402,426-427 
  ...ingsPrompt.ts |      73 |    94.73 |      80 |      73 | 92-121            
  ...ngsStorage.ts |   85.57 |    77.19 |     100 |   85.57 | ...05-306,324-327 
  update.ts        |   69.52 |    52.94 |   85.71 |   69.52 | ...73-201,218-226 
  ...ableSchema.ts |     100 |      100 |     100 |     100 |                   
  variables.ts     |   95.55 |       90 |     100 |   95.55 | 33-34             
 ...ettings-schema |   99.78 |       60 |     100 |   99.78 |                   
  schema-core.ts   |     100 |      100 |     100 |     100 |                   
  ...extensions.ts |     100 |      100 |     100 |     100 |                   
  ...a-security.ts |   99.44 |       50 |     100 |   99.44 | 16-17             
  schema-tail.ts   |   99.52 |       50 |     100 |   99.52 | 13-14             
  schema-ui.ts     |     100 |      100 |     100 |     100 |                   
  schema.ts        |     100 |      100 |     100 |     100 |                   
  types.ts         |     100 |      100 |     100 |     100 |                   
 src/constants     |     100 |      100 |     100 |     100 |                   
  historyLimits.ts |     100 |      100 |     100 |     100 |                   
 src/extensions    |   64.92 |    61.81 |      75 |   64.92 |                   
  ...utoUpdater.ts |   64.92 |    61.81 |      75 |   64.92 | ...69-470,479,481 
 src/generated     |     100 |      100 |     100 |     100 |                   
  git-commit.ts    |     100 |      100 |     100 |     100 |                   
 ...egration-tests |   71.54 |    83.33 |   85.71 |   71.54 |                   
  ...st-helpers.ts |       0 |        0 |       0 |       0 | 1-79              
  test-utils.ts    |   91.93 |     86.2 |    92.3 |   91.93 | ...45,263-264,274 
 ...viders/logging |   89.31 |    90.24 |   69.23 |   89.31 |                   
  ...rvice-impl.ts |   44.44 |        0 |       0 |   44.44 | 21-22,25-30,36-37 
  git-stats.ts     |   96.46 |     92.5 |     100 |   96.46 | 154-155,195-196   
 src/runtime       |   94.06 |    88.88 |     100 |   94.06 |                   
  ...imeAdapter.ts |   94.06 |    88.88 |     100 |   94.06 | ...07-308,321-324 
 src/services      |   85.69 |    85.08 |   94.87 |   85.69 |                   
  ...mandLoader.ts |   79.75 |    73.33 |      80 |   79.75 | ...10-124,168-186 
  ...andService.ts |     100 |      100 |     100 |     100 |                   
  ...mandLoader.ts |   91.91 |    86.27 |     100 |   91.91 | ...11-216,303-310 
  ...omptLoader.ts |    67.5 |    68.96 |     100 |    67.5 | ...75,181-187,202 
  ...tArgParser.ts |     100 |    94.28 |     100 |     100 | 42,72             
  performResume.ts |   89.11 |    89.47 |     100 |   89.11 | ...59-262,268-269 
  types.ts         |       0 |        0 |       0 |       0 | 1                 
 ...mpt-processors |      98 |     93.1 |     100 |      98 |                   
  ...tProcessor.ts |     100 |      100 |     100 |     100 |                   
  ...lProcessor.ts |   97.88 |    92.72 |     100 |   97.88 | 78-79,263-264     
  types.ts         |     100 |      100 |     100 |     100 |                   
 ...o-continuation |   86.84 |    84.09 |   94.73 |   86.84 |                   
  ...ionService.ts |   86.84 |    84.09 |   94.73 |   86.84 | ...16,583,609-610 
 src/test-utils    |   77.07 |    82.25 |   37.68 |   77.07 |                   
  assertions.ts    |   76.47 |       50 |     100 |   76.47 | ...40,49-50,59-60 
  async.ts         |       0 |        0 |       0 |       0 | 1-34              
  ...eExtension.ts |     100 |      100 |     100 |     100 |                   
  ...omMatchers.ts |   22.22 |      100 |       0 |   22.22 | 19-49             
  inkFrame.ts      |      65 |    66.66 |   66.66 |      65 | 31-32,40-44       
  mockAgent.ts     |     100 |      100 |      50 |     100 |                   
  ...andContext.ts |     100 |      100 |     100 |     100 |                   
  regex.ts         |     100 |      100 |     100 |     100 |                   
  render.tsx       |   94.87 |    96.66 |   24.48 |   94.87 | ...52-157,260-261 
  ...e-testing.tsx |       0 |        0 |       0 |       0 | 1-56              
  ...iderConfig.ts |       0 |        0 |       0 |       0 | 1-19              
 src/ui            |   38.17 |    93.65 |   32.14 |   38.17 |                   
  App.tsx          |   37.25 |      100 |       0 |   37.25 | 71-98,104-111     
  AppContainer.tsx |     100 |      100 |     100 |     100 |                   
  ...erRuntime.tsx |   14.24 |      100 |   16.66 |   14.24 | 72-406            
  ...tionNudge.tsx |       8 |      100 |       0 |       8 | 29-104            
  colors.ts        |   37.14 |      100 |   20.33 |   37.14 | ...03-304,306-307 
  constants.ts     |     100 |      100 |     100 |     100 |                   
  debug.ts         |     100 |      100 |     100 |     100 |                   
  ...derOptions.ts |     100 |      100 |     100 |     100 |                   
  keyMatchers.ts   |   88.63 |       84 |     100 |   88.63 | 18,20-21,28-29    
  ...ntsEnabled.ts |     100 |      100 |     100 |     100 |                   
  ...submission.ts |     100 |      100 |     100 |     100 |                   
  ...lobalState.ts |     100 |      100 |     100 |     100 |                   
  ...tic-colors.ts |   78.94 |      100 |      60 |   78.94 | 15-16,24-25       
  textConstants.ts |     100 |      100 |     100 |     100 |                   
  types.ts         |     100 |      100 |     100 |     100 |                   
 src/ui/commands   |   71.81 |    77.12 |   78.33 |   71.81 |                   
  aboutCommand.ts  |   82.84 |    51.51 |   91.66 |   82.84 | ...92-193,195-196 
  authCommand.ts   |   50.55 |     78.2 |    62.5 |   50.55 | ...67-670,681-722 
  ...urlCommand.ts |      68 |       75 |     100 |      68 | 47-62             
  bugCommand.ts    |   71.23 |    30.76 |     100 |   71.23 | ...99-110,145-153 
  chatCommand.ts   |   69.89 |    74.62 |   66.66 |   69.89 | ...42-543,591-602 
  clearCommand.ts  |   88.88 |    88.88 |     100 |   88.88 | 96-103            
  ...essCommand.ts |   93.47 |    86.04 |     100 |   93.47 | ...,67-71,111-112 
  ...nueCommand.ts |     100 |      100 |     100 |     100 |                   
  copyCommand.ts   |     100 |      100 |     100 |     100 |                   
  debugCommands.ts |   13.81 |      100 |       0 |   13.81 | ...52,459,466,473 
  ...st-helpers.ts |   89.62 |     91.3 |      50 |   89.62 | ...93,95-96,98-99 
  ...icsCommand.ts |   79.06 |    54.25 |   94.44 |   79.06 | ...21-524,539-544 
  ...ticsTokens.ts |   90.96 |     87.8 |     100 |   90.96 | ...,67-72,107-108 
  ...ryCommand.tsx |    89.5 |    84.84 |     100 |    89.5 | ...27-135,202-210 
  docsCommand.ts   |     100 |      100 |     100 |     100 |                   
  ...extCommand.ts |   96.22 |    89.65 |     100 |   96.22 | 220-225           
  editorCommand.ts |     100 |      100 |     100 |     100 |                   
  ...onsCommand.ts |   41.27 |    88.09 |    62.5 |   41.27 | ...23-380,390-538 
  ...ionSection.ts |   83.33 |    93.33 |     100 |   83.33 | 28-34             
  helpCommand.ts   |     100 |      100 |     100 |     100 |                   
  hooksCommand.ts  |   79.49 |    80.82 |   92.85 |   79.49 | ...02,511-512,626 
  ideCommand.ts    |   69.87 |    74.28 |   69.23 |   69.87 | ...36-237,240-255 
  initCommand.ts   |   80.76 |    71.42 |   66.66 |   80.76 | 37-41,43-90       
  keyCommand.ts    |   90.05 |    80.76 |     100 |   90.05 | ...97,420-421,520 
  ...ileCommand.ts |    10.9 |      100 |       0 |    10.9 | 22-46,53-141      
  ...ingCommand.ts |   10.27 |      100 |       0 |   10.27 | ...19-572,589-601 
  logoutCommand.ts |   52.52 |    66.66 |      75 |   52.52 | ...91,104-110,115 
  lspCommand.ts    |    93.8 |    85.36 |     100 |    93.8 | 43,95-100         
  mcpAuth.ts       |   90.59 |    83.33 |   66.66 |   90.59 | 35-44,89-90       
  mcpCommand.ts    |   96.22 |    85.71 |     100 |   96.22 | 93-98             
  mcpDisplay.ts    |   84.02 |     80.8 |   94.11 |   84.02 | ...82-483,510-511 
  memoryCommand.ts |   87.45 |    75.47 |     100 |   87.45 | ...46,234-248,297 
  modelCommand.ts  |   98.92 |    93.02 |     100 |   98.92 | 120               
  mouseCommand.ts  |     100 |      100 |     100 |     100 |                   
  ...onsCommand.ts |    93.9 |    88.88 |     100 |    93.9 | 58-62             
  ...iesCommand.ts |   97.79 |    87.75 |     100 |   97.79 | 24,34-35          
  ...acyCommand.ts |   61.53 |      100 |       0 |   61.53 | 22-26             
  ...ileCommand.ts |   56.52 |    46.42 |   55.55 |   56.52 | ...35-476,497-513 
  profileLoad.ts   |   52.08 |       60 |    87.5 |   52.08 | ...45,172,183-187 
  ...adBalancer.ts |   81.36 |    84.61 |     100 |   81.36 | ...20-321,347-352 
  ...ileSchemas.ts |   67.11 |    81.81 |     100 |   67.11 | ...18-230,262-267 
  ...derCommand.ts |   60.49 |    33.33 |     100 |   60.49 | ...94-295,304-309 
  quitCommand.ts   |   36.66 |      100 |       0 |   36.66 | 17-36             
  ...oreCommand.ts |   90.16 |    83.33 |     100 |   90.16 | ...69-174,207-212 
  setCommand.ts    |   86.32 |    84.28 |     100 |   86.32 | ...91-200,217-222 
  ...mandSchema.ts |   71.57 |    81.81 |   84.61 |   71.57 | ...05,232-240,295 
  ...ngsCommand.ts |     100 |      100 |     100 |     100 |                   
  setupCommand.ts  |     100 |      100 |     100 |     100 |                   
  ...hubCommand.ts |   90.47 |    82.85 |     100 |   90.47 | ...13-216,223-227 
  skillsCommand.ts |   82.78 |       75 |     100 |   82.78 | ...91-292,305-306 
  statsCommand.ts  |   57.25 |    86.66 |   58.33 |   57.25 | ...04-216,234-235 
  statsQuota.ts    |   80.16 |     67.1 |   86.66 |   80.16 | ...05-406,439-443 
  ...entCommand.ts |   76.72 |    69.73 |   81.81 |   76.72 | ...09-615,626-632 
  tasksCommand.ts  |   75.83 |       75 |     100 |   75.83 | ...51-156,202-210 
  ...tupCommand.ts |     100 |      100 |     100 |     100 |                   
  themeCommand.ts  |     100 |      100 |     100 |     100 |                   
  todoCommand.ts   |   82.24 |    72.28 |     100 |   82.24 | ...48-460,468-472 
  ...Formatters.ts |   48.93 |    71.42 |   33.33 |   48.93 | ...5,70-86,92-113 
  ...Operations.ts |   85.93 |    77.77 |   95.23 |   85.93 | ...71-372,410-424 
  ...matCommand.ts |   26.66 |      100 |       0 |   26.66 | 33-92             
  ...keyCommand.ts |   98.88 |     92.3 |     100 |   98.88 | 34                
  ...ileCommand.ts |    99.1 |    94.11 |     100 |    99.1 | 36                
  toolsCommand.ts  |   86.66 |    76.47 |     100 |   86.66 | ...62,295,326-327 
  types.ts         |     100 |      100 |     100 |     100 |                   
  ...ileCommand.ts |   27.77 |        0 |       0 |   27.77 | 11-23             
  vimCommand.ts    |   44.44 |      100 |       0 |   44.44 | 15-25             
 ...ommands/schema |   96.06 |    92.54 |   94.11 |   96.06 |                   
  index.ts         |   95.84 |    91.58 |     100 |   95.84 | ...07-211,222-223 
  schemaHelpers.ts |   97.02 |    96.22 |     100 |   97.02 | 67-68,115-117     
  types.ts         |       0 |        0 |       0 |       0 | 1                 
 src/ui/components |   12.21 |    39.07 |     7.7 |   12.21 |                   
  AboutBox.tsx     |   12.19 |      100 |       0 |   12.19 | ...,76-98,102-130 
  AnsiOutput.tsx   |    8.33 |      100 |       0 |    8.33 | 25-90             
  AppHeader.tsx    |   21.87 |      100 |       0 |   21.87 | 26-56             
  AsciiArt.ts      |     100 |      100 |     100 |     100 |                   
  AuthDialog.tsx   |    4.79 |      100 |       0 |    4.79 | ...34-259,262-342 
  ...nProgress.tsx |       0 |        0 |       0 |       0 | 1-63              
  ...Indicator.tsx |   15.15 |      100 |       0 |   15.15 | 17-47             
  ...firmation.tsx |   15.38 |      100 |       0 |   15.38 | 59-134,143-208    
  ...tsDisplay.tsx |   10.37 |      100 |       0 |   10.37 | ...70-110,114-168 
  CliSpinner.tsx   |       0 |        0 |       0 |       0 | 1-22              
  Composer.tsx     |     8.1 |      100 |       0 |     8.1 | 17-32,45-100      
  ...entPrompt.tsx |   18.75 |      100 |       0 |   18.75 | 21-51             
  ...ryDisplay.tsx |   21.05 |      100 |       0 |   21.05 | 17-35             
  ...ryDisplay.tsx |    4.65 |      100 |       0 |    4.65 | 29-107,110-174    
  ...geDisplay.tsx |       0 |        0 |       0 |       0 | 1-37              
  ...gProfiler.tsx |   16.86 |      100 |       0 |   16.86 | ...73-118,122-222 
  ...esDisplay.tsx |   10.52 |      100 |       0 |   10.52 | 24-82             
  ...ogManager.tsx |    5.66 |      100 |       0 |    5.66 | 71-803,807-831    
  ...ngsDialog.tsx |   12.56 |      100 |       0 |   12.56 | ...48-172,176-247 
  ...rBoundary.tsx |   10.07 |        0 |       0 |   10.07 | ...26-171,189-204 
  ...ustDialog.tsx |   16.34 |      100 |       0 |   16.34 | ...2,70-81,84-143 
  Footer.tsx       |    12.6 |        0 |       0 |    12.6 | ...49-653,657-726 
  ...ngSpinner.tsx |    40.9 |      100 |       0 |    40.9 | 31-47             
  Header.tsx       |    17.5 |      100 |       0 |    17.5 | 22-62             
  Help.tsx         |    6.84 |      100 |       0 |    6.84 | ...87-190,194-206 
  ...emDisplay.tsx |   12.01 |      100 |       0 |   12.01 | 53-237,240-278    
  ...usDisplay.tsx |       0 |        0 |       0 |       0 | 1-47              
  InputPrompt.tsx  |     100 |       75 |     100 |     100 | 45                
  ...tsDisplay.tsx |    4.36 |      100 |       0 |    4.36 | ...32-226,229-292 
  ...utManager.tsx |       0 |        0 |       0 |       0 | 1-99              
  ...ileDialog.tsx |    8.33 |      100 |       0 |    8.33 | ...8,72-81,85-152 
  ...Indicator.tsx |   14.92 |      100 |       0 |   14.92 | 21-25,35-97       
  ...ingDialog.tsx |    6.68 |      100 |       0 |    6.68 | ...66-383,387-436 
  ...geDisplay.tsx |       0 |        0 |       0 |       0 | 1-41              
  ModelDialog.tsx  |    3.82 |      100 |       0 |    3.82 | ...79-752,756-842 
  ...tsDisplay.tsx |    3.82 |      100 |       0 |    3.82 | 32-205,208-259    
  ...fications.tsx |   16.66 |      100 |       0 |   16.66 | ...08-139,142-177 
  ...odeDialog.tsx |     7.4 |      100 |       0 |     7.4 | 32-141            
  ...ustDialog.tsx |    5.53 |      100 |       0 |    5.53 | ...36-273,278-313 
  PrepareLabel.tsx |   13.33 |      100 |       0 |   13.33 | 20-48             
  ...ailDialog.tsx |   11.36 |      100 |       0 |   11.36 | ...93-499,503-576 
  ...ineEditor.tsx |    4.34 |      100 |       0 |    4.34 | ...66-552,555-630 
  ...istDialog.tsx |     4.5 |      100 |       0 |     4.5 | ...93-530,533-619 
  ...derDialog.tsx |    2.58 |      100 |       0 |    2.58 | 58-408,411-426    
  ...Indicator.tsx |       0 |        0 |       0 |       0 | 1-21              
  ...eKeyInput.tsx |       0 |        0 |       0 |       0 | 1-149             
  ...serDialog.tsx |    9.56 |      100 |       0 |    9.56 | ...52-603,611-670 
  ...ryDisplay.tsx |      50 |      100 |       0 |      50 | 15-17             
  ...ngsDialog.tsx |    9.75 |      100 |       0 |    9.75 | 29-105            
  ...putPrompt.tsx |   14.28 |      100 |       0 |   14.28 | 19-58             
  ...Indicator.tsx |   44.44 |      100 |       0 |   44.44 | 12-17             
  ...MoreLines.tsx |   30.43 |      100 |       0 |   30.43 | 18-38             
  StatsDisplay.tsx |    8.98 |      100 |       0 |    8.98 | ...40-445,449-500 
  ...usDisplay.tsx |       0 |        0 |       0 |       0 | 1-59              
  StickyHeader.tsx |    7.14 |      100 |       0 |    7.14 | 20-78             
  ...nsDisplay.tsx |    5.83 |      100 |       0 |    5.83 | 39-91,105-181     
  Table.tsx        |    6.77 |      100 |       0 |    6.77 | 31-36,39-99       
  ThemeDialog.tsx  |    3.96 |      100 |       0 |    3.96 | 51-441,444-500    
  ...dGradient.tsx |      25 |      100 |       0 |      25 | 27-46             
  Tips.tsx         |      16 |      100 |       0 |      16 | 17-45             
  TodoPanel.tsx    |     5.9 |      100 |       0 |     5.9 | ...87-244,247-296 
  ...tsDisplay.tsx |   10.05 |      100 |       0 |   10.05 | ...88-227,230-259 
  ToolsDialog.tsx  |   10.63 |      100 |       0 |   10.63 | ...5,41-47,50-123 
  ...ification.tsx |   36.36 |      100 |       0 |   36.36 | 15-22             
  ...ionDialog.tsx |    6.08 |      100 |       0 |    6.08 | 18-104,110-161    
  ...romptHooks.ts |   87.61 |    65.51 |     100 |   87.61 | ...39-343,359-366 
  ...eyHandlers.ts |   24.33 |    33.33 |      50 |   24.33 | ...75-577,581-606 
  ...mptRender.tsx |   53.05 |     31.7 |   72.72 |   53.05 | ...02,314-322,343 
  ...PromptText.ts |   31.08 |    55.55 |   28.57 |   31.08 | ...25-175,179-199 
  ...romptTypes.ts |     100 |      100 |     100 |     100 |                   
  ...logActions.ts |    2.59 |      100 |       0 |    2.59 | ...92-562,565-602 
  ...logDisplay.ts |    4.28 |      100 |       0 |    4.28 | 25-120,125-184    
  ...logHelpers.ts |    7.64 |      100 |       0 |    7.64 | ...76-194,201-214 
  ...ialogHooks.ts |     2.8 |      100 |       0 |     2.8 | ...98-599,632-807 
  ...ogKeypress.ts |    1.69 |      100 |       0 |    1.69 | 34-386,481-678    
  ...ialogTypes.ts |       0 |        0 |       0 |       0 | 1                 
  ...alogViews.tsx |    4.13 |      100 |       0 |    4.13 | 31-133,167-378    
  todo-utils.ts    |       0 |        0 |       0 |       0 | 1-7               
 ...leCreateWizard |   18.57 |       50 |       0 |   18.57 |                   
  ...aramsStep.tsx |   13.42 |      100 |       0 |   13.42 | ...33-246,258-342 
  ...ationStep.tsx |    7.23 |      100 |       0 |    7.23 | ...35-571,583-651 
  ...onfigStep.tsx |   13.33 |      100 |       0 |   13.33 | 20-26,37-117      
  ...electStep.tsx |    9.73 |      100 |       0 |    9.73 | ...12-279,295-340 
  ...ationMenu.tsx |       0 |        0 |       0 |       0 | 1-102             
  ...eSaveStep.tsx |    7.73 |      100 |       0 |    7.73 | ...75-304,316-394 
  ...ssSummary.tsx |   12.12 |      100 |       0 |   12.12 | 23-88             
  ...electStep.tsx |   18.18 |      100 |       0 |   18.18 | 29-96             
  TextInput.tsx    |    6.56 |      100 |       0 |    6.56 | ...99-109,117-200 
  constants.ts     |     100 |      100 |     100 |     100 |                   
  index.tsx        |   14.17 |      100 |       0 |   14.17 | ...97-226,235-319 
  types.ts         |     100 |      100 |     100 |     100 |                   
  utils.ts         |    5.42 |      100 |       0 |    5.42 | ...59-361,366-383 
  validation.ts    |   11.23 |      100 |       0 |   11.23 | ...97-104,107-111 
 ...gentManagement |    4.22 |      100 |       0 |    4.22 |                   
  ...entWizard.tsx |    2.91 |      100 |       0 |    2.91 | 30-232,237-312    
  ...ionWizard.tsx |    1.44 |      100 |       0 |    1.44 | 30-592,595-676    
  ...eteDialog.tsx |    5.88 |      100 |       0 |    5.88 | 14-94,104-146     
  ...tEditForm.tsx |    1.77 |      100 |       0 |    1.77 | 30-619,622-640    
  ...tListMenu.tsx |    2.94 |      100 |       0 |    2.94 | 15-264,267-348    
  ...tMainMenu.tsx |   16.66 |      100 |       0 |   16.66 | 22-62             
  ...gerDialog.tsx |    2.39 |      100 |       0 |    2.39 | 29-600,603-679    
  ...tShowView.tsx |    4.76 |      100 |       0 |    4.76 | 25-183,186-243    
  index.ts         |     100 |      100 |     100 |     100 |                   
  types.ts         |     100 |      100 |     100 |     100 |                   
 ...comeOnboarding |   13.67 |        0 |       0 |   13.67 |                   
  ...ethodStep.tsx |   16.86 |      100 |       0 |   16.86 | 38-123            
  ...ationStep.tsx |    7.35 |      100 |       0 |    7.35 | ...1,59-95,98-177 
  ...etionStep.tsx |    9.84 |      100 |       0 |    9.84 | ...,89-99,103-179 
  ...electStep.tsx |   12.12 |      100 |       0 |   12.12 | ...3,67-75,79-143 
  ...electStep.tsx |   34.48 |      100 |       0 |   34.48 | 51-120            
  SkipExitStep.tsx |    12.5 |      100 |       0 |    12.5 | 18-59             
  ...omeDialog.tsx |   11.76 |      100 |       0 |   11.76 | 51-118,121-166    
  WelcomeStep.tsx  |    10.2 |      100 |       0 |    10.2 | 23-74             
  index.ts         |       0 |        0 |       0 |       0 | 1-13              
 ...nents/messages |   18.85 |       90 |   15.06 |   18.85 |                   
  ...onMessage.tsx |   12.28 |      100 |       0 |   12.28 | 24-86             
  DiffRenderer.tsx |    3.59 |      100 |       0 |    3.59 | ...81-412,415-433 
  ErrorMessage.tsx |   22.22 |      100 |       0 |   22.22 | 16-31             
  ...niMessage.tsx |   14.51 |      100 |       0 |   14.51 | 28-95             
  ...geContent.tsx |   20.83 |      100 |       0 |   20.83 | 26-46             
  InfoMessage.tsx  |   17.24 |      100 |       0 |   17.24 | 19-44             
  ...rlMessage.tsx |   11.36 |      100 |       0 |   11.36 | 18-65             
  ...geMessage.tsx |     100 |      100 |     100 |     100 |                   
  ...ckDisplay.tsx |      20 |      100 |       0 |      20 | 43-64             
  ...onMessage.tsx |    3.04 |      100 |       0 |    3.04 | 38-554,559-638    
  ...upMessage.tsx |    7.42 |      100 |       0 |    7.42 | ...75-273,277-352 
  ToolMessage.tsx  |    4.37 |      100 |       0 |    4.37 | 38-342,358-428    
  ...ltDisplay.tsx |   92.03 |    88.23 |     100 |   92.03 | 55-69,238-240     
  ToolShared.tsx   |   64.61 |       90 |   33.33 |   64.61 | 78-99,102-105     
  UserMessage.tsx  |     100 |      100 |     100 |     100 |                   
  ...llMessage.tsx |   36.36 |      100 |       0 |   36.36 | 17-25             
  ...ngMessage.tsx |    23.8 |      100 |       0 |    23.8 | 17-34             
 ...ponents/shared |   40.93 |     63.4 |   40.34 |   40.93 |                   
  ...ctionList.tsx |    4.31 |      100 |       0 |    4.31 | 36-123,128-206    
  MaxSizedBox.tsx  |    50.2 |    57.33 |   76.47 |    50.2 | ...63-666,670-673 
  ...tonSelect.tsx |   12.76 |      100 |       0 |   12.76 | 66-113            
  ...lableList.tsx |    5.15 |      100 |       0 |    5.15 | 40-267            
  ...ist.hooks.tsx |    3.81 |      100 |       0 |    3.81 | ...70-795,798-835 
  ...lizedList.tsx |   11.49 |      100 |       0 |   11.49 | 28-112            
  ...List.types.ts |     100 |      100 |     100 |     100 |                   
  ...operations.ts |   75.54 |    48.14 |     100 |   75.54 | ...32-233,256-265 
  ...er-reducer.ts |   28.25 |    51.11 |   33.33 |   28.25 | ...30,632,644,687 
  buffer-types.ts  |     100 |      100 |     100 |     100 |                   
  text-buffer.ts   |   71.75 |    89.18 |   27.86 |   71.75 | ...33-635,654-660 
  ...formations.ts |   42.85 |    71.42 |      80 |   42.85 | ...32-139,163-209 
  ...n-handlers.ts |   33.99 |    61.53 |   23.25 |   33.99 | ...47-755,758-762 
  ...st-helpers.ts |       0 |        0 |       0 |       0 | 1-33              
  ...er-actions.ts |   93.84 |     87.5 |     100 |   93.84 | 91-93,100         
  visual-layout.ts |    90.2 |    72.34 |     100 |    90.2 | ...48-350,372-373 
  ...navigation.ts |   53.38 |    61.53 |   73.68 |   53.38 | ...45-366,389-411 
 ...mponents/views |    9.79 |      100 |       0 |    9.79 |                   
  ChatList.tsx     |   20.58 |      100 |       0 |   20.58 | 24-55             
  ...sionsList.tsx |     7.5 |      100 |       0 |     7.5 | 19-103            
  HooksList.tsx    |   10.67 |      100 |       0 |   10.67 | ...18-129,132-147 
  SkillsList.tsx   |    5.79 |      100 |       0 |    5.79 | 18-103            
 src/ui/constants  |   55.78 |     90.9 |      50 |   55.78 |                   
  ...ollections.ts |     100 |      100 |     100 |     100 |                   
  tips.ts          |       0 |        0 |       0 |       0 | 1-164             
 src/ui/containers |       0 |        0 |       0 |       0 |                   
  ...ontroller.tsx |       0 |        0 |       0 |       0 | 1-356             
  UIStateShell.tsx |       0 |        0 |       0 |       0 | 1-15              
 ...ainer/builders |   98.38 |      100 |   83.33 |   98.38 |                   
  ...dUIActions.ts |     100 |      100 |     100 |     100 |                   
  buildUIState.ts  |     100 |      100 |     100 |     100 |                   
  ...onsBuilder.ts |   66.66 |      100 |       0 |   66.66 | 20-21             
  ...ateBuilder.ts |   66.66 |      100 |       0 |   66.66 | 20-21             
 ...ontainer/hooks |   55.73 |    87.02 |   58.33 |   55.73 |                   
  ...pBootstrap.ts |   94.73 |    58.33 |     100 |   94.73 | ...32-235,239-241 
  useAppDialogs.ts |   41.42 |      100 |   42.85 |   41.42 | ...61,180-396,416 
  ...ntHandlers.ts |     100 |      100 |     100 |     100 |                   
  useAppInput.ts   |    5.77 |      100 |       0 |    5.77 | 102-524,527-531   
  useAppLayout.ts  |    7.92 |      100 |       0 |    7.92 | 92-299,302-305    
  ...reenAction.ts |   13.63 |      100 |       0 |   13.63 | 23-41             
  ...nSelection.ts |      20 |      100 |       0 |      20 | 27-48             
  ...hestration.ts |     100 |      100 |     100 |     100 |                   
  ...references.ts |      10 |      100 |       0 |      10 | 51-104            
  ...itHandling.ts |   89.79 |      100 |     100 |   89.79 | 130-138,142       
  ...textBridge.ts |   33.33 |      100 |       0 |   33.33 | 23-30             
  ...tartHotkey.ts |   26.66 |      100 |       0 |   26.66 | 23-33             
  ...omptSubmit.ts |     100 |      100 |     100 |     100 |                   
  ...utHandling.ts |   98.37 |     91.3 |     100 |   98.37 | 53,166            
  ...yBootstrap.ts |      30 |      100 |       0 |      30 | 28-34             
  ...eybindings.ts |   86.28 |    78.18 |     100 |   86.28 | ...04-206,250-251 
  ...easurement.ts |   15.38 |      100 |       0 |   15.38 | 45-95             
  ...reshAction.ts |   79.16 |     37.5 |     100 |   79.16 | 51,81-84,86-95    
  ...untimeSync.ts |   96.15 |    96.96 |     100 |   96.15 | 198-203           
  ...elTracking.ts |   27.41 |      100 |      50 |   27.41 | 20-24,67-120      
  ...laceholder.ts |      15 |      100 |       0 |      15 | 13-18,21-34       
  ...rorTimeout.ts |   17.64 |      100 |       0 |   17.64 | 24-39             
  ...astructure.ts |   73.91 |      100 |      20 |   73.91 | 53,57,61,75-83    
  ...ebugLogger.ts |   17.24 |      100 |       0 |   17.24 | 23-51             
  ...ialization.ts |   70.45 |    84.61 |   66.66 |   70.45 | ...,72-94,127-128 
  ...sAutoReset.ts |     100 |       90 |     100 |     100 | 44                
  ...andActions.ts |     100 |      100 |     100 |     100 |                   
  ...eshManager.ts |     100 |      100 |     100 |     100 |                   
  ...uationFlow.ts |    7.93 |      100 |       0 |    7.93 | 54-150            
  ...csTracking.ts |    95.8 |    80.64 |     100 |    95.8 | ...32-133,184-185 
  ...uthBridges.ts |   17.94 |      100 |   33.33 |   17.94 | ...13-138,142-146 
 src/ui/contexts   |   56.19 |       80 |   54.34 |   56.19 |                   
  ...chContext.tsx |   88.23 |    66.66 |     100 |   88.23 | 27-28             
  FocusContext.tsx |       0 |        0 |       0 |       0 | 1-11              
  ...ssContext.tsx |    83.3 |    87.89 |    87.5 |    83.3 | ...21-522,572-573 
  MouseContext.tsx |   78.82 |       75 |      80 |   78.82 | ...00-101,111-117 
  ...erContext.tsx |   94.44 |    63.63 |     100 |   94.44 | 125-128           
  ...owContext.tsx |   21.42 |      100 |   33.33 |   21.42 | 34,40-88          
  ...meContext.tsx |   52.34 |       40 |   57.14 |   52.34 | ...95-196,201-202 
  ...lProvider.tsx |    91.8 |    74.62 |     100 |    91.8 | ...94-495,507-508 
  ...onContext.tsx |     4.4 |      100 |       0 |     4.4 | ...38-393,398-405 
  ...teContext.tsx |       0 |        0 |       0 |       0 | 1-57              
  ...gsContext.tsx |      50 |      100 |       0 |      50 | 15-20             
  ...ngContext.tsx |   42.85 |      100 |       0 |   42.85 | 15-22             
  TodoContext.tsx  |   54.54 |      100 |       0 |   54.54 | 28-31,33-36,39-40 
  TodoProvider.tsx |    3.35 |      100 |       0 |    3.35 | 27-166,169-199    
  ...llContext.tsx |     100 |      100 |       0 |     100 |                   
  ...lProvider.tsx |    6.75 |      100 |       0 |    6.75 | 24-118            
  ...nsContext.tsx |      25 |      100 |       0 |      25 | 203-214,217-222   
  ...teContext.tsx |      50 |       50 |      50 |      50 | 251-260,265-266   
  ...deContext.tsx |   11.11 |      100 |       0 |   11.11 | 30-82,85-90       
 src/ui/editors    |   98.18 |     87.5 |     100 |   98.18 |                   
  ...ngsManager.ts |   98.18 |     87.5 |     100 |   98.18 | 59                
 src/ui/hooks      |    68.4 |    85.82 |   72.16 |    68.4 |                   
  ...st-helpers.ts |    95.9 |    90.47 |   56.66 |    95.9 | 67,79-80,98-99    
  ...dProcessor.ts |   87.95 |    87.09 |   88.88 |   87.95 | ...78-180,241-253 
  ...sorHelpers.ts |   78.84 |    78.57 |   88.88 |   78.84 | ...22-823,851-857 
  ...etionUtils.ts |   53.36 |    88.23 |   64.28 |   53.36 | 57-207,335        
  index.ts         |       0 |        0 |       0 |       0 | 1-9               
  keyToAnsi.ts     |    42.5 |      100 |       0 |    42.5 | 27-37,47-61       
  ...etionUtils.ts |     100 |    66.66 |     100 |     100 | 49                
  ...dProcessor.ts |   96.29 |       80 |     100 |   96.29 | ...71-272,404-408 
  ...ndHandlers.ts |   17.54 |    27.27 |   22.22 |   17.54 | ...45-646,651-660 
  ...dPathUtils.ts |    95.7 |    90.52 |     100 |    95.7 | ...25-227,271-272 
  ...dProcessor.ts |     100 |      100 |     100 |     100 |                   
  ...sorSupport.ts |   68.99 |    70.83 |   66.66 |   68.99 | ...85-288,306-313 
  ...tionEffect.ts |   90.76 |    86.56 |   92.85 |   90.76 | ...04-405,418-419 
  ...etionTypes.ts |       0 |        0 |       0 |       0 | 1                 
  toolMapping.ts   |   90.76 |    88.88 |   93.33 |   90.76 | ...95-207,226-228 
  ...nateBuffer.ts |      50 |      100 |       0 |      50 | 16-18             
  ...dScrollbar.ts |   97.82 |      100 |     100 |   97.82 | 153-155           
  ...st-helpers.ts |     100 |      100 |     100 |     100 |                   
  ...Completion.ts |   93.03 |    88.51 |     100 |   93.03 | ...02-603,606-607 
  ...uthCommand.ts |   96.42 |    66.66 |     100 |   96.42 | 21                
  ...tIndicator.ts |     100 |     92.3 |     100 |     100 | 57                
  useBanner.ts     |     100 |    83.33 |     100 |     100 | 22,48             
  ...chedScroll.ts |   16.66 |      100 |       0 |   16.66 | 14-32             
  ...ketedPaste.ts |      20 |      100 |       0 |      20 | 20-38             
  ...ompletion.tsx |   97.24 |    82.75 |    90.9 |   97.24 | ...04-206,209-210 
  useCompletion.ts |    92.4 |     87.5 |     100 |    92.4 | 68-69,93-94,98-99 
  ...leMessages.ts |   96.15 |       90 |     100 |   96.15 | 56-57,63          
  ...ntHandlers.ts |   31.25 |      100 |     100 |   31.25 | 43-70,74-82       
  ...fileDialog.ts |   16.12 |      100 |       0 |   16.12 | 17-47             
  ...orSettings.ts |   11.86 |      100 |       0 |   11.86 | 31-87             
  ...AutoUpdate.ts |    8.33 |      100 |       0 |    8.33 | 18-64             
  ...ionUpdates.ts |   75.17 |    80.64 |   77.77 |   75.17 | ...60-261,289-303 
  ...erDetector.ts |     100 |      100 |     100 |     100 |                   
  useFocus.ts      |     100 |      100 |     100 |     100 |                   
  ...olderTrust.ts |   87.09 |     91.3 |     100 |   87.09 | 50-63,135-136     
  ...st-helpers.ts |     100 |      100 |     100 |     100 |                   
  ...BranchName.ts |     100 |    89.47 |     100 |     100 | 58,61             
  ...oryManager.ts |   96.61 |    93.18 |     100 |   96.61 | ...70-171,214-215 
  ...splayState.ts |     100 |      100 |     100 |     100 |                   
  ...stListener.ts |   12.12 |      100 |       0 |   12.12 | 17-50             
  ...ivityTimer.ts |   76.19 |    66.66 |     100 |   76.19 | 30-35             
  ...putHistory.ts |    92.5 |    85.71 |     100 |    92.5 | 62-63,71,93-95    
  ...storyStore.ts |     100 |    94.11 |     100 |     100 | 67                
  useKeypress.ts   |   88.88 |       75 |     100 |   88.88 | 28-29             
  ...rdProtocol.ts |       0 |        0 |       0 |       0 | 1-26              
  ...fileDialog.ts |     5.3 |      100 |       0 |     5.3 | 26-72,75-148      
  ...gIndicator.ts |     100 |      100 |     100 |     100 |                   
  useLogger.ts     |   93.75 |      100 |     100 |   93.75 | 27                
  useMcpStatus.ts  |   90.69 |    66.66 |     100 |   90.69 | 19,33-35          
  ...oryMonitor.ts |     100 |      100 |     100 |     100 |                   
  ...ssageQueue.ts |     100 |      100 |     100 |     100 |                   
  useMouse.ts      |   77.77 |    66.66 |     100 |   77.77 | 31-34             
  useMouseClick.ts |     100 |      100 |     100 |     100 |                   
  ...eSelection.ts |     2.2 |      100 |       0 |     2.2 | 51-378,381-427    
  ...hestration.ts |     100 |      100 |     100 |     100 |                   
  ...oviderInfo.ts |       0 |        0 |       0 |       0 | 1-82              
  ...odifyTrust.ts |    9.09 |      100 |       0 |    9.09 | 43-134            
  ...raseCycler.ts |   79.72 |    73.33 |     100 |   79.72 | ...69,75-76,92-94 
  ...cySettings.ts |   86.72 |    83.33 |     100 |   86.72 | ...,95-99,127-138 
  ...Management.ts |    1.53 |      100 |       0 |    1.53 | 22-568,571-663    
  ...Completion.ts |   43.02 |    55.55 |      50 |   43.02 | ...84-297,328-337 
  ...iderDialog.ts |    5.66 |      100 |       0 |    5.66 | 45-83,86-158      
  ...lScheduler.ts |   75.51 |    83.33 |   73.52 |   75.51 | ...05,621-637,794 
  ...oryCommand.ts |       0 |        0 |       0 |       0 | 1-7               
  useResponsive.ts |     100 |      100 |     100 |     100 |                   
  ...ompletion.tsx |   69.56 |      100 |     100 |   69.56 | 45-47,51-66,78-81 
  useRewind.ts     |     100 |      100 |     100 |     100 |                   
  ...ectionList.ts |   89.78 |     89.1 |     100 |   89.78 | ...17-423,443-447 
  useSession.ts    |       0 |        0 |       0 |       0 | 1-23              
  ...ionBrowser.ts |     100 |      100 |     100 |     100 |                   
  ...serHelpers.ts |   95.79 |    85.21 |   97.36 |   95.79 | ...37-639,762-763 
  ...erKeypress.ts |   89.87 |    97.29 |   94.11 |   89.87 | 101-108,130-145   
  ...ngsCommand.ts |   18.75 |      100 |       0 |   18.75 | 10-25             
  ...hallowMemo.ts |      10 |      100 |       0 |      10 | 9-22,35-47        
  ...ellHistory.ts |   92.17 |    78.78 |     100 |   92.17 | ...81,129-130,140 
  ...Completion.ts |   97.07 |    81.25 |     100 |   97.07 | 71-73,101-102     
  ...oryCommand.ts |       0 |        0 |       0 |       0 | 1-63              
  ...cessorCore.ts |   74.13 |       60 |     100 |   74.13 | ...20,157,177-204 
  ...ompletion.tsx |   96.73 |    81.39 |     100 |   96.73 | ...,92-93,335-343 
  ...leCallback.ts |     100 |      100 |     100 |     100 |                   
  ...tateAndRef.ts |   59.09 |      100 |     100 |   59.09 | 23-31             
  ...oryRefresh.ts |     100 |      100 |     100 |     100 |                   
  ...rminalSize.ts |   10.34 |      100 |       0 |   10.34 | 15-44,49-85       
  ...emeCommand.ts |    4.29 |      100 |       0 |    4.29 | 25-122,125-199    
  useTimer.ts      |    87.5 |    85.71 |     100 |    87.5 | 44-45,50-52       
  ...ntinuation.ts |   91.28 |    89.74 |     100 |   91.28 | ...25-126,153-163 
  ...ePreserver.ts |   57.14 |      100 |      80 |   57.14 | 58-76             
  ...oolsDialog.ts |    3.44 |      100 |       0 |    3.44 | 23-106,109-193    
  ...Onboarding.ts |    1.92 |      100 |       0 |    1.92 | 77-402,405-486    
  ...eMigration.ts |   11.66 |      100 |       0 |   11.66 | 15-74             
  vim.ts           |   85.73 |     87.8 |    90.9 |   85.73 | ...07-716,832-834 
 ...s/geminiStream |   88.32 |    82.87 |   89.18 |   88.32 |                   
  ...ersistence.ts |   98.29 |    95.12 |     100 |   98.29 | 162-164           
  ...tProcessor.ts |      78 |    77.77 |      80 |      78 | ...47-158,161-163 
  contextLimit.ts  |     100 |      100 |     100 |     100 |                   
  index.ts         |     100 |      100 |     100 |     100 |                   
  queryPreparer.ts |   65.26 |    46.66 |     100 |   65.26 | ...29-130,133-146 
  ...Dispatcher.ts |   90.28 |    87.03 |   91.66 |   90.28 | ...25,327-331,416 
  streamUtils.ts   |   98.98 |    96.25 |     100 |   98.98 | 349-351           
  thoughtState.ts  |   93.33 |    68.75 |     100 |   93.33 | 70-71,76-77       
  ...ionHandler.ts |     100 |      100 |     100 |     100 |                   
  types.ts         |     100 |      100 |     100 |     100 |                   
  ...genticLoop.ts |   97.43 |     87.5 |      60 |   97.43 | 178-179,240,347   
  ...miniStream.ts |   99.33 |    88.23 |   85.71 |   99.33 | 85                
  ...mLifecycle.ts |   84.18 |    58.62 |      80 |   84.18 | ...30-231,260-265 
  ...hestration.ts |    98.8 |    91.66 |   88.88 |    98.8 | 110-111,268       
  ...ntHandlers.ts |   73.53 |       96 |     100 |   73.53 | ...29-435,444-453 
  ...treamState.ts |   79.76 |    52.17 |     100 |   79.76 | ...79,200,237-238 
  ...ubmitQuery.ts |    87.5 |       75 |   83.33 |    87.5 | ...36-437,459-461 
 src/ui/layouts    |   83.47 |    56.89 |   83.33 |   83.47 |                   
  ...AppLayout.tsx |   80.98 |    71.42 |   83.33 |   80.98 | ...86-200,316-354 
  ...utHelpers.tsx |   86.29 |     54.9 |   95.23 |   86.29 | ...87-788,809-837 
  ...ainContent.ts |   23.52 |      100 |       0 |   23.52 | 16-22,25-28,31-34 
 ...noninteractive |      75 |      100 |    6.66 |      75 |                   
  ...eractiveUi.ts |      75 |      100 |    6.66 |      75 | 17-19,23-24,27-28 
 src/ui/privacy    |   19.41 |        0 |       0 |   19.41 |                   
  ...acyNotice.tsx |       0 |        0 |       0 |       0 | 1-139             
  ...acyNotice.tsx |       0 |        0 |       0 |       0 | 1-59              
  ...acyNotice.tsx |   12.19 |      100 |       0 |   12.19 | 16-62             
  ...acyNotice.tsx |   35.42 |      100 |       0 |   35.42 | 77-172,180-235    
  ...acyNotice.tsx |   19.35 |      100 |       0 |   19.35 | 21-52,55-57       
 src/ui/reducers   |    79.5 |    91.66 |      50 |    79.5 |                   
  appReducer.ts    |     100 |      100 |     100 |     100 |                   
  ...ionReducer.ts |       0 |        0 |       0 |       0 | 1-52              
 src/ui/state      |   52.63 |    30.76 |      50 |   52.63 |                   
  extensions.ts    |   52.63 |    30.76 |      50 |   52.63 | ...28,130,134-149 
 src/ui/themes     |   99.04 |    85.65 |   97.61 |   99.04 |                   
  ansi-light.ts    |     100 |      100 |     100 |     100 |                   
  ansi.ts          |     100 |      100 |     100 |     100 |                   
  atom-one-dark.ts |     100 |      100 |     100 |     100 |                   
  ayu-light.ts     |     100 |      100 |     100 |     100 |                   
  ayu.ts           |     100 |      100 |     100 |     100 |                   
  color-utils.ts   |     100 |      100 |     100 |     100 |                   
  default-light.ts |     100 |      100 |     100 |     100 |                   
  default.ts       |     100 |      100 |     100 |     100 |                   
  dracula.ts       |     100 |      100 |     100 |     100 |                   
  github-dark.ts   |     100 |      100 |     100 |     100 |                   
  github-light.ts  |     100 |      100 |     100 |     100 |                   
  googlecode.ts    |     100 |      100 |     100 |     100 |                   
  green-screen.ts  |     100 |      100 |     100 |     100 |                   
  no-color.ts      |     100 |      100 |     100 |     100 |                   
  ...c-resolver.ts |     100 |      100 |     100 |     100 |                   
  ...tic-tokens.ts |     100 |      100 |     100 |     100 |                   
  ...-of-purple.ts |     100 |      100 |     100 |     100 |                   
  theme-compat.ts  |     100 |       50 |     100 |     100 | 79                
  theme-manager.ts |   88.55 |    82.81 |     100 |   88.55 | ...03-312,317-318 
  theme.ts         |   99.09 |     81.3 |   94.11 |   99.09 | 282-283,702-703   
  xcode.ts         |     100 |      100 |     100 |     100 |                   
 src/ui/types      |       0 |        0 |       0 |       0 |                   
  ...ngMetadata.ts |       0 |        0 |       0 |       0 |                   
 src/ui/utils      |    62.5 |    88.78 |    73.4 |    62.5 |                   
  ...Colorizer.tsx |    5.64 |      100 |       0 |    5.64 | ...27-168,180-249 
  ...olePatcher.ts |   72.09 |      100 |   83.33 |   72.09 | 50-61             
  ...nRenderer.tsx |   96.88 |    87.87 |     100 |   96.88 | ...69-271,275-277 
  ...wnDisplay.tsx |       5 |      100 |       0 |       5 | ...90-717,728-732 
  ...eRenderer.tsx |   11.17 |      100 |       0 |   11.17 | ...34-387,394-427 
  ...tGenerator.ts |   78.16 |    53.84 |      60 |   78.16 | ...61,67-70,82-83 
  ...ketedPaste.ts |      60 |      100 |       0 |      60 | 13-14,17-18       
  clipboard.ts     |   97.29 |    84.61 |     100 |   97.29 | 40                
  ...boardUtils.ts |   62.28 |    76.74 |   83.33 |   62.28 | ...52-266,336-338 
  commandUtils.ts  |   93.02 |    94.44 |   96.15 |   93.02 | ...31-235,316-324 
  computeStats.ts  |     100 |      100 |     100 |     100 |                   
  displayUtils.ts  |     100 |      100 |     100 |     100 |                   
  formatters.ts    |   90.47 |    95.23 |     100 |   90.47 | 57-60             
  fuzzyFilter.ts   |     100 |    96.55 |     100 |     100 | 84                
  highlight.ts     |   77.69 |    97.29 |      60 |   77.69 | 146-172,176-181   
  ...xportUtils.ts |   98.47 |    92.85 |     100 |   98.47 | 139-140           
  ...storyItems.ts |   99.08 |    94.59 |     100 |   99.08 | 79                
  input.ts         |   84.28 |    94.44 |   66.66 |   84.28 | 73-80,106-113     
  isNarrowWidth.ts |      50 |      100 |       0 |      50 | 13-14             
  ...nUtilities.ts |   66.66 |     87.5 |     100 |   66.66 | 75-94,103-104     
  modelIdentity.ts |   99.23 |    98.18 |   84.61 |   99.23 | 169               
  mouse.ts         |   83.05 |    72.41 |     100 |   83.05 | ...94,201,214-215 
  ...mConstants.ts |     100 |      100 |     100 |     100 |                   
  ...opDetector.ts |       0 |        0 |       0 |       0 | 1-210             
  responsive.ts    |   73.39 |    76.66 |   83.33 |   73.39 | ...00-108,111-125 
  rewindFileOps.ts |   92.34 |    71.79 |     100 |   92.34 | ...48-251,291-295 
  ...putHandler.ts |   94.44 |    91.12 |     100 |   94.44 | ...15-316,386-387 
  ...ityManager.ts |    94.9 |    85.71 |    90.9 |    94.9 | ...28,352,380,391 
  ...alContract.ts |     100 |      100 |     100 |     100 |                   
  terminalLinks.ts |     100 |      100 |     100 |     100 |                   
  ...colCleanup.ts |   95.45 |       75 |     100 |   95.45 | 39                
  ...lSequences.ts |     100 |      100 |     100 |     100 |                   
  terminalSetup.ts |   10.72 |      100 |    7.14 |   10.72 | 80-419            
  textUtils.ts     |   95.27 |    92.15 |   88.88 |   95.27 | 20-25             
  ...Formatters.ts |       0 |        0 |       0 |       0 | 1-50              
  ...icsTracker.ts |     100 |    94.44 |     100 |     100 | 38                
  ui-sizing.ts     |      16 |      100 |       0 |      16 | 11-23,26-36       
  updateCheck.ts   |     100 |    94.11 |     100 |     100 | 34,45             
 src/utils         |   61.75 |    88.96 |    74.9 |   61.75 |                   
  ...ionContext.ts |   76.92 |       75 |     100 |   76.92 | 38-41,63-66,81-84 
  ...Formatting.ts |     100 |      100 |     100 |     100 |                   
  bootstrap.ts     |     100 |      100 |     100 |     100 |                   
  checks.ts        |   33.33 |      100 |       0 |   33.33 | 23-28             
  cleanup.ts       |   67.74 |       80 |      60 |   67.74 | ...66-68,71,85-94 
  coalesce.ts      |     100 |      100 |     100 |     100 |                   
  commands.ts      |   51.78 |    71.42 |     100 |   51.78 | 25-26,57-85       
  commentJson.ts   |    92.3 |     92.5 |     100 |    92.3 | 94-102            
  ...ScopeUtils.ts |   27.58 |      100 |       0 |   27.58 | 24-41,58-86       
  ...icSettings.ts |   88.07 |     87.5 |     100 |   88.07 | ...70,82-85,88-91 
  ...arResolver.ts |   96.72 |    96.42 |     100 |   96.72 | 118-119           
  errors.ts        |   94.87 |       88 |     100 |   94.87 | 53-54,95-96       
  events.ts        |     100 |      100 |     100 |     100 |                   
  ...lativeTime.ts |     100 |      100 |     100 |     100 |                   
  gitUtils.ts      |   93.54 |       85 |     100 |   93.54 | 61-62,77-80       
  ...AutoUpdate.ts |   69.37 |    80.76 |   77.77 |   69.37 | ...67-268,282-347 
  ...lationInfo.ts |   99.49 |     98.3 |     100 |   99.49 | 58                
  math.ts          |   66.66 |      100 |       0 |   66.66 | 15                
  ...stentState.ts |   95.31 |    84.21 |     100 |   95.31 | 42,63-64          
  readStdin.ts     |   81.03 |    91.66 |   83.33 |   81.03 | 32-39,51-53       
  relaunch.ts      |     100 |      100 |     100 |     100 |                   
  resolvePath.ts   |   66.66 |       25 |     100 |   66.66 | 12-13,16,18-19    
  ...containers.ts |    4.69 |      100 |       0 |    4.69 | ...35-655,659-685 
  ...entrypoint.ts |    9.87 |      100 |       0 |    9.87 | 19-48,51-100      
  sandbox-env.ts   |   74.65 |    77.14 |   66.66 |   74.65 | ...52-153,161-162 
  sandbox-exec.ts  |     4.6 |      100 |       0 |     4.6 | 51-392            
  sandbox-image.ts |    3.96 |      100 |       0 |    3.96 | 12-128            
  ...box-podman.ts |   74.59 |    94.73 |   77.77 |   74.59 | ...49-259,325-398 
  ...x-seatbelt.ts |     8.2 |      100 |       0 |     8.2 | 34-310            
  sandbox-ssh.ts   |   78.84 |    81.13 |     100 |   78.84 | ...06-307,371-375 
  sandbox.ts       |   13.23 |      100 |       0 |   13.23 | 47-111            
  ...st-helpers.ts |     100 |      100 |     100 |     100 |                   
  ...ionCleanup.ts |   88.34 |    83.11 |     100 |   88.34 | ...47-248,331-332 
  sessionUtils.ts  |    8.86 |      100 |       0 |    8.86 | 52-122,129-143    
  settingsUtils.ts |   85.67 |    91.34 |   94.28 |   85.67 | ...61-489,528-529 
  ...ttingSaver.ts |    1.92 |      100 |       0 |    1.92 | 11-32,40-85       
  skillSettings.ts |   86.13 |       88 |     100 |   86.13 | 99-107,134-138    
  skillUtils.ts    |   71.33 |    70.96 |   83.33 |   71.33 | ...88-189,203-224 
  spawnWrapper.ts  |     100 |      100 |     100 |     100 |                   
  ...upWarnings.ts |     100 |      100 |     100 |     100 |                   
  stdinSafety.ts   |   91.39 |    86.48 |     100 |   91.39 | ...66-167,170,245 
  terminalTheme.ts |     100 |      100 |     100 |     100 |                   
  typeGuards.ts    |   65.38 |      100 |      75 |   65.38 | 26-34             
  ...entEmitter.ts |     100 |      100 |     100 |     100 |                   
  ...upWarnings.ts |     100 |      100 |     100 |     100 |                   
  version.ts       |     100 |      100 |     100 |     100 |                   
  windowTitle.ts   |     100 |      100 |     100 |     100 |                   
 src/utils/privacy |   66.15 |       70 |   76.19 |   66.15 |                   
  ...taRedactor.ts |   81.91 |    71.42 |      80 |   81.91 | ...08-610,616-637 
  ...acyManager.ts |       0 |        0 |       0 |       0 | 1-176             
 ...ed-integration |    9.67 |     92.3 |    9.23 |    9.67 |                   
  ...temService.ts |     100 |      100 |     100 |     100 |                   
  ...tent-utils.ts |    6.38 |      100 |       0 |    6.38 | ...9,62-75,78-124 
  zed-helpers.ts   |   20.76 |      100 |      25 |   20.76 | ...79-128,131-148 
  ...h-resolver.ts |    4.69 |      100 |       0 |    4.69 | ...70-505,508-532 
  ...vider-auth.ts |    3.11 |      100 |       0 |    3.11 | ...15-222,225-285 
  ...ol-handler.ts |     5.1 |      100 |       0 |     5.1 | ...85-305,308-361 
  ...ntegration.ts |   11.88 |       80 |       8 |   11.88 | ...43-646,649-655 
-------------------|---------|----------|---------|---------|-------------------
Core Package - Full Text Report
-------------------|---------|----------|---------|---------|-------------------
File               | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s 
-------------------|---------|----------|---------|---------|-------------------
All files          |   77.33 |    83.56 |   74.54 |   77.33 |                   
 src               |     100 |      100 |     100 |     100 |                   
  ...-factories.ts |     100 |      100 |     100 |     100 |                   
  index.ts         |     100 |      100 |     100 |     100 |                   
 src/__mocks__/fs  |       0 |        0 |       0 |       0 |                   
  promises.ts      |       0 |        0 |       0 |       0 | 1-48              
 src/adapters      |     100 |      100 |     100 |     100 |                   
  ...eamAdapter.ts |     100 |      100 |     100 |     100 |                   
 src/code_assist   |   69.18 |    80.63 |   78.12 |   69.18 |                   
  codeAssist.ts    |   11.76 |      100 |       0 |   11.76 | 16-62,65-73,81-94 
  converter.ts     |   95.54 |    93.02 |     100 |   95.54 | 186-190,219-220   
  ...al-storage.ts |   95.86 |    79.48 |     100 |   95.86 | 27-28,86,110,139  
  oauth2.ts        |    64.9 |       78 |   81.81 |    64.9 | ...88-789,794-795 
  server.ts        |   48.16 |    72.72 |      50 |   48.16 | ...10-251,254-257 
  setup.ts         |   86.09 |    73.07 |     100 |   86.09 | ...57-159,183-189 
  types.ts         |     100 |      100 |     100 |     100 |                   
 src/commands      |     100 |      100 |     100 |     100 |                   
  extensions.ts    |     100 |      100 |     100 |     100 |                   
  types.ts         |     100 |      100 |     100 |     100 |                   
 src/config        |   70.69 |    78.92 |   58.63 |   70.69 |                   
  ...tLifecycle.ts |   95.36 |    94.59 |     100 |   95.36 | ...55-156,220-222 
  ...skServices.ts |    9.19 |      100 |       0 |    9.19 | ...5,62-80,89-129 
  config.ts        |      60 |    73.17 |   57.14 |      60 | ...37-746,771-778 
  configBase.ts    |   68.81 |    72.09 |   72.72 |   68.81 | ...48-255,257-261 
  ...igBaseCore.ts |   69.16 |    94.28 |      44 |   69.16 | ...88-789,791-792 
  ...onstructor.ts |   97.14 |    90.27 |     100 |   97.14 | ...16-517,520-521 
  ...estHarness.ts |   93.15 |    95.45 |   83.33 |   93.15 | 229-239,245-248   
  configTypes.ts   |      58 |      100 |      50 |      58 | 196-236           
  constants.ts     |     100 |      100 |     100 |     100 |                   
  ...ngsHelpers.ts |   62.16 |       40 |     100 |   62.16 | ...31,35-36,42-43 
  index.ts         |       0 |        0 |       0 |       0 | 1-41              
  ...ntegration.ts |   63.22 |    75.47 |   73.68 |   63.22 | ...12,429,438,447 
  models.ts        |     100 |      100 |     100 |     100 |                   
  ...rSingleton.ts |   76.22 |    70.37 |   56.25 |   76.22 | ...94,397-400,408 
  ...entManager.ts |   50.76 |    68.91 |   65.21 |   50.76 | ...52-653,679-703 
  ...ingsParser.ts |   41.37 |    33.33 |     100 |   41.37 | 31-48             
  ...tryFactory.ts |   84.57 |    76.92 |   69.23 |   84.57 | ...56,471,488-504 
  types.ts         |       0 |        0 |       0 |       0 |                   
 ...nfirmation-bus |   83.33 |       50 |      50 |   83.33 |                   
  index.ts         |       0 |        0 |       0 |       0 | 1-2               
  message-bus.ts   |     100 |      100 |     100 |     100 |                   
  types.ts         |     100 |      100 |     100 |     100 |                   
 src/core          |   80.74 |    77.14 |   81.25 |   80.74 |                   
  ...ssionTypes.ts |   68.42 |       75 |      20 |   68.42 | ...05-107,112-113 
  ...ntContract.ts |     100 |      100 |     100 |     100 |                   
  ...tGenerator.ts |     100 |    96.15 |     100 |     100 | 94                
  ...okTriggers.ts |   47.39 |     61.9 |   66.66 |   47.39 | ...51,253,299-304 
  geminiRequest.ts |      60 |      100 |       0 |      60 | 18-19             
  ...nAIWrapper.ts |   77.77 |      100 |   66.66 |   77.77 | 58-61,64-67       
  ...igBoundary.ts |       0 |        0 |       0 |       0 | 1                 
  ...okTriggers.ts |   96.09 |    84.37 |     100 |   96.09 | ...23,162,209,251 
  logger.ts        |   79.17 |    80.19 |   94.44 |   79.17 | ...34-448,491-500 
  prompts.ts       |   82.85 |     58.9 |    91.3 |   82.85 | ...55,558,619-620 
  subagentTypes.ts |   83.11 |    68.42 |   77.77 |   83.11 | ...01-302,317-318 
  tokenLimits.ts   |     100 |      100 |     100 |     100 |                   
  ...erContract.ts |     100 |      100 |     100 |     100 |                   
  turn.ts          |     100 |      100 |     100 |     100 |                   
 ...re/compression |   33.55 |       40 |   16.66 |   33.55 |                   
  ...nDirective.ts |    6.25 |      100 |       0 |    6.25 | 22-62             
  types.ts         |   41.02 |       40 |      20 |   41.02 | ...43-377,388-389 
 src/debug         |   61.53 |        0 |       0 |   61.53 |                   
  ...ionManager.ts |     100 |      100 |     100 |     100 |                   
  DebugLogger.ts   |     100 |      100 |     100 |     100 |                   
  FileOutput.ts    |     100 |      100 |     100 |     100 |                   
  ...ionManager.ts |       0 |        0 |       0 |       0 | 1-6               
  ...FileOutput.ts |       0 |        0 |       0 |       0 | 1-6               
  index.ts         |     100 |      100 |     100 |     100 |                   
  types.ts         |       0 |        0 |       0 |       0 | 1                 
 src/filters       |   96.68 |    94.07 |     100 |   96.68 |                   
  EmojiFilter.ts   |   96.68 |    94.07 |     100 |   96.68 | ...94-195,363-364 
 src/hooks         |   83.11 |       85 |   80.72 |   83.11 |                   
  errors.ts        |     100 |      100 |     100 |     100 |                   
  ...Aggregator.ts |    90.4 |    81.33 |    87.5 |    90.4 | ...50,369,371,373 
  ...sContracts.ts |       0 |        0 |       0 |       0 | 1                 
  ...entHandler.ts |   91.43 |     87.3 |   93.75 |   91.43 | ...50,782-788,833 
  hookPlanner.ts   |   98.79 |    93.33 |     100 |   98.79 | 103               
  hookRegistry.ts  |   97.19 |    88.31 |     100 |   97.19 | ...97,399,401,403 
  hookRunner.ts    |   84.88 |    87.14 |   86.95 |   84.88 | ...37-439,502-505 
  hookSystem.ts    |    64.2 |    88.88 |      65 |    64.2 | ...49-351,364-366 
  ...Translator.ts |   93.96 |    68.08 |     100 |   93.96 | ...06-307,318,367 
  ...Validators.ts |    92.4 |    89.83 |     100 |    92.4 | 57-59,78-80       
  index.ts         |     100 |      100 |     100 |     100 |                   
  ...ssion-hook.ts |   88.88 |    33.33 |     100 |   88.88 | 24,30             
  trustedHooks.ts  |   20.77 |        0 |       0 |   20.77 | ...6,82-90,96-109 
  types.ts         |    53.2 |     87.5 |      52 |    53.2 | ...36-437,448-449 
 ...oks/test-utils |       0 |        0 |       0 |       0 |                   
  ...igWithHook.ts |       0 |        0 |       0 |       0 | 1-137             
 src/interfaces    |       0 |        0 |       0 |       0 |                   
  index.ts         |       0 |        0 |       0 |       0 |                   
  ....interface.ts |       0 |        0 |       0 |       0 |                   
 src/models        |    83.7 |    92.41 |    87.5 |    83.7 |                   
  hydration.ts     |    4.76 |      100 |       0 |    4.76 | 65-129,151-231    
  index.ts         |     100 |      100 |     100 |     100 |                   
  profiles.ts      |     100 |      100 |     100 |     100 |                   
  ...ntegration.ts |   95.34 |    89.74 |     100 |   95.34 | ...36-137,200-201 
  registry.ts      |    91.4 |    88.88 |      92 |    91.4 | ...72-273,392-403 
  schema.ts        |     100 |      100 |     100 |     100 |                   
  transformer.ts   |     100 |      100 |     100 |     100 |                   
 src/parsers       |   80.75 |    80.71 |   92.85 |   80.75 |                   
  ...CallParser.ts |   84.59 |     80.4 |    92.3 |   84.59 | ...09-810,813-814 
  ...rg-parsing.ts |   83.37 |    85.71 |   90.47 |   83.37 | ...23-425,501-502 
  ...ll-helpers.ts |   73.94 |     79.5 |   92.85 |   73.94 | ...07-508,514-535 
  ...rser-utils.ts |      76 |    73.33 |     100 |      76 | ...09-110,114-119 
 src/policy        |    72.9 |    76.19 |   88.46 |    72.9 |                   
  config.ts        |   68.06 |    77.19 |   86.36 |   68.06 | ...25,381,458-459 
  index.ts         |     100 |      100 |     100 |     100 |                   
  policy-engine.ts |     100 |      100 |     100 |     100 |                   
  ...cy-helpers.ts |   88.88 |    66.66 |     100 |   88.88 | 31-39             
  ...-stringify.ts |     100 |      100 |     100 |     100 |                   
  toml-loader.ts   |     100 |      100 |     100 |     100 |                   
  types.ts         |     100 |      100 |     100 |     100 |                   
  utils.ts         |     100 |      100 |     100 |     100 |                   
 src/prompt-config |   82.64 |    87.55 |   82.35 |   82.64 |                   
  ...lateEngine.ts |    94.7 |    89.24 |     100 |    94.7 | ...32-435,446-449 
  index.ts         |       0 |      100 |     100 |       0 | 5-41              
  prompt-cache.ts  |    99.1 |    97.43 |     100 |    99.1 | 236-237           
  ...-installer.ts |   83.82 |    81.87 |    92.3 |   83.82 | ...24-831,863-866 
  prompt-loader.ts |   90.93 |    92.56 |   89.65 |   90.93 | ...15-532,542-543 
  ...t-resolver.ts |   50.38 |       84 |      50 |   50.38 | ...22-423,428-527 
  ...pt-service.ts |   85.32 |    83.18 |   80.95 |   85.32 | ...28,545-552,583 
  ...delegation.ts |   93.54 |     90.9 |     100 |   93.54 | 34-35             
  types.ts         |     100 |      100 |     100 |     100 |                   
 ...onfig/defaults |   56.45 |    45.74 |   85.41 |   56.45 |                   
  core-defaults.ts |      48 |     41.5 |   78.57 |      48 | ...55,365,371-379 
  index.ts         |     100 |      100 |     100 |     100 |                   
  ...est-loader.ts |   81.81 |    79.31 |     100 |   81.81 | ...02-108,116-120 
  ...t-warnings.ts |    92.3 |    33.33 |     100 |    92.3 | 18-19             
  ...r-defaults.ts |   52.51 |    35.29 |   84.61 |   52.51 | ...24,334,340-345 
  ...e-defaults.ts |     100 |      100 |     100 |     100 |                   
  tool-defaults.ts |   56.05 |     42.3 |   84.61 |   56.05 | ...82-283,295-300 
 ...nfig/installer |   92.11 |    87.63 |   97.61 |   92.11 |                   
  ...resolution.ts |   96.63 |    92.45 |     100 |   96.63 | ...70-271,317-318 
  ...tory-utils.ts |   95.42 |    90.38 |     100 |   95.42 | ...14-117,154,175 
  file-writer.ts   |   78.78 |    73.68 |     100 |   78.78 | 31-32,51-52,69-78 
  ...operations.ts |   97.46 |    94.44 |     100 |   97.46 | 48-49             
  ...-expansion.ts |   82.67 |    81.81 |      90 |   82.67 | ...,70-71,165-172 
 ...onfig/resolver |   36.86 |    60.86 |   51.85 |   36.86 |                   
  ...ry-scanner.ts |    4.04 |      100 |       0 |    4.04 | ...98-159,163-207 
  fs-adapter.ts    |   39.06 |    66.66 |      50 |   39.06 | ...37,42-47,51-88 
  name-utils.ts    |   71.69 |       60 |   78.57 |   71.69 | ...03-204,208-218 
 src/prompts       |      30 |      100 |      25 |      30 |                   
  mcp-prompts.ts   |   28.57 |      100 |       0 |   28.57 | 11-15             
  ...t-registry.ts |   30.23 |      100 |   28.57 |   30.23 | ...43,49-56,69-74 
 src/recording     |    90.2 |    86.23 |   98.09 |    90.2 |                   
  ...ntegration.ts |    83.9 |       75 |     100 |    83.9 | ...31-132,143-144 
  ReplayEngine.ts  |   95.78 |    91.08 |     100 |   95.78 | ...37-342,502-509 
  ...nDiscovery.ts |   91.62 |    87.75 |     100 |   91.62 | ...44-345,360-361 
  ...ockManager.ts |   86.24 |    83.33 |     100 |   86.24 | ...18,233,260-261 
  ...ingService.ts |   82.97 |    92.45 |   95.65 |   82.97 | ...57,390-391,395 
  index.ts         |     100 |      100 |     100 |     100 |                   
  ...st-helpers.ts |   91.12 |       90 |   92.85 |   91.12 | 190-200,227-230   
  resumeSession.ts |   93.19 |    89.65 |     100 |   93.19 | ...10-215,246-247 
  ...eanupUtils.ts |      90 |    69.23 |     100 |      90 | ...40-241,267,280 
  ...Management.ts |   88.23 |    85.71 |     100 |   88.23 | 94,108-112        
  types.ts         |       0 |        0 |       0 |       0 |                   
 src/resources     |   95.23 |     92.3 |     100 |   95.23 |                   
  ...e-registry.ts |   95.23 |     92.3 |     100 |   95.23 | 34-35             
 src/runtime       |   82.53 |    86.69 |   81.25 |   82.53 |                   
  ...imeContext.ts |     100 |      100 |     100 |     100 |                   
  ...timeLoader.ts |   86.85 |    73.68 |   81.81 |   86.85 | ...14,218,244-247 
  ...ntimeState.ts |   95.66 |    90.78 |     100 |   95.66 | ...03-504,544-545 
  ...ionContext.ts |   83.54 |    93.33 |   71.42 |   83.54 | ...55-156,167-174 
  ...imeContext.ts |   76.04 |    98.14 |   62.06 |   76.04 | ...98-303,305-312 
  index.ts         |       0 |        0 |       0 |       0 | 1-19              
  ...imeContext.ts |      70 |       90 |     100 |      70 | 88-108            
  ...meAdapters.ts |   66.66 |    95.23 |    92.3 |   66.66 | 77-111            
  ...ateFactory.ts |   90.32 |    71.42 |     100 |   90.32 | ...79,102,112,125 
  ...imeAdapter.ts |   80.55 |    86.66 |   88.88 |   80.55 | 52-59,67-68,71-76 
 ...time/contracts |       0 |        0 |       0 |       0 |                   
  ...lureReason.ts |       0 |        0 |       0 |       0 | 1                 
  ...kContracts.ts |       0 |        0 |       0 |       0 | 1                 
  ...ningOutput.ts |       0 |        0 |       0 |       0 | 1                 
  ...torFactory.ts |       0 |        0 |       0 |       0 | 1                 
  RuntimeModel.ts  |       0 |        0 |       0 |       0 | 1                 
  ...meProvider.ts |       0 |        0 |       0 |       0 | 1                 
  ...oviderChat.ts |       0 |        0 |       0 |       0 | 1                 
  ...derManager.ts |       0 |        0 |       0 |       0 | 1                 
  ...eTokenizer.ts |       0 |        0 |       0 |       0 | 1                 
  ...zerFactory.ts |       0 |        0 |       0 |       0 | 1                 
  ...tryContext.ts |       0 |        0 |       0 |       0 | 1                 
  index.ts         |       0 |        0 |       0 |       0 | 1                 
 ...runtime/errors |   94.87 |    85.71 |   66.66 |   94.87 |                   
  ...viderError.ts |     100 |      100 |     100 |     100 |                   
  index.ts         |       0 |        0 |       0 |       0 | 1-14              
 src/safety        |     100 |      100 |     100 |     100 |                   
  index.ts         |     100 |      100 |     100 |     100 |                   
  pathValidator.ts |     100 |      100 |     100 |     100 |                   
 src/scheduler     |       0 |        0 |       0 |       0 |                   
  types.ts         |       0 |        0 |       0 |       0 | 1                 
 src/services      |   84.68 |    86.25 |   88.31 |   84.68 |                   
  ...ardService.ts |   94.23 |    93.75 |     100 |   94.23 | 70,74-75          
  ...utoTrigger.ts |   97.33 |    95.83 |     100 |   97.33 | 127-128           
  ...askManager.ts |   95.81 |    93.93 |     100 |   95.81 | 151-157,365-366   
  ...derService.ts |   98.98 |    97.05 |     100 |   98.98 | 173               
  ...y-analyzer.ts |   83.51 |    79.85 |   87.09 |   83.51 | ...13-641,647-648 
  ...extManager.ts |     100 |    96.29 |     100 |     100 | 63                
  ...nitization.ts |    98.7 |    96.87 |     100 |    98.7 | 172-173           
  ...eryService.ts |     100 |      100 |     100 |     100 |                   
  ...temService.ts |     100 |      100 |     100 |     100 |                   
  ...ts-service.ts |      50 |      100 |       0 |      50 | 41-42,48-49       
  gitService.ts    |   86.72 |    86.95 |      80 |   86.72 | ...34-137,141-145 
  index.ts         |       0 |        0 |       0 |       0 | 1-23              
  ...ionService.ts |   96.43 |    95.08 |     100 |   96.43 | ...27-428,438-439 
  ...pExecution.ts |   88.42 |    78.57 |   83.33 |   88.42 | 65-66,92-100      
  ...lCpHelpers.ts |   87.83 |    87.75 |     100 |   87.83 | ...91,194,253-259 
  ...ionService.ts |   71.55 |    85.71 |    62.5 |   71.55 | ...80-303,362-375 
  ...utionTypes.ts |       0 |        0 |       0 |       0 | 1                 
  ...lExitGuard.ts |     100 |      100 |     100 |     100 |                   
  ...utputUtils.ts |   95.65 |    95.23 |     100 |   95.65 | 34-35             
  ...rocessKill.ts |   88.57 |    88.88 |     100 |   88.57 | 38-41             
  ...yExecution.ts |   96.15 |    93.33 |     100 |   96.15 | 110-111,132-134   
  ...PtyHelpers.ts |   87.03 |    76.19 |    87.5 |   87.03 | ...20,151-152,208 
  ...yLifecycle.ts |   86.77 |    78.68 |   88.88 |   86.77 | ...92,297,354-356 
  shellPtyState.ts |       0 |        0 |       0 |       0 | 1                 
  ...xt-tracker.ts |   94.87 |    88.88 |   85.71 |   94.87 | 54-55             
  ...er-service.ts |       0 |        0 |       0 |       0 | 1-161             
  ...er-service.ts |   68.47 |    48.48 |      80 |   68.47 | ...85-289,311-314 
 ...rvices/history |   82.58 |    84.98 |    87.5 |   82.58 |                   
  ...Converters.ts |   83.29 |    81.96 |   81.81 |   83.29 | ...51-452,558-581 
  HistoryEvents.ts |       0 |        0 |       0 |       0 |                   
  ...oryService.ts |    85.3 |     88.6 |   86.79 |    85.3 | ...03-704,783-784 
  IContent.ts      |    89.7 |       76 |     100 |    89.7 | ...40,250-251,262 
  ...calToolIds.ts |   96.87 |    93.33 |     100 |   96.87 | 36-37             
  ...ebugLogger.ts |   62.41 |       68 |   85.71 |   62.41 | ...33-145,158-162 
  ...Validation.ts |     100 |      100 |     100 |     100 |                   
  ...CloneUtils.ts |   73.07 |    88.46 |   83.33 |   73.07 | ...98-101,106-118 
  ...textWindow.ts |   91.42 |    55.55 |     100 |   91.42 | 59,61-62          
  ...ryCuration.ts |     100 |      100 |     100 |     100 |                   
  ...EventTypes.ts |       0 |        0 |       0 |       0 |                   
  ...erPipeline.ts |     100 |      100 |     100 |     100 |                   
  historyQuery.ts  |   63.63 |       50 |     100 |   63.63 | 27-30             
  ...Estimation.ts |   44.68 |    82.14 |      50 |   44.68 | ...87-196,202-251 
  ...zerAdapter.ts |     100 |     87.5 |     100 |     100 | 73                
  ...malization.ts |    91.7 |    87.12 |     100 |    91.7 | ...26-431,477-485 
  ...oolPairing.ts |   98.59 |     87.5 |     100 |   98.59 | 103               
 src/skills        |   73.86 |       80 |   77.14 |   73.86 |                   
  skillLoader.ts   |   59.42 |    78.94 |   76.92 |   59.42 | ...16-351,363-373 
  skillManager.ts  |   89.68 |    80.88 |   77.27 |   89.68 | ...94-395,401-402 
 src/storage       |   98.69 |    96.87 |     100 |   98.69 |                   
  ...FileWriter.ts |     100 |      100 |     100 |     100 |                   
  ...nceService.ts |   98.65 |    96.87 |     100 |   98.65 | 291-292           
  ...ey-storage.ts |     100 |      100 |     100 |     100 |                   
  secure-store.ts  |     100 |      100 |     100 |     100 |                   
  sessionTypes.ts  |     100 |      100 |     100 |     100 |                   
 src/telemetry     |   15.45 |        0 |       0 |   15.45 |                   
  constants.ts     |     100 |      100 |     100 |     100 |                   
  ...-exporters.ts |       0 |        0 |       0 |       0 | 1-6               
  index.ts         |     100 |      100 |     100 |     100 |                   
  ...t.circular.ts |       0 |        0 |       0 |       0 | 1-17              
  ...t.circular.ts |       0 |        0 |       0 |       0 | 1-110             
  loggers.ts       |     100 |      100 |     100 |     100 |                   
  metrics.ts       |     100 |      100 |     100 |     100 |                   
  sdk.ts           |     100 |      100 |     100 |     100 |                   
  ...l-decision.ts |     100 |      100 |     100 |     100 |                   
  types.ts         |     100 |      100 |     100 |     100 |                   
  uiTelemetry.ts   |     100 |      100 |     100 |     100 |                   
 src/test-utils    |   53.21 |    58.82 |   20.86 |   53.21 |                   
  config.ts        |   83.07 |    85.71 |   15.21 |   83.07 | ...,91-96,173-176 
  index.ts         |       0 |        0 |       0 |       0 | 1-9               
  mock-tool.ts     |       0 |        0 |       0 |       0 | 1-159             
  ...aceContext.ts |       0 |        0 |       0 |       0 | 1-32              
  ...allOptions.ts |   81.62 |    51.61 |   54.54 |   81.62 | ...83,196,225-228 
  runtime.ts       |   47.03 |    33.33 |    8.82 |   47.03 | ...17-279,287-350 
  tools.ts         |   45.94 |    81.81 |   38.09 |   45.94 | ...15-227,230-237 
 src/todo          |   12.86 |      100 |       0 |   12.86 |                   
  todoFormatter.ts |   12.86 |      100 |       0 |   12.86 | ...03,206-219,222 
 src/tools         |   81.61 |    81.15 |      92 |   81.61 |                   
  ...ey-storage.ts |   81.61 |    81.15 |      92 |   81.61 | ...31-436,445-450 
 ...tools-adapters |   47.06 |    73.56 |   36.52 |   47.06 |                   
  ...iceAdapter.ts |   61.22 |    83.33 |    62.5 |   61.22 | ...52,55-60,65-68 
  ...iceAdapter.ts |   27.58 |      100 |      40 |   27.58 | 21-26,29-37,40-45 
  ...iceAdapter.ts |   22.58 |      100 |      40 |   22.58 | 18-25,28-43,46-47 
  ...iceAdapter.ts |      30 |      100 |       0 |      30 | 16-18,21-22,25-33 
  ...BusAdapter.ts |   73.07 |     90.9 |   81.81 |   73.07 | ...02-126,145-151 
  ...iceAdapter.ts |      60 |      100 |       0 |      60 | ...27,36-37,40-41 
  ...iceAdapter.ts |   53.84 |      100 |      40 |   53.84 | 17-18,21-22,26-27 
  ...ostAdapter.ts |   19.33 |      100 |    8.69 |   19.33 | ...25-241,244-246 
  ...iceAdapter.ts |   15.58 |      100 |       0 |   15.58 | ...9,82-84,87-102 
  ...iceAdapter.ts |   52.94 |      100 |       0 |   52.94 | ...18,21-22,25-26 
  ...iceAdapter.ts |    52.5 |    67.02 |   65.51 |    52.5 | ...43-886,891-894 
  ...iceAdapter.ts |   68.18 |       50 |      50 |   68.18 | 32-36,39-40       
  ...ostAdapter.ts |   30.18 |      100 |   13.04 |   30.18 | ...45-151,154-155 
  ...ageAdapter.ts |   46.15 |      100 |       0 |   46.15 | ...33,36-37,40-41 
  ...ostAdapter.ts |   67.74 |      100 |   54.54 |   67.74 | ...57,60-61,64-65 
  ...iceAdapter.ts |      50 |      100 |   66.66 |      50 | 19-23             
  ...iceHelpers.ts |    56.2 |       50 |      70 |    56.2 | ...90-191,195-196 
  index.ts         |     100 |      100 |     100 |     100 |                   
 src/utils         |   81.78 |    86.65 |   83.42 |   81.78 |                   
  LruCache.ts      |    82.6 |      100 |   71.42 |    82.6 | 29-30,33-34       
  ...grep-utils.ts |   98.03 |     87.5 |     100 |   98.03 | 137-138           
  asyncIterator.ts |   73.07 |    84.61 |   66.66 |   73.07 | ...71,75-86,93-94 
  bfsFileSearch.ts |   93.61 |    92.85 |     100 |   93.61 | 36-44             
  browser.ts       |    8.69 |      100 |       0 |    8.69 | 17-53             
  channel.ts       |     100 |      100 |     100 |     100 |                   
  ...pointUtils.ts |      95 |    91.66 |     100 |      95 | 142-149           
  debugLogger.ts   |     100 |      100 |     100 |     100 |                   
  delay.ts         |     100 |      100 |     100 |     100 |                   
  editor.ts        |   95.47 |    90.38 |    90.9 |   95.47 | ...38-239,241-242 
  ...entContext.ts |     100 |      100 |     100 |     100 |                   
  errorParsing.ts  |   92.12 |     87.5 |   95.65 |   92.12 | ...87,218,302-303 
  ...rReporting.ts |   82.35 |       75 |     100 |   82.35 | ...41-143,151-156 
  errors.ts        |   74.67 |    95.12 |      50 |   74.67 | ...27-128,189-213 
  events.ts        |   67.54 |      100 |    64.7 |   67.54 | ...41-346,352-355 
  exitCodes.ts     |     100 |      100 |     100 |     100 |                   
  ...sionLoader.ts |   80.98 |    63.88 |   92.85 |   80.98 | ...70-171,224-232 
  fetch.ts         |   24.32 |        0 |       0 |   24.32 | 23-28,32-86,89-90 
  fileDiffUtils.ts |   94.87 |     90.9 |     100 |   94.87 | 25-26             
  fileUtils.ts     |   93.83 |    90.06 |   95.23 |   93.83 | ...85,454,488-494 
  formatters.ts    |   18.18 |      100 |       0 |   18.18 | 8-16              
  ...eUtilities.ts |   91.28 |       90 |   93.75 |   91.28 | ...98-302,350-360 
  ...rStructure.ts |   95.63 |     94.8 |     100 |   95.63 | ...18-219,379-384 
  getPty.ts        |    12.5 |      100 |       0 |    12.5 | 38-53             
  ...noreParser.ts |   89.53 |       90 |   85.71 |   89.53 | ...30-231,236-250 
  ...ineChanges.ts |       0 |        0 |       0 |       0 | 1-348             
  gitUtils.ts      |   42.55 |    71.42 |      50 |   42.55 | 32-33,40-44,53-80 
  googleErrors.ts  |   77.01 |    73.21 |     100 |   77.01 | ...08,346-347,364 
  ...uotaErrors.ts |   94.94 |    87.25 |     100 |   94.94 | ...76-277,315-316 
  ide-trust.ts     |      60 |      100 |       0 |      60 | 14-15             
  ...rePatterns.ts |     100 |    96.55 |     100 |     100 | 257               
  ...ionManager.ts |     100 |    88.88 |     100 |     100 | 24                
  ...edit-fixer.ts |       0 |        0 |       0 |       0 | 1-156             
  ...yDiscovery.ts |   83.84 |    79.71 |   82.35 |   83.84 | ...42-743,757-768 
  ...tProcessor.ts |   97.19 |    91.86 |   94.44 |   97.19 | ...11-312,406-407 
  ...Inspectors.ts |       0 |        0 |       0 |       0 | 1-23              
  output-format.ts |      40 |      100 |      25 |      40 | ...53-154,164-185 
  package.ts       |     100 |      100 |     100 |     100 |                   
  ...erCoercion.ts |   80.89 |       80 |     100 |   80.89 | ...47-348,351-352 
  partUtils.ts     |   96.87 |    94.87 |     100 |   96.87 | 101-102           
  pathReader.ts    |   22.58 |      100 |       0 |   22.58 | ...22,28-29,41-60 
  paths.ts         |   84.35 |    85.54 |   78.94 |   84.35 | ...91-292,307-317 
  ...rDetection.ts |   52.05 |    78.94 |   83.33 |   52.05 | ...03-104,114-115 
  ...archTarget.ts |   89.58 |    69.23 |     100 |   89.58 | 45-47,65-66       
  retry.ts         |    83.7 |    86.85 |   92.59 |    83.7 | ...68-971,976-977 
  ...thResolver.ts |     100 |      100 |     100 |     100 |                   
  ...nStringify.ts |     100 |      100 |     100 |     100 |                   
  sanitization.ts  |     100 |      100 |     100 |     100 |                   
  ...aValidator.ts |   91.22 |    76.36 |     100 |   91.22 | ...51-352,368-379 
  ...r-launcher.ts |   90.29 |    81.81 |     100 |   90.29 | ...92,210,212-213 
  session.ts       |     100 |      100 |     100 |     100 |                   
  shell-parser.ts  |   24.51 |    47.82 |   36.84 |   24.51 | ...70-512,524-526 
  shell-utils.ts   |   84.86 |    89.65 |   96.15 |   84.86 | ...36-642,806-814 
  ...Completion.ts |   94.21 |    92.15 |     100 |   94.21 | 71-77             
  stdio.ts         |   83.83 |    56.52 |     100 |   83.83 | ...25-129,138-142 
  ...dleTimeout.ts |   97.59 |    93.54 |     100 |   97.59 | 59-60             
  summarizer.ts    |      98 |       90 |     100 |      98 | 92                
  ...emEncoding.ts |   94.96 |    88.88 |     100 |   94.96 | ...10,142-143,197 
  terminal.ts      |   34.09 |      100 |       0 |   34.09 | ...55,58-59,62-66 
  ...Serializer.ts |    98.2 |    92.75 |     100 |    98.2 | ...,98-99,181-183 
  testUtils.ts     |      50 |      100 |   33.33 |      50 | ...47,53-58,64-66 
  textUtils.ts     |    12.5 |      100 |       0 |    12.5 | 15-34             
  thoughtUtils.ts  |     100 |      100 |     100 |     100 |                   
  tool-utils.ts    |   68.64 |    77.77 |      80 |   68.64 | ...34-135,156-180 
  ...putLimiter.ts |   95.14 |    81.63 |     100 |   95.14 | ...5-66,78-79,113 
  unicodeUtils.ts  |     100 |      100 |     100 |     100 |                   
  ...untManager.ts |   88.52 |    86.48 |     100 |   88.52 | ...,83-88,104-106 
  version.ts       |     100 |      100 |     100 |     100 |                   
  ...aceContext.ts |   96.85 |    95.23 |    92.3 |   96.85 | 95-96,110-111     
 ...ils/filesearch |   89.81 |    91.52 |   94.59 |   89.81 |                   
  crawlCache.ts    |     100 |      100 |     100 |     100 |                   
  crawler.ts       |    84.9 |    85.71 |   66.66 |    84.9 | ...12-114,128-133 
  fileSearch.ts    |   86.48 |    89.21 |     100 |   86.48 | ...11-312,360-361 
  ignore.ts        |     100 |      100 |     100 |     100 |                   
  result-cache.ts  |     100 |      100 |     100 |     100 |                   
-------------------|---------|----------|---------|---------|-------------------

For detailed HTML reports, please see the 'coverage-reports-24.x-ubuntu-latest' artifact from the main CI run.

@acoliver

Copy link
Copy Markdown
Collaborator Author

@coderabbitai review

@coderabbitai

coderabbitai Bot commented Jun 30, 2026

Copy link
Copy Markdown
Contributor
✅ Action performed

Review finished.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 15

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
scripts/update-homebrew-formula.js (1)

220-252: 🩺 Stability & Availability | 🟡 Minor | ⚡ Quick win

Only swallow the expected git diff --cached --quiet exit code.

This catch currently treats every git diff --cached --quiet failure as “there are staged changes”, but Git uses nonzero exits for real errors too. On a genuine git failure, the script will continue into commit/push and mask the root cause.

Suggested fix
-    } catch {
+    } catch (error) {
+      if (error?.status !== 1) {
+        throw error;
+      }
       runCommand(`git commit -m "Update llxprt-code to ${version}"`, {
         cwd: tapDir,
         stdio: 'ignore',
       });
       console.log('Committed changes');
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@scripts/update-homebrew-formula.js` around lines 220 - 252, The nested
try/catch in commitAndPush currently treats any failure from runCommand('git
diff --cached --quiet') as “there are staged changes,” which can hide real Git
errors. Update the git diff check in commitAndPush to only ignore the expected
nonzero exit code for no staged differences, and rethrow or surface any other
failure before attempting git commit and git push. Use the existing runCommand
calls and the commitAndPush function as the place to apply the fix.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@scripts/check-lockfile.js`:
- Around line 58-63: The skip logic in check-lockfile is too broad because the
location check in the main filter also excludes ordinary dependencies nested
under workspace packages. Update the conditional around details.link and the
location checks so only linked workspace packages are skipped, and remove or
narrow the packages/*/node_modules/* exemption while keeping the existing
node_modules validation path for third-party packages such as
packages/foo/node_modules/bar.

In `@scripts/check-settings-boundary.js`:
- Around line 744-751: The export scan in the MOVED_SYMBOLS check stops at the
first match because it uses find(), so barrels that re-export multiple moved
symbols only report one violation. Update the logic around the MOVED_SYMBOLS
lookup to iterate over all symbols and collect every matching export line, using
collectExportLinesForSymbol for each match, then append all findings to
violations instead of selecting a single matchedSym.

In `@scripts/check-storage-import-boundary.mjs`:
- Around line 173-188: Restore ancestor-aware matching in
collectDynamicImportViolations() so dynamic imports are checked the same way as
scripts/preflight-import-inventory.mjs. Instead of only inspecting node.parent,
walk up through the enclosing ancestors (including the VariableDeclaration and
binding pattern around AwaitExpression) and collect identifiers from the full
containing structure before comparing against ctx.movedSymbols. Keep the
violation recording logic the same, but ensure destructured forms like const {
Storage } = await import('…') are detected consistently.

In `@scripts/codemod-import-type-annotations.mjs`:
- Around line 85-103: The import-extension logic in the codemod can incorrectly
try to merge named type imports into a namespace import declaration, which
`addNamedImport` cannot handle. Update the existing-declaration lookup in the
codemod entry point to ignore `import * as ns from ...` shapes, or detect that
the only matching declaration is a namespace import and then emit a separate
type-only import instead. Keep the fix localized around the
`existing`/`addNamedImport` flow so `import type` additions only target
compatible declarations.

In `@scripts/codemods/apply-suggestions.mjs`:
- Around line 61-69: The current apply-suggestions flow only looks at
suggestions[0], so it can miss later fixes and choose an overlap-prone edit
based on the first suggestion alone. Update the selection logic in
apply-suggestions.mjs to consider all suggestion entries from each ESLint
message, flatten them before sorting by fix.range[0], and then apply the
highest-range fix using the existing readFileSync/writeFileSync replacement
flow.

In `@scripts/codemods/nce-try-unreachable.mjs`:
- Around line 93-107: The rewrite in nce-try-unreachable.mjs is reusing
catchName as a top-level let binding, which can collide with an existing name in
the surrounding scope and break parsing. Update the codemod logic around the
replacement string to capture the thrown value in a fresh temporary variable,
then wrap the preserved catch body in a new block that reintroduces the original
catchName only inside that block. Keep the fix localized to the replacement
generation near keptTryStmts, keptCatchStmts, and catchName.

In `@scripts/lint.js`:
- Around line 214-217: The fallback in the changed-files retrieval logic still
exits before returning the empty array, so adjust the catch path in the function
handling the HEAD~1 fallback to degrade gracefully instead of hard-failing. In
the block around the second catch in scripts/lint.js, remove the premature
process.exit(1) and let the function return [] when both diff attempts fail,
keeping the existing console.error context in place.

In `@scripts/local_telemetry.js`:
- Around line 129-132: The child-process error handlers are being attached too
late in local telemetry startup, so an immediate spawn failure can fire before
the listeners exist. Move the call to registerProcessErrorHandlers(processes)
earlier in the startup flow in local_telemetry.js, before any waitForPort(...)
awaits and ideally right after starting the Jaeger/Collector processes in
startJaeger/startCollector, so ENOENT/EACCES and similar failures are captured
by the intended diagnostics.

In `@scripts/preflight-import-inventory.mjs`:
- Around line 177-182: Namespace imports are being recorded as a wildcard
placeholder in preflight-import-inventory, which later gets dropped and causes
namespace-member consumers to disappear from the inventory. Update the
namespace-import branch in the import scanning logic to record the actual
accessed moved symbols for importClause.namedBindings instead of only adding '*'
via ctx.addImport, so deduplicateImports() retains ns.Member-style consumers and
stays aligned with scripts/check-storage-import-boundary.mjs.

In `@scripts/telemetry_gcp.js`:
- Around line 103-108: The collector process `error` listener is being attached
too late in `startCollector()`-related flow, so an immediate `spawn()` failure
can fire before the handler exists. Move registration of the
`state.collectorProcess.on('error', ...)` handler into `startCollector()`
itself, alongside the process creation logic, so failures are always caught and
logged with collector diagnostics. Apply the same change anywhere else the
collector is started, including the other start/teardown path referenced by the
telemetry GCP code.

In `@scripts/tests/scripts-quality-coverage.test.ts`:
- Around line 47-116: The regression tests in
scripts/tests/scripts-quality-coverage.test.ts only assert severities, so they
can miss policy drift in the actual rule configuration. Update the affected
cases around effectiveRulesFor to also verify the configured options/off states
for the rules named in the suite, especially complexity, max-lines,
max-lines-per-function, and sonarjs/cognitive-complexity, rather than just
checking for 2/0. In the guard-parser coverage for
scripts/check-eslint-guard.js, add assertions that the documented carve-outs for
sonarjs/slow-regex and sonarjs/too-many-break-or-continue-in-loop are explicitly
disabled while the non-structural rules still apply.

In `@scripts/tmux-harness-io.mjs`:
- Around line 28-46: `runTmux()` is still using the default `spawnSync` buffer,
which can overflow on large pane captures and trigger `ENOBUFS`; update the
`spawnSync` call in `runTmux` to explicitly allow a much larger buffer or switch
to a non-buffered capture approach. Keep the change localized to the `runTmux`
helper in `scripts/tmux-harness-io.mjs`, and make sure the
`capture-pane`/`captureScrollback` path can handle the large history sizes
already enabled by `scripts/tmux-harness.js`.

In `@scripts/tmux-harness-steps.mjs`:
- Around line 332-343: The "always" branch in sendApprovalChoice is too fragile
because it assumes the desired option is always one row below the current
selection after only checking visibility. Update this logic to select "Yes,
allow always" by label the same way executeSelectToolOptionStep() does, using
the visible screen text from captureScreenWithFallback/sessionName and sendKeys
to move directly to the matching option instead of hardcoding a Down press. Keep
the existing visibility guard, but ensure the navigation targets the labeled
option rather than relying on dialog ordering.

In `@scripts/update-homebrew-formula.js`:
- Around line 125-151: The version check in resolveVersion is too permissive
because it only matches a prefix, so malformed values like 1.2.3foo can pass.
Tighten the validation in resolveVersion so the non-prerelease path requires the
entire string to match X.Y.Z exactly, while still preserving the existing
prerelease skip when version.includes('-') is true. Update the regex or
equivalent check in resolveVersion to anchor both ends before returning the
version.

In `@scripts/version.js`:
- Around line 84-87: The sandboxImageUri tag rewrite is replacing everything
after the first colon, which breaks registry host:port values like in
rootPackageJson and the manifest update path. Update the version rewrite logic
in scripts/version.js to target only the final image tag separator, so host
ports are preserved while the tag is changed to newVersion. Make the same fix in
both manifest update spots that feed config.sandboxImageUri, and ensure the
resulting value is still what packages/cli/src/config/sandboxConfig.ts expects
at runtime.

---

Outside diff comments:
In `@scripts/update-homebrew-formula.js`:
- Around line 220-252: The nested try/catch in commitAndPush currently treats
any failure from runCommand('git diff --cached --quiet') as “there are staged
changes,” which can hide real Git errors. Update the git diff check in
commitAndPush to only ignore the expected nonzero exit code for no staged
differences, and rethrow or surface any other failure before attempting git
commit and git push. Use the existing runCommand calls and the commitAndPush
function as the place to apply the fix.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: ffa07e29-e90f-4d79-8192-f75fbbc41be4

📥 Commits

Reviewing files that changed from the base of the PR and between dee17b7 and f7715ca.

📒 Files selected for processing (50)
  • eslint.config.js
  • scripts/aggregate_evals.js
  • scripts/benchmark/responses_vs_chat.ts
  • scripts/bind-release-deps.js
  • scripts/check-build-status.js
  • scripts/check-eslint-guard.js
  • scripts/check-lockfile.js
  • scripts/check-settings-boundary.js
  • scripts/check-storage-import-boundary.mjs
  • scripts/check-storage-package-cycle.mjs
  • scripts/clean.js
  • scripts/codemod-import-type-annotations.mjs
  • scripts/codemods/apply-suggestions.mjs
  • scripts/codemods/nce-try-unreachable.mjs
  • scripts/codemods/no-conditional-expect.mjs
  • scripts/codemods/pse-disable.mjs
  • scripts/codemods/pse-fix.mjs
  • scripts/deflake.js
  • scripts/generate-keybindings-doc.ts
  • scripts/generate-settings-doc.ts
  • scripts/generate-settings-schema.ts
  • scripts/get-release-version.js
  • scripts/issue2208-tui-repro.mjs
  • scripts/lint.js
  • scripts/local_telemetry.js
  • scripts/ollama-logging-proxy.cjs
  • scripts/preflight-import-inventory.mjs
  • scripts/preinstall.cjs
  • scripts/sandbox_command.js
  • scripts/start.js
  • scripts/telemetry_gcp.js
  • scripts/telemetry_utils.js
  • scripts/test-acp-integration.mjs
  • scripts/test-mcp-server.js
  • scripts/tests/bun-workspaces.test.ts
  • scripts/tests/eslint-guard.test.js
  • scripts/tests/interactive-ui.test.ts
  • scripts/tests/loading-indicator-nowrap.test.js
  • scripts/tests/providers-directive-guard.test.js
  • scripts/tests/publish-integrity.test.ts
  • scripts/tests/scripts-quality-coverage.test.ts
  • scripts/tests/scrollback-regression.test.js
  • scripts/tests/ui-image-harness.test.js
  • scripts/tmux-harness-helpers.mjs
  • scripts/tmux-harness-io.mjs
  • scripts/tmux-harness-steps.mjs
  • scripts/tmux-harness.js
  • scripts/update-homebrew-formula.js
  • scripts/verify-bun-workspace-links.mjs
  • scripts/version.js
📜 Review details
⚠️ CI failures not shown inline (2)

GitHub Actions: LLxprt Code CI / 7_Lint (GitHub Actions).txt: Apply strict code-quality lint rules to scripts tree (Fixes #2282)

Conclusion: failure

View job details

##[group]Run actionlint \
 �[36;1mactionlint \�[0m
 �[36;1m  -color \�[0m
 �[36;1m  -format "{{range \$err := .}}::error file={{\$err.Filepath}},line={{\$err.Line}},col={{\$err.Column}}::{{\$err.Filepath}}@{{\$err.Line}} {{\$err.Message}}%0A\`\`\`%0A{{replace \$err.Snippet \"\\\\n\" \"%0A\"}}%0A\`\`\`\\n{{end}}" \�[0m

GitHub Actions: LLxprt Code CI / Lint (GitHub Actions): Apply strict code-quality lint rules to scripts tree (Fixes #2282)

Conclusion: failure

View job details

##[group]Run actionlint \
 �[36;1mactionlint \�[0m
 �[36;1m  -color \�[0m
 �[36;1m  -format "{{range \$err := .}}::error file={{\$err.Filepath}},line={{\$err.Line}},col={{\$err.Column}}::{{\$err.Filepath}}@{{\$err.Line}} {{\$err.Message}}%0A\`\`\`%0A{{replace \$err.Snippet \"\\\\n\" \"%0A\"}}%0A\`\`\`\\n{{end}}" \�[0m
🧰 Additional context used
🧠 Learnings (9)
📚 Learning: 2026-06-10T18:18:09.253Z
Learnt from: acoliver
Repo: vybestack/llxprt-code PR: 1983
File: packages/policy/src/policy-engine.ts:263-263
Timestamp: 2026-06-10T18:18:09.253Z
Learning: In this repository, the ESLint rule `sonarjs/too-many-break-or-continue-in-loop` is configured to allow at most 1 `break`/`continue` per loop (it is stricter than the SonarJS default). During code review, treat `// eslint-disable-next-line sonarjs/too-many-break-or-continue-in-loop` on loops with 2+ `break`/`continue` as intentional and do not suggest removing or changing those directives. Only consider a change if the rule is violated without an appropriate intentional disable.

Applied to files:

  • scripts/check-build-status.js
  • scripts/tests/interactive-ui.test.ts
  • scripts/test-mcp-server.js
  • scripts/tests/ui-image-harness.test.js
  • scripts/tests/loading-indicator-nowrap.test.js
  • scripts/tests/scripts-quality-coverage.test.ts
  • scripts/tests/providers-directive-guard.test.js
  • scripts/clean.js
  • scripts/deflake.js
  • scripts/generate-keybindings-doc.ts
  • scripts/get-release-version.js
  • scripts/start.js
  • scripts/check-lockfile.js
  • scripts/tests/scrollback-regression.test.js
  • scripts/check-eslint-guard.js
  • scripts/generate-settings-doc.ts
  • scripts/benchmark/responses_vs_chat.ts
  • scripts/sandbox_command.js
  • scripts/telemetry_utils.js
  • scripts/version.js
  • eslint.config.js
  • scripts/generate-settings-schema.ts
  • scripts/tests/publish-integrity.test.ts
  • scripts/aggregate_evals.js
  • scripts/lint.js
  • scripts/local_telemetry.js
  • scripts/tests/eslint-guard.test.js
  • scripts/tests/bun-workspaces.test.ts
  • scripts/bind-release-deps.js
  • scripts/telemetry_gcp.js
  • scripts/update-homebrew-formula.js
  • scripts/tmux-harness.js
  • scripts/check-settings-boundary.js
📚 Learning: 2026-06-30T06:12:11.602Z
Learnt from: acoliver
Repo: vybestack/llxprt-code PR: 2260
File: scripts/tests/publish-integrity.test.ts:124-166
Timestamp: 2026-06-30T06:12:11.602Z
Learning: Do not add (or recommend adding) inline ESLint suppression directives such as `/* eslint-disable */`, `/* eslint-enable */`, or similar comment-based suppressions. This repository’s policy (`#2079/`#2080) bans inline ESLint suppressions and it is mechanically enforced by `scripts/check-eslint-guard.js` in the `lint:eslint-guard` CI job. During review, only suggest inline ESLint suppression if the author explicitly states the policy has changed (i.e., the CI guard would no longer block it).

Applied to files:

  • scripts/check-build-status.js
  • scripts/tests/interactive-ui.test.ts
  • scripts/test-mcp-server.js
  • scripts/tests/ui-image-harness.test.js
  • scripts/tests/loading-indicator-nowrap.test.js
  • scripts/tests/scripts-quality-coverage.test.ts
  • scripts/tests/providers-directive-guard.test.js
  • scripts/clean.js
  • scripts/deflake.js
  • scripts/generate-keybindings-doc.ts
  • scripts/get-release-version.js
  • scripts/start.js
  • scripts/check-lockfile.js
  • scripts/tests/scrollback-regression.test.js
  • scripts/check-eslint-guard.js
  • scripts/generate-settings-doc.ts
  • scripts/benchmark/responses_vs_chat.ts
  • scripts/sandbox_command.js
  • scripts/telemetry_utils.js
  • scripts/version.js
  • eslint.config.js
  • scripts/generate-settings-schema.ts
  • scripts/tests/publish-integrity.test.ts
  • scripts/aggregate_evals.js
  • scripts/lint.js
  • scripts/local_telemetry.js
  • scripts/tests/eslint-guard.test.js
  • scripts/tests/bun-workspaces.test.ts
  • scripts/bind-release-deps.js
  • scripts/telemetry_gcp.js
  • scripts/update-homebrew-formula.js
  • scripts/tmux-harness.js
  • scripts/check-settings-boundary.js
📚 Learning: 2026-02-06T15:52:42.315Z
Learnt from: acoliver
Repo: vybestack/llxprt-code PR: 1305
File: scripts/generate-keybindings-doc.ts:1-5
Timestamp: 2026-02-06T15:52:42.315Z
Learning: In reviews of vybestack/llxprt-code, do not suggest changing existing copyright headers from 'Google LLC' to 'Vybestack LLC' for files that originated from upstream. Preserve upstream copyrights in files that came from upstream, and only apply 'Vybestack LLC' copyright on newly created, original LLxprt files. If a file is clearly LLxprt-original, it may carry the Vybestack header; if it is upstream-originated, keep the original sponsor header.

Applied to files:

  • scripts/tests/interactive-ui.test.ts
  • scripts/tests/scripts-quality-coverage.test.ts
  • scripts/generate-keybindings-doc.ts
  • scripts/generate-settings-doc.ts
  • scripts/benchmark/responses_vs_chat.ts
  • scripts/generate-settings-schema.ts
  • scripts/tests/publish-integrity.test.ts
  • scripts/tests/bun-workspaces.test.ts
📚 Learning: 2026-06-10T18:18:08.545Z
Learnt from: acoliver
Repo: vybestack/llxprt-code PR: 1983
File: packages/policy/src/policy-engine.ts:156-156
Timestamp: 2026-06-10T18:18:08.545Z
Learning: In this repo, ESLint rule `sonarjs/too-many-break-or-continue-in-loop` is set to fail loops that contain more than 1 `break`/`continue` total per loop (or both present). When a loop violates this (e.g., it contains a `break` and a `continue`, or has multiple `break`s/`continue`s), the code will not lint unless the violating line includes `// eslint-disable-next-line sonarjs/too-many-break-or-continue-in-loop`. In code reviews, do not suggest removing these `eslint-disable-next-line` directives (use refactoring only if it eliminates the underlying >1 break/continue pattern).

Applied to files:

  • scripts/tests/interactive-ui.test.ts
  • scripts/tests/scripts-quality-coverage.test.ts
  • scripts/generate-keybindings-doc.ts
  • scripts/generate-settings-doc.ts
  • scripts/benchmark/responses_vs_chat.ts
  • scripts/generate-settings-schema.ts
  • scripts/tests/publish-integrity.test.ts
  • scripts/tests/bun-workspaces.test.ts
📚 Learning: 2026-06-30T04:44:54.618Z
Learnt from: acoliver
Repo: vybestack/llxprt-code PR: 2260
File: scripts/tests/detect-installer.test.ts:11-19
Timestamp: 2026-06-30T04:44:54.618Z
Learning: For files under `scripts/tests/` (including `scripts/tests/vitest.config.ts`), note that the Vitest ESM test setup shims `__dirname` and `__filename`. Therefore, `resolve(__dirname, ...)` (and similar use of `__dirname`) should not be flagged as an ESM incompatibility by itself during code review.

Applied to files:

  • scripts/tests/interactive-ui.test.ts
  • scripts/tests/scripts-quality-coverage.test.ts
  • scripts/tests/publish-integrity.test.ts
  • scripts/tests/bun-workspaces.test.ts
📚 Learning: 2026-06-30T06:11:21.810Z
Learnt from: acoliver
Repo: vybestack/llxprt-code PR: 2260
File: scripts/tests/publish-integrity.test.ts:124-166
Timestamp: 2026-06-30T06:11:21.810Z
Learning: When reviewing files under scripts/tests/**/*.ts (e.g., scripts/tests/publish-integrity.test.ts), don’t suggest SonarJS inline disables based solely on the fact that the SonarJS rule is present in the repo’s root ESLint flat config. In vybestack/llxprt-code, the SonarJS TypeScript rule block is scoped to packages/*/src/**/*.{ts,tsx}, and the Vitest override to packages/*/src/**/*.{test,spec}.{ts,tsx}; scripts/tests/**/*.ts files don’t receive those blocks by default. Only recommend inline disables if SonarJS rules are actually enabled for that specific file and a violation is reported there (e.g., via the ESLint run/diagnostics).

Applied to files:

  • scripts/tests/interactive-ui.test.ts
  • scripts/tests/scripts-quality-coverage.test.ts
  • scripts/tests/publish-integrity.test.ts
  • scripts/tests/bun-workspaces.test.ts
📚 Learning: 2026-06-30T04:44:57.052Z
Learnt from: acoliver
Repo: vybestack/llxprt-code PR: 2260
File: scripts/tests/verify-bun-workspace-links.test.ts:93-96
Timestamp: 2026-06-30T04:44:57.052Z
Learning: For test files under `scripts/tests` that use real filesystem symlinks (e.g., `symlinkSync` into `node_modules/<name>` or other symlink-based fixtures), avoid running them on unprivileged Windows because they commonly throw `EPERM`. Guard these tests with `describe.skipIf(process.platform === 'win32')` (using the repo’s existing `describe.skipIf` helper) to keep local Windows developer runs consistent with the sibling script-harness suites.

Applied to files:

  • scripts/tests/interactive-ui.test.ts
  • scripts/tests/scripts-quality-coverage.test.ts
  • scripts/tests/publish-integrity.test.ts
  • scripts/tests/bun-workspaces.test.ts
📚 Learning: 2026-06-30T04:44:57.052Z
Learnt from: acoliver
Repo: vybestack/llxprt-code PR: 2260
File: scripts/tests/verify-bun-workspace-links.test.ts:93-96
Timestamp: 2026-06-30T04:44:57.052Z
Learning: When reviewing tests under `scripts/tests`, don’t treat Windows-specific skips/failures in `npm run test:scripts` as a CI requirement. The repo’s CI (`.github/workflows/ci.yml` and `.github/workflows/nightly.yml`) only runs the relevant script-test invocation on `macos-latest` (`if: matrix.os == 'macos-latest'`), so Windows compatibility measures should be interpreted as local-dev support rather than something that must be fixed to satisfy CI.

Applied to files:

  • scripts/tests/interactive-ui.test.ts
  • scripts/tests/scripts-quality-coverage.test.ts
  • scripts/tests/publish-integrity.test.ts
  • scripts/tests/bun-workspaces.test.ts
📚 Learning: 2026-03-16T20:36:45.254Z
Learnt from: acoliver
Repo: vybestack/llxprt-code PR: 1733
File: eslint.config.js:0-0
Timestamp: 2026-03-16T20:36:45.254Z
Learning: In vybestack/llxprt-code, the global baseline for no-console is intentionally set to 'warn' across core/cli packages. Do not flag this in reviews or suggest removing it. Entry points or CLI-specific configurations may override this to 'off' in a later pass when the rule is tightened to 'error'. Treat this as a deliberate, repository-wide baseline, and only flag console usage if there is an explicit deviation from the stated intent or an automation gate indicates improper override.

Applied to files:

  • eslint.config.js
🪛 ast-grep (0.44.0)
scripts/tests/ui-image-harness.test.js

[warning] Importing child_process exposes a command-execution surface; ensure any command/argument built from input is validated, and prefer execFile/spawn with an argument array over exec.
Context: import { spawnSync } from 'node:child_process';
Note: [CWE-78] Improper Neutralization of Special Elements used in an OS Command ('OS Command Injection').

(detect-child-process)

scripts/tests/scripts-quality-coverage.test.ts

[warning] 7-7: Importing child_process exposes a command-execution surface; ensure any command/argument built from input is validated, and prefer execFile/spawn with an argument array over exec.
Context: import { execFileSync } from 'node:child_process';
Note: [CWE-78] Improper Neutralization of Special Elements used in an OS Command ('OS Command Injection').

(detect-child-process-typescript)

scripts/local_telemetry.js

[warning] 125-125: Filesystem path is not a string literal; a request-/variable-derived path can enable path traversal. Validate and normalize the path before use.
Context: fs.writeFileSync(OTEL_CONFIG_FILE, OTEL_CONFIG_CONTENT)
Note: [CWE-22] Improper Limitation of a Pathname to a Restricted Directory ('Path Traversal').

(detect-non-literal-fs-filename)


[warning] 155-155: Filesystem path is not a string literal; a request-/variable-derived path can enable path traversal. Validate and normalize the path before use.
Context: fs.readFileSync(JAEGER_LOG_FILE, 'utf-8')
Note: [CWE-22] Improper Limitation of a Pathname to a Restricted Directory ('Path Traversal').

(detect-non-literal-fs-filename)


[warning] 181-181: Filesystem path is not a string literal; a request-/variable-derived path can enable path traversal. Validate and normalize the path before use.
Context: fs.readFileSync(OTEL_LOG_FILE, 'utf-8')
Note: [CWE-22] Improper Limitation of a Pathname to a Restricted Directory ('Path Traversal').

(detect-non-literal-fs-filename)

scripts/telemetry_gcp.js

[warning] 99-99: Filesystem path is not a string literal; a request-/variable-derived path can enable path traversal. Validate and normalize the path before use.
Context: fs.writeFileSync(OTEL_CONFIG_FILE, getOtelConfigContent(projectId))
Note: [CWE-22] Improper Limitation of a Pathname to a Restricted Directory ('Path Traversal').

(detect-non-literal-fs-filename)


[warning] 176-176: Filesystem path is not a string literal; a request-/variable-derived path can enable path traversal. Validate and normalize the path before use.
Context: fs.readFileSync(OTEL_LOG_FILE, 'utf-8')
Note: [CWE-22] Improper Limitation of a Pathname to a Restricted Directory ('Path Traversal').

(detect-non-literal-fs-filename)

scripts/check-settings-boundary.js

[warning] 408-408: Detects non-literal values in regular expressions
Context: new RegExp(\\b${sym}\\b)
Note: [CWE-1333] Inefficient Regular Expression Complexity (ReDoS via non-literal RegExp).

(detect-non-literal-regexp)


[warning] 721-721: Detects non-literal values in regular expressions
Context: new RegExp(\\b${sym}\\b)
Note: [CWE-1333] Inefficient Regular Expression Complexity (ReDoS via non-literal RegExp).

(detect-non-literal-regexp)


[warning] 744-744: Detects non-literal values in regular expressions
Context: new RegExp(export.*\\b${sym}\\b)
Note: [CWE-1333] Inefficient Regular Expression Complexity (ReDoS via non-literal RegExp).

(detect-non-literal-regexp)

🪛 OpenGrep (1.23.0)
scripts/telemetry_utils.js

[ERROR] 234-234: Dynamic command passed to child_process.exec/execSync. Use child_process.execFile or spawn with an argument array instead.

(coderabbit.command-injection.exec-js)


[ERROR] 236-236: Dynamic command passed to child_process.exec/execSync. Use child_process.execFile or spawn with an argument array instead.

(coderabbit.command-injection.exec-js)

scripts/lint.js

[ERROR] 264-264: Dynamic command passed to child_process.exec/execSync. Use child_process.execFile or spawn with an argument array instead.

(coderabbit.command-injection.exec-js)

🔇 Additional comments (36)
eslint.config.js (1)

499-649: LGTM!

scripts/tmux-harness-helpers.mjs (1)

14-209: LGTM!

scripts/tmux-harness-io.mjs (1)

49-268: LGTM!

scripts/tmux-harness-steps.mjs (1)

44-331: LGTM!

Also applies to: 346-464

scripts/tmux-harness.js (1)

20-82: LGTM!

scripts/check-build-status.js (1)

32-32: LGTM!

scripts/check-storage-package-cycle.mjs (1)

44-45: LGTM!

scripts/tests/scrollback-regression.test.js (1)

24-25: LGTM!

scripts/tests/providers-directive-guard.test.js (1)

65-89: LGTM!

Also applies to: 106-106

scripts/tests/publish-integrity.test.ts (1)

109-166: LGTM!

Also applies to: 183-186, 270-322, 355-361

scripts/tests/ui-image-harness.test.js (1)

15-21: LGTM!

scripts/clean.js (1)

40-51: LGTM!

scripts/generate-keybindings-doc.ts (1)

155-171: LGTM!

scripts/generate-settings-doc.ts (1)

82-82: LGTM!

Also applies to: 130-133

scripts/generate-settings-schema.ts (1)

157-175: LGTM!

Also applies to: 213-239

scripts/get-release-version.js (1)

62-62: LGTM!

scripts/issue2208-tui-repro.mjs (1)

54-56: LGTM!

scripts/test-mcp-server.js (1)

86-88: LGTM!

scripts/version.js (1)

35-37: LGTM!

scripts/tests/bun-workspaces.test.ts (1)

353-368: LGTM!

Also applies to: 392-428, 530-534, 547-549, 568-570, 594-594

scripts/tests/eslint-guard.test.js (1)

45-72: LGTM!

scripts/tests/interactive-ui.test.ts (1)

48-49: LGTM!

scripts/tests/loading-indicator-nowrap.test.js (1)

30-31: LGTM!

scripts/check-eslint-guard.js (1)

2055-2055: LGTM!

Also applies to: 2596-2603, 2934-2941

scripts/aggregate_evals.js (1)

38-41: LGTM!

Also applies to: 50-84, 109-113, 121-170, 214-217, 236-256, 313-316, 357-361

scripts/bind-release-deps.js (1)

77-82: LGTM!

Also applies to: 94-161, 176-177, 188-205, 217-226

scripts/update-homebrew-formula.js (1)

156-179: LGTM!

Also applies to: 184-215, 257-282

scripts/verify-bun-workspace-links.mjs (1)

95-97: LGTM!

Also applies to: 99-153, 155-227

scripts/deflake.js (1)

53-67: LGTM!

Also applies to: 106-107

scripts/preinstall.cjs (1)

64-80: LGTM!

Also applies to: 105-108

scripts/test-acp-integration.mjs (1)

28-28: LGTM!

Also applies to: 69-125

scripts/telemetry_utils.js (1)

162-239: LGTM!

Also applies to: 266-286

scripts/ollama-logging-proxy.cjs (1)

21-97: LGTM!

Also applies to: 100-112, 123-123, 136-146, 155-155

scripts/start.js (1)

39-98: LGTM!

scripts/sandbox_command.js (1)

62-94: LGTM!

Also applies to: 138-148

scripts/benchmark/responses_vs_chat.ts (1)

72-122: LGTM!

Also applies to: 147-250

Comment thread scripts/check-lockfile.js
Comment thread scripts/check-settings-boundary.js
Comment thread scripts/check-storage-import-boundary.mjs
Comment thread scripts/codemod-import-type-annotations.mjs
Comment thread scripts/codemods/apply-suggestions.mjs
Comment thread scripts/tests/scripts-quality-coverage.test.ts Outdated
Comment thread scripts/tmux-harness-io.mjs
Comment thread scripts/tmux-harness-steps.mjs
Comment thread scripts/update-homebrew-formula.js
Comment thread scripts/version.js Outdated
)

The durable root TS-suppression scan (scanRootTypeScriptSuppressions)
walked the entire repo via listCheckedSourceFiles, which only skips
generated directories. Local vendored upstream repos under research/
(gitignored) produced 53 false-positive violations in dirty worktrees,
causing lint:eslint-guard and its test to fail locally.

Add listGitTrackedCheckedSourceFiles: it runs git ls-files scoped to
rootDir and filters the enumerated checked-source set to tracked files.
When rootDir is not a git repository (temporary test fixtures via
mkdtempSync) git exits non-zero and the function falls back to
listCheckedSourceFiles, preserving all existing temp-dir test behaviour.

Also harden findings from the correlated review of #2282:
- Narrow processChar's data contract in publish-integrity.test.ts to
  return only the emitted chunk instead of threading the full
  accumulated output through every per-character call.
- Assert the motivating rule (sonarjs/too-many-break-or-continue-in-loop)
  and the intentional type-aware gap (no-floating-promises) in the
  scripts quality-coverage test.
- Add two guard tests proving untracked files are ignored while tracked
  files are still flagged.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@scripts/check-eslint-guard.js`:
- Around line 4111-4124: Stop falling back to listCheckedSourceFiles(rootDir)
when git(['ls-files'], rootDir) succeeds but produces no tracked files; in
listGitTrackedCheckedSourceFiles, return the tracked-filtered result directly
and only use the fallback in the catch path. Add a regression in
scripts/tests/eslint-guard.test.js around scanRootTypeScriptSuppressions() that
covers an initialized repo/root with zero tracked checked sources (or only
untracked ones) and asserts the result is empty.

In `@scripts/tests/scripts-quality-coverage.test.ts`:
- Around line 100-110: The test currently checks a .js scripts path, so it can
miss a regression where type-aware `@typescript-eslint` rules are enabled only for
scripts/**/*.ts. Update the assertion in the scripts-quality-coverage test to
use the representative .ts scripts file path already used elsewhere in the
suite, and keep the severity checks on effectiveRulesFor and severity so the
contract for type-aware rules is actually enforced.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: 0a01dc27-10b9-4b0b-b7dc-0ac453546fd8

📥 Commits

Reviewing files that changed from the base of the PR and between f7715ca and 5d37a29.

📒 Files selected for processing (4)
  • scripts/check-eslint-guard.js
  • scripts/tests/eslint-guard.test.js
  • scripts/tests/publish-integrity.test.ts
  • scripts/tests/scripts-quality-coverage.test.ts
📜 Review details
⏰ Context from checks skipped due to timeout. (7)
  • GitHub Check: E2E Test (Linux) - sandbox:docker
  • GitHub Check: E2E Test (Linux) - sandbox:none
  • GitHub Check: E2E Test (macOS)
  • GitHub Check: CodeQL
  • GitHub Check: Lint (Javascript)
  • GitHub Check: Interactive UI (tmux)
  • GitHub Check: Run LLxprt review
🧰 Additional context used
🧠 Learnings (8)
📚 Learning: 2026-02-06T15:52:42.315Z
Learnt from: acoliver
Repo: vybestack/llxprt-code PR: 1305
File: scripts/generate-keybindings-doc.ts:1-5
Timestamp: 2026-02-06T15:52:42.315Z
Learning: In reviews of vybestack/llxprt-code, do not suggest changing existing copyright headers from 'Google LLC' to 'Vybestack LLC' for files that originated from upstream. Preserve upstream copyrights in files that came from upstream, and only apply 'Vybestack LLC' copyright on newly created, original LLxprt files. If a file is clearly LLxprt-original, it may carry the Vybestack header; if it is upstream-originated, keep the original sponsor header.

Applied to files:

  • scripts/tests/scripts-quality-coverage.test.ts
  • scripts/tests/publish-integrity.test.ts
📚 Learning: 2026-06-10T18:18:08.545Z
Learnt from: acoliver
Repo: vybestack/llxprt-code PR: 1983
File: packages/policy/src/policy-engine.ts:156-156
Timestamp: 2026-06-10T18:18:08.545Z
Learning: In this repo, ESLint rule `sonarjs/too-many-break-or-continue-in-loop` is set to fail loops that contain more than 1 `break`/`continue` total per loop (or both present). When a loop violates this (e.g., it contains a `break` and a `continue`, or has multiple `break`s/`continue`s), the code will not lint unless the violating line includes `// eslint-disable-next-line sonarjs/too-many-break-or-continue-in-loop`. In code reviews, do not suggest removing these `eslint-disable-next-line` directives (use refactoring only if it eliminates the underlying >1 break/continue pattern).

Applied to files:

  • scripts/tests/scripts-quality-coverage.test.ts
  • scripts/tests/publish-integrity.test.ts
📚 Learning: 2026-06-10T18:18:09.253Z
Learnt from: acoliver
Repo: vybestack/llxprt-code PR: 1983
File: packages/policy/src/policy-engine.ts:263-263
Timestamp: 2026-06-10T18:18:09.253Z
Learning: In this repository, the ESLint rule `sonarjs/too-many-break-or-continue-in-loop` is configured to allow at most 1 `break`/`continue` per loop (it is stricter than the SonarJS default). During code review, treat `// eslint-disable-next-line sonarjs/too-many-break-or-continue-in-loop` on loops with 2+ `break`/`continue` as intentional and do not suggest removing or changing those directives. Only consider a change if the rule is violated without an appropriate intentional disable.

Applied to files:

  • scripts/tests/scripts-quality-coverage.test.ts
  • scripts/tests/publish-integrity.test.ts
  • scripts/check-eslint-guard.js
  • scripts/tests/eslint-guard.test.js
📚 Learning: 2026-06-30T06:12:11.602Z
Learnt from: acoliver
Repo: vybestack/llxprt-code PR: 2260
File: scripts/tests/publish-integrity.test.ts:124-166
Timestamp: 2026-06-30T06:12:11.602Z
Learning: Do not add (or recommend adding) inline ESLint suppression directives such as `/* eslint-disable */`, `/* eslint-enable */`, or similar comment-based suppressions. This repository’s policy (`#2079/`#2080) bans inline ESLint suppressions and it is mechanically enforced by `scripts/check-eslint-guard.js` in the `lint:eslint-guard` CI job. During review, only suggest inline ESLint suppression if the author explicitly states the policy has changed (i.e., the CI guard would no longer block it).

Applied to files:

  • scripts/tests/scripts-quality-coverage.test.ts
  • scripts/tests/publish-integrity.test.ts
  • scripts/check-eslint-guard.js
  • scripts/tests/eslint-guard.test.js
📚 Learning: 2026-06-30T04:44:54.618Z
Learnt from: acoliver
Repo: vybestack/llxprt-code PR: 2260
File: scripts/tests/detect-installer.test.ts:11-19
Timestamp: 2026-06-30T04:44:54.618Z
Learning: For files under `scripts/tests/` (including `scripts/tests/vitest.config.ts`), note that the Vitest ESM test setup shims `__dirname` and `__filename`. Therefore, `resolve(__dirname, ...)` (and similar use of `__dirname`) should not be flagged as an ESM incompatibility by itself during code review.

Applied to files:

  • scripts/tests/scripts-quality-coverage.test.ts
  • scripts/tests/publish-integrity.test.ts
📚 Learning: 2026-06-30T06:11:21.810Z
Learnt from: acoliver
Repo: vybestack/llxprt-code PR: 2260
File: scripts/tests/publish-integrity.test.ts:124-166
Timestamp: 2026-06-30T06:11:21.810Z
Learning: When reviewing files under scripts/tests/**/*.ts (e.g., scripts/tests/publish-integrity.test.ts), don’t suggest SonarJS inline disables based solely on the fact that the SonarJS rule is present in the repo’s root ESLint flat config. In vybestack/llxprt-code, the SonarJS TypeScript rule block is scoped to packages/*/src/**/*.{ts,tsx}, and the Vitest override to packages/*/src/**/*.{test,spec}.{ts,tsx}; scripts/tests/**/*.ts files don’t receive those blocks by default. Only recommend inline disables if SonarJS rules are actually enabled for that specific file and a violation is reported there (e.g., via the ESLint run/diagnostics).

Applied to files:

  • scripts/tests/scripts-quality-coverage.test.ts
  • scripts/tests/publish-integrity.test.ts
📚 Learning: 2026-06-30T04:44:57.052Z
Learnt from: acoliver
Repo: vybestack/llxprt-code PR: 2260
File: scripts/tests/verify-bun-workspace-links.test.ts:93-96
Timestamp: 2026-06-30T04:44:57.052Z
Learning: For test files under `scripts/tests` that use real filesystem symlinks (e.g., `symlinkSync` into `node_modules/<name>` or other symlink-based fixtures), avoid running them on unprivileged Windows because they commonly throw `EPERM`. Guard these tests with `describe.skipIf(process.platform === 'win32')` (using the repo’s existing `describe.skipIf` helper) to keep local Windows developer runs consistent with the sibling script-harness suites.

Applied to files:

  • scripts/tests/scripts-quality-coverage.test.ts
  • scripts/tests/publish-integrity.test.ts
📚 Learning: 2026-06-30T04:44:57.052Z
Learnt from: acoliver
Repo: vybestack/llxprt-code PR: 2260
File: scripts/tests/verify-bun-workspace-links.test.ts:93-96
Timestamp: 2026-06-30T04:44:57.052Z
Learning: When reviewing tests under `scripts/tests`, don’t treat Windows-specific skips/failures in `npm run test:scripts` as a CI requirement. The repo’s CI (`.github/workflows/ci.yml` and `.github/workflows/nightly.yml`) only runs the relevant script-test invocation on `macos-latest` (`if: matrix.os == 'macos-latest'`), so Windows compatibility measures should be interpreted as local-dev support rather than something that must be fixed to satisfy CI.

Applied to files:

  • scripts/tests/scripts-quality-coverage.test.ts
  • scripts/tests/publish-integrity.test.ts

Comment thread scripts/check-eslint-guard.js Outdated
Comment thread scripts/tests/scripts-quality-coverage.test.ts Outdated
acoliver added 5 commits June 30, 2026 12:31
The scripts-quality-coverage behavioral test spawns eslint --print-config
to inspect effective rule sets. On macOS CI runners the ESLint startup +
flat-config load exceeded vitest's 5s default per-test timeout, causing a
spurious failure.

Memoize effectiveRulesFor so each unique path is resolved at most once,
and add a 30s per-test timeout (CONFIG_TIMEOUT) to every case since these
are integration tests that spawn an external process.
The new scripts/check-cli-import-boundary.mjs (added to main by PR #2265)
contained 9 quality-rule violations under the strict scripts lint layer
introduced by this PR. Fix at root cause, no suppressions:

- Decompose 174-line main() into 4 phase functions (runDeepImportScan,
  runGetConfigScan, runAllowlistFreshness, runThinEntryGuard) plus
  extracted helpers (formatViolationLine, collectStaleEntries, etc.).
- Fix expression-complexity in isViMockCall via guard clause.
- Fix too-many-break-or-continue in walk loop via extracted processEntry.
- Auto-fix arrow-body-style in cli-import-boundary.test.js.

All 28 cli-import-boundary tests pass.
…2282)

CodeRabbit findings (2 valid bugs fixed):

1. check-eslint-guard.js listGitTrackedCheckedSourceFiles: when git ls-files
   succeeds but returns zero tracked files (fresh repo / all gitignored),
   the code incorrectly fell back to the unfiltered filesystem walk,
   reintroducing the exact false positives the git-tracking filter was
   designed to prevent. Now returns an empty list; only falls back on an
   actual git failure (catch block).

2. scripts-quality-coverage.test.ts: the type-aware gap assertion used
   scripts/start.js (.js). Type-aware @typescript-eslint rules only activate
   for files the TS parser processes, so the assertion would pass vacuously
   if those rules were enabled only for .ts. Now uses a .ts file to lock
   the real contract.
)

The check-eslint-guard.js was exempted from 8 structural quality rules
(complexity, nested-control-flow, cognitive-complexity, etc.) via an
eslint.config.js carve-out. This undermined the entire purpose of issue
#2282 — extending quality coverage to scripts.

Decomposed the 5193-line monolith into 13 focused modules under
scripts/eslint-guard/, each independently passing all structural quality
rules. The entry point scripts/check-eslint-guard.js is now a 131-line
thin re-exporter with main().

Modules: constants, git, directive-scanner, rule-config, diff-context,
check-diff, diff-state-tracking, added-config-checks, scanners,
cli-scanner, config-scanner, bypass-detector, violations.

Removed the carve-out from eslint.config.js. All 454 guard tests pass
with zero behavior changes.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 8

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@scripts/eslint-guard/added-config-checks.mjs`:
- Around line 215-222: Aggregate multiline removed state before keyed comparison
so cross-form checks use the full removed rule, not just the first pending
entry. Update findMatchingRemovedKeyed and the related logic in the keyed
comparison flow to combine severity and threshold parts of removed multiline
ceiling rules before comparing against added single-line keyed rules. Make sure
the match/search path considers the buffered multiline pieces together, so
additions aren’t misreported and real increases/decreases are evaluated against
the complete removed state.
- Around line 45-49: The inline-rules detection in checkInlineRulesEntries is
too broad and can treat nested config objects as ESLint rules. Update the guard
so extractInlineRulesEntries only runs when the current object is actually a
rules container, mirroring the structural check used by openRulesBlockIfNeeded,
and skip parsing whenever state.arbitraryObjectDepth indicates a non-rule
container such as settings or other nested objects.

In `@scripts/eslint-guard/bypass-detector.mjs`:
- Around line 18-35: `stripInlineComment()` only strips `//`, so block comments
can still influence `isModulePathLine()`,
`checkModuleDirectiveScopesInConfig()`, and the brace/module depth tracking in
`bypass-detector.mjs`. Update the parsing logic to recognize and ignore `/* ...
*/` comments before module-path and brace analysis, and ensure the same
block-comment-aware handling is applied in the module-scope detection paths so
commented-out paths cannot seed `ctx.moduleObjectDepth` or alter
`ctx.braceDepth`.

In `@scripts/eslint-guard/diff-state-tracking.mjs`:
- Around line 391-395: `bufferInlineRules` is still collecting inline rules from
removed content even when it is inside a removed non-rule container. Update
`bufferInlineRules` in `diff-state-tracking.mjs` to also bail out when
`state.removedNonRuleContainerDepth` is set, alongside the existing
`removedArbitraryObjectDepth` check, so `pendingRemovedInlineRules` is not
seeded from `settings: { ... rules: { ... } }`-style blocks.

In `@scripts/eslint-guard/directive-scanner.mjs`:
- Around line 447-454: The brace-tracking logic in scanTemplateTextChar is
counting `${` twice, which leaves exprDepth too high and can make
scanTemplateLiteralState miss trailing line comments after template expressions.
Update the `${` branch in scanTemplateTextChar so it consumes the sequence as
one transition, matching the behavior already used by scanTemplateLiteralState,
and ensure the scanner only increments exprDepth once for the opening
interpolation.
- Around line 395-399: The fast-path in directive scanning is skipping regex
literals only outside templates, but template expressions inside ${...} still
contain executable JS and can include regexes like in directive-scanner.mjs.
Update the regex-literal handling around canStartRegex/skipRegex so it also
applies while scanning inside template expressions, using the existing
state.inTemplate tracking (or a template-expression equivalent) to distinguish
raw template text from embedded JS. This should prevent // inside a regex from
being misread as a comment before the real trailing directive comment.

In `@scripts/eslint-guard/git.mjs`:
- Around line 21-27: Update the argument parsing in git.mjs so the --base and
--head handling in the argv loop rejects missing values instead of assigning
undefined; if argv[++i] is absent or looks like another flag, stop parsing and
emit the same usage/help error path used by the --help case. Make the check in
the argument loop that sets args.base and args.head, so execFileSync('git', ...)
only runs with validated values.

In `@scripts/eslint-guard/rule-config.mjs`:
- Around line 60-63: The extractThresholdValue helper only matches unquoted max
keys, so single-line rule configs like quoted max thresholds are missed. Update
extractThresholdValue in rule-config.mjs to recognize both quoted and unquoted
max keys, using the same pattern support already present in the standalone max
helpers. Keep the existing return shape with value and form so the guard
continues to work for ceiling-rule threshold changes.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: 7fba285f-0cc7-4b4f-af69-f2fef7c9955e

📥 Commits

Reviewing files that changed from the base of the PR and between 5e8d046 and ad83866.

📒 Files selected for processing (16)
  • eslint.config.js
  • scripts/check-eslint-guard.js
  • scripts/eslint-guard/added-config-checks.mjs
  • scripts/eslint-guard/bypass-detector.mjs
  • scripts/eslint-guard/check-diff.mjs
  • scripts/eslint-guard/cli-scanner.mjs
  • scripts/eslint-guard/config-scanner.mjs
  • scripts/eslint-guard/constants.mjs
  • scripts/eslint-guard/diff-context.mjs
  • scripts/eslint-guard/diff-state-tracking.mjs
  • scripts/eslint-guard/directive-scanner.mjs
  • scripts/eslint-guard/git.mjs
  • scripts/eslint-guard/rule-config.mjs
  • scripts/eslint-guard/scanners.mjs
  • scripts/eslint-guard/violations.mjs
  • scripts/tests/scripts-quality-coverage.test.ts
💤 Files with no reviewable changes (1)
  • eslint.config.js
📜 Review details
⏰ Context from checks skipped due to timeout. (6)
  • GitHub Check: E2E Test (Linux) - sandbox:docker
  • GitHub Check: E2E Test (Linux) - sandbox:none
  • GitHub Check: CodeQL
  • GitHub Check: Lint (Javascript)
  • GitHub Check: Interactive UI (tmux)
  • GitHub Check: Run LLxprt review
🧰 Additional context used
🧠 Learnings (10)
📚 Learning: 2026-02-06T15:52:42.315Z
Learnt from: acoliver
Repo: vybestack/llxprt-code PR: 1305
File: scripts/generate-keybindings-doc.ts:1-5
Timestamp: 2026-02-06T15:52:42.315Z
Learning: In reviews of vybestack/llxprt-code, do not suggest changing existing copyright headers from 'Google LLC' to 'Vybestack LLC' for files that originated from upstream. Preserve upstream copyrights in files that came from upstream, and only apply 'Vybestack LLC' copyright on newly created, original LLxprt files. If a file is clearly LLxprt-original, it may carry the Vybestack header; if it is upstream-originated, keep the original sponsor header.

Applied to files:

  • scripts/tests/scripts-quality-coverage.test.ts
📚 Learning: 2026-06-10T18:18:08.545Z
Learnt from: acoliver
Repo: vybestack/llxprt-code PR: 1983
File: packages/policy/src/policy-engine.ts:156-156
Timestamp: 2026-06-10T18:18:08.545Z
Learning: In this repo, ESLint rule `sonarjs/too-many-break-or-continue-in-loop` is set to fail loops that contain more than 1 `break`/`continue` total per loop (or both present). When a loop violates this (e.g., it contains a `break` and a `continue`, or has multiple `break`s/`continue`s), the code will not lint unless the violating line includes `// eslint-disable-next-line sonarjs/too-many-break-or-continue-in-loop`. In code reviews, do not suggest removing these `eslint-disable-next-line` directives (use refactoring only if it eliminates the underlying >1 break/continue pattern).

Applied to files:

  • scripts/tests/scripts-quality-coverage.test.ts
📚 Learning: 2026-06-10T18:18:09.253Z
Learnt from: acoliver
Repo: vybestack/llxprt-code PR: 1983
File: packages/policy/src/policy-engine.ts:263-263
Timestamp: 2026-06-10T18:18:09.253Z
Learning: In this repository, the ESLint rule `sonarjs/too-many-break-or-continue-in-loop` is configured to allow at most 1 `break`/`continue` per loop (it is stricter than the SonarJS default). During code review, treat `// eslint-disable-next-line sonarjs/too-many-break-or-continue-in-loop` on loops with 2+ `break`/`continue` as intentional and do not suggest removing or changing those directives. Only consider a change if the rule is violated without an appropriate intentional disable.

Applied to files:

  • scripts/tests/scripts-quality-coverage.test.ts
📚 Learning: 2026-06-30T06:12:11.602Z
Learnt from: acoliver
Repo: vybestack/llxprt-code PR: 2260
File: scripts/tests/publish-integrity.test.ts:124-166
Timestamp: 2026-06-30T06:12:11.602Z
Learning: Do not add (or recommend adding) inline ESLint suppression directives such as `/* eslint-disable */`, `/* eslint-enable */`, or similar comment-based suppressions. This repository’s policy (`#2079/`#2080) bans inline ESLint suppressions and it is mechanically enforced by `scripts/check-eslint-guard.js` in the `lint:eslint-guard` CI job. During review, only suggest inline ESLint suppression if the author explicitly states the policy has changed (i.e., the CI guard would no longer block it).

Applied to files:

  • scripts/tests/scripts-quality-coverage.test.ts
📚 Learning: 2026-06-30T04:44:54.618Z
Learnt from: acoliver
Repo: vybestack/llxprt-code PR: 2260
File: scripts/tests/detect-installer.test.ts:11-19
Timestamp: 2026-06-30T04:44:54.618Z
Learning: For files under `scripts/tests/` (including `scripts/tests/vitest.config.ts`), note that the Vitest ESM test setup shims `__dirname` and `__filename`. Therefore, `resolve(__dirname, ...)` (and similar use of `__dirname`) should not be flagged as an ESM incompatibility by itself during code review.

Applied to files:

  • scripts/tests/scripts-quality-coverage.test.ts
📚 Learning: 2026-06-30T06:11:21.810Z
Learnt from: acoliver
Repo: vybestack/llxprt-code PR: 2260
File: scripts/tests/publish-integrity.test.ts:124-166
Timestamp: 2026-06-30T06:11:21.810Z
Learning: When reviewing files under scripts/tests/**/*.ts (e.g., scripts/tests/publish-integrity.test.ts), don’t suggest SonarJS inline disables based solely on the fact that the SonarJS rule is present in the repo’s root ESLint flat config. In vybestack/llxprt-code, the SonarJS TypeScript rule block is scoped to packages/*/src/**/*.{ts,tsx}, and the Vitest override to packages/*/src/**/*.{test,spec}.{ts,tsx}; scripts/tests/**/*.ts files don’t receive those blocks by default. Only recommend inline disables if SonarJS rules are actually enabled for that specific file and a violation is reported there (e.g., via the ESLint run/diagnostics).

Applied to files:

  • scripts/tests/scripts-quality-coverage.test.ts
📚 Learning: 2026-06-30T04:44:57.052Z
Learnt from: acoliver
Repo: vybestack/llxprt-code PR: 2260
File: scripts/tests/verify-bun-workspace-links.test.ts:93-96
Timestamp: 2026-06-30T04:44:57.052Z
Learning: For test files under `scripts/tests` that use real filesystem symlinks (e.g., `symlinkSync` into `node_modules/<name>` or other symlink-based fixtures), avoid running them on unprivileged Windows because they commonly throw `EPERM`. Guard these tests with `describe.skipIf(process.platform === 'win32')` (using the repo’s existing `describe.skipIf` helper) to keep local Windows developer runs consistent with the sibling script-harness suites.

Applied to files:

  • scripts/tests/scripts-quality-coverage.test.ts
📚 Learning: 2026-06-30T04:44:57.052Z
Learnt from: acoliver
Repo: vybestack/llxprt-code PR: 2260
File: scripts/tests/verify-bun-workspace-links.test.ts:93-96
Timestamp: 2026-06-30T04:44:57.052Z
Learning: When reviewing tests under `scripts/tests`, don’t treat Windows-specific skips/failures in `npm run test:scripts` as a CI requirement. The repo’s CI (`.github/workflows/ci.yml` and `.github/workflows/nightly.yml`) only runs the relevant script-test invocation on `macos-latest` (`if: matrix.os == 'macos-latest'`), so Windows compatibility measures should be interpreted as local-dev support rather than something that must be fixed to satisfy CI.

Applied to files:

  • scripts/tests/scripts-quality-coverage.test.ts
📚 Learning: 2026-06-30T16:45:45.666Z
Learnt from: acoliver
Repo: vybestack/llxprt-code PR: 2284
File: scripts/tests/scripts-quality-coverage.test.ts:0-0
Timestamp: 2026-06-30T16:45:45.666Z
Learning: For ESLint-config regression tests under scripts/tests (e.g., scripts-quality-coverage.test.ts), avoid adding duplicate, option-level assertions. These tests should only verify that the intended ESLint rules are applied to the target file set at error severity. Since the lint:eslint-guard CI job in vybestack/llxprt-code mechanically rejects ESLint ceiling-threshold increases and severity downgrades, reviewers should not request redundant checks that merely restate option-level guard behavior.

Applied to files:

  • scripts/tests/scripts-quality-coverage.test.ts
📚 Learning: 2026-06-30T20:03:19.860Z
Learnt from: acoliver
Repo: vybestack/llxprt-code PR: 2290
File: packages/cli/src/launcher/bun-launcher.ts:209-226
Timestamp: 2026-06-30T20:03:19.860Z
Learning: If a change introduces large test blocks that would exceed the repository’s max-lines lint limit, split the test into a dedicated test file (e.g., move related coverage into a new {name}.test.ts file) rather than keeping everything in one test module. Ensure the extracted tests still cover the same behavior and are correctly imported/exercised by the test runner.

Applied to files:

  • scripts/tests/scripts-quality-coverage.test.ts
🔇 Additional comments (6)
scripts/eslint-guard/violations.mjs (1)

7-16: LGTM!

scripts/tests/scripts-quality-coverage.test.ts (1)

147-151: LGTM!

Also applies to: 166-185

scripts/eslint-guard/cli-scanner.mjs (1)

17-142: LGTM!

scripts/eslint-guard/check-diff.mjs (1)

55-672: LGTM!

scripts/eslint-guard/diff-context.mjs (1)

40-408: LGTM!

scripts/eslint-guard/scanners.mjs (1)

22-384: LGTM!

Comment thread scripts/eslint-guard/added-config-checks.mjs
Comment thread scripts/eslint-guard/added-config-checks.mjs
Comment thread scripts/eslint-guard/bypass-detector.mjs
Comment thread scripts/eslint-guard/diff-state-tracking.mjs
Comment thread scripts/eslint-guard/directive-scanner.mjs Outdated
Comment thread scripts/eslint-guard/directive-scanner.mjs Outdated
Comment thread scripts/eslint-guard/git.mjs
Comment thread scripts/eslint-guard/rule-config.mjs Outdated
acoliver added 2 commits June 30, 2026 19:23
- local_telemetry.js + telemetry_gcp.js: attach child-process error
  handlers immediately after spawn (before waitForPort) so immediate
  spawn failures (ENOENT/EACCES) are caught by the intended diagnostics
  instead of crashing via uncaught-exception.
- version.js: replace regex tag-rewrite with lastIndexOf+slice so
  registry host:port segments are preserved when the sandbox image URI
  contains a port (e.g. ghcr.io:443/org/image:tag).
- rule-config.mjs: detect quoted max keys in extractThresholdValue so
  threshold increases in single-line ceiling rules cannot bypass the guard.
- git.mjs: reject --base/--head when the value is missing instead of
  dying with a raw execFileSync argument error.
- bypass-detector.mjs: strip block comments (not just line comments) so
  module paths inside comments cannot seed bogus bypass detections.
- added-config-checks.mjs: skip inline rules inside non-rule containers;
  aggregate removed multiline severity+threshold entries before cross-form
  keyed comparisons to avoid false threshold-addition reports.
- diff-state-tracking.mjs: skip removed inline rules inside non-rule
  containers (parity with the added-side fix).
- directive-scanner.mjs: skip regex literals inside template expressions;
  consume dollar-brace as a single transition in the brace-tracking
  scanner to avoid double-counting exprDepth.
@acoliver

acoliver commented Jul 1, 2026

Copy link
Copy Markdown
Collaborator Author

@coderabbitai review

@coderabbitai

coderabbitai Bot commented Jul 1, 2026

Copy link
Copy Markdown
Contributor
✅ Action performed

Review finished.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

maintainer:e2e:ok Trusted contributor; maintainer-approved E2E run

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Apply strict code-quality lint rules to scripts (Task)

1 participant