Skip to content

Enforce the GenAI enclave boundary (Fixes #2352)#2546

Merged
acoliver merged 19 commits into
mainfrom
issue2352
Jul 15, 2026
Merged

Enforce the GenAI enclave boundary (Fixes #2352)#2546
acoliver merged 19 commits into
mainfrom
issue2352

Conversation

@acoliver

@acoliver acoliver commented Jul 13, 2026

Copy link
Copy Markdown
Collaborator

Summary

  • Restricts source imports and workspace ownership to the core/provider enclaves while retaining the root runtime dependency required by the current no-compile packed artifact.
  • Replaces the final FakeProvider SDK type with the neutral core Gemini content shape.
  • Adds an AST-based, fail-closed repository guard for SDK imports, dependency declarations, computed module loads, and Gemini-named exports.
  • Covers TypeScript and JavaScript module forms, dynamic imports, import types, re-exports, aliases, default exports, namespaces, enums, and manifest dependency sections.
  • Uses one path-bound allowlist with explicit justifications and liveness validation.
  • Wires the guard into CI and documents enclave maintenance rules.
  • Updates the import baseline and the project smoke-test profile to stepfun-37.

Boundary behavior

Allowed SDK locations:

  • packages/providers/src/gemini/
  • packages/core/src/code_assist/

Allowed dependency declarations:

  • packages/providers/package.json at version 1.30.0
  • packages/core/package.json at version 1.30.0

Everything else fails closed, including unreadable files, malformed manifests, parse diagnostics, incomplete discovery, computed module specifiers outside enclaves, and stale exact allowlist entries.

Test-first evidence

Behavioral negative coverage verifies that the guard rejects:

  • static, type-only, dynamic, import-equals, import-type, subpath, and re-export SDK imports outside enclaves
  • computed dynamic imports and requires outside enclaves
  • Gemini-named classes, functions, enums, namespaces, aliases, default exports, and re-exports outside sanctioned paths
  • root, CLI, wrong-version, optional, peer, and development dependency declarations
  • sibling-prefix paths that resemble an enclave
  • malformed manifests, invalid source syntax, missing source discovery, and JavaScript SDK imports

Positive coverage verifies both enclaves independently and validates the real repository.

Verification

  • npm run test
  • npm run lint
  • npm run typecheck
  • npm run format
  • npm run build
  • npm run lint:genai-enclave
  • focused guard, scanner, and publish-integrity suites: 113 passing tests
  • packed-consumer verification confirms the root runtime bridge is required by the current no-compile artifact; source/workspace ownership remains confined to core and providers
  • node scripts/start.js --profile-load ollamakimi "write me a haiku and nothing else"
  • Open Code Review completed with all findings addressed
  • deep architecture and implementation reviews completed with findings remediated

Fixes #2352

Summary by CodeRabbit

  • New Features
    • Added new GenAI boundary guard lint commands and enforced them in CI to prevent unauthorized GenAI usage and disallowed “Gemini” exports.
  • Bug Fixes
    • Improved pseudo-terminal provider resolution for non-Bun POSIX environments.
    • Updated fake provider typing to better match Gemini content structures.
  • Chores
    • Updated published integrity checks and CLI/runtime test harness behavior.
    • Bumped mime-types and added an optional @napi-rs/keyring dependency.
    • Refreshed procedural memory instructions.
  • Tests
    • Added extensive end-to-end, scanner, adversarial, and publish/manifest integrity test coverage for the new safeguards.

@coderabbitai

coderabbitai Bot commented Jul 13, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review
📝 Walkthrough

Walkthrough

Adds an AST-based GenAI boundary guard with import, export, dependency-manifest, and packaging enforcement; extensive scanner and fixture tests; CI wiring; and runtime, dependency, and procedural maintenance updates.

Changes

GenAI boundary enforcement

Layer / File(s) Summary
Scanner contracts, provenance, and detection
scripts/genai-enclave/*
Defines violation types, AST helpers, lexical provenance tracking, GenAI import detection, Gemini export detection, and parse diagnostics.
Guard configuration and execution
scripts/check-genai-enclave.ts, scripts/genai-enclave/config.ts, scripts/genai-enclave/manifest-enforcement.ts, scripts/tests/genai-enclave-guard*
Configures enclaves and allowlists, scans package sources, validates dependency manifests, applies runtime-surface rules, and fails closed on operational errors.
Published dependency and source integrity
scripts/tests/publish-dependency-helpers.ts, scripts/tests/workspace-source-helpers.ts, scripts/tests/publish-integrity.test.ts, scripts/tests/*regressions.test.ts
Validates dependency ranges, aliases, protocols, duplicate declarations, workspace source closure, exported subpaths, and symlink-safe discovery.
Regression coverage
scripts/tests/genai-enclave-scanner*.test.ts, scripts/tests/genai-enclave-adversarial.test.ts
Covers import aliases, createRequire provenance, CommonJS export forms, computed bypasses, fail-closed behavior, and shadowing.
CI and package integration
package.json, .github/workflows/ci.yml, tsconfig.scripts.json
Adds GenAI lint commands, runs them in CI, adds the optional keyring dependency, and includes enclave scripts in the scripts TypeScript configuration.

Runtime and maintenance updates

Layer / File(s) Summary
Runtime, dependency, and procedural maintenance
.llxprt/LLXPRT.md, packages/core/src/utils/getPty.ts, packages/providers/src/fake/FakeProvider.ts, packages/core/package.json, packages/tools/package.json, packages/agents/..., packages/cli/...
Updates profile instructions, simplifies PTY loading, aligns fake-provider types, bumps mime-types, and adjusts test module loading and Vitest configuration.

Estimated code review effort: 5 (Critical) | ~120 minutes

Possibly related PRs

Suggested labels: ci/cd

🚥 Pre-merge checks | ✅ 1 | ❌ 4

❌ Failed checks (4 warnings)

Check name Status Explanation Resolution
Description check ⚠️ Warning It omits the required template sections and doesn't follow the repo's TLDR/Dive Deeper/Test Plan/Matrix structure. Rewrite the description to use the required headings and add the missing reviewer test plan, testing matrix, and linked issues section.
Linked Issues check ⚠️ Warning The guard and CI work align, but the PR keeps a root @google/genai dependency despite #2352 requiring it removed outside allowed workspaces. Remove the root @google/genai declaration or split the exception into a separate follow-up; #2352 calls for it to be removed outside providers/core.
Out of Scope Changes check ⚠️ Warning The mime-types bumps in packages/core and packages/tools are unrelated to the GenAI boundary work. Move the mime-types upgrades into a separate dependency-update PR unless they are required to satisfy this issue.
Docstring Coverage ⚠️ Warning Docstring coverage is 72.69% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (1 passed)
Check name Status Explanation
Title check ✅ Passed The title is concise and matches the PR's main change: enforcing the GenAI enclave boundary.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch issue2352

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 Jul 13, 2026
Comment thread scripts/genai-enclave/config.ts
Comment thread scripts/genai-enclave/config.ts
Comment thread scripts/check-genai-enclave.ts Outdated
Comment thread scripts/genai-enclave/scanner.ts Outdated
Comment thread scripts/tests/publish-integrity.test.ts Outdated
Comment thread scripts/tests/genai-enclave-guard.test.ts Outdated
Comment thread scripts/tests/genai-enclave-guard.test.ts Outdated
@github-actions

github-actions Bot commented Jul 13, 2026

Copy link
Copy Markdown
Contributor

OpenCodeReview — PR #2546

  • Reviewed head SHA: dfb58cb63cdc7d5c911fbdbcb6c9c72fc26eadad
  • Merge base: 30de44adb9469ae495cf744871574e263572073f
  • OCR version: open-code-review v1.6.1 (034d512) linux/amd64 built at: 2026-06-25T12:11:53Z https://github.com/alibaba/open-code-review
  • Phase: review
  • Exit code: 0
  • Run: https://github.com/vybestack/llxprt-code/actions/runs/29389389454
  • 41 finding(s) (41 posted inline).
  • Artifacts: ocr-review-output contains raw JSON, stdout, stderr, preview, phase, and exit-code diagnostics.

@github-actions

github-actions Bot commented Jul 13, 2026

Copy link
Copy Markdown
Contributor

LLxprt PR Review – PR #2546

Issue Alignment

The PR directly addresses #2352 by adding an AST-based enclave guard, CI wiring, documentation, and a dependency/inventory ratchet. The reviewed artifacts show the intended behavior: only packages/providers/src/gemini/** and packages/core/src/code_assist/** may import @google/genai; manifests are constrained to root/core/providers; and Gemini-named exports outside an explicit allowlist are rejected.

Side Effects

  • .llxprt/LLXPRT.md is modified to change the smoke-test profile from ollamakimi to stepfun-37. This is unrelated to Enforce Gemini/GenAI boundary: remove @google/genai deps and add CI import guard #2352 and should not be in this PR.
  • packages/core/package.json and packages/tools/package.json bump mime-types from ^2.1.35 to ^3.0.1. This dependency change is not explained in the PR description and looks out of scope for an enclave-boundary PR.
  • bun.lock and package-lock.json are updated accordingly, which is expected given the version bump, but reinforces that the bump should be justified or split out.

Code Quality

From the available diffs:

  • FakeProvider.ts correctly removes the direct @google/genai type import and switches to the neutral GeminiContent type from core, matching the enclave intent.
  • getPty.ts replaces variable-based dynamic-import specifiers with string literals, which satisfies the new computed-import guard and is a good safety improvement.
  • The new guard/test scaffolding is extensive and appears well-structured: config is centralized, manifest enforcement is fail-closed, and scanner coverage includes aliases, computed imports, CJS re-exports, and provenance tracking.

Tests and Coverage

  • Coverage impact: increase.
  • The PR adds a large dedicated test suite under scripts/tests/ for the new guard, plus updates to existing tests to align with the boundary rules.
  • Risk: the local review workspace does not contain the new scripts/genai-enclave/** files or most new test files, so the implementation could not be fully verified from the working tree. I am assuming the branch origin/issue2352 contains the complete intended changes and reviewing the provided diff artifacts accordingly.

Verdict

Needs Work
Please remove the unrelated .llxprt/LLXPRT.md profile change and the unexplained mime-types version bump, or move them to a separate PR. Once scoped to #2352 only, this looks ready to merge.

Comment thread scripts/tests/publish-integrity.test.ts Outdated
Comment thread scripts/genai-enclave/scanner.ts Outdated
Comment thread scripts/genai-enclave/scanner.ts Outdated
Comment thread scripts/check-genai-enclave.ts Outdated
Comment thread scripts/check-genai-enclave.ts
Comment thread scripts/check-genai-enclave.ts
Comment thread scripts/tests/genai-enclave-guard.test.ts Outdated
Comment thread scripts/tests/genai-enclave-guard.test.ts Outdated
Comment thread scripts/tests/genai-enclave-guard.test.ts
@github-actions

github-actions Bot commented Jul 13, 2026

Copy link
Copy Markdown
Contributor

Code Coverage Summary

Package Lines Statements Functions Branches
CLI 59.1% 59.1% 60.19% 82.41%
Core 78.69% 78.69% 76% 84.02%
CLI Package - Full Text Report
-------------------|---------|----------|---------|---------|-------------------
File               | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s 
-------------------|---------|----------|---------|---------|-------------------
All files          |    59.1 |    82.41 |   60.19 |    59.1 |                   
 src               |   82.74 |    77.77 |   93.75 |   82.74 |                   
  cli.tsx          |   79.45 |       65 |     100 |   79.45 | ...63-265,274-278 
  ...tBootstrap.ts |   96.77 |    85.71 |     100 |   96.77 | 67                
  cliBootstrap.tsx |   82.31 |     75.6 |     100 |   82.31 | ...46-151,176-181 
  ...oviderInit.ts |   81.34 |    71.18 |     100 |   81.34 | ...49-251,267-270 
  cliSandbox.ts    |    94.3 |    89.47 |     100 |    94.3 | ...56-157,163-165 
  ...nBootstrap.ts |   71.42 |    63.63 |   83.33 |   71.42 | ...54-264,269-270 
  ...nalSession.ts |   52.86 |       60 |   83.33 |   52.86 | ...10,213-217,221 
  ...st-helpers.ts |       0 |        0 |       0 |       0 | 1-50              
  ...ractiveCli.ts |   89.89 |    82.47 |   90.47 |   89.89 | ...05-507,537-538 
  ...liCommands.ts |   97.29 |       70 |     100 |   97.29 | 40-41             
  ...CliSupport.ts |   91.48 |    80.76 |     100 |   91.48 | ...45,363-364,445 
  ...activeAuth.ts |   93.24 |    88.88 |     100 |   93.24 | 44,47-50          
 src/auth          |      75 |    66.66 |     100 |      75 |                   
  ...gs-adapter.ts |      75 |    66.66 |     100 |      75 | 71-73,76,82-91    
 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 |   74.22 |    93.08 |   67.69 |   74.22 |                   
  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      |   90.47 |       90 |      80 |   90.47 | 70-73,80,135-139  
 .../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.4 |    96.66 |   31.25 |    60.4 |                   
  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 | ...72-101,103-110 
  list.ts          |   84.84 |    92.85 |   33.33 |   84.84 | 69-70,83-87,89-91 
  uninstall.ts     |   57.89 |      100 |   33.33 |   57.89 | 47-64,66-71       
 src/config        |   86.83 |    84.62 |   90.57 |   86.83 |                   
  ...deResolver.ts |   94.64 |    95.45 |     100 |   94.64 | 47-49             
  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        |   97.44 |       90 |     100 |   97.44 | 212-213,227-231   
  configBuilder.ts |   92.77 |    95.45 |   81.81 |   92.77 | ...64-265,353-361 
  ...mentLoader.ts |    83.6 |    53.84 |     100 |    83.6 | ...33-135,143-146 
  extension.ts     |   75.14 |    89.61 |   81.39 |   75.14 | ...62-963,966-967 
  ...iveContext.ts |   93.79 |    91.66 |     100 |   93.79 | 78,80,86-91,231   
  ...iateConfig.ts |   97.47 |      100 |     100 |   97.47 | 155-157           
  keyBindings.ts   |     100 |      100 |     100 |     100 |                   
  ...CopyEngine.ts |   70.74 |    56.81 |     100 |   70.74 | ...24,329,338-341 
  ...malization.ts |    77.1 |     61.9 |     100 |    77.1 | ...22-323,332-333 
  ...lFsHelpers.ts |   79.68 |    78.57 |      90 |   79.68 | ...45,154,163-173 
  ...rverConfig.ts |   83.33 |    94.44 |     100 |   83.33 | 23-39             
  ...ationTypes.ts |       0 |        0 |       0 |       0 | 1                 
  pathMigration.ts |   89.89 |    90.62 |     100 |   89.89 | ...07-722,751-756 
  paths.ts         |     100 |      100 |     100 |     100 |                   
  policy.ts        |   80.76 |      100 |      50 |   80.76 | 45-49             
  ...figRuntime.ts |   88.65 |     87.2 |     100 |   88.65 | ...31-538,549-552 
  ...Ephemerals.ts |   70.27 |    66.66 |      75 |   70.27 | 31-32,44-52       
  ...eBootstrap.ts |   92.25 |    89.14 |     100 |   92.25 | ...01-803,812-813 
  profileRepair.ts |   81.66 |       75 |     100 |   81.66 | 42-49,95-97       
  ...Resolution.ts |   78.66 |    76.74 |     100 |   78.66 | ...87-290,303-311 
  ...pplication.ts |   92.48 |       80 |     100 |   92.48 | ...,95-96,113,183 
  ...elResolver.ts |   93.22 |    81.25 |     100 |   93.22 | 42,44-45,81       
  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.12 |    91.17 |     100 |   95.12 | 46-47,128-131     
  ...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 |   78.38 |    84.42 |   88.97 |   78.38 |                   
  consent.ts       |   88.03 |    85.71 |     100 |   88.03 | ...77-378,381-382 
  ...ionConsent.ts |   87.38 |    76.66 |     100 |   87.38 | ...,64-67,113-116 
  ...Enablement.ts |   94.02 |       96 |     100 |   94.02 | ...12-218,281-283 
  ...sionLoader.ts |   90.83 |    85.92 |     100 |   90.83 | ...25-526,546-547 
  ...onSettings.ts |     100 |      100 |     100 |     100 |                   
  github.ts        |   61.73 |    81.73 |      68 |   61.73 | ...49-650,660-663 
  hookSchema.ts    |      97 |    91.66 |     100 |      97 | 147-148,210       
  ...reResolver.ts |   80.53 |    80.59 |    90.9 |   80.53 | ...44,347-348,356 
  ...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    |   65.02 |    61.81 |      75 |   65.02 |                   
  ...utoUpdater.ts |   65.02 |    61.81 |      75 |   65.02 | ...69-470,479,481 
 ...egration-tests |   71.66 |    83.33 |   85.71 |   71.66 |                   
  ...st-helpers.ts |       0 |        0 |       0 |       0 | 1-79              
  test-utils.ts    |   91.97 |     86.2 |    92.3 |   91.97 | ...45,263-264,274 
 src/launcher      |   93.33 |    86.48 |   88.09 |   93.33 |                   
  ...y-resolver.ts |   91.39 |    92.85 |   85.71 |   91.39 | 121-128           
  bun-launcher.ts  |   96.31 |    85.96 |   88.88 |   96.31 | 35-43             
  ...h-resolver.ts |   91.37 |    84.12 |   88.23 |   91.37 | ...26-228,251-252 
 ...viders/logging |   89.31 |     92.5 |   69.23 |   89.31 |                   
  ...rvice-impl.ts |   44.44 |      100 |       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       |   73.15 |    66.66 |   73.68 |   73.15 |                   
  ...chedClient.ts |     100 |      100 |     100 |     100 |                   
  ...lScheduler.ts |   71.95 |    64.28 |   72.22 |   71.95 | ...64-386,402-404 
 src/services      |   85.91 |       85 |   94.87 |   85.91 |                   
  ...mandLoader.ts |   80.74 |    73.33 |      80 |   80.74 | ...07-121,165-183 
  ...andService.ts |     100 |      100 |     100 |     100 |                   
  ...mandLoader.ts |   91.91 |    86.27 |     100 |   91.91 | ...11-216,303-310 
  ...omptLoader.ts |    67.7 |    68.96 |     100 |    67.7 | ...73,179-185,200 
  ...tArgParser.ts |     100 |    94.28 |     100 |     100 | 42,72             
  performResume.ts |   89.11 |    89.18 |     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 | 88-89,273-274     
  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/session       |   81.14 |    79.77 |   84.61 |   81.14 |                   
  debugLog.ts      |      60 |       50 |     100 |      60 | 12-16             
  ...rReporting.ts |   72.91 |    66.66 |     100 |   72.91 | 17-19,22-30,37-38 
  ...ractiveUI.tsx |   84.21 |      100 |   66.66 |   84.21 | ...50-252,262-271 
  ...iveSession.ts |   78.78 |       55 |      75 |   78.78 | ...50-253,270-287 
  ...tListeners.ts |     100 |      100 |     100 |     100 |                   
  ...alHandlers.ts |   81.37 |    88.57 |      90 |   81.37 | ...,94-97,112-113 
  ...nalCleanup.ts |   85.71 |       50 |     100 |   85.71 | 21                
 src/test-utils    |   76.72 |    82.25 |   37.68 |   76.72 |                   
  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       |    93.9 |    96.66 |   24.48 |    93.9 | ...54-159,262-263 
  ...e-testing.tsx |       0 |        0 |       0 |       0 | 1-56              
  ...iderConfig.ts |       0 |        0 |       0 |       0 | 1-19              
 src/ui            |   48.75 |    94.89 |   28.84 |   48.75 |                   
  App.tsx          |   35.84 |      100 |       0 |   35.84 | 70-101,107-114    
  AppContainer.tsx |     100 |      100 |     100 |     100 |                   
  ...erRuntime.tsx |   15.75 |      100 |   16.66 |   15.75 | 72-412            
  ...tionNudge.tsx |       8 |      100 |       0 |       8 | 29-104            
  cliUiRuntime.ts  |   94.75 |    97.14 |   26.61 |   94.75 | ...50,706,723,726 
  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   |   72.25 |    78.43 |   78.76 |   72.25 |                   
  aboutCommand.ts  |   82.84 |    51.51 |   91.66 |   82.84 | ...92-193,195-196 
  authCommand.ts   |    58.9 |    79.54 |   81.25 |    58.9 | ...91-641,653-656 
  ...urlCommand.ts |      68 |       75 |     100 |      68 | 47-62             
  bugCommand.ts    |   71.42 |    30.76 |     100 |   71.42 | ...00-111,146-154 
  chatCommand.ts   |   70.06 |    80.28 |   66.66 |   70.06 | ...53-554,602-613 
  ...Validation.ts |     100 |     91.6 |     100 |     100 | ...08,218,234,361 
  clearCommand.ts  |   86.66 |    85.71 |     100 |   86.66 | 81-88             
  ...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.81 |     91.3 |   54.54 |   89.81 | ...4,96-97,99-100 
  ...icsCommand.ts |   78.27 |    52.63 |   94.44 |   78.27 | ...24-527,542-547 
  ...ticsTokens.ts |   92.05 |    90.24 |     100 |   92.05 | ...,63-68,103-104 
  ...ryCommand.tsx |    89.5 |    84.84 |     100 |    89.5 | ...26-134,201-209 
  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   |   81.01 |    71.42 |   66.66 |   81.01 | 38-42,44-91       
  keyCommand.ts    |   90.07 |    80.76 |     100 |   90.07 | ...98,421-422,521 
  ...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 |   56.52 |    66.66 |      75 |   56.52 | ...-84,97-103,108 
  lspCommand.ts    |    93.8 |    85.36 |     100 |    93.8 | 43,95-100         
  mcpAuth.ts       |   90.43 |       80 |   66.66 |   90.43 | 32-41,86-87       
  mcpCommand.ts    |   96.25 |    87.87 |     100 |   96.25 | 87-92             
  mcpDisplay.ts    |   84.12 |    81.73 |   93.75 |   84.12 | ...47-448,492-493 
  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 |   59.14 |    55.55 |   63.63 |   59.14 | ...90-531,552-568 
  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 |   54.18 |     32.5 |      75 |   54.18 | ...43-344,353-358 
  quitCommand.ts   |   36.66 |      100 |       0 |   36.66 | 17-36             
  ...oreCommand.ts |   90.27 |    83.33 |     100 |   90.27 | ...70-175,208-213 
  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    |   79.47 |       75 |   83.33 |   79.47 | ...15-316,349-353 
  ...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   |    78.5 |    71.62 |     100 |    78.5 | ...48-460,468-472 
  ...Formatters.ts |   48.93 |    71.42 |   33.33 |   48.93 | ...5,70-86,92-113 
  ...Operations.ts |   77.06 |       75 |   85.71 |   77.06 | ...10-424,430-437 
  ...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.71 |    73.23 |     100 |   86.71 | ...64,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.24 |    38.81 |     7.7 |   12.24 |                   
  AboutBox.tsx     |   13.25 |      100 |       0 |   13.25 | ...80-102,106-134 
  AnsiOutput.tsx   |    8.33 |      100 |       0 |    8.33 | 25-90             
  AppHeader.tsx    |   21.87 |      100 |       0 |   21.87 | 27-57             
  AsciiArt.ts      |     100 |      100 |     100 |     100 |                   
  AuthDialog.tsx   |    5.22 |      100 |       0 |    5.22 | ...27-232,235-314 
  ...nProgress.tsx |       0 |        0 |       0 |       0 | 1-63              
  ...Indicator.tsx |   15.15 |      100 |       0 |   15.15 | 17-47             
  ...firmation.tsx |   15.97 |      100 |       0 |   15.97 | 60-135,144-209    
  ...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 | 30-108,111-175    
  ...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.83 |      100 |       0 |    5.83 | 72-801,805-829    
  ...ngsDialog.tsx |   13.02 |      100 |       0 |   13.02 | ...49-173,177-248 
  ...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 
  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 | 54-238,241-279    
  ...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              
  ...ngSpinner.tsx |   33.33 |      100 |       0 |   33.33 | 29-48             
  ...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.47 |    65.51 |     100 |   87.47 | ...44-348,364-371 
  ...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 |       0 |        0 |       0 |       0 | 1                 
  ...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 | ...99-600,633-808 
  ...ogKeypress.ts |    1.69 |      100 |       0 |    1.69 | 35-387,482-679    
  ...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 |   19.52 |       75 |    1.13 |   19.52 |                   
  ...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         |    15.2 |    83.33 |    7.69 |    15.2 | ...65-367,372-389 
  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.9 |       90 |   15.06 |    18.9 |                   
  AiMessage.tsx    |   14.51 |      100 |       0 |   14.51 | 28-95             
  ...geContent.tsx |   20.83 |      100 |       0 |   20.83 | 26-46             
  ...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             
  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 | 36-552,557-636    
  ...upMessage.tsx |    7.55 |      100 |       0 |    7.55 | ...76-269,273-348 
  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 |    42.3 |    62.09 |   40.77 |    42.3 |                   
  ...ctionList.tsx |    4.31 |      100 |       0 |    4.31 | 36-123,128-206    
  MaxSizedBox.tsx  |   49.79 |    56.75 |   70.58 |   49.79 | ...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 |   34.01 |    49.01 |   36.66 |   34.01 | ...30,632,644,687 
  buffer-types.ts  |     100 |      100 |     100 |     100 |                   
  text-buffer.ts   |   75.97 |    78.26 |    29.5 |   75.97 | ...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-357             
  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 |   56.61 |    87.54 |   59.37 |   56.61 |                   
  ...pBootstrap.ts |   93.24 |    58.33 |     100 |   93.24 | ...41-248,252-254 
  useAppDialogs.ts |   41.42 |      100 |   42.85 |   41.42 | ...63,182-398,418 
  ...ntHandlers.ts |     100 |      100 |     100 |     100 |                   
  useAppInput.ts   |    5.43 |      100 |       0 |    5.43 | 102-507,510-514   
  useAppLayout.ts  |    7.69 |      100 |       0 |    7.69 | 93-308,311-314    
  ...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 | 131-139,143       
  ...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.18 |       90 |     100 |   98.18 | 49,148            
  ...yBootstrap.ts |      30 |      100 |       0 |      30 | 28-34             
  ...eybindings.ts |   86.36 |    78.18 |     100 |   86.36 | ...02-204,248-249 
  ...easurement.ts |   15.38 |      100 |       0 |   15.38 | 45-95             
  ...reshAction.ts |   79.45 |     37.5 |     100 |   79.45 | 61,91-94,96-105   
  ...untimeSync.ts |   96.17 |    96.96 |     100 |   96.17 | 204-209           
  ...elTracking.ts |   34.69 |      100 |     100 |   34.69 | 51-95             
  ...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 |   98.88 |    94.73 |     100 |   98.88 | 88                
  ...sAutoReset.ts |     100 |       90 |     100 |     100 | 42                
  ...andActions.ts |     100 |      100 |     100 |     100 |                   
  ...eshManager.ts |     100 |      100 |     100 |     100 |                   
  ...uationFlow.ts |    7.14 |      100 |       0 |    7.14 | 57-160            
  ...csTracking.ts |   95.78 |    80.64 |     100 |   95.78 | ...22-123,174-175 
  ...uthBridges.ts |   17.94 |      100 |   33.33 |   17.94 | ...13-138,142-146 
 src/ui/contexts   |   55.64 |    80.89 |   53.76 |   55.64 |                   
  ...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 |   45.27 |    57.14 |      50 |   45.27 | ...45-246,254-255 
  ...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      |   67.98 |     85.6 |   68.37 |   67.98 |                   
  ...st-helpers.ts |   91.47 |    81.25 |   68.57 |   91.47 | ...62-163,182-186 
  ...dProcessor.ts |   82.75 |    86.88 |   77.77 |   82.75 | ...02-204,257-269 
  ...sorHelpers.ts |   83.03 |    80.35 |   96.29 |   83.03 | ...50-658,704-705 
  ...rceHelpers.ts |      56 |       50 |   71.42 |      56 | ...68-275,280-288 
  ...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 |   95.61 |       80 |     100 |   95.61 | ...87-288,420-424 
  ...ndHandlers.ts |   17.68 |    27.27 |   22.22 |   17.68 | ...47-648,653-662 
  ...dPathUtils.ts |    95.7 |    90.52 |     100 |    95.7 | ...25-227,271-272 
  ...dProcessor.ts |     100 |      100 |     100 |     100 |                   
  ...sorSupport.ts |   68.85 |    70.83 |   66.66 |   68.85 | ...81-284,302-309 
  ...tionEffect.ts |   90.78 |    86.56 |   92.85 |   90.78 | ...05-406,419-420 
  ...etionTypes.ts |       0 |        0 |       0 |       0 | 1                 
  toolMapping.ts   |   90.81 |    88.88 |   93.33 |   90.81 | ...95-207,226-228 
  ...st-helpers.ts |   75.93 |    75.86 |      24 |   75.93 | ...76-277,279-280 
  ...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 |    92.5 |    89.51 |     100 |    92.5 | ...96-597,600-601 
  ...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 | ...05-207,210-211 
  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 |   84.67 |    86.95 |     100 |   84.67 | ...12-114,130-131 
  ...BranchName.ts |     100 |       95 |     100 |     100 | 54                
  ...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 | 18-51             
  ...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 | 31-32             
  ...rdProtocol.ts |       0 |        0 |       0 |       0 | 1-26              
  ...fileDialog.ts |     5.4 |      100 |       0 |     5.4 | 23-69,72-143      
  ...gIndicator.ts |     100 |      100 |     100 |     100 |                   
  useLogger.ts     |   94.11 |      100 |     100 |   94.11 | 28                
  ...oryMonitor.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-85              
  ...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 |   85.14 |    77.77 |     100 |   85.14 | ...,75-79,109-120 
  ...Management.ts |    1.53 |      100 |       0 |    1.53 | 22-568,571-663    
  ...Completion.ts |   43.07 |    55.55 |      50 |   43.07 | ...92-305,336-345 
  ...iderDialog.ts |    5.71 |      100 |       0 |    5.71 | 39-77,80-151      
  ...lScheduler.ts |   76.42 |    97.36 |      75 |   76.42 | ...85,301-317,474 
  ...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.26 |   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.24 |    78.78 |     100 |   92.24 | ...82,130-131,141 
  ...Completion.ts |   97.07 |    81.25 |     100 |   97.07 | 71-73,101-102     
  ...oryCommand.ts |       0 |        0 |       0 |       0 | 1-64              
  ...cessorCore.ts |   74.13 |       60 |     100 |   74.13 | ...20,157,177-204 
  ...ompletion.tsx |   96.73 |    81.39 |     100 |   96.73 | ...,93-94,336-344 
  ...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.24 |    89.74 |     100 |   91.24 | ...27-128,154-164 
  ...ePreserver.ts |   57.14 |      100 |      80 |   57.14 | 58-76             
  ...oolsDialog.ts |    3.62 |      100 |       0 |    3.62 | 25-97,100-183     
  ...Onboarding.ts |    1.92 |      100 |       0 |    1.92 | 79-403,406-487    
  ...eMigration.ts |   11.66 |      100 |       0 |   11.66 | 15-74             
  vim.ts           |   85.73 |     87.8 |    90.9 |   85.73 | ...07-716,832-834 
 ...ks/agentStream |   82.81 |    78.54 |   82.08 |   82.81 |                   
  ...Dispatcher.ts |   47.55 |    35.55 |   56.25 |   47.55 | ...60,362,399-432 
  ...ersistence.ts |    98.3 |    95.34 |     100 |    98.3 | 160-162           
  ...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 |   63.63 |    46.66 |     100 |   63.63 | ...47-148,151-165 
  streamUtils.ts   |   93.43 |     87.4 |   91.66 |   93.43 | ...94-310,486-488 
  thoughtState.ts  |   93.33 |    68.75 |     100 |   93.33 | 70-71,76-77       
  ...ionHandler.ts |     100 |      100 |     100 |     100 |                   
  ...reparation.ts |   96.42 |    88.88 |     100 |   96.42 | 44                
  types.ts         |       0 |        0 |       0 |       0 | 1-17              
  ...ventStream.ts |   85.03 |    88.46 |      60 |   85.03 | ...73-287,306-307 
  ...gentStream.ts |     100 |      100 |      80 |     100 |                   
  ...mLifecycle.ts |   84.25 |    63.33 |      80 |   84.25 | ...31-232,261-266 
  ...hestration.ts |   99.18 |      100 |   88.88 |   99.18 | 112-113           
  ...ntHandlers.ts |   70.92 |    95.83 |   84.21 |   70.92 | ...39,448-457,516 
  ...treamState.ts |   79.53 |       50 |     100 |   79.53 | ...76,197,233-234 
  ...ubmitQuery.ts |   94.34 |    87.75 |   85.71 |   94.34 | ...81-482,504-506 
 src/ui/layouts    |   83.55 |    56.89 |   83.33 |   83.55 |                   
  ...AppLayout.tsx |   81.18 |    71.42 |   83.33 |   81.18 | ...91-205,321-359 
  ...utHelpers.tsx |   86.31 |     54.9 |   95.23 |   86.31 | ...88-789,810-838 
  ...ainContent.ts |   23.52 |      100 |       0 |   23.52 | 16-22,25-28,31-34 
 ...noninteractive |   74.07 |      100 |    7.14 |   74.07 |                   
  ...eractiveUi.ts |   74.07 |      100 |    7.14 |   74.07 | 17-19,23-24,27-28 
 src/ui/privacy    |   19.41 |        0 |       0 |   19.41 |                   
  ...acyNotice.tsx |       0 |        0 |       0 |       0 | 1-140             
  ...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 | 22-53,56-58       
 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      |   63.24 |    89.47 |   74.16 |   63.24 |                   
  ...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 |     100 |    95.83 |   83.33 |     100 | 136               
  ...ketedPaste.ts |      60 |      100 |       0 |      60 | 13-14,17-18       
  clipboard.ts     |   97.29 |    84.61 |     100 |   97.29 | 40                
  ...boardUtils.ts |   62.44 |    76.74 |   83.33 |   62.44 | ...49-263,333-335 
  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.52 |    94.11 |     100 |   98.52 | 137-138           
  ...storyItems.ts |   99.23 |    93.75 |     100 |   99.23 | 109               
  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.38 |    71.79 |     100 |   92.38 | ...48-251,291-295 
  ...putHandler.ts |   94.44 |    91.12 |     100 |   94.44 | ...15-316,386-387 
  ...ityManager.ts |   94.92 |    85.71 |    90.9 |   94.92 | ...28,352,380,391 
  ...alContract.ts |     100 |      100 |     100 |     100 |                   
  terminalLinks.ts |     100 |      100 |     100 |     100 |                   
  ...colCleanup.ts |   95.23 |       75 |     100 |   95.23 | 38                
  ...lSequences.ts |     100 |      100 |     100 |     100 |                   
  terminalSetup.ts |   10.72 |      100 |    7.14 |   10.72 | 80-419            
  textUtils.ts     |    93.7 |    92.15 |   88.88 |    93.7 | 20-25,156-157     
  ...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 | 35,46             
 src/utils         |   62.11 |    89.22 |   75.45 |   62.11 |                   
  ...ionContext.ts |   76.92 |       75 |     100 |   76.92 | 38-41,63-66,81-84 
  ...Formatting.ts |   94.36 |    93.54 |     100 |   94.36 | 49-50,71-72       
  bootstrap.ts     |     100 |      100 |     100 |     100 |                   
  checks.ts        |   33.33 |      100 |       0 |   33.33 | 23-28             
  cleanup.ts       |   68.25 |       80 |      60 |   68.25 | ...67-69,72,86-95 
  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 |    88.09 |     100 |   88.07 | ...73,85-88,91-94 
  ...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 |                   
  gitCommitInfo.ts |   90.27 |      100 |     100 |   90.27 | 78-80,103,110-112 
  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 | 59                
  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       
  refusalNotice.ts |     100 |      100 |     100 |     100 |                   
  relaunch.ts      |     100 |      100 |     100 |     100 |                   
  resolvePath.ts   |   66.66 |       25 |     100 |   66.66 | 12-13,16,18-19    
  ...containers.ts |    4.86 |      100 |       0 |    4.86 | ...36-656,660-686 
  ...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  |    8.73 |      100 |    12.5 |    8.73 | 56-321,338-427    
  sandbox-image.ts |    3.96 |      100 |       0 |    3.96 | 12-128            
  ...box-podman.ts |   74.67 |    94.73 |   77.77 |   74.67 | ...50-260,326-399 
  ...x-seatbelt.ts |    8.55 |      100 |       0 |    8.55 | 35-311            
  sandbox-ssh.ts   |   78.92 |    81.13 |     100 |   78.92 | ...07-308,372-376 
  sandbox.ts       |   13.23 |      100 |       0 |   13.23 | 47-111            
  ...st-helpers.ts |     100 |      100 |     100 |     100 |                   
  ...ionCleanup.ts |   88.88 |    84.21 |     100 |   88.88 | ...42-243,326-327 
  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 |   74.53 |    75.75 |   77.14 |   74.53 |                   
  ...temService.ts |     100 |      100 |     100 |     100 |                   
  ...tent-utils.ts |    8.62 |       50 |   14.28 |    8.62 | ...06-115,118-164 
  zed-helpers.ts   |      42 |    55.55 |      50 |      42 | ...59-166,168-170 
  ...h-resolver.ts |   73.33 |       56 |   96.15 |   73.33 | ...43-650,654-680 
  ...st-helpers.ts |    98.4 |      100 |   56.66 |    98.4 | 184-186           
  ...ol-handler.ts |   87.65 |     80.9 |   96.15 |   87.65 | ...16-318,365-378 
  ...ntegration.ts |   79.56 |    79.39 |   80.95 |   79.56 | ...13-814,842-844 
-------------------|---------|----------|---------|---------|-------------------
Core Package - Full Text Report
-------------------|---------|----------|---------|---------|-------------------
File               | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s 
-------------------|---------|----------|---------|---------|-------------------
All files          |   78.69 |    84.02 |      76 |   78.69 |                   
 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   |   80.88 |    80.57 |   82.14 |   80.88 |                   
  codeAssist.ts    |   17.24 |      100 |       0 |   17.24 | 22-44,51-59       
  ...orAdapters.ts |   92.26 |    71.11 |   88.88 |   92.26 | ...05-207,272-275 
  converter.ts     |   95.54 |    93.02 |     100 |   95.54 | 186-190,219-220   
  ...nAIWrapper.ts |     100 |      100 |     100 |     100 |                   
  ...al-storage.ts |   95.86 |    79.48 |     100 |   95.86 | 27-28,86,110,139  
  server.ts        |   48.16 |    72.72 |      50 |   48.16 | ...15-256,259-262 
  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.24 |     79.9 |   58.21 |   70.24 |                   
  ...tLifecycle.ts |   80.34 |    97.05 |      80 |   80.34 | ...49-253,262-286 
  ...skServices.ts |    9.19 |      100 |       0 |    9.19 | ...5,62-80,89-129 
  config.ts        |    62.5 |     80.2 |   58.97 |    62.5 | ...85-794,819-839 
  configBase.ts    |   68.81 |    72.09 |   72.72 |   68.81 | ...48-255,257-261 
  ...igBaseCore.ts |   69.07 |    94.52 |   44.23 |   69.07 | ...35-836,838-839 
  ...onstructor.ts |   96.93 |    88.88 |     100 |   96.93 | ...97-498,501-502 
  ...estHarness.ts |   93.15 |      100 |   83.33 |   93.15 | 229-239,245-248   
  configTypes.ts   |      58 |      100 |      50 |      58 | 215-255           
  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 | ...17,434,443,452 
  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.53 |    76.92 |   69.23 |   84.53 | ...58,472,490-506 
  types.ts         |       0 |        0 |       0 |       0 |                   
 ...nfirmation-bus |   88.88 |    66.66 |   66.66 |   88.88 |                   
  index.ts         |       0 |        0 |       0 |       0 | 1-2               
  message-bus.ts   |     100 |      100 |     100 |     100 |                   
  types.ts         |     100 |      100 |     100 |     100 |                   
 src/core          |   79.55 |    77.32 |    87.5 |   79.55 |                   
  ...ssionTypes.ts |       0 |        0 |       0 |       0 | 1-90              
  ...ntContract.ts |     100 |      100 |     100 |     100 |                   
  ...tGenerator.ts |   97.43 |    92.59 |     100 |   97.43 | 92-93             
  ...okTriggers.ts |   47.39 |     61.9 |   66.66 |   47.39 | ...51,253,299-304 
  ...igBoundary.ts |       0 |        0 |       0 |       0 | 1                 
  ...okTriggers.ts |   96.09 |    84.37 |     100 |   96.09 | ...22,161,208,250 
  logger.ts        |   78.22 |    80.19 |   94.44 |   78.22 | ...56-470,513-525 
  prompts.ts       |   82.69 |     58.9 |    91.3 |   82.69 | ...51,554,615-616 
  subagentTypes.ts |   83.11 |    68.42 |   77.77 |   83.11 | ...03-304,319-320 
  tokenLimits.ts   |     100 |      100 |     100 |     100 |                   
  ...erContract.ts |     100 |      100 |     100 |     100 |                   
  turn.ts          |     100 |      100 |     100 |     100 |                   
 ...re/compression |   29.71 |    33.33 |   14.28 |   29.71 |                   
  ...nDirective.ts |    6.25 |      100 |       0 |    6.25 | 22-62             
  types.ts         |   34.96 |    33.33 |   16.66 |   34.96 | ...20-421,434-436 
 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       |   97.79 |    95.62 |     100 |   97.79 |                   
  EmojiFilter.ts   |   97.79 |    95.62 |     100 |   97.79 | ...55-156,363-364 
 src/hooks         |    84.3 |    85.56 |   82.08 |    84.3 |                   
  errors.ts        |     100 |      100 |     100 |     100 |                   
  ...Aggregator.ts |   90.55 |    81.33 |    87.5 |   90.55 | ...58,377,379,381 
  ...sContracts.ts |       0 |        0 |       0 |       0 | 1                 
  ...entHandler.ts |   91.43 |    88.18 |   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 |   94.11 |    75.67 |     100 |   94.11 | ...68,479,524,529 
  ...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         |   63.63 |    89.13 |   60.71 |   63.63 | ...08-509,520-521 
 ...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/llm-types     |   92.44 |    90.72 |   98.46 |   92.44 |                   
  afcHistory.ts    |   79.26 |    68.96 |     100 |   79.26 | ...99-100,102-103 
  ...ssageInput.ts |   86.09 |     86.2 |   97.29 |   86.09 | ...61-462,489-490 
  finishReasons.ts |   97.56 |    83.33 |     100 |   97.56 | 153-154           
  geminiContent.ts |       0 |        0 |       0 |       0 |                   
  grounding.ts     |       0 |        0 |       0 |       0 |                   
  index.ts         |     100 |      100 |     100 |     100 |                   
  jsonSchema.ts    |     100 |      100 |     100 |     100 |                   
  modelEnvelope.ts |     100 |      100 |     100 |     100 |                   
  modelRequest.ts  |       0 |        0 |       0 |       0 |                   
  ...erApiError.ts |     100 |      100 |     100 |     100 |                   
  ...Embeddings.ts |       0 |        0 |       0 |       0 |                   
  toolCall.ts      |     100 |    98.14 |     100 |     100 | 216               
  ...eclaration.ts |     100 |      100 |     100 |     100 |                   
 src/models        |   89.01 |       90 |   92.68 |   89.01 |                   
  hydration.ts     |    47.1 |    64.28 |      50 |    47.1 | ...09-110,180-260 
  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      |   92.76 |    89.06 |      96 |   92.76 | ...72-273,399-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.63 |    87.55 |   82.96 |   82.63 |                   
  ...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.9 |    92.56 |   92.85 |    90.9 | ...13-530,540-541 
  ...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.38 |    46.03 |   85.41 |   56.38 |                   
  core-defaults.ts |      48 |     41.5 |   78.57 |      48 | ...55,365,371-379 
  index.ts         |     100 |      100 |     100 |     100 |                   
  ...est-loader.ts |   81.81 |       80 |     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 |   55.74 |     42.3 |   84.61 |   55.74 | ...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.2 |   98.09 |    90.2 |                   
  ...ntegration.ts |    83.9 |       75 |     100 |    83.9 | ...31-132,143-144 
  ReplayEngine.ts  |   95.78 |       91 |     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       |   81.93 |    86.24 |   81.44 |   81.93 |                   
  ...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 |   75.86 |    97.82 |   63.33 |   75.86 | ...03-308,310-317 
  index.ts         |       0 |        0 |       0 |       0 | 1-19              
  ...imeContext.ts |      70 |       90 |     100 |      70 | 88-108            
  ...meAdapters.ts |    61.4 |    95.23 |    92.3 |    61.4 | 77-120            
  ...ateFactory.ts |    90.9 |    71.42 |     100 |    90.9 | ...93,116,126,139 
  ...imeAdapter.ts |   80.55 |    85.71 |   88.88 |   80.55 | 62-69,84-85,88-93 
 ...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     |      90 |       80 |      50 |      90 |                   
  liveOutput.ts    |     100 |      100 |     100 |     100 |                   
  types.ts         |       0 |        0 |       0 |       0 | 1                 
 src/services      |   84.74 |    86.28 |   88.83 |   84.74 |                   
  ...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.21 |    88.23 |    62.5 |   71.21 | ...83-306,365-378 
  ...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 | ...22,153-154,210 
  ...yLifecycle.ts |   87.68 |    78.12 |   94.73 |   87.68 | ...21,324,378-380 
  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 |   83.97 |    87.01 |   87.83 |   83.97 |                   
  ...Converters.ts |    87.7 |    86.33 |      84 |    87.7 | ...50,427-433,491 
  HistoryEvents.ts |       0 |        0 |       0 |       0 |                   
  ...oryService.ts |   85.99 |    90.36 |   86.79 |   85.99 | ...16-717,796-797 
  IContent.ts      |   95.29 |    87.87 |     100 |   95.29 | 287-288,313-314   
  ...calToolIds.ts |   96.87 |    94.11 |     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        |   74.53 |    80.31 |   77.77 |   74.53 |                   
  ...lDiscovery.ts |     100 |      100 |     100 |     100 |                   
  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.38 |    60.56 |   23.07 |   53.38 |                   
  config.ts        |   83.45 |    88.23 |   20.83 |   83.45 | ...,94-99,176-179 
  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 |   46.36 |    73.25 |   35.54 |   46.36 |                   
  ...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 |   13.95 |      100 |       0 |   13.95 | ...76,79-80,83-98 
  ...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 | ...83-189,192-193 
  ...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 
  ...iceHelpers.ts |   56.57 |       50 |      70 |   56.57 | ...93-194,198-199 
  index.ts         |     100 |      100 |     100 |     100 |                   
 src/utils         |   84.06 |    86.42 |   85.12 |   84.06 |                   
  LruCache.ts      |    82.6 |      100 |   71.42 |    82.6 | 29-30,33-34       
  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             
  bunPtyAdapter.ts |   88.76 |    84.78 |   84.21 |   88.76 | ...27-532,551-554 
  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 | ...40-142,150-155 
  errors.ts        |   70.12 |     92.3 |   31.25 |   70.12 | ...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 |      100 |       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 | ...00,469,503-509 
  formatters.ts    |   18.18 |      100 |       0 |   18.18 | 8-16              
  ...eUtilities.ts |   91.17 |    80.39 |   94.11 |   91.17 | ...77-381,415-425 
  ...rStructure.ts |   95.57 |    94.59 |     100 |   95.57 | ...15-216,376-381 
  getPty.ts        |   70.83 |       75 |      50 |   70.83 | 43-49             
  ...noreParser.ts |     100 |      100 |     100 |     100 |                   
  ...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-157             
  ...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-39              
  output-format.ts |      40 |      100 |      25 |      40 | ...58-159,169-190 
  package.ts       |     100 |      100 |     100 |     100 |                   
  ...erCoercion.ts |   80.89 |       80 |     100 |   80.89 | ...47-348,351-352 
  partUtils.ts     |   97.29 |    95.55 |     100 |   97.29 | 53-54             
  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 
  refusalNotice.ts |     100 |      100 |     100 |     100 |                   
  ...archTarget.ts |   89.58 |    69.23 |     100 |   89.58 | 45-47,65-66       
  retry.ts         |   83.76 |    86.53 |   92.59 |   83.76 | ...85-988,993-994 
  ...thResolver.ts |     100 |      100 |     100 |     100 |                   
  runtime.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  |   87.64 |    80.53 |     100 |   87.64 | ...99-600,669-670 
  shell-utils.ts   |   85.99 |     92.7 |      88 |   85.99 | ...51-652,814-822 
  ...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 |   98.24 |    93.93 |     100 |   98.24 | 101-102           
  summarizer.ts    |   98.14 |       90 |     100 |   98.14 | 98                
  ...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.

Comment thread scripts/genai-enclave/config.ts
Comment thread scripts/tests/genai-enclave-guard-helpers.ts Outdated
Comment thread scripts/tests/genai-enclave-scanner.test.ts Outdated
Comment thread scripts/tests/genai-published-root.test.ts Outdated
Comment thread scripts/tests/genai-enclave-guard.test.ts Outdated
Comment thread scripts/check-genai-enclave.ts
Comment thread scripts/tests/genai-enclave-guard-allowlist.test.ts Outdated
Comment thread scripts/tests/publish-integrity.test.ts Outdated
Comment thread scripts/genai-enclave/scanner.ts Outdated
Comment thread scripts/genai-enclave/scanner.ts
Comment thread scripts/tests/genai-enclave-guard-allowlist.test.ts Outdated
Comment thread scripts/tests/genai-enclave-guard-allowlist.test.ts Outdated
Comment thread scripts/genai-enclave/config.ts
Comment thread scripts/genai-enclave/config.ts
Comment thread scripts/tests/genai-enclave-guard-helpers.ts
Comment thread scripts/tests/genai-enclave-guard.test.ts Outdated
Comment thread scripts/tests/genai-enclave-guard.test.ts Outdated
Comment thread scripts/genai-enclave/scanner.ts Outdated
Comment thread scripts/genai-enclave/scanner.ts Outdated
Comment thread scripts/genai-enclave/scanner.ts Outdated
Comment thread scripts/tests/genai-enclave-guard.test.ts Outdated
Comment thread scripts/genai-enclave/config.ts
Comment thread packages/providers/src/fake/FakeProvider.ts
Comment thread scripts/tests/genai-enclave-guard-helpers.ts
Comment thread scripts/genai-enclave/scanner.ts Outdated
Comment thread scripts/tests/genai-enclave-guard-helpers.ts
Comment thread scripts/tests/genai-enclave-guard-helpers.ts Outdated
Comment thread scripts/tests/genai-published-root.test.ts
Comment thread scripts/tests/publish-integrity.test.ts Outdated
Comment thread scripts/genai-enclave/scanner.ts Outdated
Comment thread scripts/tests/genai-enclave-guard-allowlist.test.ts
Comment thread scripts/tests/genai-enclave-guard-allowlist.test.ts
Comment thread scripts/check-genai-enclave.ts Outdated
Comment thread scripts/check-genai-enclave.ts
Comment thread scripts/check-genai-enclave.ts
Comment thread scripts/tests/genai-enclave-guard.test.ts
Comment thread scripts/tests/genai-enclave-guard.test.ts Outdated
Comment thread scripts/tests/genai-enclave-guard-helpers.ts Outdated
Comment thread scripts/tests/genai-enclave-guard-helpers.ts
Comment thread scripts/tests/genai-enclave-guard-allowlist.test.ts Outdated
Comment thread scripts/tests/genai-published-root.test.ts
Comment thread scripts/genai-enclave/scanner.ts Outdated
Comment thread scripts/tests/genai-enclave-guard.test.ts Outdated
Comment thread scripts/tests/genai-enclave-guard.test.ts Outdated
Comment thread scripts/tests/genai-enclave-guard.test.ts
Comment thread scripts/tests/publish-integrity.test.ts Outdated

@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.

🧹 Nitpick comments (1)
scripts/tests/genai-enclave-guard.test.ts (1)

41-218: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Import the shared harness from genai-enclave-guard-helpers.ts instead of duplicating it.

RUNTIME, bunAvailable, ScriptResult, runScript, runScriptRealRepo, withFixture, and GEMINI_IMPORT are already exported by scripts/tests/genai-enclave-guard-helpers.ts (which genai-published-root.test.ts consumes). The duplicated copies here have already drifted: this file uses process.env.BUN_EXECUTABLE ?? 'bun' (Line 44) while the helper uses || 'bun' (empty-string safe), and the local runScript/runScriptRealRepo do not delegate to the shared runGuard. Consolidating on the helper module removes ~150 lines and prevents further behavioral divergence.

🤖 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/tests/genai-enclave-guard.test.ts` around lines 41 - 218, Replace the
duplicated harness definitions in genai-enclave-guard.test.ts with imports from
genai-enclave-guard-helpers.ts, including RUNTIME, bunAvailable, ScriptResult,
runScript, runScriptRealRepo, withFixture, and GEMINI_IMPORT. Remove the local
implementations and update usages to rely on the shared helper behavior,
including runGuard delegation and empty-string-safe BUN_EXECUTABLE handling.
🤖 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.

Nitpick comments:
In `@scripts/tests/genai-enclave-guard.test.ts`:
- Around line 41-218: Replace the duplicated harness definitions in
genai-enclave-guard.test.ts with imports from genai-enclave-guard-helpers.ts,
including RUNTIME, bunAvailable, ScriptResult, runScript, runScriptRealRepo,
withFixture, and GEMINI_IMPORT. Remove the local implementations and update
usages to rely on the shared helper behavior, including runGuard delegation and
empty-string-safe BUN_EXECUTABLE handling.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: a7ada948-d33b-40fc-9cc7-6a47beb6ee90

📥 Commits

Reviewing files that changed from the base of the PR and between d3eefc8 and 93342f7.

⛔ Files ignored due to path filters (2)
  • dev-docs/genai-enclave-boundary-rules.md is excluded by !dev-docs/**
  • dev-docs/genai-import-baseline.md is excluded by !dev-docs/**
📒 Files selected for processing (14)
  • .github/workflows/ci.yml
  • .llxprt/LLXPRT.md
  • package.json
  • packages/core/src/utils/getPty.ts
  • packages/providers/src/fake/FakeProvider.ts
  • scripts/check-genai-enclave.ts
  • scripts/genai-enclave/config.ts
  • scripts/genai-enclave/scanner.ts
  • scripts/tests/genai-enclave-guard-allowlist.test.ts
  • scripts/tests/genai-enclave-guard-helpers.ts
  • scripts/tests/genai-enclave-guard.test.ts
  • scripts/tests/genai-enclave-scanner.test.ts
  • scripts/tests/genai-published-root.test.ts
  • scripts/tests/publish-integrity.test.ts

Comment thread scripts/tests/genai-enclave-guard-allowlist.test.ts Outdated
Comment thread scripts/genai-enclave/config.ts
Comment thread scripts/tests/genai-enclave-guard-helpers.ts
Comment thread scripts/tests/genai-published-root.test.ts
Comment thread scripts/tests/genai-published-root.test.ts
Comment thread scripts/tests/genai-published-root.test.ts Outdated
Comment thread scripts/tests/genai-enclave-guard-helpers.ts
Comment thread scripts/tests/genai-enclave-guard.test.ts Outdated
Comment thread scripts/tests/genai-enclave-guard.test.ts
Comment thread scripts/genai-enclave/provenance.ts
Comment thread scripts/tests/genai-enclave-adversarial.test.ts Outdated
Comment thread scripts/tests/genai-enclave-guard-allowlist.test.ts
Comment thread scripts/genai-enclave/ast-helpers.ts
Comment thread scripts/check-genai-enclave.ts
Comment thread scripts/check-genai-enclave.ts
Comment thread scripts/check-genai-enclave.ts
Comment thread scripts/genai-enclave/config.ts
Comment thread scripts/tests/publish-dependency-helpers.test.ts
Comment thread scripts/tests/workspace-source-helpers.ts Outdated
Comment thread scripts/tests/workspace-source-helpers.ts
Comment thread scripts/tests/workspace-source-helpers.ts
Comment thread scripts/tests/workspace-source-helpers.ts Outdated
Comment thread scripts/genai-enclave/ast-helpers.ts
Comment thread scripts/genai-enclave/import-detection.ts
Comment thread scripts/genai-enclave/import-detection.ts Outdated
Comment thread scripts/genai-enclave/import-detection.ts
Comment thread scripts/genai-enclave/export-detection.ts Outdated
Comment thread scripts/tests/workspace-source-helpers.ts
Comment thread scripts/genai-enclave/provenance.ts
Comment thread scripts/tests/workspace-source-helpers.ts
Comment thread scripts/tests/workspace-source-helpers.ts
Comment thread scripts/genai-enclave/provenance.ts

@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: 13

🧹 Nitpick comments (1)
scripts/genai-enclave/provenance.ts (1)

211-225: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

Remove clearNonShadowEntries() or wire it into the fixed-point loop. It isn’t called anywhere under scripts/genai-enclave, so the fixed-point doc comment is misleading and the method reads as dead code.

🤖 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/genai-enclave/provenance.ts` around lines 211 - 225, The unused
clearNonShadowEntries method is dead code, while its documentation claims
fixed-point-loop usage. Remove clearNonShadowEntries() and its associated
misleading comment, or invoke it at the appropriate point in the fixed-point
iteration so prior non-shadow entries are cleared as described.
🤖 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 `@packages/cli/vitest.agentStream.config.ts`:
- Around line 7-20: Update the configuration built by mergeConfig in the default
export so the test.include and test.exclude arrays from baseConfig are replaced
rather than appended, ensuring only src/agentStream.test.tsx is selected while
retaining the intended node_modules and dist exclusions.

In `@scripts/genai-enclave/export-cjs.ts`:
- Around line 430-441: Update the non-EqualsToken branch to use
isCommonJSExports(ctx, lhs) instead of isModuleExports(ctx, lhs), ensuring
whole-target logical assignments on both module.exports and bare exports inspect
their RHS. Add a regression test for exports ||= { GeminiLeak: 1 } alongside the
existing module.exports logical-assignment coverage, and preserve equivalent
handling for ??= and &&=.
- Around line 456-494: Update dispatchStaticMethod, as used by
checkCommonJSCall, to recognize Reflect.set and route it to the existing
export-mutation checker so Reflect.set(exports, ...) violations are detected.
Keep the current defineProperty, defineProperties, and assign handling
unchanged, and do not add unrelated static methods.

In `@scripts/genai-enclave/export-detection.ts`:
- Around line 163-176: Update checkVariableStatement to inspect each variable
declaration’s initializer in addition to its binding names. When the initializer
is an object literal, recurse through its properties using the existing
object-literal checking helper so nested Gemini-named properties in exported
const/let/var declarations produce violations, while preserving the current
binding-name checks.

In `@scripts/genai-enclave/import-context.ts`:
- Around line 43-63: The isCreateRequireFactoryCallee helper only recognizes
dot-notation namespace access; add equivalent handling for a computed
ElementAccessExpression whose property text is “createRequire”. Reuse
elementAccessLiteralText to validate the bracket key, require the object
expression to be an identifier, and apply the same resolver.isNamespace check
used by the property-access branch.

In `@scripts/genai-enclave/manifest-enforcement.ts`:
- Around line 315-329: Update genaiAliasViolation so its diagnostic uses the raw
alias specifier in version without prepending npm:${target}@ again. Preserve the
existing violation detection and message context, ensuring the rendered alias
displays the original value exactly once before the prohibition text.

In `@scripts/genai-enclave/provenance-collection.ts`:
- Around line 457-475: Centralize the duplicated variable-range and
function-classification logic in provenance.ts: export one helper equivalent to
variableDeclarationRange/computeVarRange using moduleRange, hoistedRange, and
blockScopedRange, and one accessor-aware classifier equivalent to
isFunctionLikeDeclaration/isFunctionLikeNode that includes get/set accessors.
Update scripts/genai-enclave/provenance-collection.ts lines 457-475 and 568-584,
and scripts/genai-enclave/export-provenance.ts lines 117-135 and 60-76, to
import and use these shared helpers and remove the local implementations.

In `@scripts/tests/genai-enclave-adversarial.test.ts`:
- Around line 255-268: Add a valid package.json manifest inside externalDir
before calling discoverPackageWorkspaces in the symlink-outside-repo-root test.
Keep the existing symlink setup and assertion unchanged so packages/evil would
qualify by manifest but is still excluded by the symlink guard.

In `@scripts/tests/genai-enclave-guard-manifest.test.ts`:
- Around line 98-113: Update each listed manifest-violation test’s withFixture
setup, including the nested-package test and the F9 duplicate-declaration test,
to call writeRequiredManifests(write) before writing the manifest under test.
Keep each test’s targeted manifest and assertions unchanged so failures come
from the intended violation rather than missing required manifests.

In `@scripts/tests/genai-enclave-scanner-exports.test.ts`:
- Around line 27-32: Update the invalid-syntax test around parseSourceFile so it
no longer accesses the internal SourceFile.parseDiagnostics field. Use a public
TypeScript diagnostics API, or the scanner’s exposed diagnostics result if
available, while preserving the assertion that broken syntax produces at least
one diagnostic.

In `@scripts/tests/genai-enclave-scanner-regressions.test.ts`:
- Around line 191-204: Strengthen the assertion in the createRequire regression
test by asserting the entire violations result is empty with
expect(violations).toEqual([]), rather than filtering for fail-closed entries.
Keep the existing scanGeminiExports setup and test scenario unchanged.

In `@scripts/tests/publish-dependency-helpers.ts`:
- Around line 138-155: Update extractSemverRange to reuse the same
first-@-after-scope delimiter logic as extractNpmAliasTarget instead of using
lastIndexOf('@'). Ensure versionless scoped aliases such as npm:`@scope/pkg`
return null, while valid aliases extract only the version range; add coverage in
publish-dependency-helpers.test.ts for this case.

In `@scripts/tests/published-closure-regressions.test.ts`:
- Around line 366-416: Update the three resolver calls in the tests for
manifest-name mismatch, missing directories, and wrong workspaces to provide a
valid consumerWorkspace third argument. Use the temporary repository’s real
workspace directory so each test reaches its intended file: validation logic
instead of failing early due to a missing consumer workspace.

---

Nitpick comments:
In `@scripts/genai-enclave/provenance.ts`:
- Around line 211-225: The unused clearNonShadowEntries method is dead code,
while its documentation claims fixed-point-loop usage. Remove
clearNonShadowEntries() and its associated misleading comment, or invoke it at
the appropriate point in the fixed-point iteration so prior non-shadow entries
are cleared as described.
🪄 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: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: ffed0193-f6b1-4a31-aad9-d88f39696717

📥 Commits

Reviewing files that changed from the base of the PR and between 93342f7 and 7897889.

⛔ Files ignored due to path filters (2)
  • bun.lock is excluded by !**/*.lock, !**/*.lock
  • package-lock.json is excluded by !**/package-lock.json, !package-lock.json
📒 Files selected for processing (40)
  • package.json
  • packages/agents/src/api/__tests__/app-service-boundary.spec.ts
  • packages/agents/src/api/__tests__/helpers/eventHarness.ts
  • packages/cli/src/launcher/cli-bin.test.ts
  • packages/cli/src/ui/commands/test/subagentCommand.test.ts
  • packages/cli/vitest.agentStream.config.ts
  • packages/core/package.json
  • packages/tools/package.json
  • scripts/check-genai-enclave.ts
  • scripts/genai-enclave/ast-helpers.ts
  • scripts/genai-enclave/config.ts
  • scripts/genai-enclave/export-cjs.ts
  • scripts/genai-enclave/export-detection.ts
  • scripts/genai-enclave/export-provenance.ts
  • scripts/genai-enclave/import-context.ts
  • scripts/genai-enclave/import-detection.ts
  • scripts/genai-enclave/manifest-enforcement.ts
  • scripts/genai-enclave/provenance-collection.ts
  • scripts/genai-enclave/provenance.ts
  • scripts/genai-enclave/scanner.ts
  • scripts/genai-enclave/violation-types.ts
  • scripts/tests/genai-enclave-adversarial.test.ts
  • scripts/tests/genai-enclave-guard-allowlist.test.ts
  • scripts/tests/genai-enclave-guard-helpers.ts
  • scripts/tests/genai-enclave-guard-manifest.test.ts
  • scripts/tests/genai-enclave-guard.test.ts
  • scripts/tests/genai-enclave-scanner-alias.test.ts
  • scripts/tests/genai-enclave-scanner-bypass.test.ts
  • scripts/tests/genai-enclave-scanner-exports.test.ts
  • scripts/tests/genai-enclave-scanner-regressions.test.ts
  • scripts/tests/genai-enclave-scanner.test.ts
  • scripts/tests/genai-manifest-enforcement.test.ts
  • scripts/tests/genai-published-root.test.ts
  • scripts/tests/publish-dependency-helpers.test.ts
  • scripts/tests/publish-dependency-helpers.ts
  • scripts/tests/publish-dependency-protocols.test.ts
  • scripts/tests/publish-integrity.test.ts
  • scripts/tests/published-closure-regressions.test.ts
  • scripts/tests/workspace-source-helpers.test.ts
  • scripts/tests/workspace-source-helpers.ts
🚧 Files skipped from review as they are similar to previous changes (3)
  • scripts/genai-enclave/config.ts
  • scripts/tests/genai-enclave-guard-allowlist.test.ts
  • scripts/tests/genai-enclave-guard-helpers.ts

Comment thread packages/cli/vitest.agentStream.config.ts
Comment thread scripts/genai-enclave/export-cjs.ts
Comment thread scripts/genai-enclave/export-cjs.ts
Comment thread scripts/genai-enclave/export-detection.ts
Comment thread scripts/genai-enclave/import-context.ts
Comment thread scripts/tests/genai-enclave-guard-manifest.test.ts
Comment thread scripts/tests/genai-enclave-scanner-exports.test.ts
Comment thread scripts/tests/genai-enclave-scanner-regressions.test.ts Outdated
Comment thread scripts/tests/publish-dependency-helpers.ts
Comment thread scripts/tests/published-closure-regressions.test.ts
Comment thread packages/providers/src/fake/FakeProvider.ts
Comment thread packages/agents/src/api/__tests__/app-service-boundary.spec.ts
Comment thread scripts/genai-enclave/ast-helpers.ts
Comment thread scripts/check-genai-enclave.ts
Comment thread scripts/check-genai-enclave.ts
Comment thread scripts/tests/publish-integrity.test.ts
Comment thread scripts/tests/workspace-source-helpers.ts
Comment thread scripts/tests/workspace-source-helpers.ts
Comment thread scripts/tests/workspace-source-helpers.ts
Comment thread scripts/tests/workspace-source-helpers.ts
@acoliver acoliver added this to the 0.10.0 milestone Jul 14, 2026
Comment thread packages/agents/src/api/__tests__/app-service-boundary.spec.ts
Comment thread scripts/check-genai-enclave.ts
Comment thread scripts/check-genai-enclave.ts
Comment thread scripts/check-genai-enclave.ts
Comment thread scripts/check-genai-enclave.ts
Comment thread scripts/tests/published-closure-regressions.test.ts
Comment thread scripts/tests/published-closure-regressions.test.ts
Comment thread scripts/tests/publish-dependency-helpers.ts
Comment thread scripts/tests/publish-dependency-helpers.ts
Comment thread scripts/tests/publish-dependency-helpers.ts
acoliver added 2 commits July 15, 2026 00:12
# Conflicts:
#	packages/agents/src/core/__tests__/providerAgnosticNaming.test.ts
IContent,
UsageStats,
} from '@vybestack/llxprt-code-core/services/history/IContent.js';
import type { GeminiContent } from '@vybestack/llxprt-code-core/llm-types/index.js';

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.

Refactoring looks clean and safe: you replaced the @​google/genai Content import with the internal neutral GeminiContent type, and ContentConverters.toIContent already accepts GeminiContent as input. No issues found in this diff.

Comment on lines +293 to +314
function checkInlineSpreadNames(
ctx: ExportScanContext,
property: ts.SpreadAssignment,
exportForm: string,
violations: GeminiExportViolation[],
): void {
if (isStaticSpreadSource(property)) {
const names = inlineSpreadPropertyNames(property);
for (const name of names) {
checkSinglePropertyName(ctx, property, name, exportForm, violations);
}
// Empty but inspectable — no fail-closed needed.
return;
}
// F2: non-literal spread source — cannot statically inspect properties.
addFailClosedViolation(
ctx,
property,
`${exportForm} with non-literal spread source`,
violations,
);
}

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.

Security/DETECTION GAP: checkInlineSpreadNames only checks top-level property names from inline spread sources, but does NOT recursively descend into nested object literals the way checkObjectLiteralProperties does for regular properties. This means export = { ...{ nested: { GeminiDeep: 1 } } } would miss the deeply nested GeminiDeep property, creating an exploitable detection gap.

Suggestion: After collecting names from inlineSpreadPropertyNames, also recurse into any nested object literal properties within the spread source. For example, iterate expr.properties, and for each non-spread property, if its initializer unwraps to an object literal, call checkObjectLiteralProperties on it. Alternatively, factor out a helper like collectNestedObjectLiteralBindings and reuse the existing recursive logic.

Comment on lines +105 to +134
export function isCreateRequireFactoryCallee(
ctx: ImportScanContext,
expr: ts.Expression,
): boolean {
const candidate = unwrapTransparentExpressions(expr);
if (ts.isIdentifier(candidate)) {
return ctx.resolver.isFactoryAlias(candidate.text, candidate.getStart());
}
if (
ts.isPropertyAccessExpression(candidate) &&
candidate.name.text === 'createRequire'
) {
const namespace = unwrapTransparentExpressions(candidate.expression);
return (
ts.isIdentifier(namespace) &&
ctx.resolver.isNamespace(namespace.text, namespace.getStart())
);
}
if (
ts.isElementAccessExpression(candidate) &&
elementAccessLiteralText(candidate.argumentExpression) === 'createRequire'
) {
const namespace = unwrapTransparentExpressions(candidate.expression);
return (
ts.isIdentifier(namespace) &&
ctx.resolver.isNamespace(namespace.text, namespace.getStart())
);
}
return false;
}

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.

Optional-chaining wrappers (ChainExpression / PropertyAccessChain / ElementAccessChain) are not unwrapped by unwrapTransparentExpressions and are not matched by the ts.isPropertyAccessExpression / ts.isElementAccessExpression checks here. Expressions like m?.createRequire, obj?.['createRequire'], or createRequire?.() would bypass isCreateRequireFactoryCallee and isCreateRequireHelperCallee, allowing a forbidden call to slip through the genai-enclave boundary guard. Consider unwrapping ChainExpression in unwrapTransparentExpressions or adding explicit handling for ChainExpression in these callee checks so optional chaining does not create a detection bypass.

Comment thread scripts/genai-enclave/config.ts Outdated
Comment thread scripts/genai-enclave/config.ts Outdated
Comment on lines +78 to +79
// Finding4: deriveAllEntryPaths now collects ALL leaf paths from every
// exports entry, not just the bun condition.

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.

The 'Finding4' comment appears to be an internal development note/tracking reference that should be removed or replaced with a descriptive comment explaining the expected behavior. Test comments should describe the behavior being verified, not reference internal findings.

Comment on lines +651 to +662
const rootPackage = JSON.parse(
readFileSync(join(repoRoot, 'package.json'), 'utf-8'),
) as RootPackageMetadata;
const packed = getPackedPaths();

const packageNameToWorkspace = buildPackageNameToWorkspaceMap(
repoRoot,
rootPackage.workspaces ?? [],
);

const shippedWorkspacePackagePaths =
collectShippedWorkspacePackagePaths(rootPackage);

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.

The setup logic for parsing the root package.json, obtaining packed paths, building the package-name-to-workspace map, and collecting shipped workspace paths is duplicated across three test cases. This violates DRY principles and creates maintenance risk where fixes to the setup logic must be applied in multiple places. Consider extracting this common setup into a shared helper function or a beforeEach hook to ensure consistency and reduce boilerplate.

Comment on lines +553 to +556
expect(cliPackage.dependencies?.['@google/genai']).toBeUndefined();
expect(cliPackage.devDependencies?.['@google/genai']).toBeUndefined();
expect(cliPackage.optionalDependencies?.['@google/genai']).toBeUndefined();
expect(cliPackage.peerDependencies?.['@google/genai']).toBeUndefined();

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.

The package name '@​google/genai' is hardcoded in four separate assertions. As a business-specific dependency identifier, this should be extracted to a named constant (e.g., GENAI_PACKAGE_NAME) to improve maintainability and reduce the risk of inconsistent updates if the dependency changes.


it(
'ships source for every internal workspace dependency of shipped workspaces',
{ timeout: 60000 },

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.

The timeout value 60000 is repeated three times as a magic number. Extract this to a named constant (e.g., LONG_TEST_TIMEOUT) at the file or describe-block level to improve readability and make threshold adjustments easier if performance characteristics change.

Comment on lines +641 to +647
let current = queue.shift();
while (current !== undefined) {
if (visited.has(current)) {
current = queue.shift();
continue;
}
visited.add(current);

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.

The BFS traversal uses queue.shift() inside a loop, which is O(n) per operation. For transitive closure checks over packages with large import graphs, this makes the overall traversal O(n²) and can cause test timeouts. Replace the array-as-queue pattern with an index pointer (let head = 0; ... const current = queue[head++];) to achieve O(1) dequeue operations.

@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: 3

🤖 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/genai-enclave/helper-return-analysis.ts`:
- Around line 40-92: Extend statementReturnFlow to explicitly analyze
TryStatement and SwitchStatement instead of treating them as unsupported
fallthroughs, preserving accurate allValueReturnsProven, canFallThrough, and
hasValueReturn results across try/catch/finally and switch clauses. Add
adversarial positive and negative tests covering proven returns, throwing
branches, fallthrough, and loader-detection provenance such as getReq.

In `@scripts/genai-enclave/import-detection.ts`:
- Around line 216-236: Extend the callee checks in the `.call`/`.apply` and
nested `.bind` handling around isCreateRequireFactoryCallee to also recognize
helper-returning loaders, using the existing helper-detection symbol and
preserving current createRequire behavior. Add a regression case in
genai-enclave-scanner-regressions.test.ts covering helperFn.call(null,
url)('`@google/genai`') and equivalent supported loader invocation.

In `@scripts/genai-enclave/scanner.ts`:
- Around line 58-68: Update the transpilation setup around ts.transpileModule to
pass the actual filePath as fileName instead of selecting synthetic
diagnostics.ts or diagnostics.tsx names, while preserving the existing compiler
options and diagnostics behavior. Ensure filePath is available through the
scanner flow, and add regressions covering .js, .cjs, .mjs, and .json inputs.
🪄 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: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: bd6b01c4-501d-4679-98b5-0ad419627cdf

📥 Commits

Reviewing files that changed from the base of the PR and between 7897889 and ab144b8.

⛔ Files ignored due to path filters (2)
  • bun.lock is excluded by !**/*.lock, !**/*.lock
  • package-lock.json is excluded by !**/package-lock.json, !package-lock.json
📒 Files selected for processing (25)
  • .llxprt/LLXPRT.md
  • packages/cli/vitest.agentStream.config.ts
  • scripts/check-genai-enclave.ts
  • scripts/genai-enclave/ast-helpers.ts
  • scripts/genai-enclave/export-cjs.ts
  • scripts/genai-enclave/export-detection.ts
  • scripts/genai-enclave/export-provenance.ts
  • scripts/genai-enclave/helper-return-analysis.ts
  • scripts/genai-enclave/import-context.ts
  • scripts/genai-enclave/import-detection.ts
  • scripts/genai-enclave/manifest-enforcement.ts
  • scripts/genai-enclave/provenance-collection.ts
  • scripts/genai-enclave/provenance.ts
  • scripts/genai-enclave/scanner.ts
  • scripts/tests/genai-enclave-adversarial.test.ts
  • scripts/tests/genai-enclave-guard-allowlist.test.ts
  • scripts/tests/genai-enclave-guard-manifest.test.ts
  • scripts/tests/genai-enclave-review-regressions.test.ts
  • scripts/tests/genai-enclave-scanner-exports.test.ts
  • scripts/tests/genai-enclave-scanner-regressions.test.ts
  • scripts/tests/publish-dependency-helpers.test.ts
  • scripts/tests/publish-dependency-helpers.ts
  • scripts/tests/published-closure-regressions.test.ts
  • scripts/tests/workspace-source-helpers.ts
  • tsconfig.scripts.json
🚧 Files skipped from review as they are similar to previous changes (13)
  • packages/cli/vitest.agentStream.config.ts
  • scripts/genai-enclave/export-provenance.ts
  • .llxprt/LLXPRT.md
  • scripts/tests/genai-enclave-guard-allowlist.test.ts
  • scripts/tests/published-closure-regressions.test.ts
  • scripts/genai-enclave/manifest-enforcement.ts
  • scripts/tests/publish-dependency-helpers.test.ts
  • scripts/tests/genai-enclave-guard-manifest.test.ts
  • scripts/tests/genai-enclave-adversarial.test.ts
  • scripts/genai-enclave/export-cjs.ts
  • scripts/check-genai-enclave.ts
  • scripts/tests/workspace-source-helpers.ts
  • scripts/tests/publish-dependency-helpers.ts

Comment on lines +40 to +92
function statementReturnFlow(
statement: ts.Statement,
proveExpression: ReturnExpressionProof,
): ReturnFlow {
if (ts.isReturnStatement(statement)) {
return {
allValueReturnsProven:
statement.expression !== undefined &&
proveExpression(statement.expression),
canFallThrough: false,
hasValueReturn: statement.expression !== undefined,
};
}
if (ts.isThrowStatement(statement)) {
return {
allValueReturnsProven: true,
canFallThrough: false,
hasValueReturn: false,
};
}
if (ts.isBlock(statement)) {
return sequenceReturnFlow(statement.statements, proveExpression);
}
if (ts.isIfStatement(statement)) {
const whenTrue = statementReturnFlow(
statement.thenStatement,
proveExpression,
);
const whenFalse =
statement.elseStatement === undefined
? FALLTHROUGH
: statementReturnFlow(statement.elseStatement, proveExpression);
return {
allValueReturnsProven:
whenTrue.allValueReturnsProven && whenFalse.allValueReturnsProven,
canFallThrough: whenTrue.canFallThrough || whenFalse.canFallThrough,
hasValueReturn: whenTrue.hasValueReturn || whenFalse.hasValueReturn,
};
}
const isNeutralDeclaration =
ts.isVariableStatement(statement) ||
ts.isFunctionDeclaration(statement) ||
ts.isClassDeclaration(statement);
const isNeutralStatement =
ts.isExpressionStatement(statement) ||
ts.isEmptyStatement(statement) ||
ts.isDebuggerStatement(statement);
if (isNeutralDeclaration || isNeutralStatement) return FALLTHROUGH;
return {
allValueReturnsProven: false,
canFallThrough: true,
hasValueReturn: false,
};

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.

🔒 Security & Privacy | 🟠 Major | 🏗️ Heavy lift

Handle try and switch return flow before relying on this proof for provenance.

Unsupported statements return an unproven fallthrough result. Consequently, helpers such as function getReq() { try { return createRequire(url); } catch { throw err; } } are never registered, and subsequent getReq()('@google/genai') calls can bypass loader detection.

Extend the flow analysis for at least TryStatement and SwitchStatement, with adversarial positive and negative tests. This is required by the PR’s fail-closed boundary objective.

🤖 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/genai-enclave/helper-return-analysis.ts` around lines 40 - 92, Extend
statementReturnFlow to explicitly analyze TryStatement and SwitchStatement
instead of treating them as unsupported fallthroughs, preserving accurate
allValueReturnsProven, canFallThrough, and hasValueReturn results across
try/catch/finally and switch clauses. Add adversarial positive and negative
tests covering proven returns, throwing branches, fallthrough, and
loader-detection provenance such as getReq.

Comment thread scripts/genai-enclave/import-detection.ts
Comment on lines +58 to +68
const transpilation = ts.transpileModule(sourceText, {
compilerOptions: {
jsx: ts.JsxEmit.ReactJSX,
module: ts.ModuleKind.ESNext,
target: ts.ScriptTarget.Latest,
},
fileName:
scriptKind === ts.ScriptKind.TSX || scriptKind === ts.ScriptKind.JSX
? 'diagnostics.tsx'
: 'diagnostics.ts',
reportDiagnostics: true,

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.

🔒 Security & Privacy | 🟠 Major | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
rg -n -C3 \
  "getParseDiagnostics|broken\\.(js|cjs|jsx|json)|parse diagnostics" \
  scripts/tests package.json

Repository: vybestack/llxprt-code

Length of output: 1938


🏁 Script executed:

#!/bin/bash
set -euo pipefail

printf '\n## scanner.ts\n'
ast-grep outline scripts/genai-enclave/scanner.ts --view expanded || true
printf '\n## relevant slices\n'
sed -n '1,220p' scripts/genai-enclave/scanner.ts | cat -n
printf '\n## scanner tests\n'
sed -n '1,220p' scripts/tests/genai-enclave-scanner-exports.test.ts | cat -n

Repository: vybestack/llxprt-code

Length of output: 13377


🏁 Script executed:

#!/bin/bash
set -euo pipefail

printf '\n## guard manifest diagnostics test slice\n'
sed -n '460,540p' scripts/tests/genai-enclave-guard-manifest.test.ts | cat -n

Repository: vybestack/llxprt-code

Length of output: 3953


🏁 Script executed:

#!/bin/bash
set -euo pipefail

printf '\n## scanner.ts\n'
ast-grep outline scripts/genai-enclave/scanner.ts --view expanded || true
printf '\n## relevant slices\n'
sed -n '1,220p' scripts/genai-enclave/scanner.ts | cat -n
printf '\n## scanner tests\n'
sed -n '1,220p' scripts/tests/genai-enclave-scanner-exports.test.ts | cat -n
printf '\n## guard manifest diagnostics test slice\n'
sed -n '460,540p' scripts/tests/genai-enclave-guard-manifest.test.ts | cat -n

Repository: vybestack/llxprt-code

Length of output: 17171


🏁 Script executed:

#!/bin/bash
set -euo pipefail

node - <<'JS'
let ts;
try {
  ts = require('typescript');
} catch (e) {
  console.log('typescript not available');
  process.exit(0);
}

const samples = [
  ['js-valid', 'const x = 1;\n', 'sample.js'],
  ['js-invalid-ts-only', 'const x: number = 1;\n', 'sample.js'],
  ['json-valid', '{ "a": 1 }\n', 'sample.json'],
  ['json-invalid', '{ a: 1 }\n', 'sample.json'],
  ['jsx-valid', 'const x = <div />;\n', 'sample.jsx'],
];

for (const [label, text, fileName] of samples) {
  const out = ts.transpileModule(text, {
    compilerOptions: {
      jsx: ts.JsxEmit.ReactJSX,
      module: ts.ModuleKind.ESNext,
      target: ts.ScriptTarget.Latest,
    },
    fileName,
    reportDiagnostics: true,
  });
  console.log(`--- ${label} / ${fileName} ---`);
  console.log('diagnostics:', out.diagnostics?.length ?? 0);
  for (const d of out.diagnostics ?? []) {
    console.log(ts.flattenDiagnosticMessageText(d.messageText, '\n'));
  }
}
JS

Repository: vybestack/llxprt-code

Length of output: 802


🏁 Script executed:

#!/bin/bash
set -euo pipefail

rg -n -C3 "getParseDiagnostics\\(|parse diagnostics|fail-closed|broken-syntax" scripts/genai-enclave scripts/tests

Repository: vybestack/llxprt-code

Length of output: 50377


🏁 Script executed:

#!/bin/bash
set -euo pipefail

rg -n -C3 "getParseDiagnostics\\(" scripts

Repository: vybestack/llxprt-code

Length of output: 1839


🌐 Web query:

TypeScript transpileModule fileName script kind diagnostics filename parsing behavior

💡 Result:

In TypeScript's Compiler API, the transpileModule function provides a fast, single-file transpilation path that bypasses the full type-checking process [1][2]. Its behavior regarding file parsing, diagnostics, and script identification is governed by the provided TranspileOptions and the input file name [3][4]. ### Parsing and Script Kind transpileModule does not have an explicit scriptKind parameter [3][4]. Instead, it infers the ScriptKind (e.g., JS, JSX, TS, TSX) from the fileName option provided in the TranspileOptions [3][4]. If the fileName is not provided, it defaults to module.ts, or module.tsx if the compiler options specify jsx [3][4]. Because transpileModule is designed to be a standalone, file-system-agnostic utility, it does not perform typical file system lookups (such as checking package.json for "type": "module"), which can lead to unexpected module output formats if not manually configured [5][6]. ### Diagnostics Behavior The reportDiagnostics option in TranspileOptions controls whether syntactic diagnostics are collected [3][4]. * When set to true, transpileModule retrieves and includes syntactic diagnostics in the returned TranspileOutput object [3][4]. * It does not perform type checking; therefore, it will not report type-level errors, regardless of the reportDiagnostics setting [7][1]. * If syntax is severely malformed, diagnostics regarding the parsing errors will be captured [7]. In summary, transpileModule is intended for fast, isolated transformations. For scenarios requiring accurate file-system context (like module resolution or package.json awareness) or full type checking, using the standard createProgram API is recommended [1][6].

Citations:


🏁 Script executed:

#!/bin/bash
set -euo pipefail

printf '\n## check-genai-enclave.ts slice\n'
sed -n '470,540p' scripts/check-genai-enclave.ts | cat -n

printf '\n## parseSourceFile call sites\n'
rg -n -C2 "parseSourceFile\\(" scripts/check-genai-enclave.ts scripts/tests scripts/genai-enclave

Repository: vybestack/llxprt-code

Length of output: 50378


🏁 Script executed:

#!/bin/bash
set -euo pipefail

node - <<'JS'
let mod;
try {
  mod = require('typescript');
} catch (e) {
  console.log('typescript: unavailable');
  process.exit(0);
}
const ts = mod.default ?? mod;

console.log('version:', ts.version ?? mod.version ?? 'unknown');
console.log('has JsxEmit:', !!ts.JsxEmit, 'has default.JsxEmit:', !!mod.default?.JsxEmit);

const samples = [
  ['js-valid', 'const x = 1;\n', 'sample.js'],
  ['js-invalid-ts-only', 'const x: number = 1;\n', 'sample.js'],
  ['json-valid', '{ "a": 1 }\n', 'sample.json'],
  ['json-invalid', '{ a: 1 }\n', 'sample.json'],
  ['tsx-valid', 'const x = <div />;\n', 'sample.tsx'],
  ['jsx-valid', 'const x = <div />;\n', 'sample.jsx'],
];

for (const [label, text, fileName] of samples) {
  const opts = {
    compilerOptions: {
      module: ts.ModuleKind?.ESNext ?? 99,
      target: ts.ScriptTarget?.Latest ?? ts.ScriptTarget?.ES2020 ?? 99,
      jsx: ts.JsxEmit?.ReactJSX,
    },
    fileName,
    reportDiagnostics: true,
  };
  const out = ts.transpileModule(text, opts);
  console.log(`--- ${label} / ${fileName} ---`);
  console.log('diagnostics:', out.diagnostics?.length ?? 0);
  for (const d of out.diagnostics ?? []) {
    console.log('-', ts.flattenDiagnosticMessageText(d.messageText, '\n'));
  }
}
JS

Repository: vybestack/llxprt-code

Length of output: 852


Use the real file name for diagnostics (scripts/genai-enclave/scanner.ts:58-68). transpileModule is still parsing synthetic .ts/.tsx files here, so .js/.cjs/.mjs/.json inputs can be checked under the wrong grammar. Pass filePath through and add regressions for those extensions.

🤖 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/genai-enclave/scanner.ts` around lines 58 - 68, Update the
transpilation setup around ts.transpileModule to pass the actual filePath as
fileName instead of selecting synthetic diagnostics.ts or diagnostics.tsx names,
while preserving the existing compiler options and diagnostics behavior. Ensure
filePath is available through the scanner flow, and add regressions covering
.js, .cjs, .mjs, and .json inputs.

Comment on lines +93 to +95
const mod: Record<string, unknown> = await import(
'@vybestack/llxprt-code-agents/app-service.js'
);

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.

The dynamic import hardcodes the app-service specifier string instead of using the already-defined APP_SERVICE_SPECIFIER constant. This creates a maintenance risk: if the specifier ever changes, this literal could be missed during updates. Please reuse APP_SERVICE_SPECIFIER for consistency.

Comment on lines +128 to +130
if (entry.isDirectory()) {
if (PRUNE_DIRS.has(entry.name)) continue;
walk(full);

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.

The walkPackages function recursively traverses directories using readdirSync without tracking visited inodes or filtering symlinks. When GENAI_ENCLAVE_ROOT is set (test mode), a circular symlink in the fixture tree would cause infinite recursion and stack overflow, crashing the process before it can report violations or complete the test. Consider either (a) skipping symlinked directories with !entry.isSymbolicLink(), or (b) tracking visited real paths using fs.realpathSync to detect cycles.

@@ -0,0 +1,599 @@
#!/usr/bin/env bun

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.

The shebang #!/usr/bin/env bun suggests the script requires Bun, but all module imports use Node.js node: prefixed specifiers (e.g., node:fs, node:path, node:child_process). This mismatch could confuse developers about the required runtime and prevent direct execution with node if Bun is not installed. Change the shebang to #!/usr/bin/env node to match the actual dependencies, or ensure the project standard runtime is Bun if that is intentional.

Comment on lines +379 to +381
} catch (e) {
const err = e as { code?: string };
if (err.code === 'ENOENT' && dir === PACKAGES_DIR) {

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.

In discoverManifests, the catch block asserts e as { code?: string } without first checking e instanceof Error. While accessing .code on a non-object yields undefined (preventing crashes), the unsound type assertion bypasses TypeScript's type safety and could mask the root cause if a non-Error value is thrown. Use a type guard or at minimum check e instanceof Error before the assertion, consistent with the safer pattern already used in checkManifest.

* shown. The root declaration is a packaging bridge for the root artifact;
* source imports remain confined to the implementation enclaves.
*/
export const SANCTIONED_GENAI_VERSION = '1.30.0';

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.

The version '1.30.0' is duplicated across package.json (root, packages/core, packages/providers) and this config file. A version bump now requires a manual, four-place update, which is error-prone. Consider extracting the version to a single source of truth (e.g., a shared constant/version file) and referencing it from both package.json files and this guard config so they stay in sync automatically.

}

describe('deriveAllEntryPaths', () => {
it('extracts main entry from exports bun condition', () => {

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.

Test name says 'extracts main entry from exports bun condition' but the current implementation collects ALL leaf paths from every exports entry, not just the bun condition. Rename the test to match the actual behavior being verified.

Comment on lines +83 to +87
export type ProtocolTargetResolver = (
depName: string,
specifier: string,
consumerWorkspace?: string,
) => ProtocolTargetResolution;

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.

ProtocolTargetResolver returns ProtocolTargetResolution, which does not include the reason field from RealProtocolResolution. When a protocol specifier fails validation, checkProtocolTarget emits a generic message like 'unresolved protocol specifier (target does not match the workspace name→directory map)' and discards the specific cause (missing path, canonical mismatch, manifest name mismatch, etc.). Consider enriching ProtocolTargetResolution with reason?: string and propagating it into the mismatch diagnostic so failures are actionable.

Comment on lines +90 to +96
export function isProtocolSpecifier(version: string): boolean {
return (
version.startsWith('file:') ||
version.startsWith('workspace:') ||
version.startsWith('link:')
);
}

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.

isProtocolSpecifier only recognizes file:, workspace:, and link:. Non-registry specifiers such as git URLs (git+https://...), tarball URLs (https://.../pkg.tgz), and plain http/https URLs fall through to extractSemverRange and then isRootSubsetOfWorkspace, where semver.subset throws and produces a misleading 'root range is not a subset of workspace range' error. Add explicit rejection for these non-registry protocols with a clear diagnostic, or normalize them into a supported category before semver checks.

Comment on lines +315 to +318
// Cycle check: resolve the real path and verify it doesn't loop back
// to a path we've already resolved (defensive — realpathSync collapses
// cycles at the OS level, but a circular chain of symlinks could still
// exist in edge cases).

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.

Misleading comment: The comment on line 439 claims the function rejects symlinks that 'revisit already-seen paths' for cycle detection, but the implementation does not track previously seen paths at all. It only checks that the resolved path is within the repo root and is a directory. While realpathSync collapses cycles at the OS level, the comment overstates the cycle detection capability and could lead to false confidence. Either update the comment to accurately reflect the implementation, or add actual cycle tracking if stronger guarantees are needed.

Comment on lines +369 to +371
function extractExportEntryPath(
entry: ExportsEntry | undefined,
): string[] | undefined {

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.

Naming inconsistency: extractExportEntryPath (line 369) returns string[] | undefined (multiple paths), but its singular name implies a single path. This violates the principle of least surprise. The companion function collectExportEntryPaths correctly uses plural naming. Rename this function to extractExportEntryPaths to match its actual return type and avoid confusion for future maintainers.

Comment on lines +63 to +92
if (ts.isIfStatement(statement)) {
const whenTrue = statementReturnFlow(
statement.thenStatement,
proveExpression,
);
const whenFalse =
statement.elseStatement === undefined
? FALLTHROUGH
: statementReturnFlow(statement.elseStatement, proveExpression);
return {
allValueReturnsProven:
whenTrue.allValueReturnsProven && whenFalse.allValueReturnsProven,
canFallThrough: whenTrue.canFallThrough || whenFalse.canFallThrough,
hasValueReturn: whenTrue.hasValueReturn || whenFalse.hasValueReturn,
};
}
const isNeutralDeclaration =
ts.isVariableStatement(statement) ||
ts.isFunctionDeclaration(statement) ||
ts.isClassDeclaration(statement);
const isNeutralStatement =
ts.isExpressionStatement(statement) ||
ts.isEmptyStatement(statement) ||
ts.isDebuggerStatement(statement);
if (isNeutralDeclaration || isNeutralStatement) return FALLTHROUGH;
return {
allValueReturnsProven: false,
canFallThrough: true,
hasValueReturn: false,
};

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.

The statementReturnFlow function is missing handlers for common control flow statements: loops (WhileStatement, DoStatement, ForStatement, ForInStatement, ForOfStatement), SwitchStatement, TryStatement/CatchClause, and control transfer statements (BreakStatement, ContinueStatement, LabeledStatement). Any function containing these statements will be conservatively reported with canFallThrough: true and allValueReturnsProven: false, causing false positives. For example:

  • A switch with return in every case and default would be flagged as fallthrough-able.
  • A try/catch where both blocks return would be flagged as not proven.
  • A loop with an unconditional return inside would also be flagged.

This reduces the accuracy of the genai-enclave analysis and may incorrectly reject legitimate code. Consider adding recursive handlers for these statements, treating loops as fallthrough-able but analyzing their bodies for returns, handling switch/try/catch by analyzing all branches, and treating break/continue/labeled as flow-altering rather than as the current default fallback.

Comment on lines +435 to +436
'@google/genai imports are only allowed in packages/providers/src/gemini/** ' +
'and packages/core/src/code_assist/**'

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.

MAINTENABILITY: These enclave paths are hardcoded here but are also the source of truth in scripts/genai-enclave/config.ts (GENAI_IMPORT_ENCLAVES). If the enclaves change, these messages will become stale. Reuse the configured prefixes to keep error messages in sync with the actual guard logic.

Comment on lines +46 to +72
export function parseSourceFile(
filePath: string,
sourceText: string,
): ts.SourceFile {
const scriptKind = inferScriptKind(filePath);
const sourceFile = ts.createSourceFile(
filePath,
sourceText,
ts.ScriptTarget.Latest,
true,
scriptKind,
);
const transpilation = ts.transpileModule(sourceText, {
compilerOptions: {
jsx: ts.JsxEmit.ReactJSX,
module: ts.ModuleKind.ESNext,
target: ts.ScriptTarget.Latest,
},
fileName:
scriptKind === ts.ScriptKind.TSX || scriptKind === ts.ScriptKind.JSX
? 'diagnostics.tsx'
: 'diagnostics.ts',
reportDiagnostics: true,
});
parseDiagnostics.set(sourceFile, transpilation.diagnostics ?? []);
return sourceFile;
}

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.

parseSourceFile lacks error handling around ts.createSourceFile and ts.transpileModule. If TypeScript hits a fatal parsing/transpilation error (malformed input, internal TS failure), the exception will bubble up unhandled. In a repo-wide scanner like check-genai-enclave.ts, a single bad file would abort the entire integrity check.

Please add a try/catch here and either wrap the error in a custom ParseError or at minimum document that this function can throw. If you keep it throwing, consider whether callers should be updated to handle it.

Comment on lines +160 to +191
function checkNamedExports(
ctx: ExportScanContext,
node: ts.ExportDeclaration,
violations: GeminiExportViolation[],
): void {
const clause = node.exportClause;
if (clause === undefined) return;
if (ts.isNamespaceExport(clause)) {
if (containsGemini(clause.name.text)) {
addExportViolation(
ctx,
node,
clause.name.text,
'export * as name',
violations,
);
}
return;
}
for (const element of clause.elements) {
const exportedName = element.name.text;
if (containsGemini(exportedName)) {
addExportViolation(
ctx,
node,
exportedName,
'export { name }',
violations,
);
}
}
}

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.

Re-export aliases bypass the boundary guard: checkNamedExports only inspects the exported alias (element.name.text), not the local identifier being re-exported (element.propertyName?.text). This means export { GeminiThing as SafeName } will NOT be flagged, allowing a locally-defined Gemini-named symbol to escape the enclave under a safe alias.

In the TypeScript AST, an ExportSpecifier for export { Foo as Bar } has:

  • propertyName = Foo (the local binding)
  • name = Bar (the exported alias)

To fail-closed on this bypass, also check the local propertyName when it differs from name:

const localName = element.propertyName?.text;
const exportedName = element.name.text;
const checkName = localName ?? exportedName;
if (containsGemini(checkName)) {
  addExportViolation(ctx, node, checkName, 'export { name }', violations);
}

(Keep the existing exportedName check as well, since export { GeminiBar } must still be flagged.)

Comment on lines +47 to +54
if (ts.isVariableStatement(node)) {
for (const decl of node.declarationList.declarations) {
registerVarShadows(ctx, decl);
}
} else if (isFunctionLikeNode(node)) {
registerFunctionShadows(ctx, node);
}
ts.forEachChild(node, (child) => collectExportShadows(ctx, child));

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.

Missing VariableDeclaration handling in for-loop initializers and catch clauses. TypeScript represents variable declarations in for/for-in/for-of initializers and catch clauses as bare VariableDeclaration nodes (not wrapped in VariableStatement), so these shadows are never registered. Add a ts.isVariableDeclaration(node) branch (and similarly for collectObjectLiteralBindings) to cover these non-statement contexts.

Comment on lines +348 to +349
describe('Finding6: createRealProtocolResolver — canonical path + target manifest', () => {
it('resolves a file: protocol to the canonical workspace directory and verifies the target manifest name', () => {

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.

Protocol resolver tests lack explicit path-traversal edge cases. Add cases like file:../../etc/passwd and absolute paths to document that the workspace name-to-dir mapping blocks traversal to arbitrary locations outside the repo, rather than relying on implicit mismatch behavior.

Comment on lines +169 to +178
export function isRootSubsetOfWorkspace(
rootRange: string,
workspaceRange: string,
): boolean {
try {
return semver.subset(rootRange, workspaceRange);
} catch {
return false;
}
}

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.

semver.subset is called with two string arguments, but the standard semver API expects an array of ranges as the first argument and a target range as the second. Passing two strings causes the subset check to malfunction (it will either throw or evaluate character-wise), which breaks the core invariant that root ranges must be subsets of workspace ranges. Use semver.subset([rootRange], workspaceRange) instead, and verify the test expectations match the intended semantics (root ^3.0.2 is broader than workspace ^3.0.1, so it should be rejected).

Comment on lines +22 to +24
* - **npm aliases** (`npm:realName@version`): the version is extracted from
* after the last `@`, the alias target is compared, and the semver range
* is checked for subset.

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.

The module-level JSDoc comment states that the version is extracted 'from after the last @​', but extractNpmAliasTarget correctly uses indexOf('@​') (first @​). This documentation mismatch could mislead future maintainers into changing the correct implementation to match the incorrect comment, breaking tarball URL handling like npm:name@​https://user@​host/pkg.tgz.

Comment on lines +403 to +411
export function checkDependencyCoverage(
workspace: string,
depName: string,
workspaceVersion: string,
kind: DependencyKind,
root: ManifestDependencies,
internalPackages?: ReadonlySet<string>,
protocolResolver?: ProtocolTargetResolver,
): DependencyMismatch | null {

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.

The workspace parameter is ambiguously named. It represents a directory path relative to repoRoot (e.g. packages/core), not a package name, but it is passed as consumerWorkspace to ProtocolTargetResolver and used in path resolution. Consider renaming to consumerWorkspaceDir or workspaceDir to prevent callers from mistakenly passing a package name.

Comment on lines +509 to +515
export function checkWorkspaceDependencies(
workspace: string,
workspaceManifest: ManifestDependencies,
root: ManifestDependencies,
internalPackages?: ReadonlySet<string>,
protocolResolver?: ProtocolTargetResolver,
): DependencyMismatch[] {

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.

Same ambiguity here: workspace is passed through to checkDependencyCoverage as a directory path for consumerWorkspace, not a package name. Rename to workspaceDir or consumerWorkspaceDir for clarity.

@acoliver
acoliver merged commit 2496e89 into main Jul 15, 2026
28 checks passed
acoliver added a commit that referenced this pull request Jul 15, 2026
* Make folder trust updates live (Fixes #637)

* Harden live trust cleanup and review coverage

* Resolve live trust review findings

* Tighten trust transition race coverage

* Surface live trust transition failures

* Format merged MCP manager tests

* Fix slash command trust event test mock

* Harden trust lifecycle review findings

* Complete trust lifecycle error handling

* Contain live trust transition failures

* Keep trust rollback and cleanup consistent

* Extract live trust transition lifecycle

* Close live trust authorization races

* Harden final live trust lifecycle edges

* Preserve complete trust failure reporting

* Lower DEFAULT_TOKEN_LIMIT to 200K, add GLM catalog, consolidate resolution (Fixes #2527) (#2565)

* Lower DEFAULT_TOKEN_LIMIT to 200K, add GLM catalog, consolidate resolution (Fixes #2527)

Lower DEFAULT_TOKEN_LIMIT from 1,048,576 to 200,000 so unrecognized models
get a fail-safe conservative context window instead of a dangerous 1M
fallback that silently overruns sub-200K backends (#2270).

Add GLM model family to the token-limit catalog: glm-5.x prefix -> 200K,
glm-4.x prefix -> 128K, with exact entries for glm-5.2, glm-5.1, glm-5,
glm-4.6, glm-4.5, and glm-4 (#2280).

Add Gemini prefix entries (gemini-2.5-pro, gemini-2.5-flash,
gemini-2.0-flash -> 1M) to prevent regressions from the lowered default
for models that previously fell through to DEFAULT_TOKEN_LIMIT.

Consolidate the two duplicated context-window resolution paths into a
single shared resolveEffectiveContextLimit() function in tokenLimits.ts.
Both getTokenLimitForConfiguredContext (agents layer) and
ephemerals.contextLimit() (core runtime) now delegate to it, ensuring
all consumers agree by construction (#2270 DRY item).

* fix: replace nested ternary with if/else in test mocks (sonarjs/no-nested-conditional)

* Close remaining live trust safety gaps

* Raise unconfigured subagent turn fallback to 1000 (Fixes #2541) (#2566)

* fix(agents): raise unconfigured subagent turn fallback

* fix(agents): preserve foreground turn validation

* test(agents): keep profile loader observable

* Remove inherited Gemini names from neutral APIs (#2537)

* Close final live trust lifecycle races

* Harden live trust transition boundaries

* Finish provider-neutral Gemini cleanup (#2573) (#2574)

* Resolve final c90 review findings

* Resolve latest a4 review findings

* Resolve latest OCR review findings

* Keep trust failure timers test-local

* Resolve trust and MCP lifecycle review findings

* Preserve provider quota errors across retry timeouts (Fixes #2559) (#2568)

* Preserve provider quota errors across retry timeouts (Fixes #2559)

* Use the public core error contract

* Avoid idle-timeout cleanup deadlocks

* Harden retry cleanup and request isolation

* Strengthen retry contracts and behavioral coverage

* Clarify timeout and structured error contracts

* Bound load-balancer retries to request lifetimes

* Stop cancelled failovers from mutating sessions

* Use the public structured error contract

* Close remaining retry lifecycle gaps

* Expose retry orchestration through the provider API

* Preserve failover and observation request boundaries

* Preserve classifications at shared retry exhaustion

* Harden trust and MCP review edge cases

* Enforce the GenAI enclave boundary (Fixes #2352) (#2546)

* Enforce the GenAI enclave boundary (Fixes #2352)

* Preserve the published GenAI runtime bridge

* Close remaining GenAI boundary bypasses

* Tighten GenAI guard regression coverage

* Harden GenAI guard diagnostics

* Clarify GenAI packaging test types

* Trim GenAI guard helper surface

* Validate every GenAI dependency section

* Close GenAI enclave scanner gaps

* Keep boundary-test imports statically inspectable

* Harden GenAI boundary against indirect bypasses

* Resolve GenAI boundary review gaps

* Close remaining GenAI boundary bypasses

* Scope neutral GeminiContent naming exception

* Close final GenAI scanner review gaps

* Close provenance-based scanner bypasses

* Preserve fake provider compatibility allowlist

* Align GenAI guard with provider-neutral cleanup

* Harden trust UI async lifecycle handling

* Prevent stale trust commit UI updates

* Close trust and MCP review races

* Complete MCP cleanup after status failures

* Reject unresolved directory trust decisions

* Refresh genai import inventory
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.

Enforce Gemini/GenAI boundary: remove @google/genai deps and add CI import guard

1 participant