==> Synchronizing chroot copy [/home/alhp/workspace/chroot/root] -> [build_60b584eb-ce2f-418f-b84c-a039be7756d5]...done ==> Making package: gemini-cli 1:0.29.7-1.1 (Tue Feb 24 20:42:12 2026) ==> Retrieving sources... -> Cloning gemini-cli git repo... Cloning into bare repository '/home/alhp/workspace/build/x86-64-v4/gemini-cli-1:0.29.7-1/gemini-cli'... ==> Validating source files with b2sums... gemini-cli ... Passed ==> Making package: gemini-cli 1:0.29.7-1.1 (Tue Feb 24 19:43:47 2026) ==> Checking runtime dependencies... ==> Installing missing dependencies... resolving dependencies... looking for conflicting packages... Package (4) New Version Net Change extra/c-ares 1.34.6-1 0.51 MiB extra/libuv 1.52.0-1 0.63 MiB extra/simdjson 1:4.3.1-1 7.43 MiB extra/nodejs 25.6.1-2 69.21 MiB Total Installed Size: 77.79 MiB :: Proceed with installation? [Y/n] checking keyring... checking package integrity... loading package files... checking for file conflicts... :: Processing package changes... installing c-ares... installing libuv... installing simdjson... installing nodejs... Optional dependencies for nodejs npm: nodejs package manager :: Running post-transaction hooks... (1/1) Arming ConditionNeedsUpdate... ==> Checking buildtime dependencies... ==> Installing missing dependencies... resolving dependencies... looking for conflicting packages... Package (15) New Version Net Change core/gpm 1.20.7.r38.ge82d1a6-6 0.38 MiB extra/node-gyp 12.2.0-1 7.84 MiB extra/nodejs-nopt 7.2.1-1 0.03 MiB extra/oniguruma 6.9.10-1 0.88 MiB extra/perl-error 0.17030-3 0.04 MiB extra/perl-mailtools 2.22-3 0.10 MiB extra/perl-timedate 2.33-9 0.08 MiB core/procps-ng 4.0.6-1 2.54 MiB extra/semver 7.7.4-1 0.09 MiB extra/vim-runtime 9.2.0038-1 38.28 MiB extra/zlib-ng 2.3.3-1 0.28 MiB extra/git 2.53.0-1 29.72 MiB extra/jq 1.8.1-1 0.45 MiB extra/npm 11.10.1-1 7.47 MiB extra/vim 9.2.0038-1 5.06 MiB Total Installed Size: 93.24 MiB :: Proceed with installation? [Y/n] checking keyring... checking package integrity... loading package files... checking for file conflicts... :: Processing package changes... installing perl-error... installing perl-timedate... installing perl-mailtools... installing zlib-ng... installing git... Optional dependencies for git git-zsh-completion: upstream zsh completion tk: gitk and git gui openssh: ssh transport and crypto man: show help with `git command --help` perl-libwww: git svn perl-term-readkey: git svn and interactive.singlekey setting perl-io-socket-ssl: git send-email TLS support perl-authen-sasl: git send-email TLS support perl-cgi: gitweb (web interface) support python: git svn & git p4 subversion: git svn org.freedesktop.secrets: keyring credential helper libsecret: libsecret credential helper [installed] less: the default pager for git installing oniguruma... installing jq... installing nodejs-nopt... installing semver... installing node-gyp... Optional dependencies for node-gyp gcc: to build C++ modules [installed] make: to build C++ modules [installed] python: to build C++ modules installing npm... Optional dependencies for npm git: for dependencies using Git URL's [installed] installing vim-runtime... Optional dependencies for vim-runtime sh: support for some tools and macros [installed] python: demoserver example tool gawk: mve tools upport [installed] installing procps-ng... installing gpm... installing vim... Optional dependencies for vim python: Python language support ruby: Ruby language support lua: Lua language support perl: Perl language support [installed] tcl: Tcl language support :: Running post-transaction hooks... (1/4) Creating system user accounts... Creating group 'git' with GID 969. Creating user 'git' (git daemon user) with UID 969 and GID 969. (2/4) Reloading system manager configuration... Skipped: Current root is not booted. (3/4) Arming ConditionNeedsUpdate... (4/4) Updating the info directory file... ==> Retrieving sources... ==> WARNING: Skipping all source file integrity checks. ==> Extracting sources... -> Creating working copy of gemini-cli git repo... Cloning into 'gemini-cli'... done. Switched to a new branch 'makepkg' ==> Starting prepare()... npm warn deprecated node-domexception@1.0.0: Use your platform's native DOMException instead added 1264 packages, and audited 1270 packages in 2m 354 packages are looking for funding run `npm fund` for details 33 vulnerabilities (1 low, 3 moderate, 28 high, 1 critical) To address issues that do not require attention, run: npm audit fix To address all issues possible (including breaking changes), run: npm audit fix --force Some issues need review, and may require choosing a different dependency. Run `npm audit` for details. ==> Starting build()... > @google/gemini-cli@0.29.7 bundle > npm run generate && node esbuild.config.js && node scripts/copy_bundle_assets.js > @google/gemini-cli@0.29.7 generate > node scripts/generate-git-commit-info.js Copied 5 policy files to bundle/policies/ Copied docs to bundle/docs/ Copied built-in skills to bundle/builtin/ Assets copied to bundle/ > @google/gemini-cli@0.29.7 prepare > husky && npm run bundle > @google/gemini-cli@0.29.7 bundle > npm run generate && node esbuild.config.js && node scripts/copy_bundle_assets.js > @google/gemini-cli@0.29.7 generate > node scripts/generate-git-commit-info.js Copied 5 policy files to bundle/policies/ Copied docs to bundle/docs/ Copied built-in skills to bundle/builtin/ Assets copied to bundle/ npm notice npm notice πŸ“¦ @google/gemini-cli@0.29.7 npm notice Tarball Contents npm notice 11.4kB LICENSE npm notice 12.1kB README.md npm notice 8.0kB bundle/builtin/skill-creator/scripts/init_skill.cjs npm notice 2.9kB bundle/builtin/skill-creator/scripts/package_skill.cjs npm notice 3.5kB bundle/builtin/skill-creator/scripts/validate_skill.cjs npm notice 20.1kB bundle/builtin/skill-creator/SKILL.md npm notice 3.8kB bundle/docs/architecture.md npm notice 121.7kB bundle/docs/assets/connected_devtools.png npm notice 61.2kB bundle/docs/assets/gemini-screenshot.png npm notice 112.5kB bundle/docs/assets/monitoring-dashboard-logs.png npm notice 58.9kB bundle/docs/assets/monitoring-dashboard-metrics.png npm notice 55.8kB bundle/docs/assets/monitoring-dashboard-overview.png npm notice 389.7kB bundle/docs/assets/release_patch.png npm notice 129.0kB bundle/docs/assets/theme-ansi-light.png npm notice 129.8kB bundle/docs/assets/theme-ansi.png npm notice 131.5kB bundle/docs/assets/theme-atom-one.png npm notice 129.1kB bundle/docs/assets/theme-ayu-light.png npm notice 131.3kB bundle/docs/assets/theme-ayu.png npm notice 265.5kB bundle/docs/assets/theme-custom.png npm notice 128.3kB bundle/docs/assets/theme-default-light.png npm notice 130.4kB bundle/docs/assets/theme-default.png npm notice 131.3kB bundle/docs/assets/theme-dracula.png npm notice 129.4kB bundle/docs/assets/theme-github-light.png npm notice 131.5kB bundle/docs/assets/theme-github.png npm notice 129.3kB bundle/docs/assets/theme-google-light.png npm notice 128.0kB bundle/docs/assets/theme-xcode-light.png npm notice 44.4kB bundle/docs/changelogs/index.md npm notice 27.6kB bundle/docs/changelogs/latest.md npm notice 18.9kB bundle/docs/changelogs/preview.md npm notice 105B bundle/docs/cli/authentication.md npm notice 3.1kB bundle/docs/cli/checkpointing.md npm notice 13.7kB bundle/docs/cli/cli-reference.md npm notice 19.6kB bundle/docs/cli/commands.md npm notice 2.4kB bundle/docs/cli/creating-skills.md npm notice 11.6kB bundle/docs/cli/custom-commands.md npm notice 18.4kB bundle/docs/cli/enterprise.md npm notice 2.1kB bundle/docs/cli/gemini-ignore.md npm notice 3.7kB bundle/docs/cli/gemini-md.md npm notice 6.4kB bundle/docs/cli/generation-settings.md npm notice 12.2kB bundle/docs/cli/headless.md npm notice 2.8kB bundle/docs/cli/index.md npm notice 11.4kB bundle/docs/cli/keyboard-shortcuts.md npm notice 1.9kB bundle/docs/cli/model-routing.md npm notice 3.2kB bundle/docs/cli/model.md npm notice 3.5kB bundle/docs/cli/plan-mode.md npm notice 2.3kB bundle/docs/cli/rewind.md npm notice 4.5kB bundle/docs/cli/sandbox.md npm notice 4.4kB bundle/docs/cli/session-management.md npm notice 20.1kB bundle/docs/cli/settings.md npm notice 5.4kB bundle/docs/cli/skills.md npm notice 4.6kB bundle/docs/cli/system-prompt.md npm notice 27.9kB bundle/docs/cli/telemetry.md npm notice 6.1kB bundle/docs/cli/themes.md npm notice 754B bundle/docs/cli/token-caching.md npm notice 3.7kB bundle/docs/cli/trusted-folders.md npm notice 2.7kB bundle/docs/cli/tutorials.md npm notice 3.0kB bundle/docs/cli/tutorials/skills-getting-started.md npm notice 1.6kB bundle/docs/cli/uninstall.md npm notice 4.8kB bundle/docs/core/index.md npm notice 6.4kB bundle/docs/core/memport.md npm notice 10.8kB bundle/docs/core/policy-engine.md npm notice 2.9kB bundle/docs/core/remote-agents.md npm notice 7.2kB bundle/docs/core/subagents.md npm notice 6.9kB bundle/docs/core/tools-api.md npm notice 2.8kB bundle/docs/examples/proxy-script.md npm notice 3.8kB bundle/docs/extensions/best-practices.md npm notice 1.3kB bundle/docs/extensions/index.md npm notice 11.9kB bundle/docs/extensions/reference.md npm notice 7.4kB bundle/docs/extensions/releasing.md npm notice 11.3kB bundle/docs/extensions/writing-extensions.md npm notice 6.7kB bundle/docs/faq.md npm notice 12.0kB bundle/docs/get-started/authentication.md npm notice 39.2kB bundle/docs/get-started/configuration-v1.md npm notice 59.5kB bundle/docs/get-started/configuration.md npm notice 6.4kB bundle/docs/get-started/examples.md npm notice 3.9kB bundle/docs/get-started/gemini-3.md npm notice 2.1kB bundle/docs/get-started/index.md npm notice 4.7kB bundle/docs/get-started/installation.md npm notice 16.8kB bundle/docs/hooks/best-practices.md npm notice 8.2kB bundle/docs/hooks/index.md npm notice 12.8kB bundle/docs/hooks/reference.md npm notice 10.9kB bundle/docs/hooks/writing-hooks.md npm notice 10.7kB bundle/docs/ide-integration/ide-companion-spec.md npm notice 8.1kB bundle/docs/ide-integration/index.md npm notice 5.2kB bundle/docs/index.md npm notice 5.9kB bundle/docs/integration-tests.md npm notice 6.4kB bundle/docs/issue-and-pr-automation.md npm notice 3.7kB bundle/docs/local-development.md npm notice 3.1kB bundle/docs/mermaid/context.mmd npm notice 1.6kB bundle/docs/mermaid/render-path.mmd npm notice 2.5kB bundle/docs/npm.md npm notice 6.2kB bundle/docs/quota-and-pricing.md npm notice 5.6kB bundle/docs/release-confidence.md npm notice 22.9kB bundle/docs/releases.md npm notice 5.4kB bundle/docs/sidebar.json npm notice 10.1kB bundle/docs/tools/file-system.md npm notice 4.7kB bundle/docs/tools/index.md npm notice 33.5kB bundle/docs/tools/mcp-server.md npm notice 1.6kB bundle/docs/tools/memory.md npm notice 7.9kB bundle/docs/tools/shell.md npm notice 2.1kB bundle/docs/tools/todos.md npm notice 2.0kB bundle/docs/tools/web-fetch.md npm notice 1.1kB bundle/docs/tools/web-search.md npm notice 6.3kB bundle/docs/tos-privacy.md npm notice 9.4kB bundle/docs/troubleshooting.md npm notice 23.9MB bundle/gemini.js npm notice 254B bundle/policies/discovered.toml npm notice 2.2kB bundle/policies/plan.toml npm notice 1.8kB bundle/policies/read-only.toml npm notice 2.2kB bundle/policies/write.toml npm notice 1.9kB bundle/policies/yolo.toml npm notice 1.0kB bundle/sandbox-macos-permissive-closed.sb npm notice 890B bundle/sandbox-macos-permissive-open.sb npm notice 1.3kB bundle/sandbox-macos-permissive-proxied.sb npm notice 3.3kB bundle/sandbox-macos-restrictive-closed.sb npm notice 3.4kB bundle/sandbox-macos-restrictive-open.sb npm notice 3.6kB bundle/sandbox-macos-restrictive-proxied.sb npm notice 6.7kB package.json npm notice Bundled Dependencies npm notice node-pty npm notice minimist npm notice tar-fs npm notice proper-lockfile npm notice config-chain npm notice @alcalzone/ansi-tokenize npm notice @kwsites/file-exists npm notice @kwsites/promise-deferred npm notice @lydell/node-pty npm notice @pnpm/network.ca-file npm notice @pnpm/npm-conf npm notice ansi-escapes npm notice ansi-regex npm notice auto-bind npm notice base64-js npm notice buffer npm notice cli-boxes npm notice cli-cursor npm notice cli-truncate npm notice code-excerpt npm notice convert-to-spaces npm notice debug npm notice decompress-response npm notice deep-extend npm notice detect-libc npm notice end-of-stream npm notice environment npm notice es-toolkit npm notice expand-template npm notice fs-constants npm notice get-east-asian-width npm notice github-from-package npm notice graceful-fs npm notice ieee754 npm notice indent-string npm notice inherits npm notice ini npm notice ink npm notice ky npm notice latest-version npm notice mimic-fn npm notice mkdirp-classic npm notice napi-build-utils npm notice node-abi npm notice once npm notice onetime npm notice package-json npm notice patch-console npm notice prebuild-install npm notice proto-list npm notice pump npm notice rc npm notice react-reconciler npm notice readable-stream npm notice registry-auth-token npm notice registry-url npm notice restore-cursor npm notice safe-buffer npm notice scheduler npm notice semver npm notice simple-concat npm notice simple-get npm notice slice-ansi npm notice stack-utils npm notice string_decoder npm notice strip-ansi npm notice tar-stream npm notice tunnel-agent npm notice util-deprecate npm notice wrap-ansi npm notice wrappy npm notice ws npm notice node-addon-api npm notice keytar npm notice yoga-layout npm notice nan npm notice gemini-cli-devtools npm notice mnemonist npm notice bl npm notice obliterator npm notice @pnpm/config.env-replace npm notice ms npm notice simple-git npm notice punycode npm notice @lydell/node-pty-linux-x64 npm notice Tarball Details npm notice name: @google/gemini-cli npm notice version: 0.29.7 npm notice filename: google-gemini-cli-0.29.7.tgz npm notice package size: 9.1 MB npm notice unpacked size: 38.3 MB npm notice shasum: 796b281bb0a884e1ae3e759ca5c77c7b3b678865 npm notice integrity: sha512-JiJxlwkIvUH7i[...]/ACZxNw9bGBqw== npm notice bundled deps: 85 npm notice bundled files: 0 npm notice own files: 4549 npm notice total files: 4549 npm notice google-gemini-cli-0.29.7.tgz ==> Starting check()... > @google/gemini-cli@0.29.7 build > node scripts/build.js > @google/gemini-cli@0.29.7 generate > node scripts/generate-git-commit-info.js > @google/gemini-cli-a2a-server@0.29.7 build > node ../../scripts/build_package.js Successfully copied files. > @google/gemini-cli@0.29.7 build > node ../../scripts/build_package.js Successfully copied files. > @google/gemini-cli-core@0.29.7 build > node ../../scripts/build_package.js Successfully copied files. Copied documentation to dist/docs > @google/gemini-cli-test-utils@0.29.7 build > node ../../scripts/build_package.js Successfully copied files. > gemini-cli-vscode-ide-companion@0.29.7 build > npm run build:dev > gemini-cli-vscode-ide-companion@0.29.7 build:dev > npm run check-types && npm run lint && node esbuild.js > gemini-cli-vscode-ide-companion@0.29.7 check-types > tsc --noEmit > gemini-cli-vscode-ide-companion@0.29.7 lint > eslint src /startdir/src/gemini-cli/packages/vscode-ide-companion/src/diff-manager.ts 246:9 warning Unused eslint-disable directive (no problems were reported from '@typescript-eslint/no-unsafe-type-assertion') /startdir/src/gemini-cli/packages/vscode-ide-companion/src/ide-server.ts 209:9 warning Unused eslint-disable directive (no problems were reported from '@typescript-eslint/no-unsafe-type-assertion') 294:9 warning Unused eslint-disable directive (no problems were reported from '@typescript-eslint/no-unsafe-type-assertion') 342:9 warning Unused eslint-disable directive (no problems were reported from '@typescript-eslint/no-unsafe-type-assertion') βœ– 4 problems (0 errors, 4 warnings) 0 errors and 4 warnings potentially fixable with the `--fix` option. [watch] build started [watch] build finished > @google/gemini-cli@0.29.7 test > npm run test --workspaces --if-present --exclude=**/BuiltinCommandLoader.test.ts --exclude=**/config.integration.test.ts --exclude=**/mcp-client.test.ts npm warn Unknown cli config "--exclude". This will stop working in the next major version of npm. > @google/gemini-cli-a2a-server@0.29.7 test > vitest run RUN v3.2.4 /startdir/src/gemini-cli/packages/a2a-server Coverage enabled with v8 βœ“ src/persistence/gcs.test.ts (12 tests) 95ms βœ“ src/commands/command-registry.test.ts (6 tests) 11ms βœ“ src/config/settings.test.ts (2 tests) 8ms βœ“ src/commands/extensions.test.ts (8 tests) 26ms βœ“ src/commands/memory.test.ts (7 tests) 8ms (node:1675) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 model-changed listeners added to [CoreEventEmitter]. MaxListeners is 10. Use emitter.setMaxListeners() to increase limit (Use `node --trace-warnings ...` to show where the warning was created) βœ“ src/config/config.test.ts (11 tests) 38ms βœ“ src/commands/init.test.ts (5 tests) 41ms βœ“ src/commands/restore.test.ts (6 tests) 23ms βœ“ src/agent/task.test.ts (17 tests) 114ms βœ“ src/http/endpoints.test.ts (5 tests) 210ms βœ“ src/http/app.test.ts (20 tests) 259ms Test Files 11 passed (11) Tests 99 passed (99) Start at 19:46:54 Duration 11.00s (transform 6.02s, setup 0ms, collect 92.80s, tests 834ms, environment 3ms, prepare 3.76s) JUNIT report written to /startdir/src/gemini-cli/packages/a2a-server/junit.xml % Coverage report from v8 > @google/gemini-cli@0.29.7 test > vitest run RUN v3.2.4 /startdir/src/gemini-cli/packages/cli Coverage enabled with v8 stdout | src/ui/hooks/atCommandProcessor.test.ts > handleAtCommand > should pass through query if no @ command is present Ignore file not found: /tmp/folder-structure-test-Ueu22a/.geminiignore, continue without it. stdout | src/ui/hooks/atCommandProcessor.test.ts > handleAtCommand > should pass through original query if only a lone @ symbol is present Ignore file not found: /tmp/folder-structure-test-bKeU9T/.geminiignore, continue without it. stdout | src/ui/hooks/atCommandProcessor.test.ts > handleAtCommand > should process a valid text file path Ignore file not found: /tmp/folder-structure-test-rmatTu/.geminiignore, continue without it. stdout | src/ui/hooks/atCommandProcessor.test.ts > handleAtCommand > should process a valid text file path Ignore file not found: /tmp/folder-structure-test-rmatTu/.geminiignore, continue without it. stdout | src/ui/hooks/atCommandProcessor.test.ts > handleAtCommand > should process a valid directory path and convert to glob Ignore file not found: /tmp/folder-structure-test-Xcvsbz/.geminiignore, continue without it. stdout | src/ui/hooks/atCommandProcessor.test.ts > handleAtCommand > should process a valid directory path and convert to glob Ignore file not found: /tmp/folder-structure-test-Xcvsbz/.geminiignore, continue without it. stdout | src/ui/hooks/atCommandProcessor.test.ts > handleAtCommand > should handle query with text before and after @command Ignore file not found: /tmp/folder-structure-test-h5vWe0/.geminiignore, continue without it. stdout | src/ui/hooks/atCommandProcessor.test.ts > handleAtCommand > should handle query with text before and after @command Ignore file not found: /tmp/folder-structure-test-h5vWe0/.geminiignore, continue without it. stdout | src/ui/hooks/atCommandProcessor.test.ts > handleAtCommand > should correctly unescape paths with escaped spaces Ignore file not found: /tmp/folder-structure-test-0y2zRT/.geminiignore, continue without it. stdout | src/ui/hooks/atCommandProcessor.test.ts > handleAtCommand > should correctly unescape paths with escaped spaces Ignore file not found: /tmp/folder-structure-test-0y2zRT/.geminiignore, continue without it. stdout | src/ui/hooks/atCommandProcessor.test.ts > handleAtCommand > should correctly handle file paths with narrow non-breaking space (NNBSP) Ignore file not found: /tmp/folder-structure-test-CB5gG6/.geminiignore, continue without it. stdout | src/ui/hooks/atCommandProcessor.test.ts > handleAtCommand > should correctly handle file paths with narrow non-breaking space (NNBSP) Ignore file not found: /tmp/folder-structure-test-CB5gG6/.geminiignore, continue without it. stdout | src/ui/hooks/atCommandProcessor.test.ts > handleAtCommand > should handle multiple @file references Ignore file not found: /tmp/folder-structure-test-T3NxSb/.geminiignore, continue without it. stdout | src/ui/hooks/atCommandProcessor.test.ts > handleAtCommand > should handle multiple @file references Ignore file not found: /tmp/folder-structure-test-T3NxSb/.geminiignore, continue without it. stdout | src/ui/hooks/atCommandProcessor.test.ts > handleAtCommand > should handle multiple @file references with interleaved text Ignore file not found: /tmp/folder-structure-test-9OwjZe/.geminiignore, continue without it. stdout | src/ui/hooks/atCommandProcessor.test.ts > handleAtCommand > should handle multiple @file references with interleaved text Ignore file not found: /tmp/folder-structure-test-9OwjZe/.geminiignore, continue without it. stdout | src/ui/hooks/atCommandProcessor.test.ts > handleAtCommand > should handle a mix of valid, invalid, and lone @ references Ignore file not found: /tmp/folder-structure-test-s9J2eE/.geminiignore, continue without it. stdout | src/ui/hooks/atCommandProcessor.test.ts > handleAtCommand > should handle a mix of valid, invalid, and lone @ references Ignore file not found: /tmp/folder-structure-test-s9J2eE/.geminiignore, continue without it. stdout | src/ui/hooks/atCommandProcessor.test.ts > handleAtCommand > should handle a mix of valid, invalid, and lone @ references Ignore file not found: /tmp/folder-structure-test-s9J2eE/.geminiignore, continue without it. βœ“ src/utils/settingsUtils.test.ts (73 tests) 86ms stdout | src/ui/hooks/atCommandProcessor.test.ts > handleAtCommand > should return original query if all @paths are invalid or lone @ Ignore file not found: /tmp/folder-structure-test-ZyfwEP/.geminiignore, continue without it. stdout | src/ui/hooks/atCommandProcessor.test.ts > handleAtCommand > should return original query if all @paths are invalid or lone @ Ignore file not found: /tmp/folder-structure-test-ZyfwEP/.geminiignore, continue without it. stdout | src/ui/hooks/atCommandProcessor.test.ts > handleAtCommand > git-aware filtering > should skip git-ignored files in @ commands Ignore file not found: /tmp/folder-structure-test-khsEea/.geminiignore, continue without it. stdout | src/ui/hooks/atCommandProcessor.test.ts > handleAtCommand > git-aware filtering > should skip git-ignored files in @ commands Ignored 1 files: Git-ignored: /tmp/folder-structure-test-khsEea/node_modules/package.json stdout | src/ui/hooks/atCommandProcessor.test.ts > handleAtCommand > git-aware filtering > should process non-git-ignored files normally Ignore file not found: /tmp/folder-structure-test-U1slQF/.geminiignore, continue without it. stdout | src/ui/hooks/atCommandProcessor.test.ts > handleAtCommand > git-aware filtering > should process non-git-ignored files normally Ignore file not found: /tmp/folder-structure-test-U1slQF/.geminiignore, continue without it. stdout | src/ui/hooks/atCommandProcessor.test.ts > handleAtCommand > git-aware filtering > should handle mixed git-ignored and valid files Ignore file not found: /tmp/folder-structure-test-mQ0gTk/.geminiignore, continue without it. stdout | src/ui/hooks/atCommandProcessor.test.ts > handleAtCommand > git-aware filtering > should handle mixed git-ignored and valid files Ignored 1 files: Git-ignored: /tmp/folder-structure-test-mQ0gTk/.env stdout | src/ui/hooks/atCommandProcessor.test.ts > handleAtCommand > git-aware filtering > should handle mixed git-ignored and valid files Ignore file not found: /tmp/folder-structure-test-mQ0gTk/.geminiignore, continue without it. stdout | src/ui/hooks/atCommandProcessor.test.ts > handleAtCommand > git-aware filtering > should always ignore .git directory files Ignore file not found: /tmp/folder-structure-test-SRmEll/.geminiignore, continue without it. stdout | src/ui/hooks/atCommandProcessor.test.ts > handleAtCommand > git-aware filtering > should always ignore .git directory files Ignored 1 files: Git-ignored: /tmp/folder-structure-test-SRmEll/.git/config stdout | src/ui/hooks/atCommandProcessor.test.ts > handleAtCommand > when recursive file search is disabled > should not use glob search for a nonexistent file Ignore file not found: /tmp/folder-structure-test-aQG63U/.geminiignore, continue without it. stdout | src/ui/hooks/atCommandProcessor.test.ts > handleAtCommand > gemini-ignore filtering > should skip gemini-ignored files in @ commands Loading ignore patterns from: /tmp/folder-structure-test-ZDv7Vz/.geminiignore stdout | src/ui/hooks/atCommandProcessor.test.ts > handleAtCommand > gemini-ignore filtering > should skip gemini-ignored files in @ commands Ignored 1 files: Gemini-ignored: /tmp/folder-structure-test-ZDv7Vz/build/output.js βœ“ src/utils/sessionCleanup.test.ts (70 tests) 155ms stdout | src/ui/hooks/atCommandProcessor.test.ts > handleAtCommand > should process non-ignored files when .geminiignore is present Loading ignore patterns from: /tmp/folder-structure-test-W5VwDg/.geminiignore stdout | src/ui/hooks/atCommandProcessor.test.ts > handleAtCommand > should process non-ignored files when .geminiignore is present Loading ignore patterns from: /tmp/folder-structure-test-W5VwDg/.geminiignore stdout | src/ui/hooks/atCommandProcessor.test.ts > handleAtCommand > should handle mixed gemini-ignored and valid files Loading ignore patterns from: /tmp/folder-structure-test-a7YHAp/.geminiignore stdout | src/ui/hooks/atCommandProcessor.test.ts > handleAtCommand > should handle mixed gemini-ignored and valid files Ignored 1 files: Gemini-ignored: /tmp/folder-structure-test-a7YHAp/dist/bundle.js stdout | src/ui/hooks/atCommandProcessor.test.ts > handleAtCommand > should handle mixed gemini-ignored and valid files Loading ignore patterns from: /tmp/folder-structure-test-a7YHAp/.geminiignore βœ“ src/ui/components/shared/vim-buffer-actions.test.ts (79 tests) 65ms stdout | src/ui/hooks/atCommandProcessor.test.ts > handleAtCommand > punctuation termination in @ commands > should terminate @path at 'comma' Ignore file not found: /tmp/folder-structure-test-9m9FmO/.geminiignore, continue without it. stdout | src/ui/hooks/atCommandProcessor.test.ts > handleAtCommand > punctuation termination in @ commands > should terminate @path at 'comma' Ignore file not found: /tmp/folder-structure-test-9m9FmO/.geminiignore, continue without it. stdout | src/ui/hooks/atCommandProcessor.test.ts > handleAtCommand > punctuation termination in @ commands > should terminate @path at 'period' Ignore file not found: /tmp/folder-structure-test-dRMt2s/.geminiignore, continue without it. stdout | src/ui/hooks/atCommandProcessor.test.ts > handleAtCommand > punctuation termination in @ commands > should terminate @path at 'period' Ignore file not found: /tmp/folder-structure-test-dRMt2s/.geminiignore, continue without it. stdout | src/ui/hooks/atCommandProcessor.test.ts > handleAtCommand > punctuation termination in @ commands > should terminate @path at 'semicolon' Ignore file not found: /tmp/folder-structure-test-aJcXvy/.geminiignore, continue without it. stdout | src/ui/hooks/atCommandProcessor.test.ts > handleAtCommand > punctuation termination in @ commands > should terminate @path at 'semicolon' Ignore file not found: /tmp/folder-structure-test-aJcXvy/.geminiignore, continue without it. stdout | src/ui/hooks/atCommandProcessor.test.ts > handleAtCommand > punctuation termination in @ commands > should terminate @path at 'exclamation mark' Ignore file not found: /tmp/folder-structure-test-I1PFT5/.geminiignore, continue without it. stdout | src/ui/hooks/atCommandProcessor.test.ts > handleAtCommand > punctuation termination in @ commands > should terminate @path at 'exclamation mark' Ignore file not found: /tmp/folder-structure-test-I1PFT5/.geminiignore, continue without it. stdout | src/ui/hooks/atCommandProcessor.test.ts > handleAtCommand > punctuation termination in @ commands > should terminate @path at 'question mark' Ignore file not found: /tmp/folder-structure-test-Nu0kiN/.geminiignore, continue without it. stdout | src/ui/hooks/atCommandProcessor.test.ts > handleAtCommand > punctuation termination in @ commands > should terminate @path at 'question mark' Ignore file not found: /tmp/folder-structure-test-Nu0kiN/.geminiignore, continue without it. stdout | src/ui/hooks/atCommandProcessor.test.ts > handleAtCommand > punctuation termination in @ commands > should terminate @path at 'opening parenthesis' Ignore file not found: /tmp/folder-structure-test-fFklul/.geminiignore, continue without it. stdout | src/ui/hooks/atCommandProcessor.test.ts > handleAtCommand > punctuation termination in @ commands > should terminate @path at 'opening parenthesis' Ignore file not found: /tmp/folder-structure-test-fFklul/.geminiignore, continue without it. stdout | src/ui/hooks/atCommandProcessor.test.ts > handleAtCommand > punctuation termination in @ commands > should terminate @path at 'closing parenthesis' Ignore file not found: /tmp/folder-structure-test-3p8VHd/.geminiignore, continue without it. stdout | src/ui/hooks/atCommandProcessor.test.ts > handleAtCommand > punctuation termination in @ commands > should terminate @path at 'closing parenthesis' Ignore file not found: /tmp/folder-structure-test-3p8VHd/.geminiignore, continue without it. βœ“ src/services/FileCommandLoader.test.ts (44 tests) 647ms stdout | src/ui/hooks/atCommandProcessor.test.ts > handleAtCommand > punctuation termination in @ commands > should terminate @path at 'opening square bracket' Ignore file not found: /tmp/folder-structure-test-kvf6Cr/.geminiignore, continue without it. stdout | src/ui/hooks/atCommandProcessor.test.ts > handleAtCommand > punctuation termination in @ commands > should terminate @path at 'opening square bracket' Ignore file not found: /tmp/folder-structure-test-kvf6Cr/.geminiignore, continue without it. stdout | src/ui/hooks/atCommandProcessor.test.ts > handleAtCommand > punctuation termination in @ commands > should terminate @path at 'closing square bracket' Ignore file not found: /tmp/folder-structure-test-xUq1yK/.geminiignore, continue without it. stdout | src/ui/hooks/atCommandProcessor.test.ts > handleAtCommand > punctuation termination in @ commands > should terminate @path at 'closing square bracket' Ignore file not found: /tmp/folder-structure-test-xUq1yK/.geminiignore, continue without it. stdout | src/ui/hooks/atCommandProcessor.test.ts > handleAtCommand > punctuation termination in @ commands > should terminate @path at 'opening curly brace' Ignore file not found: /tmp/folder-structure-test-pQWWCh/.geminiignore, continue without it. stdout | src/ui/hooks/atCommandProcessor.test.ts > handleAtCommand > punctuation termination in @ commands > should terminate @path at 'opening curly brace' Ignore file not found: /tmp/folder-structure-test-pQWWCh/.geminiignore, continue without it. stdout | src/ui/hooks/atCommandProcessor.test.ts > handleAtCommand > punctuation termination in @ commands > should terminate @path at 'closing curly brace' Ignore file not found: /tmp/folder-structure-test-yZMP1H/.geminiignore, continue without it. stdout | src/ui/hooks/atCommandProcessor.test.ts > handleAtCommand > punctuation termination in @ commands > should terminate @path at 'closing curly brace' Ignore file not found: /tmp/folder-structure-test-yZMP1H/.geminiignore, continue without it. stdout | src/ui/hooks/atCommandProcessor.test.ts > handleAtCommand > punctuation termination in @ commands > should handle multiple @paths terminated by different punctuation Ignore file not found: /tmp/folder-structure-test-1Lf5ML/.geminiignore, continue without it. stdout | src/ui/hooks/atCommandProcessor.test.ts > handleAtCommand > punctuation termination in @ commands > should handle multiple @paths terminated by different punctuation Ignore file not found: /tmp/folder-structure-test-1Lf5ML/.geminiignore, continue without it. βœ“ src/config/settings.test.ts (89 tests) 1201ms βœ“ LoadedSettings Isolation and Serializability > setValue Serializability > should handle circular references (structuredClone supports them, but deepMerge may not) 615ms stdout | src/ui/hooks/atCommandProcessor.test.ts > handleAtCommand > punctuation termination in @ commands > should still handle escaped spaces in paths before punctuation Ignore file not found: /tmp/folder-structure-test-tEmFPu/.geminiignore, continue without it. stdout | src/ui/hooks/atCommandProcessor.test.ts > handleAtCommand > punctuation termination in @ commands > should still handle escaped spaces in paths before punctuation Ignore file not found: /tmp/folder-structure-test-tEmFPu/.geminiignore, continue without it. stdout | src/ui/hooks/atCommandProcessor.test.ts > handleAtCommand > punctuation termination in @ commands > should not break file paths with periods in extensions Ignore file not found: /tmp/folder-structure-test-f0LAdB/.geminiignore, continue without it. stdout | src/ui/hooks/atCommandProcessor.test.ts > handleAtCommand > punctuation termination in @ commands > should not break file paths with periods in extensions Ignore file not found: /tmp/folder-structure-test-f0LAdB/.geminiignore, continue without it. stdout | src/ui/hooks/atCommandProcessor.test.ts > handleAtCommand > punctuation termination in @ commands > should handle file paths ending with period followed by space Ignore file not found: /tmp/folder-structure-test-Bwdj2r/.geminiignore, continue without it. stdout | src/ui/hooks/atCommandProcessor.test.ts > handleAtCommand > punctuation termination in @ commands > should handle file paths ending with period followed by space Ignore file not found: /tmp/folder-structure-test-Bwdj2r/.geminiignore, continue without it. stdout | src/ui/hooks/atCommandProcessor.test.ts > handleAtCommand > punctuation termination in @ commands > should handle comma termination with complex file paths Ignore file not found: /tmp/folder-structure-test-EQO2m4/.geminiignore, continue without it. stdout | src/ui/hooks/atCommandProcessor.test.ts > handleAtCommand > punctuation termination in @ commands > should handle comma termination with complex file paths Ignore file not found: /tmp/folder-structure-test-EQO2m4/.geminiignore, continue without it. stdout | src/ui/hooks/atCommandProcessor.test.ts > handleAtCommand > punctuation termination in @ commands > should correctly handle file paths with multiple periods Ignore file not found: /tmp/folder-structure-test-dhQexH/.geminiignore, continue without it. stdout | src/ui/hooks/atCommandProcessor.test.ts > handleAtCommand > punctuation termination in @ commands > should correctly handle file paths with multiple periods Ignore file not found: /tmp/folder-structure-test-dhQexH/.geminiignore, continue without it. stdout | src/ui/hooks/atCommandProcessor.test.ts > handleAtCommand > punctuation termination in @ commands > should handle end of string termination for period and comma Ignore file not found: /tmp/folder-structure-test-3pi4n7/.geminiignore, continue without it. stdout | src/ui/hooks/atCommandProcessor.test.ts > handleAtCommand > punctuation termination in @ commands > should handle end of string termination for period and comma Ignore file not found: /tmp/folder-structure-test-3pi4n7/.geminiignore, continue without it. stdout | src/ui/hooks/atCommandProcessor.test.ts > handleAtCommand > punctuation termination in @ commands > should handle files with special characters in names Ignore file not found: /tmp/folder-structure-test-wDbkCJ/.geminiignore, continue without it. stdout | src/ui/hooks/atCommandProcessor.test.ts > handleAtCommand > punctuation termination in @ commands > should handle files with special characters in names Ignore file not found: /tmp/folder-structure-test-wDbkCJ/.geminiignore, continue without it. stdout | src/ui/hooks/atCommandProcessor.test.ts > handleAtCommand > punctuation termination in @ commands > should handle basic file names without special characters Ignore file not found: /tmp/folder-structure-test-RpTKOs/.geminiignore, continue without it. stdout | src/ui/hooks/atCommandProcessor.test.ts > handleAtCommand > punctuation termination in @ commands > should handle basic file names without special characters Ignore file not found: /tmp/folder-structure-test-RpTKOs/.geminiignore, continue without it. stdout | src/ui/hooks/atCommandProcessor.test.ts > handleAtCommand > absolute path handling > should handle absolute file paths correctly Ignore file not found: /tmp/folder-structure-test-BzmMRo/.geminiignore, continue without it. stdout | src/ui/hooks/atCommandProcessor.test.ts > handleAtCommand > absolute path handling > should handle absolute file paths correctly Ignore file not found: /tmp/folder-structure-test-BzmMRo/.geminiignore, continue without it. stdout | src/ui/hooks/atCommandProcessor.test.ts > handleAtCommand > absolute path handling > should handle absolute directory paths correctly Ignore file not found: /tmp/folder-structure-test-8itCD1/.geminiignore, continue without it. stdout | src/ui/hooks/atCommandProcessor.test.ts > handleAtCommand > absolute path handling > should handle absolute directory paths correctly Ignore file not found: /tmp/folder-structure-test-8itCD1/.geminiignore, continue without it. stdout | src/ui/hooks/atCommandProcessor.test.ts > handleAtCommand > should not add the user's turn to history, as that is the caller's responsibility Ignore file not found: /tmp/folder-structure-test-Qfylpy/.geminiignore, continue without it. stdout | src/ui/hooks/atCommandProcessor.test.ts > handleAtCommand > should not add the user's turn to history, as that is the caller's responsibility Ignore file not found: /tmp/folder-structure-test-Qfylpy/.geminiignore, continue without it. stdout | src/ui/hooks/atCommandProcessor.test.ts > handleAtCommand > MCP resource attachments > attaches MCP resource content when @serverName:uri matches registry Ignore file not found: /tmp/folder-structure-test-W6NgXo/.geminiignore, continue without it. stdout | src/ui/hooks/atCommandProcessor.test.ts > handleAtCommand > MCP resource attachments > returns an error if MCP client is unavailable Ignore file not found: /tmp/folder-structure-test-MkDxJl/.geminiignore, continue without it. stderr | src/ui/hooks/atCommandProcessor.test.ts > handleAtCommand > MCP resource attachments > returns an error if MCP client is unavailable Exiting due to an error processing the @ command: Error reading resource resource://server-1/logs: MCP client for server 'server-1' is not available or not connected. stdout | src/ui/hooks/atCommandProcessor.test.ts > handleAtCommand > should return error if the read_many_files tool is cancelled by user Ignore file not found: /tmp/folder-structure-test-lR90kj/.geminiignore, continue without it. stderr | src/ui/hooks/atCommandProcessor.test.ts > handleAtCommand > should return error if the read_many_files tool is cancelled by user Exiting due to an error processing the @ command: Error reading files (file.txt): User cancelled operation stdout | src/ui/hooks/atCommandProcessor.test.ts > handleAtCommand > should include agent nudge when agents are found Ignore file not found: /tmp/folder-structure-test-G35vij/.geminiignore, continue without it. stderr | src/ui/commands/extensionsCommand.test.ts > extensionsCommand > link > should show error message for invalid source Failed to stat path "test-extension-package": invalid path βœ“ src/ui/hooks/atCommandProcessor.test.ts (46 tests) 3184ms βœ“ src/ui/commands/extensionsCommand.test.ts (56 tests) 360ms stderr | src/config/extension.test.ts > extension tests > installExtension > should prompt for settings if promptForSettings Extension "my-local-extension" has missing settings: API Key. Please run "gemini extensions config my-local-extension [setting-name]" to configure them. stderr | src/config/extension.test.ts > extension tests > installExtension > should not prompt for settings if promptForSettings is false Extension "my-local-extension" has missing settings: API Key. Please run "gemini extensions config my-local-extension [setting-name]" to configure them. βœ“ src/ui/hooks/useSlashCompletion.test.ts (25 tests) 624ms βœ“ src/ui/contexts/KeypressContext.test.tsx (112 tests) 424ms stderr | src/config/extension.test.ts > extension tests > installExtension > should auto-update if settings have changed Extension "my-auto-update-ext" has missing settings: OLD_SETTING. Please run "gemini extensions config my-auto-update-ext [setting-name]" to configure them. βœ“ src/ui/hooks/slashCommandProcessor.test.tsx (35 tests) 933ms stderr | src/config/extension.test.ts > extension tests > installExtension > should auto-update if settings have changed Extension "my-auto-update-ext" has missing settings: NEW_SETTING. Please run "gemini extensions config my-auto-update-ext [setting-name]" to configure them. βœ“ src/ui/hooks/useToolScheduler.test.ts (23 tests) 478ms stderr | ../../node_modules/react-reconciler/cjs/react-reconciler.development.js:13614:19 An update to TestComponent inside a test was not wrapped in act(...). When testing, code that causes React state updates should be wrapped into act(...): act(() => { /* fire events that update state */ }); /* assert on the output */ This ensures that you're testing the behavior the user would see in the browser. Learn more at https://react.dev/link/wrap-tests-with-act βœ“ src/ui/hooks/shellCommandProcessor.test.tsx (34 tests) 1269ms βœ“ useShellCommandProcessor > Background Shell Management > should hide background shell when waiting for confirmation and restore after delay 340ms βœ“ useShellCommandProcessor > Background Shell Management > should auto-hide background shell when foreground shell starts and restore when it ends 450ms stdout | src/ui/components/SettingsDialog.test.tsx > SettingsDialog > Settings Toggling > should toggle setting with Enter key [DEBUG SettingsDialog] Saving general.vimMode immediately with value: true stdout | src/ui/components/SettingsDialog.test.tsx > SettingsDialog > Settings Toggling > enum values > 'toggles to next value' [DEBUG SettingsDialog] Saving ui.theme immediately with value: baz stdout | src/ui/components/SettingsDialog.test.tsx > SettingsDialog > Settings Toggling > enum values > 'loops back to first value when at end' [DEBUG SettingsDialog] Saving ui.theme immediately with value: foo stdout | src/ui/components/SettingsDialog.test.tsx > SettingsDialog > Settings Toggling > should handle vim mode setting specially [DEBUG SettingsDialog] Saving general.vimMode immediately with value: true βœ“ src/ui/hooks/vim.test.tsx (100 tests) 2307ms βœ“ src/config/extension.test.ts (79 tests) 3565ms βœ“ extension tests > installExtension > should only prompt for new settings on update, and preserve old settings 501ms βœ“ extension tests > installExtension > should auto-update if settings have changed 515ms stdout | src/ui/components/SettingsDialog.test.tsx > SettingsDialog > Error Handling > should handle vim mode toggle errors gracefully [DEBUG SettingsDialog] Saving general.vimMode immediately with value: true stdout | src/ui/components/SettingsDialog.test.tsx > SettingsDialog > Complex State Management > should track modified settings correctly [DEBUG SettingsDialog] Saving general.vimMode immediately with value: true [DEBUG SettingsDialog] Saving general.vimMode immediately with value: true stdout | src/ui/components/SettingsDialog.test.tsx > SettingsDialog > VimMode Integration > should sync with VimModeContext when vim mode is toggled [DEBUG SettingsDialog] Saving general.vimMode immediately with value: true βœ“ src/ui/hooks/useGeminiStream.test.tsx (66 tests) 2721ms stdout | src/ui/components/SettingsDialog.test.tsx > SettingsDialog > Specific Settings Behavior > should handle immediate settings save for non-restart-required settings [DEBUG SettingsDialog] Saving general.vimMode immediately with value: true βœ“ src/ui/components/shared/text-buffer.test.ts (220 tests) 4612ms βœ“ useTextBuffer > Input Sanitization > should sanitize large text (>5000 chars) and strip unsafe characters 709ms βœ“ useTextBuffer > Input Sanitization > should sanitize large ANSI text (>5000 chars) and strip escape codes 3170ms stdout | src/ui/components/SettingsDialog.test.tsx > SettingsDialog > Race Condition Regression Tests > should 'not reset sibling settings when toggl…' [DEBUG SettingsDialog] Saving tools.shell.showColor immediately with value: true [DEBUG SettingsDialog] Saving tools.shell.showColor immediately with value: false [DEBUG SettingsDialog] Saving tools.shell.showColor immediately with value: true [DEBUG SettingsDialog] Saving tools.shell.showColor immediately with value: false [DEBUG SettingsDialog] Saving tools.shell.showColor immediately with value: true stdout | src/ui/components/SettingsDialog.test.tsx > SettingsDialog > Race Condition Regression Tests > should 'preserve multiple sibling settings in…' [DEBUG SettingsDialog] Saving tools.shell.showColor immediately with value: true [DEBUG SettingsDialog] Saving tools.shell.showColor immediately with value: false [DEBUG SettingsDialog] Saving tools.shell.showColor immediately with value: true βœ“ src/ui/components/AskUserDialog.test.tsx (35 tests) 4246ms βœ“ AskUserDialog > Submission: 'Multi-select' > submits correct values for Multi-select 343ms βœ“ AskUserDialog > handles custom option in single select with inline typing 593ms βœ“ AskUserDialog > Text type questions > handles mixed text and choice questions 447ms stdout | src/ui/components/SettingsDialog.test.tsx > SettingsDialog > Complex User Interactions > should allow changing multiple settings without losing pending changes [DEBUG SettingsDialog] Saving general.vimMode immediately with value: true [DEBUG SettingsDialog] Saving general.vimMode immediately with value: true [DEBUG SettingsDialog] Saving general.vimMode immediately with value: true stdout | src/ui/components/SettingsDialog.test.tsx > SettingsDialog > Restart and Search Conflict Regression > should prioritize restart request over search text box when showRestartPrompt is true [DEBUG SettingsDialog] Modified settings: [ 'tools.shell.enableInteractiveShell' ] Needs restart: true stdout | src/ui/components/SettingsDialog.test.tsx > SettingsDialog > Restart and Search Conflict Regression > should hide search box when showRestartPrompt is true [DEBUG SettingsDialog] Modified settings: [ 'tools.shell.enableInteractiveShell' ] Needs restart: true stdout | src/ui/components/SettingsDialog.test.tsx > SettingsDialog > String Settings Editing > should allow editing and committing a string setting [DEBUG SettingsDialog] Saving general.vimMode immediately with value: true [DEBUG SettingsDialog] Saving general.vimMode immediately with value: true βœ“ src/config/extensions/extensionSettings.test.ts (31 tests) 71ms βœ“ src/nonInteractiveCli.test.ts (45 tests) 1273ms βœ“ runNonInteractive > should handle cancellation (Ctrl+C) 426ms βœ“ src/ui/commands/hooksCommand.test.ts (33 tests) 644ms βœ“ src/ui/hooks/useSelectionList.test.tsx (47 tests) 213ms βœ“ src/ui/components/SettingsDialog.test.tsx (58 tests) 9249ms βœ“ SettingsDialog > Initial Rendering > should render the settings dialog with default state 566ms βœ“ SettingsDialog > Settings Navigation > should navigate with 'arrow keys' 308ms βœ“ SettingsDialog > Settings Navigation > should navigate with 'vim keys (j/k)' 320ms βœ“ SettingsDialog > String Settings Editing > should allow editing and committing a string setting 412ms βœ“ SettingsDialog > Search Functionality > should display text entered in search 340ms βœ“ SettingsDialog > Search Functionality > should show search query and filter settings as user types 306ms βœ“ SettingsDialog > Search Functionality > should exit search settings when Escape is pressed 352ms βœ“ SettingsDialog > Search Functionality > should handle backspace to modify search query 316ms stdout | src/ui/AppContainer.test.tsx > AppContainer State Management > Basic Rendering > renders without crashing with minimal props [SessionSummary] Error finding previous session: Storage must be initialized before use stdout | src/ui/AppContainer.test.tsx > AppContainer State Management > Basic Rendering > renders with startup warnings [SessionSummary] Error finding previous session: Storage must be initialized before use stdout | src/ui/AppContainer.test.tsx > AppContainer State Management > State Initialization > initializes with theme error from initialization result [SessionSummary] Error finding previous session: Storage must be initialized before use stdout | src/ui/AppContainer.test.tsx > AppContainer State Management > Context Providers > provides AppContext with correct values [SessionSummary] Error finding previous session: Storage must be initialized before use stdout | src/ui/AppContainer.test.tsx > AppContainer State Management > Context Providers > provides UIStateContext with state management [SessionSummary] Error finding previous session: Storage must be initialized before use stdout | src/ui/AppContainer.test.tsx > AppContainer State Management > Context Providers > provides UIActionsContext with action handlers [SessionSummary] Error finding previous session: Storage must be initialized before use stdout | src/ui/AppContainer.test.tsx > AppContainer State Management > Context Providers > provides ConfigContext with config object [SessionSummary] Error finding previous session: Storage must be initialized before use βœ“ src/services/prompt-processors/shellProcessor.test.ts (34 tests) 260ms stdout | src/ui/AppContainer.test.tsx > AppContainer State Management > Settings Integration > handles settings with all display options disabled [SessionSummary] Error finding previous session: Storage must be initialized before use stdout | src/ui/AppContainer.test.tsx > AppContainer State Management > Settings Integration > handles settings with memory usage enabled [SessionSummary] Error finding previous session: Storage must be initialized before use stdout | src/ui/AppContainer.test.tsx > AppContainer State Management > Version Handling > handles version format: 1.0.0 [SessionSummary] Error finding previous session: Storage must be initialized before use stdout | src/ui/AppContainer.test.tsx > AppContainer State Management > Version Handling > handles version format: 2.1.3-beta [SessionSummary] Error finding previous session: Storage must be initialized before use stdout | src/ui/AppContainer.test.tsx > AppContainer State Management > Version Handling > handles version format: 3.0.0-nightly [SessionSummary] Error finding previous session: Storage must be initialized before use stdout | src/ui/AppContainer.test.tsx > AppContainer State Management > Error Handling > handles undefined settings gracefully [SessionSummary] Error finding previous session: Storage must be initialized before use stdout | src/ui/AppContainer.test.tsx > AppContainer State Management > Provider Hierarchy > establishes correct provider nesting order [SessionSummary] Error finding previous session: Storage must be initialized before use stdout | src/ui/AppContainer.test.tsx > AppContainer State Management > Session Resumption > handles resumed session data correctly [SessionSummary] Error finding previous session: Storage must be initialized before use stdout | src/ui/AppContainer.test.tsx > AppContainer State Management > Session Resumption > renders without resumed session data [SessionSummary] Error finding previous session: Storage must be initialized before use βœ“ src/ui/hooks/useQuotaAndFallback.test.ts (20 tests) 257ms stdout | src/ui/AppContainer.test.tsx > AppContainer State Management > Quota and Fallback Integration > passes a null proQuotaRequest to UIStateContext by default [SessionSummary] Error finding previous session: Storage must be initialized before use stdout | src/ui/AppContainer.test.tsx > AppContainer State Management > Quota and Fallback Integration > passes a valid proQuotaRequest to UIStateContext when provided by the hook [SessionSummary] Error finding previous session: Storage must be initialized before use stdout | src/ui/AppContainer.test.tsx > AppContainer State Management > Quota and Fallback Integration > passes the handleProQuotaChoice function to UIActionsContext [SessionSummary] Error finding previous session: Storage must be initialized before use stdout | src/ui/AppContainer.test.tsx > AppContainer State Management > Terminal Title Update Feature > should update terminal title with Working… when showStatusInTitle is false [SessionSummary] Error finding previous session: Storage must be initialized before use stdout | src/ui/AppContainer.test.tsx > AppContainer State Management > Terminal Title Update Feature > should use legacy terminal title when dynamicWindowTitle is false [SessionSummary] Error finding previous session: Storage must be initialized before use stdout | src/ui/AppContainer.test.tsx > AppContainer State Management > Terminal Title Update Feature > should not update terminal title when hideWindowTitle is true [SessionSummary] Error finding previous session: Storage must be initialized before use stdout | src/ui/AppContainer.test.tsx > AppContainer State Management > Terminal Title Update Feature > should update terminal title with thought subject when in active state [SessionSummary] Error finding previous session: Storage must be initialized before use stdout | src/ui/AppContainer.test.tsx > AppContainer State Management > Terminal Title Update Feature > should update terminal title with default text when in Idle state and no thought subject [SessionSummary] Error finding previous session: Storage must be initialized before use stdout | src/ui/AppContainer.test.tsx > AppContainer State Management > Terminal Title Update Feature > should update terminal title when in WaitingForConfirmation state with thought subject [SessionSummary] Error finding previous session: Storage must be initialized before use stdout | src/zed-integration/zedIntegration.test.ts > GeminiAgent > should create a new session [STARTUP] StartupProfiler.flush() called with 0 phases stdout | src/zed-integration/zedIntegration.test.ts > GeminiAgent > should create a new session with mcp servers [STARTUP] StartupProfiler.flush() called with 0 phases stdout | src/zed-integration/zedIntegration.test.ts > GeminiAgent > should initialize file system service if client supports it [STARTUP] StartupProfiler.flush() called with 0 phases stdout | src/zed-integration/zedIntegration.test.ts > GeminiAgent > should cancel a session [STARTUP] StartupProfiler.flush() called with 0 phases stdout | src/zed-integration/zedIntegration.test.ts > GeminiAgent > should delegate prompt to session [STARTUP] StartupProfiler.flush() called with 0 phases TEST: calling prompt TEST: waiting for streamStarted TEST: asyncStream started TEST: waiting for read TEST: streamStarted TEST: cancelled TEST: stream closed TEST: read returned done=true TEST: releasing lock TEST: result received {"stopReason":"cancelled"} stderr | src/zed-integration/zedIntegration.test.ts > Session > should ignore files based on configuration Path ignored.txt is ignored and will be skipped. No valid file paths found in @ commands to read. stdout | src/ui/AppContainer.test.tsx > AppContainer State Management > Terminal Title Update Feature > Shell Focus Action Required > should show Action Required in title after a delay when shell is awaiting focus [SessionSummary] Error finding previous session: Storage must be initialized before use stdout | src/ui/AppContainer.test.tsx > AppContainer State Management > Terminal Title Update Feature > Shell Focus Action Required > should show Working… in title for redirected commands after 2 mins [SessionSummary] Error finding previous session: Storage must be initialized before use stdout | src/ui/AppContainer.test.tsx > AppContainer State Management > Terminal Title Update Feature > Shell Focus Action Required > should show Working… in title for silent non-redirected commands after 1 min [SessionSummary] Error finding previous session: Storage must be initialized before use stdout | src/ui/AppContainer.test.tsx > AppContainer State Management > Terminal Title Update Feature > Shell Focus Action Required > should NOT show Action Required in title if shell is streaming output [SessionSummary] Error finding previous session: Storage must be initialized before use βœ“ src/zed-integration/zedIntegration.test.ts (21 tests) 165ms stdout | src/ui/AppContainer.test.tsx > AppContainer State Management > Terminal Title Update Feature > should pad title to exactly 80 characters [SessionSummary] Error finding previous session: Storage must be initialized before use stdout | src/ui/AppContainer.test.tsx > AppContainer State Management > Terminal Title Update Feature > should use correct ANSI escape code format [SessionSummary] Error finding previous session: Storage must be initialized before use βœ“ src/utils/sessions.test.ts (17 tests) 42ms stdout | src/ui/AppContainer.test.tsx > AppContainer State Management > Terminal Title Update Feature > should use CLI_TITLE environment variable when set [SessionSummary] Error finding previous session: Storage must be initialized before use stdout | src/ui/AppContainer.test.tsx > AppContainer State Management > Queue Error Message > should set and clear the queue error message after a timeout [SessionSummary] Error finding previous session: Storage must be initialized before use βœ“ src/ui/commands/skillsCommand.test.ts (23 tests) 327ms stdout | src/ui/AppContainer.test.tsx > AppContainer State Management > Queue Error Message > should reset the timer if a new error message is set [SessionSummary] Error finding previous session: Storage must be initialized before use stdout | src/ui/AppContainer.test.tsx > AppContainer State Management > Terminal Height Calculation > should prevent terminal height from being less than 1 [SessionSummary] Error finding previous session: Storage must be initialized before use stdout | src/ui/AppContainer.test.tsx > AppContainer State Management > Keyboard Input Handling (CTRL+C / CTRL+D) > CTRL+C > should cancel ongoing request on first press [SessionSummary] Error finding previous session: Storage must be initialized before use stdout | src/ui/AppContainer.test.tsx > AppContainer State Management > Keyboard Input Handling (CTRL+C / CTRL+D) > CTRL+C > should quit on second press [SessionSummary] Error finding previous session: Storage must be initialized before use stdout | src/ui/AppContainer.test.tsx > AppContainer State Management > Keyboard Input Handling (CTRL+C / CTRL+D) > CTRL+C > should reset press count after a timeout [SessionSummary] Error finding previous session: Storage must be initialized before use stdout | src/ui/AppContainer.test.tsx > AppContainer State Management > Keyboard Input Handling (CTRL+C / CTRL+D) > CTRL+D > should quit on second press if buffer is empty [SessionSummary] Error finding previous session: Storage must be initialized before use βœ“ src/ui/commands/chatCommand.test.ts (33 tests) 559ms stdout | src/ui/AppContainer.test.tsx > AppContainer State Management > Keyboard Input Handling (CTRL+C / CTRL+D) > CTRL+D > should NOT quit if buffer is not empty (bubbles from InputPrompt) [SessionSummary] Error finding previous session: Storage must be initialized before use stdout | src/ui/AppContainer.test.tsx > AppContainer State Management > Keyboard Input Handling (CTRL+C / CTRL+D) > CTRL+D > should reset press count after a timeout [SessionSummary] Error finding previous session: Storage must be initialized before use stdout | src/ui/AppContainer.test.tsx > AppContainer State Management > Keyboard Input Handling (CTRL+C / CTRL+D) > Focus Handling (Tab / Shift+Tab) > should focus shell input on Tab [SessionSummary] Error finding previous session: Storage must be initialized before use stdout | src/ui/AppContainer.test.tsx > AppContainer State Management > Keyboard Input Handling (CTRL+C / CTRL+D) > Focus Handling (Tab / Shift+Tab) > should unfocus shell input on Shift+Tab [SessionSummary] Error finding previous session: Storage must be initialized before use stdout | src/ui/AppContainer.test.tsx > AppContainer State Management > Keyboard Input Handling (CTRL+C / CTRL+D) > Focus Handling (Tab / Shift+Tab) > should auto-unfocus when activePtyId becomes null [SessionSummary] Error finding previous session: Storage must be initialized before use stdout | src/ui/AppContainer.test.tsx > AppContainer State Management > Keyboard Input Handling (CTRL+C / CTRL+D) > Focus Handling (Tab / Shift+Tab) > should focus background shell on Tab when already visible (not toggle it off) [SessionSummary] Error finding previous session: Storage must be initialized before use stdout | src/ui/AppContainer.test.tsx > AppContainer State Management > Keyboard Input Handling (CTRL+C / CTRL+D) > Background Shell Toggling (CTRL+B) > should toggle background shell on Ctrl+B even if visible but not focused [SessionSummary] Error finding previous session: Storage must be initialized before use stdout | src/ui/AppContainer.test.tsx > AppContainer State Management > Keyboard Input Handling (CTRL+C / CTRL+D) > Background Shell Toggling (CTRL+B) > should show and focus background shell on Ctrl+B if hidden [SessionSummary] Error finding previous session: Storage must be initialized before use stdout | src/ui/AppContainer.test.tsx > AppContainer State Management > Copy Mode (CTRL+S) > 'Normal Mode' > should NOT toggle mouse off when Ctrl+S is pressed [SessionSummary] Error finding previous session: Storage must be initialized before use stdout | src/ui/AppContainer.test.tsx > AppContainer State Management > Copy Mode (CTRL+S) > 'Alternate Buffer Mode' > should toggle mouse off when Ctrl+S is pressed [SessionSummary] Error finding previous session: Storage must be initialized before use βœ“ src/utils/errors.test.ts (29 tests) 51ms stdout | src/ui/AppContainer.test.tsx > AppContainer State Management > Copy Mode (CTRL+S) > 'Alternate Buffer Mode' > should toggle mouse back on when Ctrl+S is pressed again [SessionSummary] Error finding previous session: Storage must be initialized before use stdout | src/ui/AppContainer.test.tsx > AppContainer State Management > Copy Mode (CTRL+S) > 'Alternate Buffer Mode' > should exit copy mode on any key press [SessionSummary] Error finding previous session: Storage must be initialized before use βœ“ src/ui/hooks/useApprovalModeIndicator.test.ts (20 tests) 199ms stdout | src/ui/AppContainer.test.tsx > AppContainer State Management > Model Dialog Integration > should provide isModelDialogOpen in the UIStateContext [SessionSummary] Error finding previous session: Storage must be initialized before use stdout | src/ui/AppContainer.test.tsx > AppContainer State Management > Model Dialog Integration > should provide model dialog actions in the UIActionsContext [SessionSummary] Error finding previous session: Storage must be initialized before use stdout | src/ui/AppContainer.test.tsx > AppContainer State Management > Agent Configuration Dialog Integration > should initialize with dialog closed and no agent selected [SessionSummary] Error finding previous session: Storage must be initialized before use stdout | src/ui/AppContainer.test.tsx > AppContainer State Management > Agent Configuration Dialog Integration > should update state when openAgentConfigDialog is called [SessionSummary] Error finding previous session: Storage must be initialized before use stdout | src/ui/AppContainer.test.tsx > AppContainer State Management > Agent Configuration Dialog Integration > should clear state when closeAgentConfigDialog is called [SessionSummary] Error finding previous session: Storage must be initialized before use stdout | src/ui/AppContainer.test.tsx > AppContainer State Management > CoreEvents Integration > subscribes to UserFeedback and drains backlog on mount [SessionSummary] Error finding previous session: Storage must be initialized before use (node:3121) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 error listeners added to [EventEmitter]. MaxListeners is 10. Use emitter.setMaxListeners() to increase limit (Use `node --trace-warnings ...` to show where the warning was created) stdout | src/ui/AppContainer.test.tsx > AppContainer State Management > CoreEvents Integration > unsubscribes from UserFeedback on unmount [SessionSummary] Error finding previous session: Storage must be initialized before use stdout | src/ui/AppContainer.test.tsx > AppContainer State Management > CoreEvents Integration > adds history item when UserFeedback event is received [SessionSummary] Error finding previous session: Storage must be initialized before use stdout | src/ui/AppContainer.test.tsx > AppContainer State Management > CoreEvents Integration > updates currentModel when ModelChanged event is received [SessionSummary] Error finding previous session: Storage must be initialized before use stdout | src/ui/AppContainer.test.tsx > AppContainer State Management > CoreEvents Integration > provides activeHooks from useHookDisplayState [SessionSummary] Error finding previous session: Storage must be initialized before use stdout | src/ui/AppContainer.test.tsx > AppContainer State Management > CoreEvents Integration > handles consent request events [SessionSummary] Error finding previous session: Storage must be initialized before use stdout | src/ui/AppContainer.test.tsx > AppContainer State Management > CoreEvents Integration > unsubscribes from ConsentRequest on unmount [SessionSummary] Error finding previous session: Storage must be initialized before use stdout | src/ui/AppContainer.test.tsx > AppContainer State Management > Shell Interaction > should not crash if resizing the pty fails [SessionSummary] Error finding previous session: Storage must be initialized before use stdout | src/ui/AppContainer.test.tsx > AppContainer State Management > Banner Text > should render placeholder banner text for USE_GEMINI auth type [SessionSummary] Error finding previous session: Storage must be initialized before use βœ“ src/config/extensions/github.test.ts (33 tests) 170ms stdout | src/ui/AppContainer.test.tsx > AppContainer State Management > onCancelSubmit Behavior > clears the prompt when onCancelSubmit is called with shouldRestorePrompt=false [SessionSummary] Error finding previous session: Storage must be initialized before use stdout | src/ui/AppContainer.test.tsx > AppContainer State Management > onCancelSubmit Behavior > restores the prompt when onCancelSubmit is called with shouldRestorePrompt=true (or undefined) [SessionSummary] Error finding previous session: Storage must be initialized before use stdout | src/ui/AppContainer.test.tsx > AppContainer State Management > onCancelSubmit Behavior > input history is independent from conversation history (survives /clear) [SessionSummary] Error finding previous session: Storage must be initialized before use stdout | src/ui/AppContainer.test.tsx > AppContainer State Management > Regression Tests > does not refresh static on startup if banner text is empty [SessionSummary] Error finding previous session: Storage must be initialized before use stdout | src/ui/AppContainer.test.tsx > AppContainer State Management > Permission Handling > shows permission dialog when checkPermissions returns paths [SessionSummary] Error finding previous session: Storage must be initialized before use stdout | src/ui/AppContainer.test.tsx > AppContainer State Management > Permission Handling > handles permissions when allowed is true [SessionSummary] Error finding previous session: Storage must be initialized before use stdout | src/ui/AppContainer.test.tsx > AppContainer State Management > Permission Handling > handles permissions when allowed is false [SessionSummary] Error finding previous session: Storage must be initialized before use stdout | src/config/policy-engine.integration.test.ts > Policy Engine Integration Tests > Policy configuration produces valid PolicyEngine config > should create a working PolicyEngine from basic settings [PolicyEngine.check] toolCall.name: run_shell_command, stringifiedArgs: undefined [PolicyEngine.check] MATCHED rule: toolName=run_shell_command, decision=allow, priority=2.3, argsPattern=none stdout | src/config/policy-engine.integration.test.ts > Policy Engine Integration Tests > Policy configuration produces valid PolicyEngine config > should create a working PolicyEngine from basic settings [PolicyEngine.check] toolCall.name: write_file, stringifiedArgs: undefined [PolicyEngine.check] MATCHED rule: toolName=write_file, decision=deny, priority=2.4, argsPattern=none stdout | src/config/policy-engine.integration.test.ts > Policy Engine Integration Tests > Policy configuration produces valid PolicyEngine config > should create a working PolicyEngine from basic settings [PolicyEngine.check] toolCall.name: replace, stringifiedArgs: undefined [PolicyEngine.check] MATCHED rule: toolName=replace, decision=ask_user, priority=1.01, argsPattern=none stdout | src/config/policy-engine.integration.test.ts > Policy Engine Integration Tests > Policy configuration produces valid PolicyEngine config > should create a working PolicyEngine from basic settings [PolicyEngine.check] toolCall.name: unknown_tool, stringifiedArgs: undefined [PolicyEngine.check] NO MATCH - using default decision: ask_user stdout | src/config/policy-engine.integration.test.ts > Policy Engine Integration Tests > Policy configuration produces valid PolicyEngine config > should handle MCP server wildcard patterns correctly [PolicyEngine.check] toolCall.name: allowed-server__tool1, stringifiedArgs: undefined [PolicyEngine.check] MATCHED rule: toolName=allowed-server__*, decision=allow, priority=2.1, argsPattern=none stdout | src/config/policy-engine.integration.test.ts > Policy Engine Integration Tests > Policy configuration produces valid PolicyEngine config > should handle MCP server wildcard patterns correctly [PolicyEngine.check] toolCall.name: allowed-server__another_tool, stringifiedArgs: undefined [PolicyEngine.check] MATCHED rule: toolName=allowed-server__*, decision=allow, priority=2.1, argsPattern=none stdout | src/config/policy-engine.integration.test.ts > Policy Engine Integration Tests > Policy configuration produces valid PolicyEngine config > should handle MCP server wildcard patterns correctly [PolicyEngine.check] toolCall.name: trusted-server__tool1, stringifiedArgs: undefined [PolicyEngine.check] MATCHED rule: toolName=trusted-server__*, decision=allow, priority=2.2, argsPattern=none stdout | src/config/policy-engine.integration.test.ts > Policy Engine Integration Tests > Policy configuration produces valid PolicyEngine config > should handle MCP server wildcard patterns correctly [PolicyEngine.check] toolCall.name: trusted-server__special_tool, stringifiedArgs: undefined [PolicyEngine.check] MATCHED rule: toolName=trusted-server__*, decision=allow, priority=2.2, argsPattern=none stdout | src/config/policy-engine.integration.test.ts > Policy Engine Integration Tests > Policy configuration produces valid PolicyEngine config > should handle MCP server wildcard patterns correctly [PolicyEngine.check] toolCall.name: blocked-server__tool1, stringifiedArgs: undefined [PolicyEngine.check] MATCHED rule: toolName=blocked-server__*, decision=deny, priority=2.9, argsPattern=none stdout | src/config/policy-engine.integration.test.ts > Policy Engine Integration Tests > Policy configuration produces valid PolicyEngine config > should handle MCP server wildcard patterns correctly [PolicyEngine.check] toolCall.name: blocked-server__any_tool, stringifiedArgs: undefined [PolicyEngine.check] MATCHED rule: toolName=blocked-server__*, decision=deny, priority=2.9, argsPattern=none stdout | src/config/policy-engine.integration.test.ts > Policy Engine Integration Tests > Policy configuration produces valid PolicyEngine config > should handle MCP server wildcard patterns correctly [PolicyEngine.check] toolCall.name: unknown-server__tool, stringifiedArgs: undefined [PolicyEngine.check] NO MATCH - using default decision: ask_user stdout | src/config/policy-engine.integration.test.ts > Policy Engine Integration Tests > Policy configuration produces valid PolicyEngine config > should correctly prioritize specific tool excludes over MCP server wildcards [PolicyEngine.check] toolCall.name: my-server__safe-tool, stringifiedArgs: undefined [PolicyEngine.check] MATCHED rule: toolName=my-server__*, decision=allow, priority=2.1, argsPattern=none stdout | src/config/policy-engine.integration.test.ts > Policy Engine Integration Tests > Policy configuration produces valid PolicyEngine config > should correctly prioritize specific tool excludes over MCP server wildcards [PolicyEngine.check] toolCall.name: my-server__dangerous-tool, stringifiedArgs: undefined [PolicyEngine.check] MATCHED rule: toolName=my-server__dangerous-tool, decision=deny, priority=2.4, argsPattern=none stdout | src/config/policy-engine.integration.test.ts > Policy Engine Integration Tests > Policy configuration produces valid PolicyEngine config > should handle complex mixed configurations [PolicyEngine.check] toolCall.name: read_file, stringifiedArgs: undefined [PolicyEngine.check] MATCHED rule: toolName=read_file, decision=allow, priority=1.05, argsPattern=none stdout | src/config/policy-engine.integration.test.ts > Policy Engine Integration Tests > Policy configuration produces valid PolicyEngine config > should handle complex mixed configurations [PolicyEngine.check] toolCall.name: list_directory, stringifiedArgs: undefined [PolicyEngine.check] MATCHED rule: toolName=list_directory, decision=allow, priority=1.05, argsPattern=none stdout | src/config/policy-engine.integration.test.ts > Policy Engine Integration Tests > Policy configuration produces valid PolicyEngine config > should handle complex mixed configurations [PolicyEngine.check] toolCall.name: glob, stringifiedArgs: undefined [PolicyEngine.check] MATCHED rule: toolName=glob, decision=deny, priority=2.4, argsPattern=none stdout | src/config/policy-engine.integration.test.ts > Policy Engine Integration Tests > Policy configuration produces valid PolicyEngine config > should handle complex mixed configurations [PolicyEngine.check] toolCall.name: replace, stringifiedArgs: undefined [PolicyEngine.check] MATCHED rule: toolName=replace, decision=ask_user, priority=1.01, argsPattern=none stdout | src/config/policy-engine.integration.test.ts > Policy Engine Integration Tests > Policy configuration produces valid PolicyEngine config > should handle complex mixed configurations [PolicyEngine.check] toolCall.name: custom-tool, stringifiedArgs: undefined [PolicyEngine.check] MATCHED rule: toolName=custom-tool, decision=allow, priority=2.3, argsPattern=none stdout | src/config/policy-engine.integration.test.ts > Policy Engine Integration Tests > Policy configuration produces valid PolicyEngine config > should handle complex mixed configurations [PolicyEngine.check] toolCall.name: my-server__special-tool, stringifiedArgs: undefined [PolicyEngine.check] MATCHED rule: toolName=my-server__special-tool, decision=allow, priority=2.3, argsPattern=none stdout | src/config/policy-engine.integration.test.ts > Policy Engine Integration Tests > Policy configuration produces valid PolicyEngine config > should handle complex mixed configurations [PolicyEngine.check] toolCall.name: allowed-server__tool, stringifiedArgs: undefined [PolicyEngine.check] MATCHED rule: toolName=allowed-server__*, decision=allow, priority=2.1, argsPattern=none stdout | src/config/policy-engine.integration.test.ts > Policy Engine Integration Tests > Policy configuration produces valid PolicyEngine config > should handle complex mixed configurations [PolicyEngine.check] toolCall.name: trusted-server__tool, stringifiedArgs: undefined [PolicyEngine.check] MATCHED rule: toolName=trusted-server__*, decision=allow, priority=2.2, argsPattern=none stdout | src/config/policy-engine.integration.test.ts > Policy Engine Integration Tests > Policy configuration produces valid PolicyEngine config > should handle complex mixed configurations [PolicyEngine.check] toolCall.name: blocked-server__tool, stringifiedArgs: undefined [PolicyEngine.check] MATCHED rule: toolName=blocked-server__*, decision=deny, priority=2.9, argsPattern=none stdout | src/config/policy-engine.integration.test.ts > Policy Engine Integration Tests > Policy configuration produces valid PolicyEngine config > should handle complex mixed configurations [PolicyEngine.check] toolCall.name: write_file, stringifiedArgs: undefined [PolicyEngine.check] MATCHED rule: toolName=write_file, decision=ask_user, priority=1.01, argsPattern=none stdout | src/config/policy-engine.integration.test.ts > Policy Engine Integration Tests > Policy configuration produces valid PolicyEngine config > should handle YOLO mode correctly [PolicyEngine.check] toolCall.name: run_shell_command, stringifiedArgs: undefined [PolicyEngine.check] MATCHED rule: toolName=undefined, decision=allow, priority=1.998, argsPattern=none stdout | src/config/policy-engine.integration.test.ts > Policy Engine Integration Tests > Policy configuration produces valid PolicyEngine config > should handle YOLO mode correctly [PolicyEngine.check] toolCall.name: write_file, stringifiedArgs: undefined [PolicyEngine.check] MATCHED rule: toolName=undefined, decision=allow, priority=1.998, argsPattern=none stdout | src/config/policy-engine.integration.test.ts > Policy Engine Integration Tests > Policy configuration produces valid PolicyEngine config > should handle YOLO mode correctly [PolicyEngine.check] toolCall.name: unknown_tool, stringifiedArgs: undefined [PolicyEngine.check] MATCHED rule: toolName=undefined, decision=allow, priority=1.998, argsPattern=none stdout | src/config/policy-engine.integration.test.ts > Policy Engine Integration Tests > Policy configuration produces valid PolicyEngine config > should handle YOLO mode correctly [PolicyEngine.check] toolCall.name: dangerous-tool, stringifiedArgs: undefined [PolicyEngine.check] MATCHED rule: toolName=dangerous-tool, decision=deny, priority=2.4, argsPattern=none stdout | src/config/policy-engine.integration.test.ts > Policy Engine Integration Tests > Policy configuration produces valid PolicyEngine config > should handle AUTO_EDIT mode correctly [PolicyEngine.check] toolCall.name: replace, stringifiedArgs: undefined [PolicyEngine.check] MATCHED rule: toolName=replace, decision=allow, priority=1.015, argsPattern=none stdout | src/config/policy-engine.integration.test.ts > Policy Engine Integration Tests > Policy configuration produces valid PolicyEngine config > should handle AUTO_EDIT mode correctly [PolicyEngine.check] toolCall.name: write_file, stringifiedArgs: undefined [PolicyEngine.check] MATCHED rule: toolName=write_file, decision=allow, priority=1.015, argsPattern=none stdout | src/config/policy-engine.integration.test.ts > Policy Engine Integration Tests > Policy configuration produces valid PolicyEngine config > should handle AUTO_EDIT mode correctly [PolicyEngine.check] toolCall.name: run_shell_command, stringifiedArgs: undefined [PolicyEngine.check] MATCHED rule: toolName=run_shell_command, decision=ask_user, priority=1.01, argsPattern=none stdout | src/config/policy-engine.integration.test.ts > Policy Engine Integration Tests > Policy configuration produces valid PolicyEngine config > should handle Plan mode correctly [PolicyEngine.check] toolCall.name: read_file, stringifiedArgs: undefined [PolicyEngine.check] MATCHED rule: toolName=read_file, decision=allow, priority=1.07, argsPattern=none stdout | src/config/policy-engine.integration.test.ts > Policy Engine Integration Tests > Policy configuration produces valid PolicyEngine config > should handle Plan mode correctly [PolicyEngine.check] toolCall.name: google_web_search, stringifiedArgs: undefined [PolicyEngine.check] MATCHED rule: toolName=google_web_search, decision=allow, priority=1.07, argsPattern=none stdout | src/config/policy-engine.integration.test.ts > Policy Engine Integration Tests > Policy configuration produces valid PolicyEngine config > should handle Plan mode correctly [PolicyEngine.check] toolCall.name: list_directory, stringifiedArgs: undefined [PolicyEngine.check] MATCHED rule: toolName=list_directory, decision=allow, priority=1.07, argsPattern=none stdout | src/config/policy-engine.integration.test.ts > Policy Engine Integration Tests > Policy configuration produces valid PolicyEngine config > should handle Plan mode correctly [PolicyEngine.check] toolCall.name: replace, stringifiedArgs: undefined [PolicyEngine.check] MATCHED rule: toolName=undefined, decision=deny, priority=1.06, argsPattern=none stdout | src/config/policy-engine.integration.test.ts > Policy Engine Integration Tests > Policy configuration produces valid PolicyEngine config > should handle Plan mode correctly [PolicyEngine.check] toolCall.name: write_file, stringifiedArgs: undefined [PolicyEngine.check] MATCHED rule: toolName=undefined, decision=deny, priority=1.06, argsPattern=none stdout | src/config/policy-engine.integration.test.ts > Policy Engine Integration Tests > Policy configuration produces valid PolicyEngine config > should handle Plan mode correctly [PolicyEngine.check] toolCall.name: run_shell_command, stringifiedArgs: undefined [PolicyEngine.check] MATCHED rule: toolName=undefined, decision=deny, priority=1.06, argsPattern=none stdout | src/config/policy-engine.integration.test.ts > Policy Engine Integration Tests > Policy configuration produces valid PolicyEngine config > should handle Plan mode correctly [PolicyEngine.check] toolCall.name: unknown_tool, stringifiedArgs: undefined [PolicyEngine.check] MATCHED rule: toolName=undefined, decision=deny, priority=1.06, argsPattern=none stdout | src/config/policy-engine.integration.test.ts > Policy Engine Integration Tests > Policy configuration produces valid PolicyEngine config > Plan Mode policy for write_file > should allow write_file to plans directory [PolicyEngine.check] toolCall.name: write_file, stringifiedArgs: {"file_path":"/home/user/.gemini/tmp/a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2/plans/my-plan.md"} [PolicyEngine.check] MATCHED rule: toolName=write_file, decision=allow, priority=1.07, argsPattern="file_path":"[^"]+\/\.gemini\/tmp\/[a-zA-Z0-9_-]+\/plans\/[a-zA-Z0-9_-]+\.md" stdout | src/config/policy-engine.integration.test.ts > Policy Engine Integration Tests > Policy configuration produces valid PolicyEngine config > Plan Mode policy for write_file > should allow write_file to plans directory [PolicyEngine.check] toolCall.name: write_file, stringifiedArgs: {"file_path":"/home/user/.gemini/tmp/a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2/plans/feature_auth.md"} [PolicyEngine.check] MATCHED rule: toolName=write_file, decision=allow, priority=1.07, argsPattern="file_path":"[^"]+\/\.gemini\/tmp\/[a-zA-Z0-9_-]+\/plans\/[a-zA-Z0-9_-]+\.md" stdout | src/config/policy-engine.integration.test.ts > Policy Engine Integration Tests > Policy configuration produces valid PolicyEngine config > Plan Mode policy for write_file > should allow write_file to plans directory [PolicyEngine.check] toolCall.name: write_file, stringifiedArgs: {"file_path":"/home/user/.gemini/tmp/new-temp_dir_123/plans/plan.md"} [PolicyEngine.check] MATCHED rule: toolName=write_file, decision=allow, priority=1.07, argsPattern="file_path":"[^"]+\/\.gemini\/tmp\/[a-zA-Z0-9_-]+\/plans\/[a-zA-Z0-9_-]+\.md" stdout | src/config/policy-engine.integration.test.ts > Policy Engine Integration Tests > Policy configuration produces valid PolicyEngine config > Plan Mode policy for write_file > should deny write_file outside plans directory [PolicyEngine.check] toolCall.name: write_file, stringifiedArgs: {"file_path":"/project/src/file.ts"} [PolicyEngine.check] MATCHED rule: toolName=undefined, decision=deny, priority=1.06, argsPattern=none stdout | src/config/policy-engine.integration.test.ts > Policy Engine Integration Tests > Policy configuration produces valid PolicyEngine config > Plan Mode policy for write_file > should deny write_file outside plans directory [PolicyEngine.check] toolCall.name: write_file, stringifiedArgs: {"file_path":"/home/user/.gemini/tmp/a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2/plans/script.js"} [PolicyEngine.check] MATCHED rule: toolName=undefined, decision=deny, priority=1.06, argsPattern=none stdout | src/config/policy-engine.integration.test.ts > Policy Engine Integration Tests > Policy configuration produces valid PolicyEngine config > Plan Mode policy for write_file > should deny write_file outside plans directory [PolicyEngine.check] toolCall.name: write_file, stringifiedArgs: {"file_path":"/home/user/.gemini/tmp/a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2/plans/../../../etc/passwd.md"} [PolicyEngine.check] MATCHED rule: toolName=undefined, decision=deny, priority=1.06, argsPattern=none stdout | src/config/policy-engine.integration.test.ts > Policy Engine Integration Tests > Policy configuration produces valid PolicyEngine config > Plan Mode policy for write_file > should deny write_file outside plans directory [PolicyEngine.check] toolCall.name: write_file, stringifiedArgs: {"file_path":"/home/user/.gemini/tmp/a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2/plans/subdir/plan.md"} [PolicyEngine.check] MATCHED rule: toolName=undefined, decision=deny, priority=1.06, argsPattern=none stdout | src/config/policy-engine.integration.test.ts > Policy Engine Integration Tests > Policy configuration produces valid PolicyEngine config > Plan Mode policy for write_file > should deny write_file outside plans directory [PolicyEngine.check] toolCall.name: write_file, stringifiedArgs: {"file_path":"/home/user/.gemini/non-tmp/new-temp_dir_123/plans/plan.md"} [PolicyEngine.check] MATCHED rule: toolName=undefined, decision=deny, priority=1.06, argsPattern=none stdout | src/config/policy-engine.integration.test.ts > Policy Engine Integration Tests > Policy configuration produces valid PolicyEngine config > Plan Mode policy for replace > should allow replace to plans directory [PolicyEngine.check] toolCall.name: replace, stringifiedArgs: {"file_path":"/home/user/.gemini/tmp/a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2/plans/my-plan.md"} [PolicyEngine.check] MATCHED rule: toolName=replace, decision=allow, priority=1.07, argsPattern="file_path":"[^"]+\/\.gemini\/tmp\/[a-zA-Z0-9_-]+\/plans\/[a-zA-Z0-9_-]+\.md" stdout | src/config/policy-engine.integration.test.ts > Policy Engine Integration Tests > Policy configuration produces valid PolicyEngine config > Plan Mode policy for replace > should allow replace to plans directory [PolicyEngine.check] toolCall.name: replace, stringifiedArgs: {"file_path":"/home/user/.gemini/tmp/a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2/plans/feature_auth.md"} [PolicyEngine.check] MATCHED rule: toolName=replace, decision=allow, priority=1.07, argsPattern="file_path":"[^"]+\/\.gemini\/tmp\/[a-zA-Z0-9_-]+\/plans\/[a-zA-Z0-9_-]+\.md" stdout | src/config/policy-engine.integration.test.ts > Policy Engine Integration Tests > Policy configuration produces valid PolicyEngine config > Plan Mode policy for replace > should allow replace to plans directory [PolicyEngine.check] toolCall.name: replace, stringifiedArgs: {"file_path":"/home/user/.gemini/tmp/new-temp_dir_123/plans/plan.md"} [PolicyEngine.check] MATCHED rule: toolName=replace, decision=allow, priority=1.07, argsPattern="file_path":"[^"]+\/\.gemini\/tmp\/[a-zA-Z0-9_-]+\/plans\/[a-zA-Z0-9_-]+\.md" stdout | src/config/policy-engine.integration.test.ts > Policy Engine Integration Tests > Policy configuration produces valid PolicyEngine config > Plan Mode policy for replace > should deny replace outside plans directory [PolicyEngine.check] toolCall.name: replace, stringifiedArgs: {"file_path":"/project/src/file.ts"} [PolicyEngine.check] MATCHED rule: toolName=undefined, decision=deny, priority=1.06, argsPattern=none stdout | src/config/policy-engine.integration.test.ts > Policy Engine Integration Tests > Policy configuration produces valid PolicyEngine config > Plan Mode policy for replace > should deny replace outside plans directory [PolicyEngine.check] toolCall.name: replace, stringifiedArgs: {"file_path":"/home/user/.gemini/tmp/a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2/plans/script.js"} [PolicyEngine.check] MATCHED rule: toolName=undefined, decision=deny, priority=1.06, argsPattern=none stdout | src/config/policy-engine.integration.test.ts > Policy Engine Integration Tests > Policy configuration produces valid PolicyEngine config > Plan Mode policy for replace > should deny replace outside plans directory [PolicyEngine.check] toolCall.name: replace, stringifiedArgs: {"file_path":"/home/user/.gemini/tmp/a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2/plans/../../../etc/passwd.md"} [PolicyEngine.check] MATCHED rule: toolName=undefined, decision=deny, priority=1.06, argsPattern=none stdout | src/config/policy-engine.integration.test.ts > Policy Engine Integration Tests > Policy configuration produces valid PolicyEngine config > Plan Mode policy for replace > should deny replace outside plans directory [PolicyEngine.check] toolCall.name: replace, stringifiedArgs: {"file_path":"/home/user/.gemini/tmp/a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2/plans/subdir/plan.md"} [PolicyEngine.check] MATCHED rule: toolName=undefined, decision=deny, priority=1.06, argsPattern=none stdout | src/config/policy-engine.integration.test.ts > Policy Engine Integration Tests > Policy configuration produces valid PolicyEngine config > Plan Mode policy for replace > should deny replace outside plans directory [PolicyEngine.check] toolCall.name: replace, stringifiedArgs: {"file_path":"/home/user/.gemini/non-tmp/new-temp_dir_123/plans/plan.md"} [PolicyEngine.check] MATCHED rule: toolName=undefined, decision=deny, priority=1.06, argsPattern=none stdout | src/config/policy-engine.integration.test.ts > Policy Engine Integration Tests > Policy configuration produces valid PolicyEngine config > should verify priority ordering works correctly in practice [PolicyEngine.check] toolCall.name: blocked-tool, stringifiedArgs: undefined [PolicyEngine.check] MATCHED rule: toolName=blocked-tool, decision=deny, priority=2.4, argsPattern=none stdout | src/config/policy-engine.integration.test.ts > Policy Engine Integration Tests > Policy configuration produces valid PolicyEngine config > should verify priority ordering works correctly in practice [PolicyEngine.check] toolCall.name: blocked-server__any, stringifiedArgs: undefined [PolicyEngine.check] MATCHED rule: toolName=blocked-server__*, decision=deny, priority=2.9, argsPattern=none stdout | src/config/policy-engine.integration.test.ts > Policy Engine Integration Tests > Policy configuration produces valid PolicyEngine config > should verify priority ordering works correctly in practice [PolicyEngine.check] toolCall.name: specific-tool, stringifiedArgs: undefined [PolicyEngine.check] MATCHED rule: toolName=specific-tool, decision=allow, priority=2.3, argsPattern=none stdout | src/config/policy-engine.integration.test.ts > Policy Engine Integration Tests > Policy configuration produces valid PolicyEngine config > should verify priority ordering works correctly in practice [PolicyEngine.check] toolCall.name: trusted-server__any, stringifiedArgs: undefined [PolicyEngine.check] MATCHED rule: toolName=trusted-server__*, decision=allow, priority=2.2, argsPattern=none stdout | src/config/policy-engine.integration.test.ts > Policy Engine Integration Tests > Policy configuration produces valid PolicyEngine config > should verify priority ordering works correctly in practice [PolicyEngine.check] toolCall.name: mcp-server__any, stringifiedArgs: undefined [PolicyEngine.check] MATCHED rule: toolName=mcp-server__*, decision=allow, priority=2.1, argsPattern=none stdout | src/config/policy-engine.integration.test.ts > Policy Engine Integration Tests > Policy configuration produces valid PolicyEngine config > should verify priority ordering works correctly in practice [PolicyEngine.check] toolCall.name: glob, stringifiedArgs: undefined [PolicyEngine.check] MATCHED rule: toolName=glob, decision=allow, priority=1.05, argsPattern=none stdout | src/config/policy-engine.integration.test.ts > Policy Engine Integration Tests > Policy configuration produces valid PolicyEngine config > should handle edge case: MCP server with both trust and exclusion [PolicyEngine.check] toolCall.name: conflicted-server__tool, stringifiedArgs: undefined [PolicyEngine.check] MATCHED rule: toolName=conflicted-server__*, decision=deny, priority=2.9, argsPattern=none stdout | src/config/policy-engine.integration.test.ts > Policy Engine Integration Tests > Policy configuration produces valid PolicyEngine config > should handle edge case: specific tool allowed but server excluded [PolicyEngine.check] toolCall.name: my-server__special-tool, stringifiedArgs: undefined [PolicyEngine.check] MATCHED rule: toolName=my-server__*, decision=deny, priority=2.9, argsPattern=none stdout | src/config/policy-engine.integration.test.ts > Policy Engine Integration Tests > Policy configuration produces valid PolicyEngine config > should handle edge case: specific tool allowed but server excluded [PolicyEngine.check] toolCall.name: my-server__other-tool, stringifiedArgs: undefined [PolicyEngine.check] MATCHED rule: toolName=my-server__*, decision=deny, priority=2.9, argsPattern=none stdout | src/config/policy-engine.integration.test.ts > Policy Engine Integration Tests > Policy configuration produces valid PolicyEngine config > should verify non-interactive mode transformation [PolicyEngine.check] toolCall.name: unknown_tool, stringifiedArgs: undefined [PolicyEngine.check] NO MATCH - using default decision: ask_user stdout | src/config/policy-engine.integration.test.ts > Policy Engine Integration Tests > Policy configuration produces valid PolicyEngine config > should verify non-interactive mode transformation [PolicyEngine.check] toolCall.name: run_shell_command, stringifiedArgs: undefined [PolicyEngine.check] MATCHED rule: toolName=run_shell_command, decision=ask_user, priority=1.01, argsPattern=none stdout | src/config/policy-engine.integration.test.ts > Policy Engine Integration Tests > Policy configuration produces valid PolicyEngine config > should handle empty settings gracefully [PolicyEngine.check] toolCall.name: write_file, stringifiedArgs: undefined [PolicyEngine.check] MATCHED rule: toolName=write_file, decision=ask_user, priority=1.01, argsPattern=none stdout | src/config/policy-engine.integration.test.ts > Policy Engine Integration Tests > Policy configuration produces valid PolicyEngine config > should handle empty settings gracefully [PolicyEngine.check] toolCall.name: replace, stringifiedArgs: undefined [PolicyEngine.check] MATCHED rule: toolName=replace, decision=ask_user, priority=1.01, argsPattern=none stdout | src/config/policy-engine.integration.test.ts > Policy Engine Integration Tests > Policy configuration produces valid PolicyEngine config > should handle empty settings gracefully [PolicyEngine.check] toolCall.name: unknown, stringifiedArgs: undefined [PolicyEngine.check] NO MATCH - using default decision: ask_user βœ“ src/config/extensions/extensionEnablement.test.ts (48 tests) 166ms βœ“ src/config/policy-engine.integration.test.ts (17 tests) 248ms βœ“ src/ui/AppContainer.test.tsx (81 tests) 5232ms βœ“ AppContainer State Management > Terminal Title Update Feature > Shell Focus Action Required > should show Action Required in title after a delay when shell is awaiting focus 305ms stderr | ../../node_modules/react-reconciler/cjs/react-reconciler.development.js:13614:19 An update to TestComponent inside a test was not wrapped in act(...). When testing, code that causes React state updates should be wrapped into act(...): act(() => { /* fire events that update state */ }); /* assert on the output */ This ensures that you're testing the behavior the user would see in the browser. Learn more at https://react.dev/link/wrap-tests-with-act An update to TestComponent inside a test was not wrapped in act(...). When testing, code that causes React state updates should be wrapped into act(...): act(() => { /* fire events that update state */ }); /* assert on the output */ This ensures that you're testing the behavior the user would see in the browser. Learn more at https://react.dev/link/wrap-tests-with-act An update to TestComponent inside a test was not wrapped in act(...). When testing, code that causes React state updates should be wrapped into act(...): act(() => { /* fire events that update state */ }); /* assert on the output */ This ensures that you're testing the behavior the user would see in the browser. Learn more at https://react.dev/link/wrap-tests-with-act stderr | ../../node_modules/react-reconciler/cjs/react-reconciler.development.js:13614:19 An update to TestComponent inside a test was not wrapped in act(...). When testing, code that causes React state updates should be wrapped into act(...): act(() => { /* fire events that update state */ }); /* assert on the output */ This ensures that you're testing the behavior the user would see in the browser. Learn more at https://react.dev/link/wrap-tests-with-act An update to TestComponent inside a test was not wrapped in act(...). When testing, code that causes React state updates should be wrapped into act(...): act(() => { /* fire events that update state */ }); /* assert on the output */ This ensures that you're testing the behavior the user would see in the browser. Learn more at https://react.dev/link/wrap-tests-with-act An update to TestComponent inside a test was not wrapped in act(...). When testing, code that causes React state updates should be wrapped into act(...): act(() => { /* fire events that update state */ }); /* assert on the output */ This ensures that you're testing the behavior the user would see in the browser. Learn more at https://react.dev/link/wrap-tests-with-act stderr | ../../node_modules/react-reconciler/cjs/react-reconciler.development.js:13614:19 An update to TestComponent inside a test was not wrapped in act(...). When testing, code that causes React state updates should be wrapped into act(...): act(() => { /* fire events that update state */ }); /* assert on the output */ This ensures that you're testing the behavior the user would see in the browser. Learn more at https://react.dev/link/wrap-tests-with-act An update to TestComponent inside a test was not wrapped in act(...). When testing, code that causes React state updates should be wrapped into act(...): act(() => { /* fire events that update state */ }); /* assert on the output */ This ensures that you're testing the behavior the user would see in the browser. Learn more at https://react.dev/link/wrap-tests-with-act An update to TestComponent inside a test was not wrapped in act(...). When testing, code that causes React state updates should be wrapped into act(...): act(() => { /* fire events that update state */ }); /* assert on the output */ This ensures that you're testing the behavior the user would see in the browser. Learn more at https://react.dev/link/wrap-tests-with-act stderr | ../../node_modules/react-reconciler/cjs/react-reconciler.development.js:13614:19 An update to TestComponent inside a test was not wrapped in act(...). When testing, code that causes React state updates should be wrapped into act(...): act(() => { /* fire events that update state */ }); /* assert on the output */ This ensures that you're testing the behavior the user would see in the browser. Learn more at https://react.dev/link/wrap-tests-with-act An update to TestComponent inside a test was not wrapped in act(...). When testing, code that causes React state updates should be wrapped into act(...): act(() => { /* fire events that update state */ }); /* assert on the output */ This ensures that you're testing the behavior the user would see in the browser. Learn more at https://react.dev/link/wrap-tests-with-act stderr | ../../node_modules/react-reconciler/cjs/react-reconciler.development.js:13614:19 An update to TestComponent inside a test was not wrapped in act(...). When testing, code that causes React state updates should be wrapped into act(...): act(() => { /* fire events that update state */ }); /* assert on the output */ This ensures that you're testing the behavior the user would see in the browser. Learn more at https://react.dev/link/wrap-tests-with-act An update to TestComponent inside a test was not wrapped in act(...). When testing, code that causes React state updates should be wrapped into act(...): act(() => { /* fire events that update state */ }); /* assert on the output */ This ensures that you're testing the behavior the user would see in the browser. Learn more at https://react.dev/link/wrap-tests-with-act An update to TestComponent inside a test was not wrapped in act(...). When testing, code that causes React state updates should be wrapped into act(...): act(() => { /* fire events that update state */ }); /* assert on the output */ This ensures that you're testing the behavior the user would see in the browser. Learn more at https://react.dev/link/wrap-tests-with-act stderr | ../../node_modules/react-reconciler/cjs/react-reconciler.development.js:13614:19 An update to TestComponent inside a test was not wrapped in act(...). When testing, code that causes React state updates should be wrapped into act(...): act(() => { /* fire events that update state */ }); /* assert on the output */ This ensures that you're testing the behavior the user would see in the browser. Learn more at https://react.dev/link/wrap-tests-with-act An update to TestComponent inside a test was not wrapped in act(...). When testing, code that causes React state updates should be wrapped into act(...): act(() => { /* fire events that update state */ }); /* assert on the output */ This ensures that you're testing the behavior the user would see in the browser. Learn more at https://react.dev/link/wrap-tests-with-act An update to TestComponent inside a test was not wrapped in act(...). When testing, code that causes React state updates should be wrapped into act(...): act(() => { /* fire events that update state */ }); /* assert on the output */ This ensures that you're testing the behavior the user would see in the browser. Learn more at https://react.dev/link/wrap-tests-with-act stderr | ../../node_modules/react-reconciler/cjs/react-reconciler.development.js:13614:19 An update to TestComponent inside a test was not wrapped in act(...). When testing, code that causes React state updates should be wrapped into act(...): act(() => { /* fire events that update state */ }); /* assert on the output */ This ensures that you're testing the behavior the user would see in the browser. Learn more at https://react.dev/link/wrap-tests-with-act An update to TestComponent inside a test was not wrapped in act(...). When testing, code that causes React state updates should be wrapped into act(...): act(() => { /* fire events that update state */ }); /* assert on the output */ This ensures that you're testing the behavior the user would see in the browser. Learn more at https://react.dev/link/wrap-tests-with-act An update to TestComponent inside a test was not wrapped in act(...). When testing, code that causes React state updates should be wrapped into act(...): act(() => { /* fire events that update state */ }); /* assert on the output */ This ensures that you're testing the behavior the user would see in the browser. Learn more at https://react.dev/link/wrap-tests-with-act βœ“ src/ui/hooks/useCommandCompletion.test.tsx (27 tests) 490ms stderr | updateHookTypesDev (/startdir/src/gemini-cli/node_modules/react-reconciler/cjs/react-reconciler.development.js:3128:19) React has detected a change in the order of Hooks called by TestComponent. This will lead to bugs and errors if not fixed. For more information, read the Rules of Hooks: https://react.dev/link/rules-of-hooks Previous render Next render ------------------------------------------------------ 1. useMemo useMemo 2. useReducer useReducer 3. useMemo useMemo 4. useMemo useMemo 5. useState useState 6. useEffect useEffect 7. useEffect useEffect 8. useEffect useEffect 9. useCallback useCallback 10. useCallback useCallback 11. useCallback useCallback 12. useCallback useCallback 13. useCallback useCallback 14. useCallback useCallback 15. useCallback useCallback 16. useCallback useCallback 17. useCallback useCallback 18. useCallback useCallback 19. useCallback useCallback 20. useCallback useCallback 21. useCallback useCallback 22. useCallback useCallback 23. useCallback useCallback 24. useCallback useCallback 25. useCallback useCallback 26. useCallback useCallback 27. useCallback useCallback 28. useCallback useCallback 29. useCallback useCallback 30. useCallback useCallback 31. useCallback useCallback 32. useCallback useCallback 33. useCallback useCallback 34. useCallback useCallback 35. useCallback useCallback 36. useCallback useCallback 37. useCallback useCallback 38. useCallback useCallback 39. useCallback useCallback 40. useCallback useCallback 41. useCallback useCallback 42. useCallback useCallback 43. useCallback useCallback 44. useCallback useCallback 45. useCallback useCallback 46. useCallback useCallback 47. useCallback useCallback 48. useCallback useCallback 49. useCallback useCallback 50. useCallback useCallback 51. useCallback useCallback 52. useCallback useCallback 53. useCallback useCallback 54. useCallback useCallback 55. useCallback useCallback 56. useCallback useCallback 57. useCallback useCallback 58. useCallback useCallback 59. useCallback useCallback 60. useCallback useCallback 61. useCallback useCallback 62. useCallback useCallback 63. useCallback useCallback 64. useMemo useMemo 65. useMemo useMemo 66. useCallback useCallback 67. useCallback useCallback 68. useCallback useCallback 69. useCallback useCallback 70. useCallback useCallback 71. useCallback useCallback 72. useCallback useCallback 73. useCallback useCallback 74. useMemo useMemo 75. useState useState 76. useState useState 77. useState useState 78. useState useState 79. useState useState 80. useCallback useCallback 81. useCallback useCallback 82. useCallback useCallback 83. useMemo useMemo 84. useEffect useState ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ stderr | ../../node_modules/react-reconciler/cjs/react-reconciler.development.js:13614:19 An update to Root inside a test was not wrapped in act(...). When testing, code that causes React state updates should be wrapped into act(...): act(() => { /* fire events that update state */ }); /* assert on the output */ This ensures that you're testing the behavior the user would see in the browser. Learn more at https://react.dev/link/wrap-tests-with-act stderr | ../../node_modules/react-reconciler/cjs/react-reconciler.development.js:13614:19 An update to Root inside a test was not wrapped in act(...). When testing, code that causes React state updates should be wrapped into act(...): act(() => { /* fire events that update state */ }); /* assert on the output */ This ensures that you're testing the behavior the user would see in the browser. Learn more at https://react.dev/link/wrap-tests-with-act stderr | ../../node_modules/react-reconciler/cjs/react-reconciler.development.js:13614:19 An update to Root inside a test was not wrapped in act(...). When testing, code that causes React state updates should be wrapped into act(...): act(() => { /* fire events that update state */ }); /* assert on the output */ This ensures that you're testing the behavior the user would see in the browser. Learn more at https://react.dev/link/wrap-tests-with-act stderr | ../../node_modules/react-reconciler/cjs/react-reconciler.development.js:13614:19 An update to Root inside a test was not wrapped in act(...). When testing, code that causes React state updates should be wrapped into act(...): act(() => { /* fire events that update state */ }); /* assert on the output */ This ensures that you're testing the behavior the user would see in the browser. Learn more at https://react.dev/link/wrap-tests-with-act stderr | ../../node_modules/react-reconciler/cjs/react-reconciler.development.js:13614:19 An update to Root inside a test was not wrapped in act(...). When testing, code that causes React state updates should be wrapped into act(...): act(() => { /* fire events that update state */ }); /* assert on the output */ This ensures that you're testing the behavior the user would see in the browser. Learn more at https://react.dev/link/wrap-tests-with-act stderr | ../../node_modules/react-reconciler/cjs/react-reconciler.development.js:13614:19 An update to Root inside a test was not wrapped in act(...). When testing, code that causes React state updates should be wrapped into act(...): act(() => { /* fire events that update state */ }); /* assert on the output */ This ensures that you're testing the behavior the user would see in the browser. Learn more at https://react.dev/link/wrap-tests-with-act stderr | ../../node_modules/react-reconciler/cjs/react-reconciler.development.js:13614:19 An update to Root inside a test was not wrapped in act(...). When testing, code that causes React state updates should be wrapped into act(...): act(() => { /* fire events that update state */ }); /* assert on the output */ This ensures that you're testing the behavior the user would see in the browser. Learn more at https://react.dev/link/wrap-tests-with-act βœ“ src/ui/components/InputPrompt.test.tsx (177 tests) 15259ms βœ“ InputPrompt > should call shellHistory.getPreviousCommand on up arrow in shell mode 518ms βœ“ InputPrompt > History Navigation and Completion Suppression > should move cursor to 'end' on 'Ctrl+N' (newer history) 332ms βœ“ src/ui/components/messages/ToolGroupMessage.test.tsx (28 tests) 1834ms stderr | src/ui/utils/commandUtils.test.ts > commandUtils > getUrlOpenCommand > on unmatched OS > should return xdg-open Unknown platform: unmatched. Attempting to open URLs with: xdg-open. βœ“ src/ui/components/Composer.test.tsx (31 tests) 472ms βœ“ src/ui/utils/commandUtils.test.ts (30 tests) 287ms stdout | src/gemini.test.tsx > getNodeMemoryArgs > should log debug info when isDebugMode is true Current heap size 4096.00 MB Need to relaunch with more memory: 8192.00 MB ]0;β—‡ Ready (cli) Error: The --prompt-interactive flag cannot be used when input is piped from stdin. βœ“ src/utils/sessionUtils.test.ts (20 tests) 240ms βœ“ src/services/McpPromptLoader.test.ts (31 tests) 74ms ]0;Gemini CLI (root) [?7l]0;Gemini CLI (root) [?7l]0;Gemini CLI (root) [?7l]0;Gemini CLI (root) [?7l]0;Gemini CLI (root) [?7l]0;Gemini CLI (root) [?7l βœ“ src/gemini.test.tsx (35 tests | 1 skipped) 2825ms βœ“ gemini.tsx main function exit codes > should exit with 42 for session resume failure 308ms βœ“ gemini.tsx main function exit codes > should validate and refresh auth in non-interactive mode when no auth type is selected but env var is present 525ms βœ“ project hooks loading based on trust > should load project hooks when workspace is trusted 534ms βœ“ project hooks loading based on trust > should NOT load project hooks when workspace is not trusted 585ms stdout | src/ui/hooks/useAtCompletion.test.ts > useAtCompletion > File Search Logic > should perform a recursive search for an empty pattern Ignore file not found: /tmp/gemini-cli-test-SoetNG/.geminiignore, continue without it. stdout | src/ui/hooks/useAtCompletion.test.ts > useAtCompletion > File Search Logic > should correctly filter the recursive list based on a pattern Ignore file not found: /tmp/gemini-cli-test-d4TA3P/.geminiignore, continue without it. stdout | src/config/config.test.ts > parseArguments > should set isCommand to true for hooks command Usage: gemini hooks migrate --from-claude Migrate hooks from Claude Code to Gemini CLI format. stdout | src/ui/hooks/useAtCompletion.test.ts > useAtCompletion > File Search Logic > should append a trailing slash to directory paths in suggestions Ignore file not found: /tmp/gemini-cli-test-jC1pRu/.geminiignore, continue without it. stdout | src/config/config.test.ts > loadCliConfig > Proxy configuration > should leave proxy to empty by default Ignore file not found: /startdir/src/gemini-cli/packages/cli/.geminiignore, continue without it. stdout | src/config/config.test.ts > loadCliConfig > Proxy configuration > should set proxy to http://localhost:7890 according to environment variable [https_proxy] Ignore file not found: /startdir/src/gemini-cli/packages/cli/.geminiignore, continue without it. stdout | src/config/config.test.ts > loadCliConfig > Proxy configuration > should set proxy to http://localhost:7890 according to environment variable [http_proxy] Ignore file not found: /startdir/src/gemini-cli/packages/cli/.geminiignore, continue without it. stdout | src/config/config.test.ts > loadCliConfig > Proxy configuration > should set proxy to http://localhost:7890 according to environment variable [HTTPS_PROXY] Ignore file not found: /startdir/src/gemini-cli/packages/cli/.geminiignore, continue without it. stdout | src/ui/hooks/useAtCompletion.test.ts > useAtCompletion > File Search Logic > should perform a case-insensitive search by lowercasing the pattern Ignore file not found: /tmp/gemini-cli-test-wyJuTR/.geminiignore, continue without it. stdout | src/ui/hooks/useAtCompletion.test.ts > useAtCompletion > File Search Logic > should perform a case-insensitive search by lowercasing the pattern Ignore file not found: /tmp/gemini-cli-test-wyJuTR/.geminiignore, continue without it. stdout | src/config/config.test.ts > loadCliConfig > Proxy configuration > should set proxy to http://localhost:7890 according to environment variable [HTTP_PROXY] Ignore file not found: /startdir/src/gemini-cli/packages/cli/.geminiignore, continue without it. stdout | src/config/config.test.ts > loadCliConfig > should use default fileFilter options when unconfigured Ignore file not found: /startdir/src/gemini-cli/packages/cli/.geminiignore, continue without it. βœ“ src/ui/components/shared/BaseSettingsDialog.test.tsx (27 tests) 1787ms stderr | ../../node_modules/react-reconciler/cjs/react-reconciler.development.js:13614:19 An update to BaseSettingsDialog inside a test was not wrapped in act(...). When testing, code that causes React state updates should be wrapped into act(...): act(() => { /* fire events that update state */ }); /* assert on the output */ This ensures that you're testing the behavior the user would see in the browser. Learn more at https://react.dev/link/wrap-tests-with-act stdout | src/config/config.test.ts > loadCliConfig > should be non-interactive when isCommand is set Ignore file not found: /startdir/src/gemini-cli/packages/cli/.geminiignore, continue without it. stdout | src/ui/hooks/useAtCompletion.test.ts > useAtCompletion > MCP resource suggestions > should include MCP resources in the suggestion list using fuzzy matching Ignore file not found: /tmp/.geminiignore, continue without it. βœ“ src/ui/utils/textUtils.test.ts (68 tests) 165ms stdout | src/ui/hooks/useAtCompletion.test.ts > useAtCompletion > UI State and Loading Behavior > should be in a loading state during initial file system crawl Ignore file not found: /tmp/gemini-cli-test-ykgBBt/.geminiignore, continue without it. stderr | ../../node_modules/react-reconciler/cjs/react-reconciler.development.js:13614:19 An update to BaseSettingsDialog inside a test was not wrapped in act(...). When testing, code that causes React state updates should be wrapped into act(...): act(() => { /* fire events that update state */ }); /* assert on the output */ This ensures that you're testing the behavior the user would see in the browser. Learn more at https://react.dev/link/wrap-tests-with-act stdout | src/config/config.test.ts > Hierarchical Memory Loading (config.ts) - Placeholder Suite > should pass extension context file paths to loadServerHierarchicalMemory Ignore file not found: /startdir/src/gemini-cli/packages/cli/.geminiignore, continue without it. stdout | src/config/config.test.ts > Hierarchical Memory Loading (config.ts) - Placeholder Suite > should pass includeDirectories to loadServerHierarchicalMemory when loadMemoryFromIncludeDirectories is true Ignore file not found: /startdir/src/gemini-cli/packages/cli/.geminiignore, continue without it. stdout | src/ui/hooks/useAtCompletion.test.ts > useAtCompletion > UI State and Loading Behavior > should NOT show a loading indicator for subsequent searches that complete under 200ms Ignore file not found: /tmp/gemini-cli-test-NiKggh/.geminiignore, continue without it. stdout | src/config/config.test.ts > Hierarchical Memory Loading (config.ts) - Placeholder Suite > should NOT pass includeDirectories to loadServerHierarchicalMemory when loadMemoryFromIncludeDirectories is false Ignore file not found: /startdir/src/gemini-cli/packages/cli/.geminiignore, continue without it. stdout | src/ui/hooks/useAtCompletion.test.ts > useAtCompletion > UI State and Loading Behavior > should show a loading indicator and clear old suggestions for subsequent searches that take longer than 200ms Ignore file not found: /tmp/gemini-cli-test-ti1YL4/.geminiignore, continue without it. stdout | src/ui/hooks/useAtCompletion.test.ts > useAtCompletion > UI State and Loading Behavior > should show a loading indicator and clear old suggestions for subsequent searches that take longer than 200ms Ignore file not found: /tmp/gemini-cli-test-ti1YL4/.geminiignore, continue without it. βœ“ src/config/trustedFolders.test.ts (32 tests) 211ms stdout | src/config/config.test.ts > mergeMcpServers > should not modify the original settings object Ignore file not found: /startdir/src/gemini-cli/packages/cli/.geminiignore, continue without it. stdout | src/ui/hooks/useAtCompletion.test.ts > useAtCompletion > UI State and Loading Behavior > should abort the previous search when a new one starts Ignore file not found: /tmp/gemini-cli-test-rKLXiq/.geminiignore, continue without it. stdout | src/config/config.test.ts > mergeExcludeTools > should merge excludeTools from settings and extensions Ignore file not found: /startdir/src/gemini-cli/packages/cli/.geminiignore, continue without it. stdout | src/ui/hooks/useAtCompletion.test.ts > useAtCompletion > State Management > should reset the state when disabled after being in a READY state Ignore file not found: /tmp/gemini-cli-test-1vZxRj/.geminiignore, continue without it. stdout | src/config/config.test.ts > mergeExcludeTools > should handle overlapping excludeTools between settings and extensions Ignore file not found: /startdir/src/gemini-cli/packages/cli/.geminiignore, continue without it. stdout | src/config/config.test.ts > mergeExcludeTools > should handle overlapping excludeTools between extensions Ignore file not found: /startdir/src/gemini-cli/packages/cli/.geminiignore, continue without it. stdout | src/config/config.test.ts > mergeExcludeTools > should return an empty array when no excludeTools are specified and it is interactive Ignore file not found: /startdir/src/gemini-cli/packages/cli/.geminiignore, continue without it. stdout | src/ui/hooks/useAtCompletion.test.ts > useAtCompletion > State Management > should reset the state when disabled after being in an ERROR state Ignore file not found: /tmp/gemini-cli-test-hAuJKc/.geminiignore, continue without it. stdout | src/config/config.test.ts > mergeExcludeTools > should return default excludes when no excludeTools are specified and it is not interactive Ignore file not found: /startdir/src/gemini-cli/packages/cli/.geminiignore, continue without it. stdout | src/ui/hooks/useAtCompletion.test.ts > useAtCompletion > Filtering and Configuration > should respect .gitignore files Ignore file not found: /tmp/gemini-cli-test-e7EID9/.geminiignore, continue without it. βœ“ src/validateNonInterActiveAuth.test.ts (17 tests) 72ms stdout | src/config/config.test.ts > mergeExcludeTools > should handle settings with excludeTools but no extensions Ignore file not found: /startdir/src/gemini-cli/packages/cli/.geminiignore, continue without it. stdout | src/config/config.test.ts > mergeExcludeTools > should handle extensions with excludeTools but no settings Ignore file not found: /startdir/src/gemini-cli/packages/cli/.geminiignore, continue without it. stdout | src/config/config.test.ts > mergeExcludeTools > should not modify the original settings object Ignore file not found: /startdir/src/gemini-cli/packages/cli/.geminiignore, continue without it. stdout | src/config/config.test.ts > Approval mode tool exclusion logic > should exclude all interactive tools in non-interactive mode with default approval mode Ignore file not found: /startdir/src/gemini-cli/packages/cli/.geminiignore, continue without it. stdout | src/ui/hooks/useAtCompletion.test.ts > useAtCompletion > Filtering and Configuration > should work correctly when config is undefined Ignore file not found: /tmp/gemini-cli-test-R54Vrq/.geminiignore, continue without it. stdout | src/config/config.test.ts > Approval mode tool exclusion logic > should exclude all interactive tools in non-interactive mode with explicit default approval mode Ignore file not found: /startdir/src/gemini-cli/packages/cli/.geminiignore, continue without it. stdout | src/config/config.test.ts > Approval mode tool exclusion logic > should exclude only shell tools in non-interactive mode with auto_edit approval mode Ignore file not found: /startdir/src/gemini-cli/packages/cli/.geminiignore, continue without it. stdout | src/ui/hooks/useAtCompletion.test.ts > useAtCompletion > Filtering and Configuration > should reset and re-initialize when the cwd changes Ignore file not found: /tmp/gemini-cli-test-qdCjz4/.geminiignore, continue without it. stdout | src/config/config.test.ts > Approval mode tool exclusion logic > should exclude only ask_user in non-interactive mode with yolo approval mode Ignore file not found: /startdir/src/gemini-cli/packages/cli/.geminiignore, continue without it. stderr | src/config/config.test.ts > Approval mode tool exclusion logic > should exclude only ask_user in non-interactive mode with yolo approval mode YOLO mode is enabled. All tool calls will be automatically approved. stdout | src/ui/hooks/useAtCompletion.test.ts > useAtCompletion > Filtering and Configuration > should reset and re-initialize when the cwd changes Ignore file not found: /tmp/gemini-cli-test-6ETXGS/.geminiignore, continue without it. stdout | src/config/config.test.ts > Approval mode tool exclusion logic > should exclude all interactive tools in non-interactive mode with plan approval mode Ignore file not found: /startdir/src/gemini-cli/packages/cli/.geminiignore, continue without it. stdout | src/config/config.test.ts > Approval mode tool exclusion logic > should exclude only ask_user in non-interactive mode with legacy yolo flag Ignore file not found: /startdir/src/gemini-cli/packages/cli/.geminiignore, continue without it. stderr | src/config/config.test.ts > Approval mode tool exclusion logic > should exclude only ask_user in non-interactive mode with legacy yolo flag YOLO mode is enabled. All tool calls will be automatically approved. stdout | src/config/config.test.ts > Approval mode tool exclusion logic > should not exclude interactive tools in interactive mode regardless of approval mode Ignore file not found: /startdir/src/gemini-cli/packages/cli/.geminiignore, continue without it. stdout | src/config/config.test.ts > Approval mode tool exclusion logic > should not exclude interactive tools in interactive mode regardless of approval mode Ignore file not found: /startdir/src/gemini-cli/packages/cli/.geminiignore, continue without it. βœ“ src/ui/utils/clipboardUtils.test.ts (34 tests) 915ms stdout | src/config/config.test.ts > Approval mode tool exclusion logic > should not exclude interactive tools in interactive mode regardless of approval mode Ignore file not found: /startdir/src/gemini-cli/packages/cli/.geminiignore, continue without it. stdout | src/ui/hooks/useAtCompletion.test.ts > useAtCompletion > Filtering and Configuration > should perform a non-recursive search when enableRecursiveFileSearch is false Ignore file not found: /tmp/gemini-cli-test-lzwYS8/.geminiignore, continue without it. stdout | src/config/config.test.ts > Approval mode tool exclusion logic > should not exclude interactive tools in interactive mode regardless of approval mode Ignore file not found: /startdir/src/gemini-cli/packages/cli/.geminiignore, continue without it. stderr | src/config/config.test.ts > Approval mode tool exclusion logic > should not exclude interactive tools in interactive mode regardless of approval mode YOLO mode is enabled. All tool calls will be automatically approved. stdout | src/config/config.test.ts > Approval mode tool exclusion logic > should not exclude interactive tools in interactive mode regardless of approval mode Ignore file not found: /startdir/src/gemini-cli/packages/cli/.geminiignore, continue without it. stderr | src/config/config.test.ts > Approval mode tool exclusion logic > should not exclude interactive tools in interactive mode regardless of approval mode YOLO mode is enabled. All tool calls will be automatically approved. stdout | src/config/config.test.ts > Approval mode tool exclusion logic > should merge approval mode exclusions with settings exclusions in auto_edit mode Ignore file not found: /startdir/src/gemini-cli/packages/cli/.geminiignore, continue without it. stdout | src/config/config.test.ts > Approval mode tool exclusion logic > should throw an error if YOLO mode is attempted when disableYoloMode is true Ignore file not found: /startdir/src/gemini-cli/packages/cli/.geminiignore, continue without it. stdout | src/config/config.test.ts > Approval mode tool exclusion logic > should throw an error for invalid approval mode values in loadCliConfig Ignore file not found: /startdir/src/gemini-cli/packages/cli/.geminiignore, continue without it. stdout | src/config/config.test.ts > loadCliConfig with allowed-mcp-server-names > should allow all MCP servers if the flag is not provided Ignore file not found: /startdir/src/gemini-cli/packages/cli/.geminiignore, continue without it. stdout | src/config/config.test.ts > loadCliConfig with allowed-mcp-server-names > should allow only the specified MCP server Ignore file not found: /startdir/src/gemini-cli/packages/cli/.geminiignore, continue without it. stdout | src/config/config.test.ts > loadCliConfig with allowed-mcp-server-names > should allow multiple specified MCP servers Ignore file not found: /startdir/src/gemini-cli/packages/cli/.geminiignore, continue without it. stdout | src/config/config.test.ts > loadCliConfig with allowed-mcp-server-names > should handle server names that do not exist Ignore file not found: /startdir/src/gemini-cli/packages/cli/.geminiignore, continue without it. stdout | src/config/config.test.ts > loadCliConfig with allowed-mcp-server-names > should allow no MCP servers if the flag is provided but empty Ignore file not found: /startdir/src/gemini-cli/packages/cli/.geminiignore, continue without it. stdout | src/config/config.test.ts > loadCliConfig with allowed-mcp-server-names > should read allowMCPServers from settings Ignore file not found: /startdir/src/gemini-cli/packages/cli/.geminiignore, continue without it. stdout | src/config/config.test.ts > loadCliConfig with allowed-mcp-server-names > should read excludeMCPServers from settings Ignore file not found: /startdir/src/gemini-cli/packages/cli/.geminiignore, continue without it. stdout | src/config/config.test.ts > loadCliConfig with allowed-mcp-server-names > should override allowMCPServers with excludeMCPServers if overlapping Ignore file not found: /startdir/src/gemini-cli/packages/cli/.geminiignore, continue without it. stdout | src/config/config.test.ts > loadCliConfig with allowed-mcp-server-names > should prioritize mcp server flag if set Ignore file not found: /startdir/src/gemini-cli/packages/cli/.geminiignore, continue without it. stdout | src/config/config.test.ts > loadCliConfig with allowed-mcp-server-names > should prioritize CLI flag over both allowed and excluded settings Ignore file not found: /startdir/src/gemini-cli/packages/cli/.geminiignore, continue without it. stdout | src/config/config.test.ts > loadCliConfig with admin.mcp.config > should use local configuration if admin allowlist is empty Ignore file not found: /startdir/src/gemini-cli/packages/cli/.geminiignore, continue without it. βœ“ src/ui/hooks/useAtCompletion.test.ts (15 tests) 2403ms βœ“ useAtCompletion > Filtering and Configuration > should reset and re-initialize when the cwd changes 323ms stdout | src/config/config.test.ts > loadCliConfig with admin.mcp.config > should ignore locally configured servers not present in the allowlist Ignore file not found: /startdir/src/gemini-cli/packages/cli/.geminiignore, continue without it. 1 MCP server is not allowlisted by your administrator. To enable it, please request an update to the settings at: https://goo.gle/manage-gemini-clistdout | src/config/config.test.ts > loadCliConfig with admin.mcp.config > should clear command, args, env, and cwd for present servers Ignore file not found: /startdir/src/gemini-cli/packages/cli/.geminiignore, continue without it. 1 MCP server is not allowlisted by your administrator. To enable it, please request an update to the settings at: https://goo.gle/manage-gemini-clistdout | src/config/config.test.ts > loadCliConfig with admin.mcp.config > should not initialize a server if it is in allowlist but missing locally Ignore file not found: /startdir/src/gemini-cli/packages/cli/.geminiignore, continue without it. 2 MCP servers are not allowlisted by your administrator. To enable them, please request an update to the settings at: https://goo.gle/manage-gemini-clistdout | src/config/config.test.ts > loadCliConfig with admin.mcp.config > should merge local fields and prefer admin tool filters Ignore file not found: /startdir/src/gemini-cli/packages/cli/.geminiignore, continue without it. stdout | src/config/config.test.ts > loadCliConfig with admin.mcp.config > should use local tool filters when admin does not define them Ignore file not found: /startdir/src/gemini-cli/packages/cli/.geminiignore, continue without it. stdout | src/config/config.test.ts > loadCliConfig model selection > selects a model from settings.json if provided Ignore file not found: /startdir/src/gemini-cli/packages/cli/.geminiignore, continue without it. stdout | src/config/config.test.ts > loadCliConfig model selection > uses the default gemini model if nothing is set Ignore file not found: /startdir/src/gemini-cli/packages/cli/.geminiignore, continue without it. stdout | src/config/config.test.ts > loadCliConfig model selection > always prefers model from argv Ignore file not found: /startdir/src/gemini-cli/packages/cli/.geminiignore, continue without it. stdout | src/config/config.test.ts > loadCliConfig model selection > selects the model from argv if provided Ignore file not found: /startdir/src/gemini-cli/packages/cli/.geminiignore, continue without it. stdout | src/config/config.test.ts > loadCliConfig model selection > selects the default auto model if provided via auto alias Ignore file not found: /startdir/src/gemini-cli/packages/cli/.geminiignore, continue without it. stdout | src/config/config.test.ts > loadCliConfig folderTrust > should be false when folderTrust is false Ignore file not found: /startdir/src/gemini-cli/packages/cli/.geminiignore, continue without it. stdout | src/config/config.test.ts > loadCliConfig folderTrust > should be true when folderTrust is true Ignore file not found: /startdir/src/gemini-cli/packages/cli/.geminiignore, continue without it. stdout | src/config/config.test.ts > loadCliConfig folderTrust > should be true by default Ignore file not found: /startdir/src/gemini-cli/packages/cli/.geminiignore, continue without it. stdout | src/config/config.test.ts > loadCliConfig compressionThreshold > should pass settings to the core config Ignore file not found: /startdir/src/gemini-cli/packages/cli/.geminiignore, continue without it. stdout | src/config/config.test.ts > loadCliConfig compressionThreshold > should have default compressionThreshold if not in settings Ignore file not found: /startdir/src/gemini-cli/packages/cli/.geminiignore, continue without it. stdout | src/config/config.test.ts > loadCliConfig useRipgrep > should be true by default when useRipgrep is not set in settings Ignore file not found: /startdir/src/gemini-cli/packages/cli/.geminiignore, continue without it. stdout | src/config/config.test.ts > loadCliConfig useRipgrep > should be false when useRipgrep is set to false in settings Ignore file not found: /startdir/src/gemini-cli/packages/cli/.geminiignore, continue without it. stderr | src/ui/themes/color-utils.test.ts > Color Utils > resolveColor > should return undefined for invalid colors [ColorUtils] Could not resolve color "invalidcolor" to an Ink-compatible format. [ColorUtils] Could not resolve color "notacolor" to an Ink-compatible format. [ColorUtils] Could not resolve color "" to an Ink-compatible format. stderr | src/ui/themes/color-utils.test.ts > Color Utils > Consistency between validation and resolution > should have consistent behavior between isValidColor and resolveColor [ColorUtils] Could not resolve color "invalidcolor" to an Ink-compatible format. [ColorUtils] Could not resolve color "notacolor" to an Ink-compatible format. [ColorUtils] Could not resolve color "" to an Ink-compatible format. stdout | src/config/config.test.ts > loadCliConfig useRipgrep > should be true when useRipgrep is explicitly set to true in settings Ignore file not found: /startdir/src/gemini-cli/packages/cli/.geminiignore, continue without it. stdout | src/config/config.test.ts > screenReader configuration > should use screenReader value from settings if CLI flag is not present (settings true) Ignore file not found: /startdir/src/gemini-cli/packages/cli/.geminiignore, continue without it. stdout | src/config/config.test.ts > screenReader configuration > should use screenReader value from settings if CLI flag is not present (settings false) Ignore file not found: /startdir/src/gemini-cli/packages/cli/.geminiignore, continue without it. stdout | src/config/config.test.ts > screenReader configuration > should prioritize --screen-reader CLI flag (true) over settings (false) Ignore file not found: /startdir/src/gemini-cli/packages/cli/.geminiignore, continue without it. βœ“ src/ui/themes/color-utils.test.ts (40 tests) 61ms stdout | src/config/config.test.ts > screenReader configuration > should be false by default when no flag or setting is present Ignore file not found: /startdir/src/gemini-cli/packages/cli/.geminiignore, continue without it. stdout | src/config/config.test.ts > loadCliConfig tool exclusions > should not exclude interactive tools in interactive mode without YOLO Ignore file not found: /startdir/src/gemini-cli/packages/cli/.geminiignore, continue without it. βœ“ src/utils/sandbox.test.ts (8 tests) 170ms stdout | src/config/config.test.ts > loadCliConfig tool exclusions > should not exclude interactive tools in interactive mode with YOLO Ignore file not found: /startdir/src/gemini-cli/packages/cli/.geminiignore, continue without it. stderr | src/config/config.test.ts > loadCliConfig tool exclusions > should not exclude interactive tools in interactive mode with YOLO YOLO mode is enabled. All tool calls will be automatically approved. βœ“ src/ui/hooks/useSessionResume.test.ts (14 tests) 79ms stdout | src/config/config.test.ts > loadCliConfig tool exclusions > should exclude interactive tools in non-interactive mode without YOLO Ignore file not found: /startdir/src/gemini-cli/packages/cli/.geminiignore, continue without it. stdout | src/config/config.test.ts > loadCliConfig tool exclusions > should exclude only ask_user in non-interactive mode with YOLO Ignore file not found: /startdir/src/gemini-cli/packages/cli/.geminiignore, continue without it. stderr | src/config/config.test.ts > loadCliConfig tool exclusions > should exclude only ask_user in non-interactive mode with YOLO YOLO mode is enabled. All tool calls will be automatically approved. stdout | src/config/config.test.ts > loadCliConfig tool exclusions > should not exclude shell tool in non-interactive mode when --allowed-tools="ShellTool" is set Ignore file not found: /startdir/src/gemini-cli/packages/cli/.geminiignore, continue without it. stdout | src/config/config.test.ts > loadCliConfig tool exclusions > should exclude web-fetch in non-interactive mode when not allowed Ignore file not found: /startdir/src/gemini-cli/packages/cli/.geminiignore, continue without it. βœ“ src/ui/commands/directoryCommand.test.tsx (21 tests) 173ms stdout | src/config/config.test.ts > loadCliConfig tool exclusions > should not exclude web-fetch in non-interactive mode when allowed Ignore file not found: /startdir/src/gemini-cli/packages/cli/.geminiignore, continue without it. stdout | src/config/config.test.ts > loadCliConfig tool exclusions > should not exclude shell tool in non-interactive mode when --allowed-tools="run_shell_command" is set Ignore file not found: /startdir/src/gemini-cli/packages/cli/.geminiignore, continue without it. stdout | src/config/config.test.ts > loadCliConfig tool exclusions > should not exclude shell tool in non-interactive mode when --allowed-tools="ShellTool(wc)" is set Ignore file not found: /startdir/src/gemini-cli/packages/cli/.geminiignore, continue without it. stdout | src/config/config.test.ts > loadCliConfig interactive > should be interactive if isTTY and no prompt Ignore file not found: /startdir/src/gemini-cli/packages/cli/.geminiignore, continue without it. βœ“ src/config/settingsSchema.test.ts (20 tests) 60ms stdout | src/config/config.test.ts > loadCliConfig interactive > should be interactive if prompt-interactive is set Ignore file not found: /startdir/src/gemini-cli/packages/cli/.geminiignore, continue without it. stdout | src/config/config.test.ts > loadCliConfig interactive > should not be interactive if not isTTY and no prompt Ignore file not found: /startdir/src/gemini-cli/packages/cli/.geminiignore, continue without it. stdout | src/config/config.test.ts > loadCliConfig interactive > should not be interactive if prompt is set Ignore file not found: /startdir/src/gemini-cli/packages/cli/.geminiignore, continue without it. βœ“ src/ui/components/shared/BaseSelectionList.test.tsx (26 tests) 1072ms βœ“ src/ui/components/StatsDisplay.test.tsx (17 tests) 1542ms stdout | src/config/config.test.ts > loadCliConfig interactive > should be interactive if positional prompt words are provided with other flags Ignore file not found: /startdir/src/gemini-cli/packages/cli/.geminiignore, continue without it. stdout | src/config/config.test.ts > loadCliConfig interactive > should be interactive if positional prompt words are provided with multiple flags Ignore file not found: /startdir/src/gemini-cli/packages/cli/.geminiignore, continue without it. stderr | src/config/config.test.ts > loadCliConfig interactive > should be interactive if positional prompt words are provided with multiple flags YOLO mode is enabled. All tool calls will be automatically approved. stdout | src/config/config.test.ts > loadCliConfig interactive > should be interactive if positional prompt words are provided with extensions flag Ignore file not found: /startdir/src/gemini-cli/packages/cli/.geminiignore, continue without it. stdout | src/config/config.test.ts > loadCliConfig interactive > should handle multiple positional words correctly Ignore file not found: /startdir/src/gemini-cli/packages/cli/.geminiignore, continue without it. stdout | src/config/config.test.ts > loadCliConfig interactive > should handle multiple positional words with flags Ignore file not found: /startdir/src/gemini-cli/packages/cli/.geminiignore, continue without it. stdout | src/config/config.test.ts > loadCliConfig interactive > should handle empty positional arguments Ignore file not found: /startdir/src/gemini-cli/packages/cli/.geminiignore, continue without it. stdout | src/config/config.test.ts > loadCliConfig interactive > should handle extensions flag with positional arguments correctly Ignore file not found: /startdir/src/gemini-cli/packages/cli/.geminiignore, continue without it. stdout | src/config/config.test.ts > loadCliConfig interactive > should be interactive if no positional prompt words are provided with flags Ignore file not found: /startdir/src/gemini-cli/packages/cli/.geminiignore, continue without it. stdout | src/config/config.test.ts > loadCliConfig approval mode > should default to DEFAULT approval mode when no flags are set Ignore file not found: /startdir/src/gemini-cli/packages/cli/.geminiignore, continue without it. stdout | src/config/config.test.ts > loadCliConfig approval mode > should set YOLO approval mode when --yolo flag is used Ignore file not found: /startdir/src/gemini-cli/packages/cli/.geminiignore, continue without it. stderr | src/config/config.test.ts > loadCliConfig approval mode > should set YOLO approval mode when --yolo flag is used YOLO mode is enabled. All tool calls will be automatically approved. stdout | src/config/config.test.ts > loadCliConfig approval mode > should set YOLO approval mode when -y flag is used Ignore file not found: /startdir/src/gemini-cli/packages/cli/.geminiignore, continue without it. stderr | src/config/config.test.ts > loadCliConfig approval mode > should set YOLO approval mode when -y flag is used YOLO mode is enabled. All tool calls will be automatically approved. stdout | src/config/config.test.ts > loadCliConfig approval mode > should set DEFAULT approval mode when --approval-mode=default Ignore file not found: /startdir/src/gemini-cli/packages/cli/.geminiignore, continue without it. stdout | src/config/config.test.ts > loadCliConfig approval mode > should set AUTO_EDIT approval mode when --approval-mode=auto_edit Ignore file not found: /startdir/src/gemini-cli/packages/cli/.geminiignore, continue without it. stdout | src/config/config.test.ts > loadCliConfig approval mode > should set YOLO approval mode when --approval-mode=yolo Ignore file not found: /startdir/src/gemini-cli/packages/cli/.geminiignore, continue without it. stderr | src/config/config.test.ts > loadCliConfig approval mode > should set YOLO approval mode when --approval-mode=yolo YOLO mode is enabled. All tool calls will be automatically approved. stdout | src/config/config.test.ts > loadCliConfig approval mode > should prioritize --approval-mode over --yolo when both would be valid (but validation prevents this) Ignore file not found: /startdir/src/gemini-cli/packages/cli/.geminiignore, continue without it. stdout | src/config/config.test.ts > loadCliConfig approval mode > should fall back to --yolo behavior when --approval-mode is not set Ignore file not found: /startdir/src/gemini-cli/packages/cli/.geminiignore, continue without it. stderr | src/config/config.test.ts > loadCliConfig approval mode > should fall back to --yolo behavior when --approval-mode is not set YOLO mode is enabled. All tool calls will be automatically approved. stdout | src/config/config.test.ts > loadCliConfig approval mode > should set Plan approval mode when --approval-mode=plan is used and experimental.plan is enabled Ignore file not found: /startdir/src/gemini-cli/packages/cli/.geminiignore, continue without it. stdout | src/config/config.test.ts > loadCliConfig approval mode > should ignore "yolo" in settings.tools.approvalMode and fall back to DEFAULT Ignore file not found: /startdir/src/gemini-cli/packages/cli/.geminiignore, continue without it. stdout | src/config/config.test.ts > loadCliConfig approval mode > should throw error when --approval-mode=plan is used but experimental.plan is disabled Ignore file not found: /startdir/src/gemini-cli/packages/cli/.geminiignore, continue without it. stdout | src/config/config.test.ts > loadCliConfig approval mode > should throw error when --approval-mode=plan is used but experimental.plan setting is missing Ignore file not found: /startdir/src/gemini-cli/packages/cli/.geminiignore, continue without it. stdout | src/config/config.test.ts > loadCliConfig approval mode > when folder is NOT trusted > should override --approval-mode=yolo to DEFAULT Ignore file not found: /startdir/src/gemini-cli/packages/cli/.geminiignore, continue without it. stderr | src/config/config.test.ts > loadCliConfig approval mode > when folder is NOT trusted > should override --approval-mode=yolo to DEFAULT YOLO mode is enabled. All tool calls will be automatically approved. Approval mode overridden to "default" because the current folder is not trusted. stdout | src/config/config.test.ts > loadCliConfig approval mode > when folder is NOT trusted > should override --approval-mode=auto_edit to DEFAULT Ignore file not found: /startdir/src/gemini-cli/packages/cli/.geminiignore, continue without it. stderr | src/config/config.test.ts > loadCliConfig approval mode > when folder is NOT trusted > should override --approval-mode=auto_edit to DEFAULT Approval mode overridden to "default" because the current folder is not trusted. stdout | src/config/config.test.ts > loadCliConfig approval mode > when folder is NOT trusted > should override --yolo flag to DEFAULT Ignore file not found: /startdir/src/gemini-cli/packages/cli/.geminiignore, continue without it. stderr | src/config/config.test.ts > loadCliConfig approval mode > when folder is NOT trusted > should override --yolo flag to DEFAULT YOLO mode is enabled. All tool calls will be automatically approved. Approval mode overridden to "default" because the current folder is not trusted. stdout | src/config/config.test.ts > loadCliConfig approval mode > when folder is NOT trusted > should remain DEFAULT when --approval-mode=default Ignore file not found: /startdir/src/gemini-cli/packages/cli/.geminiignore, continue without it. stdout | src/config/config.test.ts > loadCliConfig approval mode > Persistent approvalMode setting > should use approvalMode from settings when no CLI flags are set Ignore file not found: /startdir/src/gemini-cli/packages/cli/.geminiignore, continue without it. stdout | src/config/config.test.ts > loadCliConfig approval mode > Persistent approvalMode setting > should prioritize --approval-mode flag over settings Ignore file not found: /startdir/src/gemini-cli/packages/cli/.geminiignore, continue without it. (node:2391) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 101 model-changed listeners added to [CoreEventEmitter]. MaxListeners is 100. Use emitter.setMaxListeners() to increase limit (Use `node --trace-warnings ...` to show where the warning was created) stdout | src/config/config.test.ts > loadCliConfig approval mode > Persistent approvalMode setting > should prioritize --yolo flag over settings Ignore file not found: /startdir/src/gemini-cli/packages/cli/.geminiignore, continue without it. βœ“ src/ui/commands/memoryCommand.test.ts (11 tests) 159ms stderr | src/config/config.test.ts > loadCliConfig approval mode > Persistent approvalMode setting > should prioritize --yolo flag over settings YOLO mode is enabled. All tool calls will be automatically approved. stdout | src/config/config.test.ts > loadCliConfig approval mode > Persistent approvalMode setting > should respect plan mode from settings when experimental.plan is enabled Ignore file not found: /startdir/src/gemini-cli/packages/cli/.geminiignore, continue without it. stdout | src/config/config.test.ts > loadCliConfig approval mode > Persistent approvalMode setting > should throw error if plan mode is in settings but experimental.plan is disabled Ignore file not found: /startdir/src/gemini-cli/packages/cli/.geminiignore, continue without it. stdout | src/config/config.test.ts > loadCliConfig fileFiltering > should pass 'enableFuzzySearch' from settings to config when true Ignore file not found: /startdir/src/gemini-cli/packages/cli/.geminiignore, continue without it. stdout | src/config/config.test.ts > loadCliConfig fileFiltering > should pass 'enableFuzzySearch' from settings to config when false Ignore file not found: /startdir/src/gemini-cli/packages/cli/.geminiignore, continue without it. stdout | src/config/config.test.ts > loadCliConfig fileFiltering > should pass 'respectGitIgnore' from settings to config when true Ignore file not found: /startdir/src/gemini-cli/packages/cli/.geminiignore, continue without it. stdout | src/config/config.test.ts > loadCliConfig fileFiltering > should pass 'respectGitIgnore' from settings to config when false Ignore file not found: /startdir/src/gemini-cli/packages/cli/.geminiignore, continue without it. stdout | src/config/config.test.ts > loadCliConfig fileFiltering > should pass 'respectGeminiIgnore' from settings to config when true Ignore file not found: /startdir/src/gemini-cli/packages/cli/.geminiignore, continue without it. stdout | src/config/config.test.ts > loadCliConfig fileFiltering > should pass 'respectGeminiIgnore' from settings to config when false Ignore file not found: /startdir/src/gemini-cli/packages/cli/.geminiignore, continue without it. stdout | src/config/config.test.ts > loadCliConfig fileFiltering > should pass 'enableRecursiveFileSearch' from settings to config when true Ignore file not found: /startdir/src/gemini-cli/packages/cli/.geminiignore, continue without it. stdout | src/config/config.test.ts > loadCliConfig fileFiltering > should pass 'enableRecursiveFileSearch' from settings to config when false Ignore file not found: /startdir/src/gemini-cli/packages/cli/.geminiignore, continue without it. stdout | src/config/config.test.ts > Output format > should default to TEXT Ignore file not found: /startdir/src/gemini-cli/packages/cli/.geminiignore, continue without it. stdout | src/config/config.test.ts > Output format > should use the format from settings Ignore file not found: /startdir/src/gemini-cli/packages/cli/.geminiignore, continue without it. βœ“ src/ui/commands/agentsCommand.test.ts (20 tests) 314ms stdout | src/config/config.test.ts > Output format > should prioritize the format from argv Ignore file not found: /startdir/src/gemini-cli/packages/cli/.geminiignore, continue without it. stdout | src/config/config.test.ts > Output format > should accept stream-json as a valid output format Ignore file not found: /startdir/src/gemini-cli/packages/cli/.geminiignore, continue without it. βœ“ src/commands/hooks/migrate.test.ts (17 tests) 192ms stdout | src/config/config.test.ts > Telemetry configuration via environment variables > should prioritize GEMINI_TELEMETRY_ENABLED over settings Ignore file not found: /startdir/src/gemini-cli/packages/cli/.geminiignore, continue without it. βœ“ src/ui/hooks/useToolExecutionScheduler.test.ts (9 tests) 202ms stdout | src/config/config.test.ts > Telemetry configuration via environment variables > should prioritize GEMINI_TELEMETRY_TARGET over settings Ignore file not found: /startdir/src/gemini-cli/packages/cli/.geminiignore, continue without it. stdout | src/config/config.test.ts > Telemetry configuration via environment variables > should throw when GEMINI_TELEMETRY_TARGET is invalid Ignore file not found: /startdir/src/gemini-cli/packages/cli/.geminiignore, continue without it. stdout | src/config/config.test.ts > Telemetry configuration via environment variables > should prioritize GEMINI_TELEMETRY_OTLP_ENDPOINT over settings and default env var Ignore file not found: /startdir/src/gemini-cli/packages/cli/.geminiignore, continue without it. stdout | src/config/config.test.ts > Telemetry configuration via environment variables > should prioritize GEMINI_TELEMETRY_OTLP_PROTOCOL over settings Ignore file not found: /startdir/src/gemini-cli/packages/cli/.geminiignore, continue without it. stdout | src/config/config.test.ts > Telemetry configuration via environment variables > should prioritize GEMINI_TELEMETRY_LOG_PROMPTS over settings Ignore file not found: /startdir/src/gemini-cli/packages/cli/.geminiignore, continue without it. stdout | src/config/config.test.ts > Telemetry configuration via environment variables > should prioritize GEMINI_TELEMETRY_OUTFILE over settings Ignore file not found: /startdir/src/gemini-cli/packages/cli/.geminiignore, continue without it. stdout | src/config/config.test.ts > Telemetry configuration via environment variables > should prioritize GEMINI_TELEMETRY_USE_COLLECTOR over settings Ignore file not found: /startdir/src/gemini-cli/packages/cli/.geminiignore, continue without it. stdout | src/config/config.test.ts > Telemetry configuration via environment variables > should use settings value when GEMINI_TELEMETRY_ENABLED is not set Ignore file not found: /startdir/src/gemini-cli/packages/cli/.geminiignore, continue without it. stdout | src/config/config.test.ts > Telemetry configuration via environment variables > should use settings value when GEMINI_TELEMETRY_TARGET is not set Ignore file not found: /startdir/src/gemini-cli/packages/cli/.geminiignore, continue without it. stdout | src/config/config.test.ts > Telemetry configuration via environment variables > should treat GEMINI_TELEMETRY_ENABLED='1' as true Ignore file not found: /startdir/src/gemini-cli/packages/cli/.geminiignore, continue without it. stdout | src/config/config.test.ts > Telemetry configuration via environment variables > should treat GEMINI_TELEMETRY_ENABLED='0' as false Ignore file not found: /startdir/src/gemini-cli/packages/cli/.geminiignore, continue without it. stdout | src/config/config.test.ts > Telemetry configuration via environment variables > should treat GEMINI_TELEMETRY_LOG_PROMPTS='1' as true Ignore file not found: /startdir/src/gemini-cli/packages/cli/.geminiignore, continue without it. stdout | src/config/config.test.ts > Telemetry configuration via environment variables > should treat GEMINI_TELEMETRY_LOG_PROMPTS='false' as false Ignore file not found: /startdir/src/gemini-cli/packages/cli/.geminiignore, continue without it. stdout | src/config/config.test.ts > PolicyEngine nonInteractive wiring > should set nonInteractive to true when -p flag is used Ignore file not found: /startdir/src/gemini-cli/packages/cli/.geminiignore, continue without it. stdout | src/config/config.test.ts > PolicyEngine nonInteractive wiring > should set nonInteractive to false in interactive mode Ignore file not found: /startdir/src/gemini-cli/packages/cli/.geminiignore, continue without it. stdout | src/config/config.test.ts > Policy Engine Integration in loadCliConfig > should pass merged allowed tools from CLI and settings to createPolicyEngineConfig Ignore file not found: /startdir/src/gemini-cli/packages/cli/.geminiignore, continue without it. stdout | src/config/config.test.ts > Policy Engine Integration in loadCliConfig > should pass merged exclude tools from CLI logic and settings to createPolicyEngineConfig Ignore file not found: /startdir/src/gemini-cli/packages/cli/.geminiignore, continue without it. stdout | src/config/config.test.ts > loadCliConfig disableYoloMode > should allow auto_edit mode even if yolo mode is disabled Ignore file not found: /startdir/src/gemini-cli/packages/cli/.geminiignore, continue without it. stdout | src/config/config.test.ts > loadCliConfig disableYoloMode > should throw if YOLO mode is attempted when disableYoloMode is true Ignore file not found: /startdir/src/gemini-cli/packages/cli/.geminiignore, continue without it. stderr | src/config/config.test.ts > loadCliConfig disableYoloMode > should throw if YOLO mode is attempted when disableYoloMode is true YOLO mode is disabled by the "disableYolo" setting. stdout | src/config/config.test.ts > loadCliConfig secureModeEnabled > should throw an error if YOLO mode is attempted when secureModeEnabled is true Ignore file not found: /startdir/src/gemini-cli/packages/cli/.geminiignore, continue without it. stderr | src/config/config.test.ts > loadCliConfig secureModeEnabled > should throw an error if YOLO mode is attempted when secureModeEnabled is true YOLO mode is disabled by "secureModeEnabled" setting. stdout | src/config/config.test.ts > loadCliConfig secureModeEnabled > should throw an error if approval-mode=yolo is attempted when secureModeEnabled is true Ignore file not found: /startdir/src/gemini-cli/packages/cli/.geminiignore, continue without it. stderr | src/config/config.test.ts > loadCliConfig secureModeEnabled > should throw an error if approval-mode=yolo is attempted when secureModeEnabled is true YOLO mode is disabled by "secureModeEnabled" setting. stdout | src/config/config.test.ts > loadCliConfig secureModeEnabled > should set disableYoloMode to true when secureModeEnabled is true Ignore file not found: /startdir/src/gemini-cli/packages/cli/.geminiignore, continue without it. stdout | src/config/config.test.ts > loadCliConfig mcpEnabled > should enable MCP by default Ignore file not found: /startdir/src/gemini-cli/packages/cli/.geminiignore, continue without it. βœ“ src/ui/keyMatchers.test.ts (57 tests) 45ms stdout | src/config/config.test.ts > loadCliConfig mcpEnabled > should disable MCP when mcpEnabled is false Ignore file not found: /startdir/src/gemini-cli/packages/cli/.geminiignore, continue without it. βœ“ src/ui/hooks/useInputHistory.test.ts (14 tests) 346ms stdout | src/config/config.test.ts > loadCliConfig mcpEnabled > should enable MCP when mcpEnabled is true Ignore file not found: /startdir/src/gemini-cli/packages/cli/.geminiignore, continue without it. βœ“ src/utils/devtoolsService.test.ts (14 tests) 388ms βœ“ src/config/config.test.ts (182 tests | 1 skipped) 10094ms stderr | DebugLogger.error (/startdir/src/gemini-cli/packages/core/src/utils/debugLogger.ts:60:13) {"stack":"Error: PeriodicExportingMetricReader: metrics export failed (error Error: 14 UNAVAILABLE: No connection established. Last error: Error: connect ECONNREFUSED 127.0.0.1:4317)\n at PeriodicExportingMetricReader._doRun (/startdir/src/gemini-cli/node_modules/@opentelemetry/sdk-metrics/src/export/PeriodicExportingMetricReader.ts:144:13)\n at processTicksAndRejections (node:internal/process/task_queues:104:5)\n at PeriodicExportingMetricReader._runOnce (/startdir/src/gemini-cli/node_modules/@opentelemetry/sdk-metrics/src/export/PeriodicExportingMetricReader.ts:103:7)\n at PeriodicExportingMetricReader.onForceFlush (/startdir/src/gemini-cli/node_modules/@opentelemetry/sdk-metrics/src/export/PeriodicExportingMetricReader.ts:160:5)\n at PeriodicExportingMetricReader.onShutdown (/startdir/src/gemini-cli/node_modules/@opentelemetry/sdk-metrics/src/export/PeriodicExportingMetricReader.ts:168:5)\n at PeriodicExportingMetricReader.shutdown (/startdir/src/gemini-cli/node_modules/@opentelemetry/sdk-metrics/src/export/MetricReader.ts:261:7)\n at MetricCollector.shutdown (/startdir/src/gemini-cli/node_modules/@opentelemetry/sdk-metrics/src/state/MetricCollector.ts:86:5)\n at async Promise.all (index 0)\n at MeterProvider.shutdown (/startdir/src/gemini-cli/node_modules/@opentelemetry/sdk-metrics/src/MeterProvider.ts:98:5)\n at async Promise.all (index 2)","message":"PeriodicExportingMetricReader: metrics export failed (error Error: 14 UNAVAILABLE: No connection established. Last error: Error: connect ECONNREFUSED 127.0.0.1:4317)","name":"Error"} βœ“ src/utils/installationInfo.test.ts (17 tests) 78ms βœ“ src/ui/utils/rewindFileOps.test.ts (9 tests) 61ms βœ“ src/config/extensions/consent.test.ts (20 tests) 180ms βœ“ src/ui/components/ExitPlanModeDialog.test.tsx (26 tests) 6564ms βœ“ ExitPlanModeDialog > useAlternateBuffer: true > calls onApprove with AUTO_EDIT when first option is selected 329ms βœ“ ExitPlanModeDialog > useAlternateBuffer: true > calls onApprove with DEFAULT when second option is selected 404ms βœ“ ExitPlanModeDialog > useAlternateBuffer: true > calls onFeedback when feedback is typed and submitted 610ms βœ“ ExitPlanModeDialog > useAlternateBuffer: true > clears feedback text when Ctrl+C is pressed while editing 989ms βœ“ ExitPlanModeDialog > useAlternateBuffer: true > bubbles up Ctrl+C when feedback is empty while editing 549ms βœ“ ExitPlanModeDialog > useAlternateBuffer: true > allows arrow navigation while typing feedback to change selection 425ms βœ“ ExitPlanModeDialog > useAlternateBuffer: false > calls onFeedback when feedback is typed and submitted 345ms βœ“ ExitPlanModeDialog > useAlternateBuffer: false > clears feedback text when Ctrl+C is pressed while editing 687ms βœ“ src/config/settings-validation.test.ts (25 tests) 91ms stderr | src/ui/auth/AuthDialog.test.tsx > AuthDialog > handleAuthSelect > exits process for Login with Google when browser is suppressed An update to AuthDialog inside a test was not wrapped in act(...). When testing, code that causes React state updates should be wrapped into act(...): act(() => { /* fire events that update state */ }); /* assert on the output */ This ensures that you're testing the behavior the user would see in the browser. Learn more at https://react.dev/link/wrap-tests-with-act βœ“ src/utils/toolOutputCleanup.test.ts (10 tests) 74ms βœ“ src/ui/auth/AuthDialog.test.tsx (24 tests) 1140ms βœ“ src/utils/handleAutoUpdate.test.ts (19 tests) 62ms βœ“ src/ui/contexts/ScrollProvider.test.tsx (9 tests) 285ms βœ“ src/ui/components/Footer.test.tsx (24 tests) 862ms βœ“ src/services/CommandService.test.ts (11 tests) 23ms stdout | src/commands/mcp/add.test.ts > mcp add command > should add a stdio server to project settings MCP server "my-server" added to project settings. (stdio) stdout | src/commands/mcp/add.test.ts > mcp add command > should handle multiple env vars before positional args MCP server "my-server" added to project settings. (stdio) stdout | src/commands/mcp/add.test.ts > mcp add command > should add an sse server to user settings MCP server "sse-server" added to user settings. (sse) stdout | src/commands/mcp/add.test.ts > mcp add command > should add an http server to project settings MCP server "http-server" added to project settings. (http) stdout | src/commands/mcp/add.test.ts > mcp add command > should add an sse server using --type alias MCP server "sse-server" added to user settings. (sse) stdout | src/commands/mcp/add.test.ts > mcp add command > should add an http server using --type alias MCP server "http-server" added to project settings. (http) stdout | src/commands/mcp/add.test.ts > mcp add command > should handle MCP server args with -- separator MCP server "my-server" added to project settings. (stdio) stdout | src/commands/mcp/add.test.ts > mcp add command > should handle unknown options as MCP server args MCP server "test-server" added to project settings. (stdio) stdout | src/commands/mcp/add.test.ts > mcp add command > when handling scope and directory > when in a project directory > should use project scope by default MCP server "test-server" added to project settings. (stdio) stdout | src/commands/mcp/add.test.ts > mcp add command > when handling scope and directory > when in a project directory > should use project scope when --scope=project is used MCP server "test-server" added to project settings. (stdio) stdout | src/commands/mcp/add.test.ts > mcp add command > when handling scope and directory > when in a project directory > should use user scope when --scope=user is used MCP server "test-server" added to user settings. (stdio) stdout | src/commands/mcp/add.test.ts > mcp add command > when handling scope and directory > when in a subdirectory of a project > should use project scope by default MCP server "test-server" added to project settings. (stdio) stdout | src/commands/mcp/add.test.ts > mcp add command > when handling scope and directory > when in the home directory > should use user scope when --scope=user is used MCP server "test-server" added to user settings. (stdio) stdout | src/commands/mcp/add.test.ts > mcp add command > when handling scope and directory > when in a subdirectory of home (not a project) > should use project scope by default MCP server "test-server" added to project settings. (stdio) stdout | src/commands/mcp/add.test.ts > mcp add command > when handling scope and directory > when in a subdirectory of home (not a project) > should write to the WORKSPACE scope, not the USER scope MCP server "my-new-server" added to project settings. (stdio) stdout | src/commands/mcp/add.test.ts > mcp add command > when handling scope and directory > when outside of home (not a project) > should use project scope by default MCP server "test-server" added to project settings. (stdio) stdout | src/commands/mcp/add.test.ts > mcp add command > when updating an existing server > should update the existing server in the project scope MCP server "existing-server" is already configured within project settings. MCP server "existing-server" updated in project settings. stdout | src/commands/mcp/add.test.ts > mcp add command > when updating an existing server > should update the existing server in the user scope MCP server "existing-server" is already configured within user settings. MCP server "existing-server" updated in user settings. βœ“ src/commands/mcp/add.test.ts (20 tests) 388ms βœ“ src/ui/hooks/usePermissionsModifyTrust.test.ts (13 tests) 134ms stdout | src/ui/commands/setupGithubCommand.test.ts > setupGithubCommand > throws an error when download fails Failed to download required setup files: Error: Invalid response code downloading https://raw.githubusercontent.com/google-github-actions/run-gemini-cli/refs/tags/v1.2.3/examples/workflows/gemini-dispatch/gemini-dispatch.yml: 404 - Not Found at /startdir/src/gemini-cli/packages/cli/src/ui/commands/setupGithubCommand.ts:131:17 at async Promise.all (index 0) at downloadFiles (/startdir/src/gemini-cli/packages/cli/src/ui/commands/setupGithubCommand.ts:158:3) at async Promise.all (index 0) at downloadSetupFiles (/startdir/src/gemini-cli/packages/cli/src/ui/commands/setupGithubCommand.ts:184:5) at Object.action (/startdir/src/gemini-cli/packages/cli/src/ui/commands/setupGithubCommand.ts:240:5) at /startdir/src/gemini-cli/packages/cli/src/ui/commands/setupGithubCommand.test.ts:216:5 at file:///startdir/src/gemini-cli/node_modules/@vitest/runner/dist/chunk-hooks.js:752:20 stdout | src/ui/commands/setupGithubCommand.test.ts > updateGitignore > handles file system errors gracefully Failed to update .gitignore: Error: ENOENT: no such file or directory, open '/tmp/update-gitignore-9cwhBv/non-existent/.gitignore' at open (node:internal/fs/promises:636:25) at Object.writeFile (node:internal/fs/promises:1239:14) at Module.updateGitignore (/startdir/src/gemini-cli/packages/cli/src/ui/commands/setupGithubCommand.ts:82:7) at /startdir/src/gemini-cli/packages/cli/src/ui/commands/setupGithubCommand.test.ts:319:5 at file:///startdir/src/gemini-cli/node_modules/@vitest/runner/dist/chunk-hooks.js:752:20 { errno: -2, code: 'ENOENT', syscall: 'open', path: '/tmp/update-gitignore-9cwhBv/non-existent/.gitignore' } βœ“ src/utils/commentJson.test.ts (12 tests) 18ms stderr | ../../node_modules/react-reconciler/cjs/react-reconciler.development.js:13614:19 An update to ForwardRef(ScrollableList) inside a test was not wrapped in act(...). When testing, code that causes React state updates should be wrapped into act(...): act(() => { /* fire events that update state */ }); /* assert on the output */ This ensures that you're testing the behavior the user would see in the browser. Learn more at https://react.dev/link/wrap-tests-with-act βœ“ src/ui/components/shared/ScrollableList.test.tsx (4 tests) 1581ms βœ“ ScrollableList Demo Behavior > should scroll to bottom when new items are added and stop when scrolled up 531ms βœ“ ScrollableList Demo Behavior > Keyboard Navigation > should handle scroll keys correctly 930ms βœ“ src/ui/commands/setupGithubCommand.test.ts (10 tests) 174ms βœ“ src/ui/hooks/useFolderTrust.test.ts (13 tests) 199ms βœ“ src/ui/components/ModelStatsDisplay.test.tsx (8 tests) 556ms βœ“ src/services/BuiltinCommandLoader.test.ts (15 tests) 2861ms βœ“ BuiltinCommandLoader profile > should not include profile command when isDevelopment is false 1506ms βœ“ BuiltinCommandLoader profile > should include profile command when isDevelopment is true 1307ms βœ“ src/ui/hooks/useMessageQueue.test.tsx (15 tests) 257ms βœ“ src/ui/hooks/usePhraseCycler.test.tsx (12 tests) 208ms βœ“ src/ui/contexts/ScrollProvider.drag.test.tsx (6 tests) 106ms βœ“ src/ui/components/shared/VirtualizedList.test.tsx (10 tests) 529ms βœ“ src/ui/components/SessionBrowser.test.tsx (6 tests) 445ms βœ“ src/ui/utils/directoryUtils.test.ts (17 tests | 1 skipped) 17ms βœ“ src/ui/components/messages/ToolConfirmationMessage.test.tsx (16 tests) 585ms βœ“ src/ui/commands/rewindCommand.test.tsx (13 tests) 92ms βœ“ src/ui/components/messages/DiffRenderer.test.tsx (26 tests) 738ms βœ“ src/config/extensions/update.test.ts (10 tests) 45ms βœ“ src/utils/relaunch.test.ts (8 tests) 40ms βœ“ src/commands/extensions/uninstall.test.ts (9 tests) 62ms βœ“ src/ui/components/LoadingIndicator.test.tsx (17 tests) 386ms stderr | src/ui/components/RewindViewer.test.tsx An update to Spinner inside a test was not wrapped in act(...). When testing, code that causes React state updates should be wrapped into act(...): act(() => { /* fire events that update state */ }); /* assert on the output */ This ensures that you're testing the behavior the user would see in the browser. Learn more at https://react.dev/link/wrap-tests-with-act stderr | src/ui/components/RewindViewer.test.tsx An update to Spinner inside a test was not wrapped in act(...). When testing, code that causes React state updates should be wrapped into act(...): act(() => { /* fire events that update state */ }); /* assert on the output */ This ensures that you're testing the behavior the user would see in the browser. Learn more at https://react.dev/link/wrap-tests-with-act stderr | src/ui/components/RewindViewer.test.tsx An update to Spinner inside a test was not wrapped in act(...). When testing, code that causes React state updates should be wrapped into act(...): act(() => { /* fire events that update state */ }); /* assert on the output */ This ensures that you're testing the behavior the user would see in the browser. Learn more at https://react.dev/link/wrap-tests-with-act stderr | src/ui/components/RewindViewer.test.tsx An update to Spinner inside a test was not wrapped in act(...). When testing, code that causes React state updates should be wrapped into act(...): act(() => { /* fire events that update state */ }); /* assert on the output */ This ensures that you're testing the behavior the user would see in the browser. Learn more at https://react.dev/link/wrap-tests-with-act stderr | ../../node_modules/react-reconciler/cjs/react-reconciler.development.js:13614:19 An update to Spinner inside a test was not wrapped in act(...). When testing, code that causes React state updates should be wrapped into act(...): act(() => { /* fire events that update state */ }); /* assert on the output */ This ensures that you're testing the behavior the user would see in the browser. Learn more at https://react.dev/link/wrap-tests-with-act stderr | ../../node_modules/react-reconciler/cjs/react-reconciler.development.js:13614:19 An update to Spinner inside a test was not wrapped in act(...). When testing, code that causes React state updates should be wrapped into act(...): act(() => { /* fire events that update state */ }); /* assert on the output */ This ensures that you're testing the behavior the user would see in the browser. Learn more at https://react.dev/link/wrap-tests-with-act stderr | ../../node_modules/react-reconciler/cjs/react-reconciler.development.js:13614:19 An update to Spinner inside a test was not wrapped in act(...). When testing, code that causes React state updates should be wrapped into act(...): act(() => { /* fire events that update state */ }); /* assert on the output */ This ensures that you're testing the behavior the user would see in the browser. Learn more at https://react.dev/link/wrap-tests-with-act stderr | ../../node_modules/react-reconciler/cjs/react-reconciler.development.js:13614:19 An update to Spinner inside a test was not wrapped in act(...). When testing, code that causes React state updates should be wrapped into act(...): act(() => { /* fire events that update state */ }); /* assert on the output */ This ensures that you're testing the behavior the user would see in the browser. Learn more at https://react.dev/link/wrap-tests-with-act stderr | ../../node_modules/react-reconciler/cjs/react-reconciler.development.js:13614:19 An update to Spinner inside a test was not wrapped in act(...). When testing, code that causes React state updates should be wrapped into act(...): act(() => { /* fire events that update state */ }); /* assert on the output */ This ensures that you're testing the behavior the user would see in the browser. Learn more at https://react.dev/link/wrap-tests-with-act stderr | ../../node_modules/react-reconciler/cjs/react-reconciler.development.js:13614:19 An update to Spinner inside a test was not wrapped in act(...). When testing, code that causes React state updates should be wrapped into act(...): act(() => { /* fire events that update state */ }); /* assert on the output */ This ensures that you're testing the behavior the user would see in the browser. Learn more at https://react.dev/link/wrap-tests-with-act stderr | ../../node_modules/react-reconciler/cjs/react-reconciler.development.js:13614:19 An update to Spinner inside a test was not wrapped in act(...). When testing, code that causes React state updates should be wrapped into act(...): act(() => { /* fire events that update state */ }); /* assert on the output */ This ensures that you're testing the behavior the user would see in the browser. Learn more at https://react.dev/link/wrap-tests-with-act stderr | ../../node_modules/react-reconciler/cjs/react-reconciler.development.js:13614:19 An update to Spinner inside a test was not wrapped in act(...). When testing, code that causes React state updates should be wrapped into act(...): act(() => { /* fire events that update state */ }); /* assert on the output */ This ensures that you're testing the behavior the user would see in the browser. Learn more at https://react.dev/link/wrap-tests-with-act βœ“ src/ui/components/RewindViewer.test.tsx (13 tests) 580ms stderr | ../../node_modules/react-reconciler/cjs/react-reconciler.development.js:13614:19 An update to Spinner inside a test was not wrapped in act(...). When testing, code that causes React state updates should be wrapped into act(...): act(() => { /* fire events that update state */ }); /* assert on the output */ This ensures that you're testing the behavior the user would see in the browser. Learn more at https://react.dev/link/wrap-tests-with-act stderr | ../../node_modules/react-reconciler/cjs/react-reconciler.development.js:13614:19 An update to Spinner inside a test was not wrapped in act(...). When testing, code that causes React state updates should be wrapped into act(...): act(() => { /* fire events that update state */ }); /* assert on the output */ This ensures that you're testing the behavior the user would see in the browser. Learn more at https://react.dev/link/wrap-tests-with-act stderr | ../../node_modules/react-reconciler/cjs/react-reconciler.development.js:13614:19 An update to Spinner inside a test was not wrapped in act(...). When testing, code that causes React state updates should be wrapped into act(...): act(() => { /* fire events that update state */ }); /* assert on the output */ This ensures that you're testing the behavior the user would see in the browser. Learn more at https://react.dev/link/wrap-tests-with-act stderr | ../../node_modules/react-reconciler/cjs/react-reconciler.development.js:13614:19 An update to Spinner inside a test was not wrapped in act(...). When testing, code that causes React state updates should be wrapped into act(...): act(() => { /* fire events that update state */ }); /* assert on the output */ This ensures that you're testing the behavior the user would see in the browser. Learn more at https://react.dev/link/wrap-tests-with-act stderr | ../../node_modules/react-reconciler/cjs/react-reconciler.development.js:13614:19 An update to Spinner inside a test was not wrapped in act(...). When testing, code that causes React state updates should be wrapped into act(...): act(() => { /* fire events that update state */ }); /* assert on the output */ This ensures that you're testing the behavior the user would see in the browser. Learn more at https://react.dev/link/wrap-tests-with-act βœ“ src/ui/hooks/useTabbedNavigation.test.ts (23 tests) 118ms βœ“ src/ui/components/BackgroundShellDisplay.test.tsx (10 tests) 414ms βœ“ src/ui/utils/terminalCapabilityManager.test.ts (14 tests) 21ms βœ“ src/ui/components/HistoryItemDisplay.test.tsx (22 tests) 1322ms stderr | src/ui/components/messages/ToolMessage.test.tsx An update to GeminiSpinner inside a test was not wrapped in act(...). When testing, code that causes React state updates should be wrapped into act(...): act(() => { /* fire events that update state */ }); /* assert on the output */ This ensures that you're testing the behavior the user would see in the browser. Learn more at https://react.dev/link/wrap-tests-with-act stderr | src/ui/components/messages/ToolMessage.test.tsx An update to GeminiSpinner inside a test was not wrapped in act(...). When testing, code that causes React state updates should be wrapped into act(...): act(() => { /* fire events that update state */ }); /* assert on the output */ This ensures that you're testing the behavior the user would see in the browser. Learn more at https://react.dev/link/wrap-tests-with-act stderr | src/ui/components/messages/ToolMessage.test.tsx An update to GeminiSpinner inside a test was not wrapped in act(...). When testing, code that causes React state updates should be wrapped into act(...): act(() => { /* fire events that update state */ }); /* assert on the output */ This ensures that you're testing the behavior the user would see in the browser. Learn more at https://react.dev/link/wrap-tests-with-act stderr | src/ui/components/messages/ToolMessage.test.tsx An update to GeminiSpinner inside a test was not wrapped in act(...). When testing, code that causes React state updates should be wrapped into act(...): act(() => { /* fire events that update state */ }); /* assert on the output */ This ensures that you're testing the behavior the user would see in the browser. Learn more at https://react.dev/link/wrap-tests-with-act stderr | src/ui/components/messages/ToolMessage.test.tsx An update to Spinner inside a test was not wrapped in act(...). When testing, code that causes React state updates should be wrapped into act(...): act(() => { /* fire events that update state */ }); /* assert on the output */ This ensures that you're testing the behavior the user would see in the browser. Learn more at https://react.dev/link/wrap-tests-with-act stderr | src/ui/components/messages/ToolMessage.test.tsx An update to Spinner inside a test was not wrapped in act(...). When testing, code that causes React state updates should be wrapped into act(...): act(() => { /* fire events that update state */ }); /* assert on the output */ This ensures that you're testing the behavior the user would see in the browser. Learn more at https://react.dev/link/wrap-tests-with-act βœ“ src/ui/components/messages/ToolMessage.test.tsx (19 tests) 827ms stderr | src/ui/components/messages/ToolMessage.test.tsx An update to GeminiSpinner inside a test was not wrapped in act(...). When testing, code that causes React state updates should be wrapped into act(...): act(() => { /* fire events that update state */ }); /* assert on the output */ This ensures that you're testing the behavior the user would see in the browser. Learn more at https://react.dev/link/wrap-tests-with-act stderr | src/ui/components/messages/ToolMessage.test.tsx An update to GeminiSpinner inside a test was not wrapped in act(...). When testing, code that causes React state updates should be wrapped into act(...): act(() => { /* fire events that update state */ }); /* assert on the output */ This ensures that you're testing the behavior the user would see in the browser. Learn more at https://react.dev/link/wrap-tests-with-act βœ“ src/ui/commands/restoreCommand.test.ts (13 tests) 220ms stderr | ../../node_modules/react-reconciler/cjs/react-reconciler.development.js:13614:19 An update to GeminiSpinner inside a test was not wrapped in act(...). When testing, code that causes React state updates should be wrapped into act(...): act(() => { /* fire events that update state */ }); /* assert on the output */ This ensures that you're testing the behavior the user would see in the browser. Learn more at https://react.dev/link/wrap-tests-with-act stderr | ../../node_modules/react-reconciler/cjs/react-reconciler.development.js:13614:19 An update to GeminiSpinner inside a test was not wrapped in act(...). When testing, code that causes React state updates should be wrapped into act(...): act(() => { /* fire events that update state */ }); /* assert on the output */ This ensures that you're testing the behavior the user would see in the browser. Learn more at https://react.dev/link/wrap-tests-with-act stderr | ../../node_modules/react-reconciler/cjs/react-reconciler.development.js:13614:19 An update to Spinner inside a test was not wrapped in act(...). When testing, code that causes React state updates should be wrapped into act(...): act(() => { /* fire events that update state */ }); /* assert on the output */ This ensures that you're testing the behavior the user would see in the browser. Learn more at https://react.dev/link/wrap-tests-with-act stderr | ../../node_modules/react-reconciler/cjs/react-reconciler.development.js:13614:19 An update to Spinner inside a test was not wrapped in act(...). When testing, code that causes React state updates should be wrapped into act(...): act(() => { /* fire events that update state */ }); /* assert on the output */ This ensures that you're testing the behavior the user would see in the browser. Learn more at https://react.dev/link/wrap-tests-with-act stderr | ../../node_modules/react-reconciler/cjs/react-reconciler.development.js:13614:19 An update to GeminiSpinner inside a test was not wrapped in act(...). When testing, code that causes React state updates should be wrapped into act(...): act(() => { /* fire events that update state */ }); /* assert on the output */ This ensures that you're testing the behavior the user would see in the browser. Learn more at https://react.dev/link/wrap-tests-with-act stderr | ../../node_modules/react-reconciler/cjs/react-reconciler.development.js:13614:19 An update to GeminiSpinner inside a test was not wrapped in act(...). When testing, code that causes React state updates should be wrapped into act(...): act(() => { /* fire events that update state */ }); /* assert on the output */ This ensures that you're testing the behavior the user would see in the browser. Learn more at https://react.dev/link/wrap-tests-with-act stderr | ../../node_modules/react-reconciler/cjs/react-reconciler.development.js:13614:19 An update to GeminiSpinner inside a test was not wrapped in act(...). When testing, code that causes React state updates should be wrapped into act(...): act(() => { /* fire events that update state */ }); /* assert on the output */ This ensures that you're testing the behavior the user would see in the browser. Learn more at https://react.dev/link/wrap-tests-with-act stderr | ../../node_modules/react-reconciler/cjs/react-reconciler.development.js:13614:19 An update to GeminiSpinner inside a test was not wrapped in act(...). When testing, code that causes React state updates should be wrapped into act(...): act(() => { /* fire events that update state */ }); /* assert on the output */ This ensures that you're testing the behavior the user would see in the browser. Learn more at https://react.dev/link/wrap-tests-with-act stderr | ../../node_modules/react-reconciler/cjs/react-reconciler.development.js:13614:19 An update to GeminiSpinner inside a test was not wrapped in act(...). When testing, code that causes React state updates should be wrapped into act(...): act(() => { /* fire events that update state */ }); /* assert on the output */ This ensures that you're testing the behavior the user would see in the browser. Learn more at https://react.dev/link/wrap-tests-with-act stderr | ../../node_modules/react-reconciler/cjs/react-reconciler.development.js:13614:19 An update to GeminiSpinner inside a test was not wrapped in act(...). When testing, code that causes React state updates should be wrapped into act(...): act(() => { /* fire events that update state */ }); /* assert on the output */ This ensures that you're testing the behavior the user would see in the browser. Learn more at https://react.dev/link/wrap-tests-with-act βœ“ src/commands/extensions/update.test.ts (10 tests) 95ms stderr | ../../node_modules/react-reconciler/cjs/react-reconciler.development.js:13614:19 An update to GeminiSpinner inside a test was not wrapped in act(...). When testing, code that causes React state updates should be wrapped into act(...): act(() => { /* fire events that update state */ }); /* assert on the output */ This ensures that you're testing the behavior the user would see in the browser. Learn more at https://react.dev/link/wrap-tests-with-act stderr | ../../node_modules/react-reconciler/cjs/react-reconciler.development.js:13614:19 An update to GeminiSpinner inside a test was not wrapped in act(...). When testing, code that causes React state updates should be wrapped into act(...): act(() => { /* fire events that update state */ }); /* assert on the output */ This ensures that you're testing the behavior the user would see in the browser. Learn more at https://react.dev/link/wrap-tests-with-act stderr | ../../node_modules/react-reconciler/cjs/react-reconciler.development.js:13614:19 An update to GeminiSpinner inside a test was not wrapped in act(...). When testing, code that causes React state updates should be wrapped into act(...): act(() => { /* fire events that update state */ }); /* assert on the output */ This ensures that you're testing the behavior the user would see in the browser. Learn more at https://react.dev/link/wrap-tests-with-act stderr | ../../node_modules/react-reconciler/cjs/react-reconciler.development.js:13614:19 An update to Spinner inside a test was not wrapped in act(...). When testing, code that causes React state updates should be wrapped into act(...): act(() => { /* fire events that update state */ }); /* assert on the output */ This ensures that you're testing the behavior the user would see in the browser. Learn more at https://react.dev/link/wrap-tests-with-act stderr | ../../node_modules/react-reconciler/cjs/react-reconciler.development.js:13614:19 An update to Spinner inside a test was not wrapped in act(...). When testing, code that causes React state updates should be wrapped into act(...): act(() => { /* fire events that update state */ }); /* assert on the output */ This ensures that you're testing the behavior the user would see in the browser. Learn more at https://react.dev/link/wrap-tests-with-act stderr | ../../node_modules/react-reconciler/cjs/react-reconciler.development.js:13614:19 An update to GeminiSpinner inside a test was not wrapped in act(...). When testing, code that causes React state updates should be wrapped into act(...): act(() => { /* fire events that update state */ }); /* assert on the output */ This ensures that you're testing the behavior the user would see in the browser. Learn more at https://react.dev/link/wrap-tests-with-act βœ“ src/ui/hooks/useExtensionUpdates.test.tsx (4 tests) 330ms βœ“ src/config/extension-manager-hydration.test.ts (4 tests) 815ms βœ“ ExtensionManager hydration > should hydrate skill body with extension settings 439ms βœ“ src/ui/components/ModelDialog.test.tsx (12 tests) 1069ms stdout | src/ui/hooks/atCommandProcessor_agents.test.ts > handleAtCommand with Agents > should detect agent reference and add nudge message Ignore file not found: /tmp/agent-test-ui68j6/.geminiignore, continue without it. stdout | src/ui/hooks/atCommandProcessor_agents.test.ts > handleAtCommand with Agents > should handle multiple agents Ignore file not found: /tmp/agent-test-XW4Ei4/.geminiignore, continue without it. stdout | src/ui/hooks/atCommandProcessor_agents.test.ts > handleAtCommand with Agents > should not treat non-agents as agents Ignore file not found: /tmp/agent-test-CMLzY6/.geminiignore, continue without it. stdout | src/ui/hooks/atCommandProcessor_agents.test.ts > handleAtCommand with Agents > should not treat non-agents as agents Ignore file not found: /tmp/agent-test-CMLzY6/.geminiignore, continue without it. βœ“ src/ui/components/shared/TextInput.test.tsx (11 tests) 217ms βœ“ src/ui/hooks/atCommandProcessor_agents.test.ts (3 tests) 125ms βœ“ src/ui/hooks/toolMapping.test.ts (18 tests) 31ms βœ“ src/ui/components/ProQuotaDialog.test.tsx (8 tests) 199ms βœ“ src/commands/extensions/enable.test.ts (9 tests) 84ms βœ“ src/ui/components/DebugProfiler.test.tsx (15 tests) 240ms stdout | src/commands/extensions/configure.test.ts > extensions configure command > Specific setting configuration > should configure a specific setting Setting "TEST_VAR" updated. stdout | src/commands/extensions/configure.test.ts > extensions configure command > Extension configuration (all settings) > should configure all settings for an extension Configuring settings for "test-ext"... stdout | src/commands/extensions/configure.test.ts > extensions configure command > Extension configuration (all settings) > should verify overwrite if setting is already set Configuring settings for "test-ext"... stdout | src/commands/extensions/configure.test.ts > extensions configure command > Extension configuration (all settings) > should note if setting is configured in workspace Configuring settings for "test-ext"... stdout | src/commands/extensions/configure.test.ts > extensions configure command > Extension configuration (all settings) > should note if setting is configured in workspace Note: Setting "Setting 1" is already configured in the workspace scope. stdout | src/commands/extensions/configure.test.ts > extensions configure command > Extension configuration (all settings) > should skip update if user denies overwrite Configuring settings for "test-ext"... stdout | src/commands/extensions/configure.test.ts > extensions configure command > Extension configuration (all settings) > should skip update if user denies overwrite Note: Setting "Setting 1" is already configured in the workspace scope. stdout | src/commands/extensions/configure.test.ts > extensions configure command > Configure all extensions > should configure settings for all installed extensions Configuring settings for "ext1"... stdout | src/commands/extensions/configure.test.ts > extensions configure command > Configure all extensions > should configure settings for all installed extensions Configuring settings for "ext2"... stdout | src/commands/extensions/configure.test.ts > extensions configure command > Configure all extensions > should log if no extensions installed No extensions installed. stdout | src/ui/auth/useAuth.test.tsx > useAuth > useAuthCommand > should initialize with Unauthenticated state Authenticated via "oauth-personal". stderr | src/ui/auth/useAuth.test.tsx > useAuth > useAuthCommand > should initialize with Unauthenticated state An update to TestComponent inside a test was not wrapped in act(...). When testing, code that causes React state updates should be wrapped into act(...): act(() => { /* fire events that update state */ }); /* assert on the output */ This ensures that you're testing the behavior the user would see in the browser. Learn more at https://react.dev/link/wrap-tests-with-act βœ“ src/config/sandboxConfig.test.ts (27 tests) 51ms stdout | src/ui/auth/useAuth.test.tsx > useAuth > useAuthCommand > should authenticate if USE_GEMINI and key is found Authenticated via "gemini-api-key". stdout | src/ui/auth/useAuth.test.tsx > useAuth > useAuthCommand > should authenticate if USE_GEMINI and env key is found Authenticated via "gemini-api-key". Authenticated via "gemini-api-key". stdout | src/ui/auth/useAuth.test.tsx > useAuth > useAuthCommand > should prioritize env key over stored key when both are present Authenticated via "gemini-api-key". Authenticated via "gemini-api-key". stdout | src/ui/auth/useAuth.test.tsx > useAuth > useAuthCommand > should authenticate successfully for valid auth type Authenticated via "oauth-personal". βœ“ src/commands/extensions/configure.test.ts (9 tests) 247ms βœ“ src/ui/hooks/useSessionBrowser.test.ts (8 tests) 64ms βœ“ src/ui/hooks/useShellHistory.test.ts (7 tests) 685ms βœ“ src/ui/auth/useAuth.test.tsx (15 tests) 406ms βœ“ src/ui/hooks/useInputHistoryStore.test.ts (14 tests) 284ms stderr | src/ui/themes/theme-manager.test.ts > ThemeManager > when loading a theme from a file > should not load a theme if the file does not exist Theme file at "./my-theme.json" is outside your home directory. Only load themes from trusted sources. stderr | src/ui/themes/theme-manager.test.ts > ThemeManager > when loading a theme from a file > should not load a theme from a file with invalid JSON Theme file at "./my-theme.json" is outside your home directory. Only load themes from trusted sources. stdout | src/ui/themes/theme-manager.test.ts > ThemeManager > extension themes > should register and unregister themes from extensions with namespacing Registering extension themes for "test-extension": [ { type: 'custom', name: 'ExtensionTheme', Background: '#000000', Foreground: '#ffffff', LightBlue: '#89BDCD', AccentBlue: '#3B82F6', AccentPurple: '#8B5CF6', AccentCyan: '#06B6D4', AccentGreen: '#3CA84B', AccentYellow: 'yellow', AccentRed: 'red', DiffAdded: 'green', DiffRemoved: 'red', Comment: 'gray', Gray: 'gray' } ] Registered theme: ExtensionTheme (test-extension) Unregistered theme: ExtensionTheme (test-extension) stdout | src/ui/themes/theme-manager.test.ts > ThemeManager > extension themes > should not allow extension themes to overwrite built-in themes even with prefixing Registering extension themes for "Ext": [ { type: 'custom', name: 'Theme', Background: '#000000', Foreground: '#ffffff', LightBlue: '#89BDCD', AccentBlue: '#3B82F6', AccentPurple: '#8B5CF6', AccentCyan: '#06B6D4', AccentGreen: '#3CA84B', AccentYellow: 'yellow', AccentRed: 'red', DiffAdded: 'green', DiffRemoved: 'red', Comment: 'gray', Gray: 'gray' } ] Registered theme: Theme (Ext) stdout | src/ui/themes/theme-manager.test.ts > ThemeManager > extension themes > should allow extension themes and settings themes to coexist Registering extension themes for "Ext": [ { type: 'custom', name: 'ExtensionTheme', Background: '#000000', Foreground: '#ffffff', LightBlue: '#89BDCD', AccentBlue: '#3B82F6', AccentPurple: '#8B5CF6', AccentCyan: '#06B6D4', AccentGreen: '#3CA84B', AccentYellow: 'yellow', AccentRed: 'red', DiffAdded: 'green', DiffRemoved: 'red', Comment: 'gray', Gray: 'gray' } ] Registered theme: ExtensionTheme (Ext) βœ“ src/ui/themes/theme-manager.test.ts (15 tests) 113ms βœ“ src/ui/components/AgentConfigDialog.test.tsx (11 tests) 1131ms βœ“ src/ui/commands/ideCommand.test.ts (8 tests) 184ms βœ“ src/ui/hooks/useHistoryManager.test.ts (11 tests) 117ms stdout | src/ui/commands/copyCommand.test.ts > copyCommand > should handle clipboard copy error Clipboard access denied stdout | src/ui/commands/copyCommand.test.ts > copyCommand > should handle non-Error clipboard errors String error βœ“ src/commands/mcp/list.test.ts (5 tests) 48ms βœ“ src/ui/components/messages/CompressionMessage.test.tsx (10 tests) 513ms βœ“ src/ui/commands/copyCommand.test.ts (11 tests) 109ms βœ“ src/utils/sessionCleanup.integration.test.ts (5 tests) 91ms βœ“ src/ui/hooks/useReverseSearchCompletion.test.tsx (10 tests) 278ms βœ“ src/ui/components/MultiFolderTrustDialog.test.tsx (8 tests) 460ms βœ“ src/utils/deepMerge.test.ts (17 tests) 10ms βœ“ src/ui/commands/mcpCommand.test.ts (5 tests) 93ms βœ“ src/utils/envVarResolver.test.ts (16 tests) 30ms βœ“ src/services/prompt-processors/injectionParser.test.ts (21 tests) 20ms βœ“ src/ui/components/shared/MaxSizedBox.test.tsx (13 tests) 350ms βœ“ src/ui/hooks/useIdeTrustListener.test.tsx (5 tests) 156ms (node:5166) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 resize listeners added to [Socket]. MaxListeners is 10. Use emitter.setMaxListeners() to increase limit (Use `node --trace-warnings ...` to show where the warning was created) βœ“ src/ui/utils/highlight.test.ts (22 tests) 29ms βœ“ src/deferred.test.ts (9 tests) 116ms βœ“ src/ui/App.test.tsx (12 tests) 1405ms βœ“ App > should render main content and composer when not quitting 303ms stdout | src/ui/hooks/useIncludeDirsTrust.test.tsx > useIncludeDirsTrust > when folder trust is enabled and workspace is trusted > should add trusted dirs, collect untrusted errors, and open dialog for undefined Creating custom dialog with undecidedDirs: [ '/undefined' ] βœ“ src/services/prompt-processors/atFileProcessor.test.ts (11 tests) 133ms βœ“ src/ui/hooks/useIncludeDirsTrust.test.tsx (6 tests) 184ms βœ“ src/ui/components/messages/ToolResultDisplay.test.tsx (13 tests) 779ms stdout | src/utils/gitUtils.test.ts > isGitHubRepository > returns false if the git command fails Failed to get git remote: Error: oops at /startdir/src/gemini-cli/packages/cli/src/utils/gitUtils.test.ts:29:13 at mockCall (file:///startdir/src/gemini-cli/node_modules/@vitest/spy/dist/index.js:96:15) at execSync (file:///startdir/src/gemini-cli/node_modules/tinyspy/dist/index.js:47:80) at Module.isGitHubRepository (/startdir/src/gemini-cli/packages/cli/src/utils/gitUtils.ts:18:7) at /startdir/src/gemini-cli/packages/cli/src/utils/gitUtils.test.ts:31:12 at file:///startdir/src/gemini-cli/node_modules/@vitest/runner/dist/chunk-hooks.js:155:11 at file:///startdir/src/gemini-cli/node_modules/@vitest/runner/dist/chunk-hooks.js:752:26 at file:///startdir/src/gemini-cli/node_modules/@vitest/runner/dist/chunk-hooks.js:1897:20 at new Promise () at runWithTimeout (file:///startdir/src/gemini-cli/node_modules/@vitest/runner/dist/chunk-hooks.js:1863:10) stdout | src/utils/gitUtils.test.ts > getLatestRelease > throws an error if the fetch fails Failed to determine latest run-gemini-cli release: nope stdout | src/utils/gitUtils.test.ts > getLatestRelease > throws an error if the fetch does not return a json body Failed to determine latest run-gemini-cli release: Error: Response did not include tag_name field at Module.getLatestGitHubRelease (/startdir/src/gemini-cli/packages/cli/src/utils/gitUtils.ts:83:13) at processTicksAndRejections (node:internal/process/task_queues:104:5) at /startdir/src/gemini-cli/packages/cli/src/utils/gitUtils.test.ts:234:5 at file:///startdir/src/gemini-cli/node_modules/@vitest/runner/dist/chunk-hooks.js:752:20 βœ“ src/ui/contexts/MouseContext.test.tsx (18 tests) 217ms βœ“ src/utils/gitUtils.test.ts (24 tests) 30ms βœ“ src/ui/utils/computeStats.test.ts (12 tests) 28ms βœ“ src/ui/state/extensions.test.ts (15 tests) 29ms βœ“ src/commands/extensions/disable.test.ts (12 tests) 65ms stdout | src/commands/mcp/remove.test.ts > mcp remove command > unit tests with mocks > should remove a server from project settings Server "test-server" removed from project settings. βœ“ src/commands/mcp/remove.test.ts (6 tests) 95ms βœ“ src/ui/hooks/useKeypress.test.tsx (22 tests) 215ms βœ“ src/config/extensions/extensionUpdates.test.ts (1 test) 102ms βœ“ src/utils/windowTitle.test.ts (14 tests) 8ms βœ“ src/ui/hooks/useEditorSettings.test.tsx (10 tests) 167ms stdout | src/config/extension-manager-themes.spec.ts > ExtensionManager theme loading > should register themes from an extension when started Registering extension themes for "my-theme-extension": [ { name: 'My-Awesome-Theme', type: 'custom', text: { primary: '#FF00FF' } } ] Registered theme: My-Awesome-Theme (my-theme-extension) stdout | src/config/extension-manager-themes.spec.ts > ExtensionManager theme loading > should revert to default theme when extension is stopped Registering extension themes for "my-theme-extension": [ { name: 'My-Awesome-Theme', type: 'custom', text: { primary: '#FF00FF' } } ] Registered theme: My-Awesome-Theme (my-theme-extension) βœ“ src/utils/skillUtils.test.ts (7 tests) 277ms stdout | src/config/extension-manager-themes.spec.ts > ExtensionManager theme loading > should revert to default theme when extension is stopped Unregistered theme: My-Awesome-Theme (my-theme-extension) βœ“ src/ui/commands/bugCommand.test.ts (3 tests) 172ms βœ“ src/ui/hooks/useGitBranchName.test.tsx (7 tests) 113ms stderr | src/config/config.integration.test.ts > Configuration Integration Tests > Approval Mode Integration Tests > 'should parse --approval-mode=auto_edi…' [MSW] Warning: intercepted a request without a matching request handler: β€’ GET data:application/octet-stream;base64,AGFzbQEAAAABugM3YAF/AGACf38AYAF/AX9gA39/fwBgAn98AGACf38Bf2ADf39/AX9gBH9/f30BfWADf398AGAAAGAEf39/fwBgAX8BfGACf38BfGAFf39/f38Bf2AAAX9gA39/fwF9YAZ/f31/fX8AYAV/f39/fwBgAn9/AX1gBX9/f319AX1gAX8BfWADf35/AX5gB39/f39/f38AYAZ/f39/f38AYAR/f39/AX9gBn9/f319fQF9YAR/f31/AGADf399AX1gBn98f39/fwF/YAR/fHx/AGACf30AYAh/f39/f39/fwBgDX9/f39/f39/f39/f38AYAp/f39/f39/f39/AGAFf39/f38BfGAEfHx/fwF9YA1/fX1/f399fX9/f39/AX9gB39/f319f38AYAJ+fwF/YAN/fX0BfWABfAF8YAN/fHwAYAR/f319AGAHf39/fX19fQF9YA1/fX99f31/fX19fX1/AX9gC39/f39/f399fX19AX9gCH9/f39/f319AGAEf39+fgBgB39/f39/f38Bf2ACfH8BfGAFf398fH8AYAN/f38BfGAEf39/fABgA39/fQBgBn9/fX99fwF/ArUBHgFhAWEAHwFhAWIAAwFhAWMACQFhAWQAFgFhAWUAEQFhAWYAIAFhAWcAAAFhAWgAIQFhAWkAAwFhAWoAAAFhAWsAFwFhAWwACgFhAW0ABQFhAW4AAwFhAW8AAQFhAXAAFwFhAXEABgFhAXIAAAFhAXMAIgFhAXQACgFhAXUADQFhAXYAFgFhAXcAAgFhAXgAAwFhAXkAGAFhAXoAAgFhAUEAAQFhAUIAEQFhAUMAAQFhAUQAAAOiAqACAgMSBwcACRkDAAoRBgYKEwAPDxMBBiMTCgcHGgMUASQFJRQHAwMKCgMmAQYYDxobFAAKBw8KBwMDAgkCAAAFGwACBwIHBgIDAQMIDAABKAkHBQURACkZASoAAAIrLAIALQcHBy4HLwkFCgMCMA0xAgMJAgACAQYKAQIBBQEACQIFAQEABQAODQ0GFQIBHBUGAgkCEAAAAAUyDzMMBQYINAUCAwUODg41AgMCAgIDBgICNgIBDAwMAQsLCwsLCx0CAAIAAAABABABBQICAQMCEgMMCwEBAQEBAQsLAQICAwICAgICAgIDAgIICAEICAgEBAQEBAQEBAQABAQABAQEBAAE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GiABQQA2AvADIAFCADcC6AMgAigC7AMiAyACKALoAyIERwRAIAMgBGsiBEEASA0FIAEgBBAeIgM2AuwDIAEgAzYC6AMgASADIARqNgLwAyACKALoAyIEIAIoAuwDIghHBEADQCADIAQoAgA2AgAgA0EEaiEDIARBBGoiBCAIRw0ACwsgASADNgLsAwsgASACKQL0AzcC9AMgASACKAKEBDYChAQgASACKQL8AzcC/AMgAUEANgLkAwsgBSABNgIAIAEgADYC5AMLIAZBAWohBiAFQQRqIgUgB0cNAAsLDwsQAgALUAACQAJAAkACQAJAIAIOBAQAAQIDCyAAIAEgAUEwahBDDwsgACABIAFBMGogAxBEDwsgACABIAFBMGoQQg8LECQACyAAIAEgAUEwaiADEEULcAIBfwF9IwBBEGsiBCQAIARBCGogACABQQJ0QdwlaigCACACEDZDAADAfyEFAkACQAJAIAQtAAxBAWsOAgABAgsgBCoCCCEFDAELIAQqAgggA5RDCtcjPJQhBQsgBEEQaiQAIAVDAAAAACAFIAVbGwt5AgF/AX0jAEEQayIDJAAgA0EIaiAAIAFBAnRB7CVqKAIAIAIQU0MAAMB/IQQCQAJAAkAgAy0ADEEBaw4CAAECCyADKgIIIQQMAQsgAyoCCEMAAAAAlEMK1yM8lCEECyADQRBqJAAgBEMAAAAAl0MAAAAAIAQgBFsbC1QAAkACQAJAAkACQCACDgQEAAECAwsgACABIAFBwgBqEEMPCyAAIAEgAUHCAGogAxBEDwsgACABIAFBwgBqEEIPCxAkAAsgACABIAFBwgBqIAMQRQsvACAAIAJFQQF0IgIgASADEGAgACACIAEQS5IgACACIAEgAxB/IAAgAiABEFKSkgvOAQIDfwJ9IwBBEGsiAyQAQQEhBCADQQhqIABB/ABqIgUgACABQQF0akH2AGoiAS8BABAfAkACQCADKgIIIgcgAioCACIGXARAIAcgB1sEQCACLQAEIQIMAgsgBiAGXCEECyACLQAEIQIgBEUNACADLQAMIAJB/wFxRg0BCyAFIAEgBiACEDkDQCAALQAAIgFBBHENASAAIAFBBHI6AAAgACgCECIBBEAgACABEQAACyAAQYCAgP4HNgKcASAAKALkAyIADQALCyADQRBqJAALzgECA38CfSMAQRBrIgMk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AWsOAgABAgsgBCoCCCEFDAELIAQqAgggA5RDCtcjPJQhBQsgBEEQaiQAIAVDAAAAACAFIAVbGwscACAAIAFBCCACpyACQiCIpyADpyADQiCIpxAVCwUAEFgACzkAIABFBEBBAA8LAn8gAUGAf3FBgL8DRiABQf8ATXJFBEBB/DtBGTYCAEF/DAELIAAgAToAAEEBCwvEAgACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQCABQQlrDhIACgsMCgsCAwQFDAsMDAoLBwgJCyACIAIoAgAiAUEEajYCACAAIAEoAgA2AgAPCwALIAIgAigCACIBQQRqNgIAIAAgATIBADcDAA8LIAIgAigCACIBQQRqNgIAIAAgATMBADcDAA8LIAIgAigCACIBQQRqNgIAIAAgATAAADcDAA8LIAIgAigCACIBQQRqNgIAIAAgATEAADcDAA8LAAsgAiACKAIAQQdqQXhxIgFBCGo2AgAgACABKwMAOQMADwsgACACIAMRAQALDwsgAiACKAIAIgFBBGo2AgAgACABNAIANwMADwsgAiACKAIAIgFBBGo2AgAgACABNQIANwMADwsgAiACKAIAQQdqQXhxIgFBCGo2AgAgACABKQMANwMAC84BAgN/An0jAEEQayIDJABBASEEIANBCGogAEH8AGoiBSAAIAFBAXRqQegAaiIBLwEAEB8CQAJAIAMqAggiByACKgIAIgZcBEAgByAHWwRAIAItAAQhAgwCCyAGIAZcIQQLIAItAAQhAiAERQ0AIAMtAAwgAkH/AXFGDQELIAUgASAGIAIQOQNAIAAtAAAiAUEEcQ0BIAAgAUEEcjoAACAAKAIQIgEEQCAAIAERAAALIABBgICA/gc2ApwBIAAoAuQDIgANAAsLIANBEGokAAtdAQR/IAAoAgAhAgNAIAIsAAAiAxBXBEBBfyEEIAAgAkEBaiICNgIAIAFBzJmz5gBNBH9BfyADQTBrIgMgAUEKbCIEaiADIARB/////wdzShsFIAQLIQEMAQsLIAELrhQCEn8BfiMAQdAAayIIJAAgCCABNgJMIAhBN2ohFyAIQThqIRQCQAJAAkACQANAIAEhDSAHIA5B/////wdzSg0BIAcgDmohDgJAAkACQCANIgctAAAiCQRAA0ACQAJAIAlB/wFxIgFFBEAgByEBDAELIAFBJUcNASAH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IQEgAEIANwIEIAAgATYCACABIAA2AgQgAkEQaiQAIAALGwEBfyAABEAgACgCACIBBEAgARAjCyAAECMLC0kBAn9BBBAeIQFBIBAeIgBBADYCHCAAQoCAgICAgIDAPzcCFCAAQgA3AgwgAEEAOgAIIABBAzYCBCAAQQA2AgAgASAANgIAIAELIAAgAkEFR0EAIAIbRQRAQbgwIAMgBBBJDwsgAyAEEHALIgEBfiABIAKtIAOtQiCGhCAEIAARFQAiBUIgiKckASAFpwuoAQEFfyAAKAJUIgMoAgAhBSADKAIEIgQgACgCFCAAKAIcIgdrIgYgBCAGSRsiBgRAIAUgByAGECsaIAMgAygCACAGaiIFNgIAIAMgAygCBCAGayIENgIECyAEIAIgAiAESxsiBARAIAUgASAEECsaIAMgAygCACAEaiIFNgIAIAMgAygCBCAEazYCBAsgBUEAOgAAIAAgACgCLCIBNgIcIAAgATYCFCACCwQAQgALBABBAAuKBQIGfgJ/IAEgASgCAEEHakF4cSIBQRBqNgIAIAAhCSABKQMAIQMgASkDCCEGIwBBIGsiCCQAAkAgBkL///////////8AgyIEQoCAgICAgMCAPH0gBEKAgICAgIDA/8MAfVQEQCAGQgSGIANCPIiEIQQgA0L//////////w+DIgNCgYCAgICAgIAIWgRAIARCgYCAgICAgIDAAHwhAgwCCyAEQoCAgICAgICAQH0hAiADQoCAgICAgICACFINASACIARCAYN8IQIMAQsgA1AgBEKAgICAgIDA//8AVCAEQoCAgICAgMD//wBRG0UEQCAGQgSGIANCPIiEQv////////8Dg0KAgICAgICA/P8AhCECDAELQoCAgICAgID4/wAhAiAEQv///////7//wwBWDQBCACECIARCMIinIgBBkfcASQ0AIAMhAiAGQv///////z+DQoCAgICAgMAAhCIFIQcCQCAAQYH3AGsiAUHAAHEEQCACIAFBQGqthiEHQgAhAgwBCyABRQ0AIAcgAa0iBIYgAkHAACABa62IhCEHIAIgBIYhAgsgCCACNwMQIAggBzcDGAJAQYH4ACAAayIAQcAAcQRAIAUgAEFAaq2IIQNCACEFDAELIABFDQAgBUHAACAAa62GIAMgAK0iAoiEIQMgBSACiCEFCyAIIAM3AwAgCCAF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ASAAKAIAIQAgASACQQFxBH8gASgCACAAaigCAAUgAAsRCwALYQECfyMAQRBrIgIkACABIAAoAgQiA0EBdWohASAAKAIAIQAgAiABIANBAXEEfyABKAIAIABqKAIABSAACxEBAEEQEB4iACACKQMINwMIIAAgAikDADcDACACQRBqJAAgAAtjAQJ/IwBBEGsiAyQAIAEgACgCBCIEQQF1aiEBIAAoAgAhACADIAEgAiAEQQFxBH8gASgCACAAaigCAAUgAAsRAwBBEBAeIgAgAykDCDcDCCAAIAMpAwA3AwAgA0EQaiQAIAALNwEBfyABIAAoAgQiA0EBdWohASAAKAIAIQAgASACIANBAXEEfyABKAIAIABqKAIABSAACxEEAAs5AQF/IAEgACgCBCIEQQF1aiEBIAAoAgAhACABIAIgAyAEQQFxBH8gASgCACAAaigCAAUgAAsRCAALCQAgASAAEQIACwUAQcM7Cw8AIAEgACgCAGogAjYCAAsNACABIAAoAgBqKAIACxgBAX9BEBAeIgBCADcDCCAAQQA2AgAgAAsYAQF/QRAQHiIAQgA3AwAgAEIANwMIIAALDABBMBAeQQBBMBAqCzcBAX8gASAAKAIEIgNBAXVqIQEgACgCACEAIAEgAiADQQFxBH8gASgCACAAaigCAAUgAAsRHgALBQBBvjsLIQAgACABKAIAIAEgASwAC0EASBtBuzsgAigCABAQNgIACyoBAX9BDBAeIgFBADoABCABIAAoAgA2AgggAEEANgIAIAFB2Cc2AgAgAQsFAEG7OwsFAEG4OwshACAAIAEoAgAgASABLAALQQBIG0GkOyACKAIAEBA2AgAL2AEBBH8jAEEgayIDJAAgASgCACIEQfD///8HSQRAAkACQCAEQQtPBEAgBEEPckEBaiIFEB4hBiADIAVBgICAgHhyNgIQIAMgBjYCCCADIAQ2AgwgBCAGaiEFDAELIAMgBDoAEyADQQhqIgYgBGohBSAERQ0BCyAGIAFBBGogBBArGgsgBUEAOgAAIAMgAjYCACADQRhqIANBCGogAyAAEQMAIAMoAhgQHSADKAIYIgAQBiADKAIAEAYgAywAE0EASARAIAMoAggQIwsgA0EgaiQAIAAPCxACAAsqAQF/QQwQHiIBQQA6AAQgASAAKAIANgIIIABBADYCACABQeAmNgIA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AkEIaiAIIAYQHyACIAcgAC8AABAfQQEhAyACKgIIIgogAioCACILXAR/IAogClsNAyALIAtcBSADC0UNAiACLQAMIAItAARHDQILIABBAmohAEEBIQMgBCEGQQEhBCAGRQ0ACyABLwB6IgBBB3FFBEAgBS0AekEHcUUNAgsgCCAAECAiCiAHIAUvAHoQICILWw0BIAogClsNACALIAtcDQELIAFBFGogBUEUakHoABArGiABQfwAaiAFQfwAahCgAQNAIAEtAAAiAEEEcQ0BIAEgAEEEcjoAACABKAIQIgAEQCABIAARAAALIAFBgICA/gc2ApwBIAEoAuQDIgENAAsLIAJBEGokAAvGAwEEfyMAQaAEayICJAAgACgCBCEBIABBADYCBCABBEAgASABKAIAKAIEEQAACyAAKAIIIQEgAEEANgIIIAEEQCABIAEoAgAoAgQRAAALAkAgACgCACIAKALoAyAAKALsA0YEQCAAKALkAw0BIAAgAkEYaiAAKAL0AxBcIgEpAgA3AgAgACABKAIQNgIQIAAgASkCCDcCCCAAQRRqIAFBFGpB6AAQKxogACABKQKMATcCjAEgACABKQKEATcChAEgACABKQJ8NwJ8IAEoApQBIQQgAUEANgKUASAAKAKUASEDIAAgBDYClAEgAwRAIAMQWwsgAEGYAWogAUGYAWpB0AIQKxogACgC6AMiAwRAIAAgAzYC7AMgAxAjCyAAIAEoAugDNgLoAyAAIAEoAuwDNgLsAyAAIAEoAvADNgLwAyABQQA2AvADIAFCADcC6AMgACABKQL8AzcC/AMgACABKQL0AzcC9AMgACABKAKEBDYChAQgASgClAEhACABQQA2ApQBIAAEQCAAEFsLIAJBoARqJAAPCyACQfAcNgIQIABBBUHYJSACQRBqECwQJAALIAJB5hE2AgAgAEEFQdglIAIQLBAkAAsLAEEMEB4gABCiAQsLAEEMEB5BABCiAQsNACAAKAIALQAIQQFxCwoAIAAoAgAoAhQLGQAgAUH/AXEEQBACAAsgACgCACgCEEEBcQsYACAAKAIAIgAgAC0ACEH+AXEgAXI6AAgLJgAgASAAKAIAIgAoAhRHBEAgACABNgIUIAAgACgCDEEBajYCDAsLkgEBAn8jAEEQayICJAAgACgCACEAIAFDAAAAAGAEQCABIAAqAhhcBEAgACABOAIYIAAgACgCDEEBajYCDAsgAkEQaiQADwsgAkGIFDYCACMAQRBrIgMkACADIAI2AgwCQCAARQRAQbgwQdglIAIQSRoMAQsgAEEAQQVB2CUgAiAAKAIEEQ0AGgsgA0EQaiQAECQACz8AIAFB/wFxRQRAIAIgACgCACIAKAIQIgFBAXFHBEAgACABQX5xIAJyNgIQIAAgACgCDEEBajYCDAsPCxACAAsL4CYjAEGACAuBHk9ubHkgbGVhZiBub2RlcyB3aXRoIGN1c3RvbSBtZWFzdXJlIGZ1bmN0aW9ucyBzaG91bGQgbWFudWFsbHkgbWFyayB0aGVtc2VsdmVzIGFzIGRpcnR5AGlzRGlydHkAbWFya0RpcnR5AGRlc3Ryb3kAc2V0RGlzcGxheQBnZXREaXNwbGF5AHNldEZsZXgALSsgICAwWDB4AC0wWCswWCAwWC0weCsweCAweABzZXRGbGV4R3JvdwBnZXRGbGV4R3JvdwBzZXRPdmVyZmxvdwBnZXRPdmVyZmxvdwBoYXNOZXdMYXlvdXQAY2FsY3VsYXRlTGF5b3V0AGdldENvbXB1dGVkTGF5b3V0AHVuc2lnbmVkIHNob3J0AGdldENoaWxkQ291bnQAdW5zaWduZWQgaW50AHNldEp1c3RpZnlDb250ZW50AGdldEp1c3RpZnlDb250ZW50AGF2YWlsYWJsZUhlaWdodCBpcyBpbmRlZmluaXRlIHNvIGhlaWdodFNpemluZ01vZGUgbXVzdCBiZSBTaXppbmdNb2RlOjpNYXhDb250ZW50AGF2YWlsYWJsZVdpZHRoIGlzIGluZGVmaW5pdGUgc28gd2lkdGhTaXppbmdNb2RlIG11c3QgYmUgU2l6aW5nTW9kZTo6TWF4Q29udGVudABzZXRBbGlnbkNvbnRlbnQAZ2V0QWxpZ25Db250ZW50AGdldFBhcmVudABpbXBsZW1lbnQAc2V0TWF4SGVpZ2h0UGVyY2VudABzZXRIZWlnaHRQZXJjZW50AHNldE1pbkhlaWdodFBlcmNlbnQAc2V0RmxleEJhc2lzUGVyY2VudABzZXRHYXBQZXJjZW50AHNldFBvc2l0aW9uUGVyY2VudABzZXRNYXJnaW5QZXJjZW50AHNldE1heFdpZHRoUGVyY2VudABzZXRXaWR0aFBlcmNlbnQAc2V0TWluV2lkdGhQZXJjZW50AHNldFBhZGRpbmdQZXJjZW50AGhhbmRsZS50eXBlKCkgPT0gU3R5bGVWYWx1ZUhhbmRsZTo6VHlwZTo6UG9pbnQgfHwgaGFuZGxlLnR5cGUoKSA9PSBTdHlsZVZhbHVlSGFuZGxlOjpUeXBlOjpQZXJjZW50AGNyZWF0ZURlZmF1bHQAdW5pdAByaWdodABoZWlnaHQAc2V0TWF4SGVpZ2h0AGdldE1heEhlaWdodABzZXRIZWlnaHQAZ2V0SGVpZ2h0AHNldE1pbkhlaWdodABnZXRNaW5IZWlnaHQAZ2V0Q29tcHV0ZWRIZWlnaHQAZ2V0Q29tcHV0ZWRSaWdodABsZWZ0AGdldENvbXB1dGVkTGVmdAByZXNldABfX2Rlc3RydWN0AGZsb2F0AHVpbnQ2NF90AHVzZVdlYkRlZmF1bHRzAHNldFVzZVdlYkRlZmF1bHRzAHNldEFsaWduSXRlbXMAZ2V0QWxpZ25JdGVtcwBzZXRGbGV4QmFzaXMAZ2V0RmxleEJhc2lzAENhbm5vdCBnZXQgbGF5b3V0IHByb3BlcnRpZXMgb2YgbXVsdGktZWRnZSBzaG9ydGhhbmRzAHNldFBvaW50U2NhbGVGYWN0b3IATWVhc3VyZUNhbGxiYWNrV3JhcHBlcgBEaXJ0aWVkQ2FsbGJhY2tXcmFwcGVyAENhbm5vdCByZXNldCBhIG5vZGUgc3RpbGwgYXR0YWNoZWQgdG8gYSBvd25lcgBzZXRCb3JkZXIAZ2V0Qm9yZGVyAGdldENvbXB1dGVkQm9yZGVyAGdldE51bWJlcgBoYW5kbGUudHlwZSgpID09IFN0eWxlVmFsdWVIYW5kbGU6OlR5cGU6Ok51bWJlcgB1bnNpZ25lZCBjaGFyAHRvcABnZXRDb21wdXRlZFRvcABzZXRGbGV4V3JhcABnZXRGbGV4V3JhcABzZXRHYXAAZ2V0R2FwACVwAHNldEhlaWdodEF1dG8Ac2V0RmxleEJhc2lzQXV0bwBzZXRQb3NpdGlvbkF1dG8Ac2V0TWFyZ2luQXV0bwBzZXRXaWR0aEF1dG8AU2NhbGUgZmFjdG9yIHNob3VsZCBub3QgYmUgbGVzcyB0aGFuIHplcm8Ac2V0QXNwZWN0UmF0aW8AZ2V0QXNwZWN0UmF0aW8Ac2V0UG9zaXRpb24AZ2V0UG9zaXRpb24Abm90aWZ5T25EZXN0cnVjdGlvbgBzZXRGbGV4RGlyZWN0aW9uAGdldEZsZXhEaXJlY3Rpb24Ac2V0RGlyZWN0aW9uAGdldERpcmVjdGlvbgBzZXRNYXJnaW4AZ2V0TWFyZ2luAGdldENvbXB1dGVkTWFyZ2luAG1hcmtMYXlvdXRTZWVuAG5hbgBib3R0b20AZ2V0Q29tcHV0ZWRCb3R0b20AYm9vbABlbXNjcmlwdGVuOjp2YWwAc2V0RmxleFNocmluawBnZXRGbGV4U2hyaW5rAHNldEFsd2F5c0Zvcm1zQ29udGFpbmluZ0Jsb2NrAE1lYXN1cmVDYWxsYmFjawBEaXJ0aWVkQ2FsbGJhY2sAZ2V0TGVuZ3RoAHdpZHRoAHNldE1heFdpZHRoAGdldE1heFdpZHRoAHNldFdpZHRoAGdldFdpZHRoAHNldE1pbldpZHRoAGdldE1pbldpZHRoAGdldENvbXB1dGVkV2lkdGgAcHVzaAAvaG9tZS9ydW5uZXIvd29yay95b2dhL3lvZ2EvamF2YXNjcmlwdC8uLi95b2dhL3N0eWxlL1NtYWxsVmFsdWVCdWZmZXIuaAAvaG9tZS9ydW5uZXIvd29yay95b2dhL3lvZ2EvamF2YXNjcmlwdC8uLi95b2dhL3N0eWxlL1N0eWxlVmFsdWVQb29sLmgAdW5zaWduZWQgbG9uZwBzZXRCb3hTaXppbmcAZ2V0Qm94U2l6aW5nAHN0ZDo6d3N0cmluZwBzdGQ6OnN0cmluZwBzdGQ6OnUxNnN0cmluZwBzdGQ6OnUzMnN0cmluZwBzZXRQYWRkaW5nAGdldFBhZGRpbmcAZ2V0Q29tcHV0ZWRQYWRkaW5nAFRyaWVkIHRvIGNvbnN0cnVjdCBZR05vZGUgd2l0aCBudWxsIGNvbmZpZwBBdHRlbXB0aW5nIHRvIGNvbnN0cnVjdCBOb2RlIHdpdGggbnVsbCBjb25maWcAY3JlYXRlV2l0aENvbmZpZwBpbmYAc2V0QWxpZ25TZWxmAGdldEFsaWduU2VsZgBTaXplAHZhbHVlAFZhbHVlAGNyZWF0ZQBtZWFzdXJlAHNldFBvc2l0aW9uVHlwZQBnZXRQb3NpdGlvblR5cGUAaXNSZWZlcmVuY2VCYXNlbGluZQBzZXRJc1JlZmVyZW5jZUJhc2VsaW5lAGNvcHlTdHlsZQBkb3VibGUATm9kZQBleHRlbmQAaW5zZXJ0Q2hpbGQAZ2V0Q2hpbGQAcmVtb3ZlQ2hpbGQAdm9pZABzZXRFeHBlcmltZW50YWxGZWF0dXJlRW5hYmxlZABpc0V4cGVyaW1lbnRhbEZlYXR1cmVFbmFibGVkAGRpcnRpZWQAQ2Fubm90IHJlc2V0IGEgbm9kZSB3aGljaCBzdGlsbCBoYXMgY2hpbGRyZW4gYXR0YWNoZWQAdW5zZXRNZWFzdXJlRnVuYwB1bnNldERpcnRpZWRGdW5jAHNldEVycmF0YQBnZXRFcnJhdGEATWVhc3VyZSBmdW5jdGlvbiByZXR1cm5lZCBhbiBpbnZhbGlkIGRpbWVuc2lvbiB0byBZb2dhOiBbd2lkdGg9JWYsIGhlaWdodD0lZl0ARXhwZWN0IGN1c3RvbSBiYXNlbGluZSBmdW5jdGlvbiB0byBub3QgcmV0dXJuIE5hTgBOQU4ASU5GAGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PHNob3J0PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzx1bnNpZ25lZCBzaG9ydD4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8aW50PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzx1bnNpZ25lZCBpbnQ+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PGZsb2F0PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzx1aW50OF90PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxpbnQ4X3Q+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PHVpbnQxNl90PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxpbnQxNl90PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzx1aW50MzJfdD4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8aW50MzJfdD4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8Y2hhcj4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8dW5zaWduZWQgY2hhcj4Ac3RkOjpiYXNpY19zdHJpbmc8dW5zaWduZWQgY2hhcj4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8c2lnbmVk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 If you still wish to intercept this unhandled request, please create a request handler for it. Read more: https://mswjs.io/docs/http/intercepting-requests βœ“ src/config/extension-manager-themes.spec.ts (2 tests) 439ms βœ“ ExtensionManager theme loading > should revert to default theme when extension is stopped 374ms βœ“ src/ui/hooks/useHookDisplayState.test.ts (6 tests) 182ms βœ“ src/ui/components/PermissionsModifyTrustDialog.test.tsx (7 tests) 401ms βœ“ src/ui/hooks/useLoadingIndicator.test.tsx (7 tests) 42ms βœ“ src/config/extension-manager-scope.test.ts (3 tests) 56ms βœ“ src/gemini_cleanup.test.tsx (1 test) 570ms βœ“ gemini.tsx main function cleanup > should log error when cleanupExpiredSessions fails 568ms βœ“ src/ui/components/MainContent.test.tsx (7 tests) 676ms βœ“ src/ui/contexts/ToolActionsContext.test.tsx (5 tests) 124ms stdout | src/zed-integration/acpResume.test.ts > GeminiAgent Session Resume > should load a session, resume chat, and stream all message types [STARTUP] StartupProfiler.flush() called with 0 phases βœ“ src/zed-integration/acpResume.test.ts (2 tests) 91ms βœ“ src/ui/themes/theme.test.ts (14 tests) 39ms βœ“ src/ui/components/ToolConfirmationQueue.test.tsx (5 tests) 660ms βœ“ src/config/extensions/github_fetch.test.ts (8 tests) 63ms βœ“ src/ui/contexts/SessionContext.test.tsx (4 tests) 271ms βœ“ src/ui/components/ValidationDialog.test.tsx (8 tests) 373ms βœ“ src/ui/components/AppHeader.test.tsx (9 tests) 1056ms βœ“ src/config/config.integration.test.ts (14 tests) 9478ms βœ“ Configuration Integration Tests > Approval Mode Integration Tests > 'should parse --approval-mode=auto_edi…' 9349ms βœ“ src/ui/components/DialogManager.test.tsx (19 tests) 169ms βœ“ src/ui/components/ToolStatsDisplay.test.tsx (5 tests) 203ms stdout | src/commands/extensions/install.test.ts > handleInstall > should install an extension from a http source Extension "http-extension" installed successfully and enabled. stdout | src/commands/extensions/install.test.ts > handleInstall > should install an extension from a https source Extension "https-extension" installed successfully and enabled. stdout | src/commands/extensions/install.test.ts > handleInstall > should install an extension from a git source Extension "git-extension" installed successfully and enabled. stdout | src/commands/extensions/install.test.ts > handleInstall > should install an extension from a sso source Extension "sso-extension" installed successfully and enabled. stdout | src/commands/extensions/install.test.ts > handleInstall > should install an extension from a local path Extension "local-extension" installed successfully and enabled. βœ“ src/config/extensionRegistryClient.test.ts (10 tests) 47ms βœ“ src/ui/utils/MarkdownDisplay.test.tsx (30 tests) 825ms βœ“ src/commands/extensions/install.test.ts (8 tests) 48ms βœ“ src/commands/extensions/list.test.ts (8 tests) 70ms βœ“ src/ui/components/shared/Scrollable.test.tsx (9 tests) 782ms βœ“ src/ui/hooks/shellReducer.test.ts (12 tests) 12ms βœ“ src/ui/components/messages/ShellToolMessage.test.tsx (12 tests) 1018ms βœ“ > interactive shell focus > clicks inside the shell area sets focus for SHELL_COMMAND_NAME 467ms βœ“ src/ui/utils/terminalSetup.test.ts (9 tests) 74ms βœ“ src/config/mcp/mcpServerEnablement.test.ts (14 tests) 27ms βœ“ src/ui/components/messages/ToolStickyHeaderRegression.test.tsx (2 tests) 564ms βœ“ ToolMessage Sticky Header Regression > verifies that multiple ToolMessages in a ToolGroupMessage in a ScrollableList have sticky headers 436ms βœ“ src/commands/extensions/link.test.ts (5 tests) 117ms βœ“ src/config/extension-manager-skills.test.ts (3 tests) 668ms βœ“ ExtensionManager skills validation > should emit a warning during install if skills directory is not empty but no skills are loaded 389ms βœ“ src/ui/components/Notifications.test.tsx (9 tests) 239ms βœ“ src/utils/hookSettings.test.ts (8 tests) 12ms (node:6216) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 resize listeners added to [Socket]. MaxListeners is 10. Use emitter.setMaxListeners() to increase limit (Use `node --trace-warnings ...` to show where the warning was created) βœ“ src/ui/components/AlternateBufferQuittingDisplay.test.tsx (6 tests) 887ms βœ“ AlternateBufferQuittingDisplay > renders with active and pending tool messages 419ms βœ“ src/ui/hooks/useBackgroundShellManager.test.tsx (6 tests) 33ms βœ“ src/ui/components/ThemeDialog.test.tsx (9 tests) 1778ms βœ“ ThemeDialog Snapshots > should render correctly in theme selection mode 759ms βœ“ src/ui/components/shared/RadioButtonSelect.test.tsx (5 tests) 145ms βœ“ src/ui/components/views/McpStatus.test.tsx (13 tests) 518ms βœ“ src/ui/utils/formatters.test.ts (28 tests) 38ms βœ“ src/config/settings_repro.test.ts (1 test) 68ms βœ“ src/ui/components/shared/TabHeader.test.tsx (12 tests) 229ms stdout | src/ui/commands/aboutCommand.test.ts > aboutCommand > should call addItem with all version info AboutCommand: Retrieved cached Google account { cachedAccount: 'test-email@example.com' } stdout | src/ui/commands/aboutCommand.test.ts > aboutCommand > should show the correct sandbox environment variable AboutCommand: Retrieved cached Google account { cachedAccount: 'test-email@example.com' } stdout | src/ui/commands/aboutCommand.test.ts > aboutCommand > should show sandbox-exec profile when applicable AboutCommand: Retrieved cached Google account { cachedAccount: 'test-email@example.com' } stdout | src/ui/commands/aboutCommand.test.ts > aboutCommand > should not show ide client when it is not detected AboutCommand: Retrieved cached Google account { cachedAccount: 'test-email@example.com' } stdout | src/ui/commands/aboutCommand.test.ts > aboutCommand > should display the tier when getUserTierName returns a value AboutCommand: Retrieved cached Google account { cachedAccount: 'test-email@example.com' } βœ“ src/ui/commands/aboutCommand.test.ts (6 tests) 133ms βœ“ src/ui/components/ShellInputPrompt.test.tsx (12 tests) 100ms βœ“ src/utils/agentUtils.test.ts (8 tests) 21ms βœ“ src/utils/sandboxUtils.test.ts (17 tests) 94ms βœ“ src/ui/IdeIntegrationNudge.test.tsx (6 tests) 2210ms βœ“ IdeIntegrationNudge > renders correctly with default options 383ms βœ“ IdeIntegrationNudge > handles "Yes" selection 341ms βœ“ IdeIntegrationNudge > handles "No" selection 344ms βœ“ IdeIntegrationNudge > handles "Dismiss" selection 662ms βœ“ src/ui/utils/mouse.test.ts (17 tests) 24ms βœ“ src/ui/components/StatusDisplay.test.tsx (7 tests) 170ms βœ“ src/ui/hooks/useConsoleMessages.test.tsx (7 tests) 140ms βœ“ src/ui/components/AnsiOutput.test.tsx (14 tests) 445ms βœ“ src/utils/hookUtils.test.ts (8 tests) 13ms βœ“ src/ui/components/messages/Todo.test.tsx (14 tests) 110ms βœ“ src/ui/utils/updateCheck.test.ts (10 tests) 25ms βœ“ src/ui/components/FolderTrustDialog.test.tsx (9 tests) 1204ms βœ“ src/commands/skills/list.test.ts (5 tests) 19ms βœ“ src/utils/userStartupWarnings.test.ts (7 tests) 41ms βœ“ src/ui/components/ToastDisplay.test.tsx (16 tests) 116ms βœ“ src/ui/hooks/useTerminalTheme.test.tsx (7 tests) 152ms βœ“ src/commands/skills/install.test.ts (6 tests) 34ms βœ“ src/ui/components/views/ExtensionsList.test.tsx (11 tests) 432ms βœ“ src/ui/components/EditorSettingsDialog.test.tsx (5 tests) 459ms βœ“ src/commands/skills/enable.test.ts (4 tests) 20ms βœ“ src/config/keyBindings.test.ts (6 tests) 196ms βœ“ src/ui/components/Header.test.tsx (7 tests) 219ms βœ“ src/config/settings_validation_warning.test.ts (3 tests) 31ms βœ“ src/ui/components/UserIdentity.test.tsx (5 tests) 281ms βœ“ src/ui/hooks/useFlickerDetector.test.ts (6 tests) 67ms βœ“ src/utils/commands.test.ts (12 tests) 45ms βœ“ src/ui/commands/statsCommand.test.ts (4 tests) 42ms βœ“ src/config/extension-manager-agents.test.ts (2 tests) 656ms βœ“ ExtensionManager agents loading > should load agents from an extension 514ms βœ“ src/ui/components/shared/ExpandableText.test.tsx (7 tests) 65ms βœ“ src/ui/hooks/useFocus.test.tsx (6 tests) 70ms βœ“ src/ui/layouts/DefaultAppLayout.test.tsx (3 tests) 112ms βœ“ src/ui/components/shared/EnumSelector.test.tsx (9 tests) 248ms βœ“ src/ui/commands/authCommand.test.ts (9 tests) 199ms βœ“ src/ui/commands/compressCommand.test.ts (5 tests) 134ms βœ“ src/ui/auth/ApiAuthDialog.test.tsx (6 tests) 389ms βœ“ src/utils/readStdin.test.ts (6 tests) 89ms βœ“ src/ui/privacy/CloudFreePrivacyNotice.test.tsx (9 tests) 465ms βœ“ src/utils/activityLogger.test.ts (6 tests) 16ms βœ“ src/commands/skills/disable.test.ts (4 tests) 37ms βœ“ src/core/initializer.test.ts (5 tests) 11ms βœ“ src/ui/hooks/useTimer.test.tsx (8 tests) 183ms stdout | src/commands/extensions/validate.test.ts > handleValidate > should validate an extension from a local dir Extension local-ext-name has been successfully validated. stderr | src/commands/extensions/validate.test.ts > handleValidate > should warn if version is not formatted with semver Validation warnings: - Warning: Version '1' does not appear to be standard semver (e.g., 1.0.0). stdout | src/commands/extensions/validate.test.ts > handleValidate > should warn if version is not formatted with semver Extension valid-name has been successfully validated. βœ“ src/commands/extensions/validate.test.ts (5 tests) 67ms βœ“ src/ui/commands/clearCommand.test.ts (2 tests) 100ms βœ“ src/ui/hooks/usePrivacySettings.test.tsx (4 tests) 258ms βœ“ src/ui/commands/permissionsCommand.test.ts (7 tests) 39ms βœ“ src/ui/commands/policiesCommand.test.ts (4 tests) 287ms βœ“ src/ui/components/ConfigInitDisplay.test.tsx (4 tests) 277ms βœ“ src/ui/hooks/useTurnActivityMonitor.test.ts (4 tests) 116ms βœ“ src/ui/hooks/useRewind.test.ts (5 tests) 149ms βœ“ src/ui/components/messages/ToolMessageFocusHint.test.tsx (5 tests) 310ms βœ“ src/ui/components/messages/ToolConfirmationMessageOverflow.test.tsx (1 test) 757ms βœ“ ToolConfirmationMessage Overflow > should display "press ctrl-o" hint when content overflows in ToolGroupMessage 753ms βœ“ src/ui/components/views/SkillsList.test.tsx (6 tests) 307ms βœ“ src/ui/commands/toolsCommand.test.ts (4 tests) 32ms βœ“ src/ui/components/GradientRegression.test.tsx (5 tests) 940ms βœ“ Gradient Crash Regression Tests >
should not crash when theme.ui.gradient is empty 466ms βœ“ src/config/extensions/variables.test.ts (10 tests) 38ms βœ“ src/ui/hooks/useAnimatedScrollbar.test.tsx (7 tests) 133ms βœ“ src/utils/cleanup.test.ts (8 tests) 63ms βœ“ src/utils/dialogScopeUtils.test.ts (4 tests) 10ms βœ“ src/ui/commands/planCommand.test.ts (3 tests) 254ms stdout | src/ui/hooks/useAtCompletion_agents.test.ts > useAtCompletion with Agents > should include agent suggestions Ignore file not found: /tmp/gemini-cli-test-LEngoB/.geminiignore, continue without it. βœ“ src/ui/commands/initCommand.test.ts (3 tests) 42ms stdout | src/ui/hooks/useAtCompletion_agents.test.ts > useAtCompletion with Agents > should filter agent suggestions Ignore file not found: /tmp/gemini-cli-test-veGnXM/.geminiignore, continue without it. βœ“ src/ui/hooks/useSnowfall.test.tsx (5 tests) 303ms βœ“ src/zed-integration/fileSystemService.test.ts (4 tests) 97ms βœ“ src/ui/components/ContextSummaryDisplay.test.tsx (4 tests) 205ms βœ“ src/ui/hooks/useAtCompletion_agents.test.ts (2 tests) 354ms βœ“ src/config/auth.test.ts (8 tests) 5ms βœ“ src/ui/utils/textOutput.test.ts (10 tests) 66ms βœ“ src/commands/extensions.test.tsx (3 tests) 67ms βœ“ src/ui/components/ConsentPrompt.test.tsx (5 tests) 320ms βœ“ src/ui/hooks/useShellInactivityStatus.test.ts (4 tests) 86ms βœ“ src/ui/components/SuggestionsDisplay.test.tsx (6 tests) 328ms βœ“ src/ui/hooks/useBanner.test.ts (5 tests) 48ms stdout | src/commands/extensions/new.test.ts > extensions new command > should create directory when no template is provided Successfully created new extension at /some/path. You can install this using "gemini extensions link /some/path" to test it out. stdout | src/commands/extensions/new.test.ts > extensions new command > should create directory and copy files when path does not exist Successfully created new extension from template "context" at /some/path. You can install this using "gemini extensions link /some/path" to test it out. βœ“ src/commands/extensions/new.test.ts (4 tests) 115ms βœ“ src/config/extensions/storage.test.ts (5 tests) 29ms βœ“ src/ui/commands/docsCommand.test.ts (3 tests) 64ms βœ“ src/ui/components/IdeTrustChangeDialog.test.tsx (6 tests) 296ms βœ“ src/ui/hooks/useMcpStatus.test.tsx (4 tests) 43ms βœ“ src/ui/utils/displayUtils.test.ts (8 tests) 7ms βœ“ src/test-utils/render.test.tsx (6 tests) 69ms βœ“ src/ui/auth/AuthInProgress.test.tsx (5 tests) 318ms βœ“ src/utils/persistentState.test.ts (5 tests) 83ms βœ“ src/ui/commands/terminalSetupCommand.test.ts (5 tests) 27ms βœ“ src/ui/hooks/useBatchedScroll.test.ts (7 tests) 39ms stderr | src/ui/components/GeminiRespondingSpinner.test.tsx An update to GeminiSpinner inside a test was not wrapped in act(...). When testing, code that causes React state updates should be wrapped into act(...): act(() => { /* fire events that update state */ }); /* assert on the output */ This ensures that you're testing the behavior the user would see in the browser. Learn more at https://react.dev/link/wrap-tests-with-act βœ“ src/ui/components/GeminiRespondingSpinner.test.tsx (5 tests) 143ms βœ“ src/commands/skills/uninstall.test.ts (5 tests) 117ms βœ“ src/ui/components/LogoutConfirmationDialog.test.tsx (5 tests) 510ms βœ“ LogoutConfirmationDialog > should render the dialog with title, description, and hint 386ms βœ“ src/utils/readStdin_safety.test.ts (2 tests) 8ms βœ“ src/ui/auth/LoginWithGoogleRestartDialog.test.tsx (4 tests) 125ms βœ“ src/utils/startupWarnings.test.ts (4 tests) 14ms βœ“ src/utils/jsonoutput.test.ts (15 tests) 14ms βœ“ src/ui/components/QueuedMessageDisplay.test.tsx (5 tests) 236ms βœ“ src/ui/components/shared/DescriptiveRadioButtonSelect.test.tsx (2 tests) 218ms βœ“ src/ui/components/shared/HalfLinePaddedBox.test.tsx (4 tests) 448ms βœ“ > renders standard background and blocks when not iTerm2 362ms βœ“ src/ui/components/messages/ToolMessageRawMarkdown.test.tsx (6 tests) 1029ms βœ“ - Raw Markdown Display Snapshots > renders with renderMarkdown=true, useAlternateBuffer=false '(default, regular buffer)' 443ms βœ“ src/ui/contexts/TerminalContext.test.tsx (2 tests) 33ms βœ“ src/ui/components/RewindConfirmation.test.tsx (4 tests) 432ms βœ“ src/ui/hooks/vim-passthrough.test.tsx (4 tests) 271ms βœ“ src/core/auth.test.ts (4 tests) 45ms βœ“ src/commands/mcp.test.ts (3 tests) 132ms ❯ src/ui/components/shared/performance.test.ts (3 tests | 1 failed) 6958ms βœ“ text-buffer performance > should handle pasting large amounts of text efficiently 514ms Γ— text-buffer performance > should handle character-by-character insertion in a large buffer efficiently 6431ms β†’ expected 5491 to be less than 5000 βœ“ text-buffer performance > should highlight many lines efficiently 10ms βœ“ src/ui/components/QuotaDisplay.test.tsx (9 tests) 423ms βœ“ src/ui/hooks/useMouseClick.test.ts (2 tests) 53ms βœ“ src/ui/components/messages/ToolResultDisplayOverflow.test.tsx (1 test) 930ms βœ“ ToolResultDisplay Overflow > should display "press ctrl-o" hint when content overflows in ToolGroupMessage 927ms βœ“ src/ui/utils/markdownUtilities.test.ts (7 tests) 9ms βœ“ src/ui/components/AboutBox.test.tsx (6 tests) 249ms βœ“ src/ui/components/SessionSummaryDisplay.test.tsx (1 test) 511ms βœ“ > renders the summary display with a title 509ms βœ“ src/ui/hooks/useMemoryMonitor.test.tsx (3 tests) 188ms βœ“ src/ui/components/ShowMoreLines.test.tsx (5 tests) 202ms βœ“ src/ui/components/DetailedMessagesDisplay.test.tsx (3 tests) 295ms βœ“ src/ui/components/Checklist.test.tsx (5 tests) 180ms βœ“ src/commands/skills/link.test.ts (3 tests) 11ms βœ“ src/ui/hooks/useMouse.test.ts (4 tests) 177ms βœ“ src/ui/hooks/useReactToolScheduler.test.ts (1 test) 25ms βœ“ src/ui/utils/clipboardUtils.windows.test.ts (1 test) 100ms βœ“ src/ui/components/Help.test.tsx (3 tests) 687ms βœ“ Help Component > should not render hidden commands 361ms βœ“ src/ui/privacy/PrivacyNotice.test.tsx (4 tests) 201ms βœ“ src/test-utils/mockCommandContext.test.ts (3 tests) 57ms βœ“ src/commands/skills.test.tsx (3 tests) 39ms βœ“ src/ui/components/ExitWarning.test.tsx (4 tests) 47ms βœ“ src/ui/utils/input.test.ts (6 tests) 16ms βœ“ src/ui/components/QuittingDisplay.test.tsx (2 tests) 101ms βœ“ src/ui/components/Table.test.tsx (3 tests) 275ms βœ“ src/ui/utils/TableRenderer.test.tsx (2 tests) 653ms βœ“ TableRenderer > renders a 3x3 table correctly 400ms βœ“ src/ui/components/messages/ThinkingMessage.test.tsx (6 tests) 237ms βœ“ src/zed-integration/acpErrors.test.ts (7 tests) 22ms βœ“ src/ui/utils/CodeColorizer.test.tsx (1 test) 484ms βœ“ colorizeCode > renders empty lines correctly when useAlternateBuffer is true 482ms βœ“ src/ui/utils/keybindingUtils.test.ts (5 tests) 19ms βœ“ src/ui/components/BubblingRegression.test.tsx (1 test) 352ms βœ“ Key Bubbling Regression > does not navigate when pressing "j" or "k" in a focused text input 351ms βœ“ src/ui/components/ApprovalModeIndicator.test.tsx (6 tests) 247ms βœ“ src/ui/components/views/ToolsList.test.tsx (3 tests) 406ms βœ“ > renders correctly with descriptions 336ms βœ“ src/core/theme.test.ts (3 tests) 41ms βœ“ src/ui/components/messages/UserMessage.test.tsx (4 tests) 326ms βœ“ src/ui/components/ContextUsageDisplay.test.tsx (3 tests) 361ms βœ“ ContextUsageDisplay > renders correct percentage left 347ms βœ“ src/ui/components/HookStatusDisplay.test.tsx (4 tests) 178ms βœ“ src/ui/commands/modelCommand.test.ts (3 tests) 181ms βœ“ src/ui/components/NewAgentsNotification.test.tsx (2 tests) 327ms βœ“ src/ui/components/ChecklistItem.test.tsx (6 tests) 293ms βœ“ src/ui/commands/helpCommand.test.ts (2 tests) 45ms βœ“ src/ui/commands/quitCommand.test.ts (1 test) 159ms βœ“ src/services/prompt-processors/argumentProcessor.test.ts (2 tests) 75ms βœ“ src/ui/components/messages/GeminiMessage.test.tsx (4 tests) 431ms βœ“ - Raw Markdown Display Snapshots > renders with renderMarkdown=true '(default)' 354ms βœ“ src/ui/hooks/useTips.test.ts (3 tests) 138ms βœ“ src/ui/commands/privacyCommand.test.ts (2 tests) 53ms βœ“ src/ui/utils/ui-sizing.test.ts (4 tests) 4ms βœ“ src/ui/components/MemoryUsageDisplay.test.tsx (2 tests) 153ms βœ“ src/ui/hooks/useModelCommand.test.tsx (3 tests) 180ms βœ“ src/ui/components/views/ChatList.test.tsx (3 tests) 177ms βœ“ src/ui/components/AdminSettingsChangedDialog.test.tsx (4 tests) 202ms βœ“ src/ui/components/messages/RedirectionConfirmation.test.tsx (1 test) 529ms βœ“ src/ui/components/ShortcutsHelp.test.tsx (4 tests) 521ms βœ“ ShortcutsHelp > renders correctly in 'wide' mode on 'mac' 346ms βœ“ src/ui/components/LoopDetectionConfirmation.test.tsx (2 tests) 448ms βœ“ LoopDetectionConfirmation > renders correctly 360ms βœ“ src/ui/privacy/CloudPaidPrivacyNotice.test.tsx (2 tests) 451ms βœ“ CloudPaidPrivacyNotice > renders correctly 395ms βœ“ src/ui/commands/themeCommand.test.ts (2 tests) 125ms βœ“ src/ui/privacy/GeminiPrivacyNotice.test.tsx (2 tests) 284ms βœ“ src/utils/resolvePath.test.ts (7 tests) 5ms βœ“ src/commands/utils.test.ts (2 tests) 6ms βœ“ src/ui/components/CopyModeWarning.test.tsx (2 tests) 69ms βœ“ src/ui/commands/settingsCommand.test.ts (2 tests) 145ms βœ“ src/ui/components/RawMarkdownIndicator.test.tsx (2 tests) 150ms βœ“ src/ui/components/CliSpinner.test.tsx (2 tests) 525ms βœ“ > should increment debugNumAnimatedComponents on mount and decrement on unmount 515ms βœ“ src/ui/components/shared/SectionHeader.test.tsx (3 tests) 108ms βœ“ src/ui/commands/corgiCommand.test.ts (2 tests) 95ms βœ“ src/ui/commands/shellsCommand.test.ts (3 tests) 6ms βœ“ src/utils/events.test.ts (2 tests) 18ms βœ“ src/ui/commands/editorCommand.test.ts (2 tests) 64ms βœ“ src/config/settingPaths.test.ts (2 tests) 5ms βœ“ src/ui/components/messages/InfoMessage.test.tsx (3 tests) 203ms βœ“ src/ui/components/Tips.test.tsx (2 tests) 65ms βœ“ src/utils/updateEventEmitter.test.ts (1 test) 25ms βœ“ src/ui/components/ConsoleSummaryDisplay.test.tsx (3 tests) 88ms βœ“ src/ui/components/ThemedGradient.test.tsx (1 test) 115ms βœ“ src/ui/components/messages/WarningMessage.test.tsx (2 tests) 120ms βœ“ src/ui/components/Banner.test.tsx (3 tests) 72ms βœ“ src/utils/processUtils.test.ts (1 test) 8ms βœ“ src/utils/math.test.ts (7 tests) 11ms βœ“ src/ui/components/messages/ErrorMessage.test.tsx (2 tests) 45ms βœ“ src/ui/components/StickyHeader.test.tsx (2 tests) 106ms βœ“ src/ui/utils/InlineMarkdownRenderer.test.ts (7 tests) 19ms βœ“ src/ui/components/ShellModeIndicator.test.tsx (1 test) 35ms βœ“ src/ui/components/UpdateNotification.test.tsx (1 test) 55ms ⎯⎯⎯⎯⎯⎯⎯ Failed Tests 1 ⎯⎯⎯⎯⎯⎯⎯ FAIL src/ui/components/shared/performance.test.ts > text-buffer performance > should handle character-by-character insertion in a large buffer efficiently AssertionError: expected 5491 to be less than 5000 ❯ src/ui/components/shared/performance.test.ts:67:22 65| 66| const duration = end - start; 67| expect(duration).toBeLessThan(5000); | ^ 68| }); 69| ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[1/1]⎯ Snapshots 1 obsolete ↳ src/ui/components/BackgroundShellDisplay.test.tsx Β· > selects the current process and closes the list when Ctrl+L is pressed in list view 1 Test Files 1 failed | 372 passed (373) Tests 1 failed | 5147 passed | 3 skipped (5151) Start at 19:47:06 Duration 235.01s (transform 74.40s, setup 3531.41s, collect 729.09s, tests 188.62s, environment 435ms, prepare 114.68s) JUNIT report written to /startdir/src/gemini-cli/packages/cli/junit.xml npm error Lifecycle script `test` failed with error: npm error code 1 npm error path /startdir/src/gemini-cli/packages/cli npm error workspace @google/gemini-cli@0.29.7 npm error location /startdir/src/gemini-cli/packages/cli npm error command failed npm error command sh -c vitest run > @google/gemini-cli-core@0.29.7 test > vitest run RUN v3.2.4 /startdir/src/gemini-cli/packages/core Coverage enabled with v8 βœ“ src/utils/memoryImportProcessor.test.ts (25 tests) 43ms βœ“ src/utils/fileUtils.test.ts (86 tests) 100ms βœ“ src/utils/editCorrector.test.ts (42 tests) 27ms βœ“ src/policy/policy-engine.test.ts (73 tests) 66ms βœ“ src/tools/mcp-tool.test.ts (43 tests) 138ms βœ“ src/services/shellExecutionService.test.ts (53 tests) 734ms βœ“ src/mcp/oauth-provider.test.ts (40 tests) 1389ms βœ“ MCPOAuthProvider > authenticate > should handle invalid callback request 1009ms βœ“ src/core/prompts.test.ts (64 tests) 164ms βœ“ src/tools/ripGrep.test.ts (59 tests | 1 skipped) 1115ms βœ“ src/services/modelConfigService.test.ts (31 tests) 25ms βœ“ src/hooks/hookRunner.test.ts (24 tests) 162ms βœ“ src/services/sessionSummaryService.test.ts (33 tests) 140ms βœ“ src/code_assist/admin/admin_controls.test.ts (41 tests) 45ms βœ“ src/policy/config.test.ts (21 tests) 4273ms βœ“ createPolicyEngineConfig > should filter out insecure system policy directories 531ms βœ“ createPolicyEngineConfig > should have YOLO allow-all rule beat write tool rules in YOLO mode 406ms βœ“ createPolicyEngineConfig > should support argsPattern in policy rules 591ms βœ“ createPolicyEngineConfig > should load safety_checker configuration from TOML 417ms βœ“ src/scheduler/scheduler.test.ts (27 tests) 53ms βœ“ src/telemetry/loggers.test.ts (37 tests) 92ms βœ“ src/agents/registry.test.ts (45 tests) 65ms βœ“ src/utils/memoryDiscovery.test.ts (30 tests) 139ms βœ“ src/code_assist/oauth2.test.ts (31 tests) 237ms βœ“ src/tools/write-file.test.ts (35 tests) 164ms βœ“ src/telemetry/clearcut-logger/clearcut-logger.test.ts (54 tests) 337ms βœ“ src/tools/mcp-client.test.ts (59 tests) 526ms βœ“ connectToMcpServer with OAuth > should discover oauth config if not in www-authenticate header 304ms βœ“ src/config/config.test.ts (144 tests) 582ms βœ“ src/core/coreToolScheduler.test.ts (22 tests) 504ms βœ“ src/tools/edit.test.ts (43 tests) 234ms βœ“ src/agents/local-executor.test.ts (37 tests) 122ms βœ“ src/utils/editor.test.ts (140 tests) 47ms βœ“ src/utils/googleQuotaErrors.test.ts (25 tests) 14ms βœ“ src/tools/read-many-files.test.ts (31 tests) 375ms βœ“ src/services/loopDetectionService.test.ts (48 tests) 285ms βœ“ src/core/baseLlmClient.test.ts (29 tests) 106ms βœ“ src/hooks/hookRegistry.test.ts (24 tests) 32ms βœ“ src/telemetry/memory-monitor.test.ts (31 tests) 65ms βœ“ src/utils/generateContentResponseUtilities.test.ts (48 tests) 15ms βœ“ src/ide/ide-connection-utils.test.ts (35 tests | 1 skipped) 36ms βœ“ src/services/chatCompressionService.test.ts (26 tests) 104ms βœ“ src/ide/ide-client.test.ts (26 tests) 54ms βœ“ src/tools/shell.test.ts (40 tests | 1 skipped) 331ms βœ“ src/tools/grep.test.ts (26 tests) 253ms βœ“ src/core/client.test.ts (72 tests | 1 skipped) 1484ms βœ“ src/utils/paths.test.ts (94 tests | 17 skipped) 12ms βœ“ src/tools/web-fetch.test.ts (31 tests) 107ms βœ“ src/scheduler/state-manager.test.ts (29 tests) 23ms βœ“ src/utils/workspaceContext.test.ts (38 tests) 29ms βœ“ src/services/fileDiscoveryService.test.ts (34 tests) 82ms βœ“ src/policy/shell-safety.test.ts (23 tests) 16ms βœ“ src/core/turn.test.ts (22 tests) 14ms βœ“ src/utils/shell-utils.test.ts (57 tests | 1 skipped) 175ms βœ“ src/utils/systemEncoding.test.ts (38 tests) 26ms βœ“ src/policy/toml-loader.test.ts (29 tests) 99ms βœ“ src/utils/pathReader.test.ts (18 tests) 85ms βœ“ src/output/stream-json-formatter.test.ts (20 tests) 36ms βœ“ src/hooks/hookEventHandler.test.ts (14 tests) 37ms βœ“ src/mcp/oauth-token-storage.test.ts (28 tests) 20ms βœ“ src/mcp/token-storage/keychain-token-storage.test.ts (29 tests) 220ms βœ“ src/core/logger.test.ts (39 tests) 127ms βœ“ src/services/chatRecordingService.test.ts (23 tests) 70ms βœ“ src/mcp/oauth-utils.test.ts (32 tests) 19ms βœ“ src/utils/retry.test.ts (34 tests) 44ms βœ“ src/utils/googleErrors.test.ts (13 tests) 12ms βœ“ src/tools/tool-registry.test.ts (21 tests) 80ms βœ“ src/tools/read-file.test.ts (32 tests) 175ms βœ“ src/telemetry/uiTelemetry.test.ts (19 tests) 50ms βœ“ src/code_assist/setup.test.ts (23 tests) 26ms βœ“ src/code_assist/converter.test.ts (25 tests) 9ms βœ“ src/agents/auth-provider/factory.test.ts (25 tests) 9ms βœ“ src/routing/strategies/numericalClassifierStrategy.test.ts (22 tests) 25ms βœ“ src/hooks/hookAggregator.test.ts (10 tests) 10ms βœ“ src/services/toolOutputMaskingService.test.ts (11 tests) 49ms βœ“ src/hooks/types.test.ts (35 tests) 15ms βœ“ src/tools/ls.test.ts (21 tests) 98ms βœ“ src/scheduler/confirmation.test.ts (9 tests) 43ms βœ“ src/ide/ideContext.test.ts (23 tests) 17ms βœ“ src/scheduler/policy.test.ts (20 tests) 38ms βœ“ src/tools/ask-user.test.ts (22 tests) 102ms βœ“ src/tools/memoryTool.test.ts (15 tests) 73ms βœ“ src/tools/modifiable-tool.test.ts (12 tests) 32ms βœ“ src/code_assist/server.test.ts (22 tests) 57ms βœ“ src/services/gitService.test.ts (19 tests) 71ms βœ“ src/hooks/hookPlanner.test.ts (10 tests) 12ms βœ“ src/core/contentGenerator.test.ts (20 tests) 73ms βœ“ src/telemetry/gcp-exporters.test.ts (18 tests) 64ms βœ“ src/utils/userAccountManager.test.ts (23 tests) 48ms βœ“ src/telemetry/sanitize.test.ts (18 tests) 31ms βœ“ src/tools/exit-plan-mode.test.ts (22 tests) 181ms βœ“ src/utils/getFolderStructure.test.ts (15 tests) 68ms βœ“ src/utils/events.test.ts (20 tests) 324ms βœ“ src/utils/partUtils.test.ts (37 tests) 11ms βœ“ src/utils/gitIgnoreParser.test.ts (25 tests) 84ms βœ“ src/config/models.test.ts (43 tests) 9ms βœ“ src/tools/glob.test.ts (37 tests) 1920ms βœ“ src/utils/bfsFileSearch.test.ts (16 tests) 64ms βœ“ src/agents/agentLoader.test.ts (18 tests) 43ms βœ“ src/utils/ignorePatterns.test.ts (28 tests) 14ms βœ“ src/utils/checkpointUtils.test.ts (15 tests) 37ms βœ“ src/config/projectRegistry.test.ts (14 tests) 50ms βœ“ src/safety/checker-runner.test.ts (9 tests) 22ms βœ“ src/services/environmentSanitization.test.ts (18 tests) 13ms (node:12465) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 SIGTERM listeners added to [process]. MaxListeners is 10. Use emitter.setMaxListeners() to increase limit (Use `node --trace-warnings ...` to show where the warning was created) (node:12465) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 SIGINT listeners added to [process]. MaxListeners is 10. Use emitter.setMaxListeners() to increase limit βœ“ src/output/json-formatter.test.ts (17 tests) 9ms βœ“ src/telemetry/sdk.test.ts (16 tests) 61ms βœ“ src/telemetry/activity-monitor.test.ts (22 tests) 12ms βœ“ src/code_assist/oauth-credential-storage.test.ts (16 tests) 20ms βœ“ src/core/geminiChat.test.ts (48 tests) 6891ms βœ“ GeminiChat > sendMessageStream > should fail if the stream ends with an empty part and has no finishReason 504ms βœ“ GeminiChat > sendMessageStream > should throw an error when a tool call is followed by an empty stream response 508ms βœ“ GeminiChat > sendMessageStream > should throw InvalidStreamError when no tool call and no finish reason 510ms βœ“ GeminiChat > sendMessageStream > should throw InvalidStreamError when no tool call and empty response text 513ms βœ“ GeminiChat > sendMessageStream > should throw InvalidStreamError when finishReason is MALFORMED_FUNCTION_CALL 505ms βœ“ GeminiChat > sendMessageStream > should retry when finishReason is MALFORMED_FUNCTION_CALL 507ms βœ“ GeminiChat > sendMessageStream with retries > should yield a RETRY event when an invalid stream is encountered 509ms βœ“ GeminiChat > sendMessageStream with retries > should retry on invalid content, succeed, and report metrics 506ms βœ“ GeminiChat > sendMessageStream with retries > should set temperature to 1 on retry 508ms βœ“ GeminiChat > sendMessageStream with retries > should fail after all retries on persistent invalid content and report metrics 510ms βœ“ GeminiChat > should correctly retry and append to an existing history mid-conversation 515ms βœ“ GeminiChat > should retry if the model returns a completely empty stream (no chunks) 511ms βœ“ GeminiChat > should discard valid partial content from a failed attempt upon retry 513ms βœ“ src/telemetry/semantic.test.ts (21 tests) 40ms βœ“ src/agents/a2a-client-manager.test.ts (18 tests) 35ms βœ“ src/ide/ide-installer.test.ts (17 tests) 52ms βœ“ src/services/modelConfig.integration.test.ts (10 tests) 8ms βœ“ src/utils/tokenCalculation.test.ts (15 tests) 14ms βœ“ src/mcp/token-storage/file-token-storage.test.ts (16 tests) 796ms βœ“ src/agents/remote-invocation.test.ts (10 tests) 31ms βœ“ src/skills/skillManager.test.ts (9 tests) 81ms βœ“ src/safety/built-in.test.ts (14 tests) 24ms βœ“ src/ide/detect-ide.test.ts (30 tests) 32ms βœ“ src/skills/skillLoader.test.ts (14 tests) 157ms βœ“ src/tools/mcp-client-manager.test.ts (17 tests) 80ms βœ“ src/fallback/handler.test.ts (14 tests) 135ms βœ“ src/telemetry/rate-limiter.test.ts (24 tests) 27ms βœ“ src/core/geminiChat_network_retry.test.ts (7 tests) 2578ms βœ“ GeminiChat Network Retries > should retry when a 503 ApiError occurs during stream iteration 542ms βœ“ GeminiChat Network Retries > should retry on generic network error if retryFetchErrors is true 506ms βœ“ GeminiChat Network Retries > should retry on SSL error during connection phase (ERR_SSL_SSLV3_ALERT_BAD_RECORD_MAC) 506ms βœ“ GeminiChat Network Retries > should retry on ECONNRESET error during connection phase 507ms βœ“ GeminiChat Network Retries > should retry on SSL error during stream iteration (mid-stream failure) 508ms βœ“ src/mcp/token-storage/hybrid-token-storage.test.ts (11 tests) 26ms βœ“ src/code_assist/telemetry.test.ts (16 tests) 48ms βœ“ src/hooks/hookSystem.test.ts (8 tests) 211ms βœ“ src/scheduler/tool-modifier.test.ts (6 tests) 13ms βœ“ src/routing/strategies/classifierStrategy.test.ts (13 tests) 33ms βœ“ src/utils/ignoreFileParser.test.ts (19 tests) 40ms βœ“ src/utils/secure-browser-launcher.test.ts (14 tests) 15ms βœ“ src/utils/llm-edit-fixer.test.ts (8 tests) 29ms βœ“ src/config/storage.test.ts (16 tests) 11ms βœ“ src/utils/terminalSerializer.test.ts (17 tests) 106ms βœ“ src/utils/errorReporting.test.ts (6 tests) 57ms βœ“ src/tools/message-bus-integration.test.ts (6 tests) 63ms βœ“ src/confirmation-bus/message-bus.test.ts (10 tests) 13ms βœ“ src/mcp/google-auth-provider.test.ts (15 tests) 31ms βœ“ src/telemetry/startupProfiler.test.ts (23 tests) 40ms βœ“ src/utils/channel.test.ts (22 tests) 12ms βœ“ src/agents/local-invocation.test.ts (11 tests) 16ms βœ“ src/telemetry/high-water-mark-tracker.test.ts (18 tests) 12ms βœ“ src/commands/memory.test.ts (12 tests) 10ms βœ“ src/hooks/hookTranslator.test.ts (10 tests) 7ms βœ“ src/tools/tools.test.ts (11 tests) 9ms βœ“ src/availability/policyHelpers.test.ts (19 tests) 13ms βœ“ src/policy/persistence.test.ts (5 tests) 19ms βœ“ src/routing/strategies/compositeStrategy.test.ts (6 tests) 9ms βœ“ src/ide/process-utils.test.ts (8 tests) 8ms βœ“ src/commands/restore.test.ts (6 tests) 13ms βœ“ src/services/contextManager.test.ts (6 tests) 16ms βœ“ src/utils/apiConversionUtils.test.ts (7 tests) 16ms βœ“ src/utils/schemaValidator.test.ts (12 tests) 112ms βœ“ src/tools/diffOptions.test.ts (10 tests) 11ms βœ“ src/utils/security.test.ts (9 tests) 13ms βœ“ src/core/fakeContentGenerator.test.ts (7 tests) 9ms βœ“ src/core/loggingContentGenerator.test.ts (11 tests) 36ms βœ“ src/mcp/sa-impersonation-provider.test.ts (8 tests) 17ms βœ“ src/utils/environmentContext.test.ts (6 tests) 33ms βœ“ src/utils/nextSpeakerChecker.test.ts (10 tests) 32ms βœ“ src/tools/activate-skill.test.ts (7 tests) 61ms βœ“ src/scheduler/tool-executor.test.ts (5 tests) 135ms βœ“ src/tools/enter-plan-mode.test.ts (8 tests) 55ms βœ“ src/utils/errors.test.ts (18 tests) 6ms βœ“ src/agents/auth-provider/base-provider.test.ts (10 tests) 13ms βœ“ src/tools/line-endings.test.ts (5 tests) 69ms βœ“ src/skills/skillManagerAlias.test.ts (2 tests) 24ms βœ“ src/hooks/trustedHooks.test.ts (7 tests) 17ms βœ“ src/utils/extensionLoader.test.ts (9 tests | 1 skipped) 15ms βœ“ src/utils/headless.test.ts (14 tests) 5ms βœ“ src/code_assist/experiments/experiments_local.test.ts (5 tests) 68ms βœ“ src/agents/a2aUtils.test.ts (9 tests) 8ms βœ“ src/tools/web-search.test.ts (9 tests) 72ms βœ“ src/routing/strategies/fallbackStrategy.test.ts (5 tests) 12ms βœ“ src/mcp/token-storage/base-token-storage.test.ts (12 tests) 8ms βœ“ src/utils/summarizer.test.ts (8 tests) 80ms βœ“ src/telemetry/activity-detector.test.ts (13 tests) 9ms βœ“ src/core/prompts-substitution.test.ts (6 tests) 27ms βœ“ src/core/recordingContentGenerator.test.ts (4 tests) 7ms βœ“ src/core/coreToolHookTriggers.test.ts (6 tests) 12ms βœ“ src/agents/utils.test.ts (12 tests) 6ms βœ“ src/availability/modelAvailabilityService.test.ts (9 tests) 6ms βœ“ src/code_assist/experiments/client_metadata.test.ts (12 tests) 119ms βœ“ src/policy/utils.test.ts (13 tests) 5ms βœ“ src/availability/policyCatalog.test.ts (12 tests) 7ms βœ“ src/tools/tool-names.test.ts (9 tests) 7ms βœ“ src/utils/process-utils.test.ts (7 tests) 11ms βœ“ src/utils/filesearch/crawlCache.test.ts (9 tests) 9ms βœ“ src/code_assist/experiments/experiments.test.ts (4 tests) 49ms βœ“ src/services/sessionSummaryUtils.test.ts (10 tests) 28ms βœ“ src/tools/write-todos.test.ts (9 tests) 40ms βœ“ src/tools/base-tool-invocation.test.ts (2 tests) 9ms βœ“ src/telemetry/semantic.truncation.test.ts (4 tests) 8ms βœ“ src/code_assist/admin/mcpUtils.test.ts (6 tests) 13ms βœ“ src/tools/confirmation-policy.test.ts (6 tests) 134ms βœ“ src/tools/xcode-mcp-fix-transport.test.ts (2 tests) 4ms βœ“ src/prompts/prompt-registry.test.ts (7 tests) 17ms βœ“ src/utils/pathCorrector.test.ts (4 tests) 11ms βœ“ src/services/modelConfig.golden.test.ts (2 tests) 10ms βœ“ src/utils/installationManager.test.ts (4 tests) 6ms βœ“ src/utils/textUtils.test.ts (17 tests) 5ms βœ“ src/routing/modelRouterService.test.ts (5 tests) 41ms βœ“ src/routing/strategies/defaultStrategy.test.ts (4 tests) 6ms βœ“ src/telemetry/config.test.ts (14 tests) 6ms βœ“ src/code_assist/codeAssist.test.ts (7 tests) 14ms βœ“ src/utils/delay.test.ts (7 tests) 12ms βœ“ src/utils/debugLogger.test.ts (6 tests) 9ms βœ“ src/config/storageMigration.test.ts (5 tests) 11ms βœ“ src/config/memory.test.ts (10 tests) 5ms βœ“ src/utils/fileDiffUtils.test.ts (7 tests) 6ms βœ“ src/utils/planUtils.test.ts (7 tests) 18ms βœ“ src/policy/policy-updater.test.ts (5 tests) 12ms βœ“ src/agents/acknowledgedAgents.test.ts (4 tests) 14ms βœ“ src/utils/authConsent.test.ts (3 tests) 7ms βœ“ src/utils/customHeaderUtils.test.ts (11 tests) 4ms βœ“ src/core/apiKeyCredentialStorage.test.ts (7 tests) 15ms βœ“ src/utils/thoughtUtils.test.ts (11 tests) 5ms βœ“ src/agents/subagent-tool-wrapper.test.ts (6 tests) 38ms βœ“ src/utils/safeJsonStringify.test.ts (8 tests) 6ms βœ“ src/routing/strategies/overrideStrategy.test.ts (4 tests) 4ms βœ“ src/prompts/promptProvider.test.ts (2 tests) 7ms βœ“ src/resources/resource-registry.test.ts (4 tests) 9ms βœ“ src/tools/get-internal-docs.test.ts (4 tests) 71ms βœ“ src/agents/agent-scheduler.test.ts (1 test) 7ms βœ“ src/utils/deadlineTimer.test.ts (5 tests) 9ms βœ“ src/agents/cli-help-agent.test.ts (5 tests) 5ms βœ“ src/utils/toolCallContext.test.ts (4 tests) 27ms βœ“ src/agents/registry_acknowledgement.test.ts (4 tests) 30ms βœ“ src/safety/context-builder.test.ts (3 tests) 7ms βœ“ src/tools/definitions/resolver.test.ts (4 tests) 4ms βœ“ src/utils/package.test.ts (4 tests) 11ms βœ“ src/tools/definitions/coreToolsModelSnapshots.test.ts (12 tests) 10ms working stdoutworking stderr βœ“ src/utils/stdio.test.ts (2 tests) 8ms βœ“ src/utils/filesearch/result-cache.test.ts (3 tests) 4ms βœ“ src/services/fileSystemService.test.ts (3 tests) 7ms βœ“ src/prompts/mcp-prompts.test.ts (2 tests) 17ms βœ“ src/core/tokenLimits.test.ts (5 tests) 6ms βœ“ src/safety/registry.test.ts (4 tests) 4ms βœ“ src/utils/version.test.ts (3 tests) 5ms βœ“ src/telemetry/telemetry-utils.test.ts (6 tests) 16ms βœ“ src/utils/checks.test.ts (3 tests) 4ms βœ“ src/utils/formatters.test.ts (4 tests) 11ms βœ“ src/commands/init.test.ts (2 tests) 7ms βœ“ src/utils/shell-utils.integration.test.ts (3 tests) 248ms βœ“ src/commands/extensions.test.ts (1 test) 9ms βœ“ src/agents/subagent-tool.test.ts (3 tests) 76ms βœ“ src/index.test.ts (1 test) 3ms βœ“ src/utils/flashFallback.test.ts (4 tests) 21ms βœ“ src/utils/errorParsing.test.ts (10 tests) 5ms βœ“ src/utils/tool-utils.test.ts (9 tests) 4ms βœ“ src/availability/fallbackIntegration.test.ts (2 tests) 14ms βœ“ src/utils/filesearch/ignore.test.ts (12 tests) 34ms βœ“ src/utils/filesearch/crawler.test.ts (19 tests) 66ms βœ“ src/utils/filesearch/fileSearch.test.ts (28 tests) 101ms βœ“ src/agents/codebase-investigator.test.ts (4 tests) 6ms βœ“ src/scheduler/scheduler_waiting_callback.test.ts (1 test) 28ms βœ“ src/telemetry/telemetry.test.ts (2 tests) 21ms βœ“ src/config/flashFallback.test.ts (3 tests) 22ms βœ“ src/agents/generalist-agent.test.ts (1 test) 7ms βœ“ src/telemetry/metrics.test.ts (70 tests) 26100ms βœ“ Telemetry Metrics > recordFlickerFrame > does not record metrics if not initialized 2620ms βœ“ Telemetry Metrics > recordFlickerFrame > records a flicker frame event when initialized 1462ms βœ“ Telemetry Metrics > recordExitFail > does not record metrics if not initialized 1439ms βœ“ Telemetry Metrics > recordExitFail > records a exit fail event when initialized 1899ms βœ“ Telemetry Metrics > recordSlowRender > does not record metrics if not initialized 2792ms βœ“ Telemetry Metrics > recordSlowRender > records a slow render event when initialized 1464ms βœ“ Telemetry Metrics > recordPlanExecution > does not record metrics if not initialized 1308ms βœ“ Telemetry Metrics > recordPlanExecution > records a plan execution event when initialized 1329ms βœ“ Telemetry Metrics > initializeMetrics > should apply common attributes including email 1814ms βœ“ Telemetry Metrics > recordChatCompressionMetrics > does not record metrics if not initialized 1529ms βœ“ Telemetry Metrics > recordChatCompressionMetrics > records token compression with the correct attributes 351ms Test Files 254 passed (254) Tests 4686 passed | 23 skipped (4709) Start at 19:51:03 Duration 36.23s (transform 39.58s, setup 12.34s, collect 368.71s, tests 60.70s, environment 60ms, prepare 26.65s) JUNIT report written to /startdir/src/gemini-cli/packages/core/junit.xml % Coverage report from v8 > gemini-cli-vscode-ide-companion@0.29.7 test > vitest run RUN v3.2.4 /startdir/src/gemini-cli/packages/vscode-ide-companion βœ“ src/open-files-manager.test.ts (17 tests) 14ms βœ“ src/extension.test.ts (11 tests) 58ms βœ“ src/ide-server.test.ts (13 tests | 1 skipped) 123ms Test Files 3 passed (3) Tests 40 passed | 1 skipped (41) Start at 19:51:41 Duration 2.67s (transform 1.12s, setup 0ms, collect 4.56s, tests 195ms, environment 0ms, prepare 196ms) ==> ERROR: A failure occurred in check(). Aborting... ==> ERROR: Build failed, check /home/alhp/workspace/chroot/build_60b584eb-ce2f-418f-b84c-a039be7756d5/build