==> Synchronizing chroot copy [/home/alhp/workspace/chroot/root] -> [build_8296c019-cf77-46e5-894a-fc52b3d982c7]...done
==> Making package: gemini-cli 1:0.29.5-1.1 (Fri Feb 20 21:00:05 2026)
==> Retrieving sources...
-> Cloning gemini-cli git repo...
Cloning into bare repository '/home/alhp/workspace/build/x86-64-v3/gemini-cli-1:0.29.5-1/gemini-cli'...
==> Validating source files with b2sums...
gemini-cli ... Passed
==> Making package: gemini-cli 1:0.29.5-1.1 (Fri Feb 20 20:01:44 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.2.4-2 6.29 MiB
extra/nodejs 25.6.1-1 66.96 MiB
Total Installed Size: 74.39 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.0010-1 37.81 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.0010-1 5.05 MiB
Total Installed Size: 92.77 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 53s
354 packages are looking for funding
run `npm fund` for details
38 vulnerabilities (1 low, 9 moderate, 27 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.5 bundle
> npm run generate && node esbuild.config.js && node scripts/copy_bundle_assets.js
> @google/gemini-cli@0.29.5 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.5 prepare
> husky && npm run bundle
> @google/gemini-cli@0.29.5 bundle
> npm run generate && node esbuild.config.js && node scripts/copy_bundle_assets.js
> @google/gemini-cli@0.29.5 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.5
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.5
npm notice filename: google-gemini-cli-0.29.5.tgz
npm notice package size: 9.1 MB
npm notice unpacked size: 38.3 MB
npm notice shasum: ab051a8d76c61f86019e1b9e9809617c7434a1df
npm notice integrity: sha512-g8AyJV1Mlh9FC[...]hKvTtjOd8EtyQ==
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.5.tgz
==> Starting check()...
> @google/gemini-cli@0.29.5 build
> node scripts/build.js
> @google/gemini-cli@0.29.5 generate
> node scripts/generate-git-commit-info.js
> @google/gemini-cli-a2a-server@0.29.5 build
> node ../../scripts/build_package.js
Successfully copied files.
> @google/gemini-cli@0.29.5 build
> node ../../scripts/build_package.js
Successfully copied files.
> @google/gemini-cli-core@0.29.5 build
> node ../../scripts/build_package.js
Successfully copied files.
Copied documentation to dist/docs
> @google/gemini-cli-test-utils@0.29.5 build
> node ../../scripts/build_package.js
Successfully copied files.
> gemini-cli-vscode-ide-companion@0.29.5 build
> npm run build:dev
> gemini-cli-vscode-ide-companion@0.29.5 build:dev
> npm run check-types && npm run lint && node esbuild.js
> gemini-cli-vscode-ide-companion@0.29.5 check-types
> tsc --noEmit
> gemini-cli-vscode-ide-companion@0.29.5 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.5 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.5 test
> vitest run
RUN v3.2.4 /startdir/src/gemini-cli/packages/a2a-server
Coverage enabled with v8
β src/commands/command-registry.test.ts (6 tests) 7ms
β src/commands/extensions.test.ts (8 tests) 7ms
β src/agent/task.test.ts (17 tests) 96ms
(node:1673) 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/commands/memory.test.ts (7 tests) 9ms
β src/config/settings.test.ts (2 tests) 7ms
β src/persistence/gcs.test.ts (12 tests) 57ms
β src/config/config.test.ts (11 tests) 28ms
β src/commands/init.test.ts (5 tests) 39ms
β src/commands/restore.test.ts (6 tests) 11ms
β src/http/endpoints.test.ts (5 tests) 81ms
β src/http/app.test.ts (20 tests) 157ms
Test Files 11 passed (11)
Tests 99 passed (99)
Start at 20:03:52
Duration 11.67s (transform 7.86s, setup 0ms, collect 105.70s, tests 497ms, environment 2ms, prepare 2.11s)
JUNIT report written to /startdir/src/gemini-cli/packages/a2a-server/junit.xml
% Coverage report from v8
> @google/gemini-cli@0.29.5 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-E05Oky/.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-0XDT8I/.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-f7Hsjj/.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-f7Hsjj/.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-1KfgAy/.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-1KfgAy/.geminiignore, continue without it.
β src/utils/settingsUtils.test.ts (73 tests) 98ms
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-97iEcv/.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-97iEcv/.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-hN4519/.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-hN4519/.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-EuBOco/.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-EuBOco/.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-5YbKMZ/.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-5YbKMZ/.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-E7oMcV/.geminiignore, continue without it.
β src/utils/sessionCleanup.test.ts (70 tests) 121ms
stdout | src/ui/hooks/atCommandProcessor.test.ts > handleAtCommand > should handle multiple @file references with interleaved text
Ignore file not found: /tmp/folder-structure-test-E7oMcV/.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-8d9FJ3/.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-8d9FJ3/.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-8d9FJ3/.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-ZiRDyr/.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-ZiRDyr/.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-KHnoyR/.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-KHnoyR/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-M8SPlv/.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-M8SPlv/.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-vvTp5G/.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-vvTp5G/.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-vvTp5G/.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-tTPxXR/.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-tTPxXR/.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-W8Q0mj/.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-QPswMO/.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-QPswMO/build/output.js
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-uDAiXw/.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-uDAiXw/.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-66OjTV/.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-66OjTV/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-66OjTV/.geminiignore
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-JCftfq/.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-JCftfq/.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-L1rWZy/.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-L1rWZy/.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-FSKUly/.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-FSKUly/.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-toK2Ze/.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-toK2Ze/.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-bRPxql/.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-bRPxql/.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-pk8HBF/.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-pk8HBF/.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-ukAzJv/.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-ukAzJv/.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-mGOP1b/.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-mGOP1b/.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-JgW3Fo/.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-JgW3Fo/.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-gJz2Pw/.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-gJz2Pw/.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-IxzeaV/.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-IxzeaV/.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-TnlxhR/.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-TnlxhR/.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-x1rK0B/.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-x1rK0B/.geminiignore, continue without it.
β src/ui/components/shared/vim-buffer-actions.test.ts (79 tests) 61ms
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-NSsW0S/.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-NSsW0S/.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-GGF38e/.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-GGF38e/.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-gDFatl/.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-gDFatl/.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-87MxRt/.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-87MxRt/.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-tTidFI/.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-tTidFI/.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-RzqUck/.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-RzqUck/.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-FQlGEs/.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-FQlGEs/.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-OryyvU/.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-OryyvU/.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-5IASU5/.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-5IASU5/.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-9RyHQv/.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-9RyHQv/.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-L8yZ4q/.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-BzFpkp/.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-bg7MHu/.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-DQfgag/.geminiignore, continue without it.
β src/ui/hooks/atCommandProcessor.test.ts (46 tests) 1496ms
β src/config/settings.test.ts (89 tests) 719ms
β LoadedSettings Isolation and Serializability > setValue Serializability > should handle circular references (structuredClone supports them, but deepMerge may not) 436ms
β src/services/FileCommandLoader.test.ts (44 tests) 505ms
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.
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.
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.
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/config/extension.test.ts (79 tests) 1053ms
β src/ui/contexts/KeypressContext.test.tsx (112 tests) 303ms
β src/ui/commands/extensionsCommand.test.ts (56 tests) 405ms
β src/ui/hooks/useSlashCompletion.test.ts (25 tests) 535ms
β src/ui/hooks/slashCommandProcessor.test.tsx (35 tests) 510ms
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
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) 984ms
β useShellCommandProcessor > Background Shell Management > should hide background shell when waiting for confirmation and restore after delay 324ms
β useShellCommandProcessor > Background Shell Management > should auto-hide background shell when foreground shell starts and restore when it ends 436ms
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
β src/ui/hooks/vim.test.tsx (100 tests) 1172ms
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/useToolScheduler.test.ts (23 tests) 309ms
β src/ui/hooks/useGeminiStream.test.tsx (66 tests) 1332ms
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
β src/ui/components/shared/text-buffer.test.ts (220 tests) 2488ms
β useTextBuffer > Input Sanitization > should sanitize large text (>5000 chars) and strip unsafe characters 574ms
β useTextBuffer > Input Sanitization > should sanitize large ANSI text (>5000 chars) and strip escape codes 1347ms
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/components/AskUserDialog.test.tsx (35 tests) 1505ms
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
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
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) 170ms
β src/ui/components/SettingsDialog.test.tsx (58 tests) 4828ms
β src/ui/commands/hooksCommand.test.ts (33 tests) 206ms
β src/ui/hooks/useSelectionList.test.tsx (47 tests) 133ms
β src/nonInteractiveCli.test.ts (45 tests) 979ms
β runNonInteractive > should handle cancellation (Ctrl+C) 411ms
β src/ui/hooks/useQuotaAndFallback.test.ts (20 tests) 109ms
β src/services/prompt-processors/shellProcessor.test.ts (34 tests) 176ms
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
β src/ui/commands/chatCommand.test.ts (33 tests) 122ms
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
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
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.
β src/utils/sessions.test.ts (17 tests) 52ms
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
β src/ui/commands/skillsCommand.test.ts (23 tests) 159ms
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
(node:3119) 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)
β src/zed-integration/zedIntegration.test.ts (21 tests) 220ms
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
β src/ui/hooks/useApprovalModeIndicator.test.ts (20 tests) 89ms
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
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
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
β src/config/extensions/github.test.ts (33 tests) 179ms
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/config/extensions/extensionEnablement.test.ts (48 tests) 154ms
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
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
β src/utils/errors.test.ts (29 tests) 111ms
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/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/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/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/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/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
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
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
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
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
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
β src/config/policy-engine.integration.test.ts (17 tests) 243ms
β src/ui/components/InputPrompt.test.tsx (177 tests) 9437ms
β src/ui/AppContainer.test.tsx (81 tests) 3308ms
β src/ui/components/messages/ToolGroupMessage.test.tsx (28 tests) 618ms
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
β src/ui/hooks/useCommandCompletion.test.tsx (27 tests) 183ms
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 | 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/Composer.test.tsx (31 tests) 419ms
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/utils/commandUtils.test.ts (30 tests) 212ms
β src/services/McpPromptLoader.test.ts (31 tests) 35ms
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/ui/utils/textUtils.test.ts (68 tests) 90ms
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-JrNiJ4/.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-XzyqmY/.geminiignore, continue without it.
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-lePSGi/.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-n8ociy/.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-n8ociy/.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.
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
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
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
β src/ui/components/shared/BaseSettingsDialog.test.tsx (27 tests) 1153ms
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-rimgWW/.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-koHMlH/.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-9f7IcS/.geminiignore, continue without it.
β src/config/trustedFolders.test.ts (32 tests) 243ms
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-9f7IcS/.geminiignore, continue without it.
β src/utils/sessionUtils.test.ts (20 tests) 2434ms
β SessionSelector > should resolve session by UUID 388ms
β SessionSelector > should resolve session by index 555ms
β SessionSelector > should resolve latest session 495ms
β SessionSelector > should deduplicate sessions by ID 305ms
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-2gtFyI/.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-yqtdpV/.geminiignore, continue without it.
]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) [?7lstdout | 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-F8HsVr/.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-jJfm7j/.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-MdGD1c/.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-AI8o7D/.geminiignore, continue without it.
β src/gemini.test.tsx (35 tests | 1 skipped) 2676ms
β gemini.tsx main function exit codes > should exit with 41 for auth failure during sandbox setup 306ms
β 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 567ms
β project hooks loading based on trust > should load project hooks when workspace is trusted 518ms
β project hooks loading based on trust > should NOT load project hooks when workspace is not trusted 526ms
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-Mha44H/.geminiignore, continue without it.
β src/ui/utils/clipboardUtils.test.ts (34 tests) 750ms
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-79UeBC/.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/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.
β src/validateNonInterActiveAuth.test.ts (17 tests) 67ms
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.
β src/ui/hooks/useAtCompletion.test.ts (15 tests) 2011ms
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.
β src/utils/sandbox.test.ts (8 tests) 152ms
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.
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/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.
β src/config/settingsSchema.test.ts (20 tests) 17ms
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/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.
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.
β src/ui/commands/directoryCommand.test.tsx (21 tests) 26ms
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/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.
β src/ui/themes/color-utils.test.ts (40 tests) 35ms
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/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/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.
β src/ui/hooks/useSessionResume.test.ts (14 tests) 53ms
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/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.
β src/ui/components/StatsDisplay.test.tsx (17 tests) 403ms
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/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.
β src/ui/components/shared/BaseSelectionList.test.tsx (26 tests) 433ms
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.
β src/ui/hooks/useToolExecutionScheduler.test.ts (9 tests) 55ms
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.
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/commands/hooks/migrate.test.ts (17 tests) 26ms
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.
β src/ui/commands/memoryCommand.test.ts (11 tests) 44ms
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.
β src/ui/commands/agentsCommand.test.ts (20 tests) 68ms
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.
β src/ui/keyMatchers.test.ts (57 tests) 16ms
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.
β src/ui/hooks/useInputHistory.test.ts (14 tests) 121ms
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.
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.
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.
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.
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/utils/devtoolsService.test.ts (14 tests) 182ms
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.
β src/config/extensions/consent.test.ts (20 tests) 47ms
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/utils/installationInfo.test.ts (17 tests) 15ms
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.
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.
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.
β src/ui/components/ExitPlanModeDialog.test.tsx (26 tests) 2700ms
β ExitPlanModeDialog > useAlternateBuffer: true > clears feedback text when Ctrl+C is pressed while editing 361ms
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.
β src/ui/utils/rewindFileOps.test.ts (9 tests) 15ms
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.
β src/config/settings-validation.test.ts (25 tests) 26ms
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
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.
β src/ui/auth/AuthDialog.test.tsx (24 tests) 495ms
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.
β src/utils/handleAutoUpdate.test.ts (19 tests) 65ms
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:2390) 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.
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.
β src/ui/components/Footer.test.tsx (24 tests) 282ms
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.
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/ui/contexts/ScrollProvider.test.tsx (9 tests) 68ms
β src/utils/toolOutputCleanup.test.ts (10 tests) 65ms
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.
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.
β src/ui/hooks/usePermissionsModifyTrust.test.ts (13 tests) 190ms
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.
β src/services/CommandService.test.ts (11 tests) 51ms
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.
stderr | src/ui/components/shared/ScrollableList.test.tsx
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
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/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.
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/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.
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)
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) 1450ms
β ScrollableList Demo Behavior > should scroll to bottom when new items are added and stop when scrolled up 336ms
β ScrollableList Demo Behavior > Keyboard Navigation > should handle scroll keys correctly 1009ms
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/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.
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) 658ms
β src/config/config.test.ts (182 tests | 1 skipped) 9354ms
β Approval mode tool exclusion logic > should not exclude interactive tools in interactive mode regardless of approval mode 427ms
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
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"}
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-WRLXLj/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-WRLXLj/non-existent/.gitignore'
}
β src/ui/commands/setupGithubCommand.test.ts (10 tests) 135ms
β src/ui/hooks/useFolderTrust.test.ts (13 tests) 377ms
β src/utils/commentJson.test.ts (12 tests) 105ms
β src/ui/components/ModelStatsDisplay.test.tsx (8 tests) 565ms
β src/services/BuiltinCommandLoader.test.ts (15 tests) 3127ms
β BuiltinCommandLoader profile > should not include profile command when isDevelopment is false 1474ms
β BuiltinCommandLoader profile > should include profile command when isDevelopment is true 1622ms
β src/ui/hooks/usePhraseCycler.test.tsx (12 tests) 525ms
β src/ui/hooks/useMessageQueue.test.tsx (15 tests) 69ms
β src/ui/contexts/ScrollProvider.drag.test.tsx (6 tests) 38ms
β src/ui/utils/directoryUtils.test.ts (17 tests | 1 skipped) 45ms
β src/ui/components/shared/VirtualizedList.test.tsx (10 tests) 430ms
β src/ui/components/SessionBrowser.test.tsx (6 tests) 241ms
β src/ui/components/messages/DiffRenderer.test.tsx (26 tests) 887ms
β src/ui/commands/rewindCommand.test.tsx (13 tests) 64ms
β src/ui/components/LoadingIndicator.test.tsx (17 tests) 189ms
β src/config/extensions/update.test.ts (10 tests) 29ms
β src/ui/components/messages/ToolConfirmationMessage.test.tsx (16 tests) 527ms
β src/utils/relaunch.test.ts (8 tests) 61ms
β src/commands/extensions/uninstall.test.ts (9 tests) 28ms
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
β src/ui/components/RewindViewer.test.tsx (13 tests) 548ms
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/hooks/useTabbedNavigation.test.ts (23 tests) 73ms
β src/ui/utils/terminalCapabilityManager.test.ts (14 tests) 31ms
β src/ui/commands/restoreCommand.test.ts (13 tests) 163ms
β src/ui/components/HistoryItemDisplay.test.tsx (22 tests) 897ms
β src/commands/extensions/update.test.ts (10 tests) 33ms
β src/ui/components/BackgroundShellDisplay.test.tsx (10 tests) 286ms
β src/ui/hooks/useExtensionUpdates.test.tsx (4 tests) 320ms
β src/config/extension-manager-hydration.test.ts (4 tests) 686ms
β src/ui/components/shared/TextInput.test.tsx (11 tests) 130ms
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
β src/ui/components/ModelDialog.test.tsx (12 tests) 873ms
β src/ui/components/messages/ToolMessage.test.tsx (19 tests) 849ms
β > JSON rendering > pretty printing 10kb JSON completes in <50ms 352ms
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
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-W7HOgA/.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-xRnb1k/.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-3hkLHH/.geminiignore, continue without it.
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 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
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-3hkLHH/.geminiignore, continue without it.
β src/ui/hooks/atCommandProcessor_agents.test.ts (3 tests) 159ms
β src/ui/hooks/toolMapping.test.ts (18 tests) 52ms
stdout | src/commands/extensions/configure.test.ts > extensions configure command > Specific setting configuration > should configure a specific setting
Setting "TEST_VAR" updated.
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
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/ui/auth/useAuth.test.tsx > useAuth > useAuthCommand > should authenticate if USE_GEMINI and key is found
Authenticated via "gemini-api-key".
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/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/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/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".
β src/commands/extensions/enable.test.ts (9 tests) 95ms
stdout | src/commands/extensions/configure.test.ts > extensions configure command > Configure all extensions > should log if no extensions installed
No extensions installed.
β src/commands/extensions/configure.test.ts (9 tests) 600ms
stdout | src/ui/auth/useAuth.test.tsx > useAuth > useAuthCommand > should authenticate successfully for valid auth type
Authenticated via "oauth-personal".
β src/ui/components/ProQuotaDialog.test.tsx (8 tests) 172ms
β src/ui/auth/useAuth.test.tsx (15 tests) 459ms
β src/ui/hooks/useShellHistory.test.ts (7 tests) 694ms
β src/ui/components/DebugProfiler.test.tsx (15 tests) 93ms
β src/ui/hooks/useSessionBrowser.test.ts (8 tests) 48ms
β src/ui/hooks/useInputHistoryStore.test.ts (14 tests) 85ms
β src/config/sandboxConfig.test.ts (27 tests) 29ms
β src/ui/commands/ideCommand.test.ts (8 tests) 40ms
β src/ui/components/AgentConfigDialog.test.tsx (11 tests) 537ms
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)
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/ui/themes/theme-manager.test.ts (15 tests) 38ms
β src/ui/commands/copyCommand.test.ts (11 tests) 70ms
β src/utils/sessionCleanup.integration.test.ts (5 tests) 96ms
β src/ui/components/messages/CompressionMessage.test.tsx (10 tests) 323ms
β src/ui/hooks/useHistoryManager.test.ts (11 tests) 39ms
β src/commands/mcp/list.test.ts (5 tests) 22ms
β src/ui/components/MultiFolderTrustDialog.test.tsx (8 tests) 536ms
β src/ui/hooks/useReverseSearchCompletion.test.tsx (10 tests) 163ms
β src/ui/hooks/useIdeTrustListener.test.tsx (5 tests) 77ms
β src/ui/components/shared/MaxSizedBox.test.tsx (13 tests) 561ms
β src/utils/envVarResolver.test.ts (16 tests) 15ms
(node:5141) 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/App.test.tsx (12 tests) 588ms
β src/utils/deepMerge.test.ts (17 tests) 61ms
β src/deferred.test.ts (9 tests) 46ms
β src/ui/commands/mcpCommand.test.ts (5 tests) 207ms
β src/ui/utils/highlight.test.ts (22 tests) 11ms
β src/services/prompt-processors/injectionParser.test.ts (21 tests) 57ms
β src/services/prompt-processors/atFileProcessor.test.ts (11 tests) 311ms
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) 77ms
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/ui/hooks/useIncludeDirsTrust.test.tsx (6 tests) 168ms
β src/utils/gitUtils.test.ts (24 tests) 31ms
β src/ui/utils/computeStats.test.ts (12 tests) 44ms
β src/ui/components/messages/ToolResultDisplay.test.tsx (13 tests) 1193ms
β ToolResultDisplay > truncates very long string results 502ms
β src/ui/state/extensions.test.ts (15 tests) 80ms
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/extensions/disable.test.ts (12 tests) 168ms
β src/commands/mcp/remove.test.ts (6 tests) 69ms
β src/ui/hooks/useKeypress.test.tsx (22 tests) 102ms
β src/ui/hooks/useEditorSettings.test.tsx (10 tests) 63ms
β src/utils/skillUtils.test.ts (7 tests) 524ms
β src/config/extensions/extensionUpdates.test.ts (1 test) 68ms
β src/utils/windowTitle.test.ts (14 tests) 23ms
β src/ui/hooks/useGitBranchName.test.tsx (7 tests) 336ms
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/ui/hooks/useLoadingIndicator.test.tsx (7 tests) 277ms
β src/ui/commands/bugCommand.test.ts (3 tests) 110ms
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/gemini_cleanup.test.tsx (1 test) 671ms
β gemini.tsx main function cleanup > should log error when cleanupExpiredSessions fails 669ms
β src/config/extension-manager-scope.test.ts (3 tests) 91ms
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/components/PermissionsModifyTrustDialog.test.tsx (7 tests) 710ms
β src/config/extension-manager-themes.spec.ts (2 tests) 391ms
β src/ui/hooks/useHookDisplayState.test.ts (6 tests) 65ms
β src/ui/themes/theme.test.ts (14 tests) 21ms
β src/ui/components/ToolConfirmationQueue.test.tsx (5 tests) 955ms
β ToolConfirmationQueue > renders the confirming tool with progress indicator 340ms
β src/ui/contexts/ToolActionsContext.test.tsx (5 tests) 187ms
β src/ui/components/MainContent.test.tsx (7 tests) 1459ms
β MainContent > renders in normal buffer mode 486ms
β MainContent > MainContent Tool Output Height Logic > 'ASB mode - Focused shell should expand' 439ms
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) 120ms
β src/ui/contexts/SessionContext.test.tsx (4 tests) 70ms
β src/ui/components/ValidationDialog.test.tsx (8 tests) 204ms
β src/config/extensions/github_fetch.test.ts (8 tests) 45ms
β src/config/config.integration.test.ts (14 tests) 11582ms
β Configuration Integration Tests > Approval Mode Integration Tests > 'should parse --approval-mode=auto_ediβ¦' 11468ms
β src/ui/components/ToolStatsDisplay.test.tsx (5 tests) 125ms
β src/ui/components/DialogManager.test.tsx (19 tests) 346ms
β src/config/extensionRegistryClient.test.ts (10 tests) 95ms
β src/ui/utils/MarkdownDisplay.test.tsx (30 tests) 1634ms
β > with 'Windows' line endings > renders a fenced code block without a language 609ms
β src/ui/components/AppHeader.test.tsx (9 tests) 1395ms
β > should render the banner with default text 405ms
β > should NOT render Tips when tipsShown is 10 or more 360ms
β src/ui/components/shared/Scrollable.test.tsx (9 tests) 426ms
β src/ui/components/messages/ShellToolMessage.test.tsx (12 tests) 435ms
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/commands/extensions/install.test.ts (8 tests) 265ms
β src/config/mcp/mcpServerEnablement.test.ts (14 tests) 11ms
β src/ui/utils/terminalSetup.test.ts (9 tests) 69ms
β src/commands/extensions/list.test.ts (8 tests) 31ms
β src/config/extension-manager-skills.test.ts (3 tests) 743ms
β ExtensionManager skills validation > should emit a warning during install if skills directory is not empty but no skills are loaded 465ms
β src/ui/hooks/shellReducer.test.ts (12 tests) 22ms
β src/ui/components/messages/ToolStickyHeaderRegression.test.tsx (2 tests) 353ms
β src/commands/extensions/link.test.ts (5 tests) 24ms
β src/utils/hookSettings.test.ts (8 tests) 23ms
β src/ui/hooks/useBackgroundShellManager.test.tsx (6 tests) 86ms
β src/ui/components/Notifications.test.tsx (9 tests) 128ms
(node:6259) 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) 979ms
β AlternateBufferQuittingDisplay > renders with active and pending tool messages 388ms
β src/ui/components/shared/RadioButtonSelect.test.tsx (5 tests) 138ms
β src/ui/components/views/McpStatus.test.tsx (13 tests) 765ms
β src/ui/components/ThemeDialog.test.tsx (9 tests) 2464ms
β ThemeDialog Snapshots > should render correctly in theme selection mode 921ms
β ThemeDialog Snapshots > should render correctly in scope selector mode 402ms
β ThemeDialog Snapshots > should call onCancel when ESC is pressed 351ms
β src/ui/utils/formatters.test.ts (28 tests) 23ms
β src/utils/agentUtils.test.ts (8 tests) 17ms
β src/ui/components/shared/TabHeader.test.tsx (12 tests) 170ms
β src/config/settings_repro.test.ts (1 test) 75ms
β src/ui/components/ShellInputPrompt.test.tsx (12 tests) 90ms
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) 73ms
β src/ui/IdeIntegrationNudge.test.tsx (6 tests) 2111ms
β IdeIntegrationNudge > handles "No" selection 409ms
β IdeIntegrationNudge > handles "Dismiss" selection 782ms
β src/ui/utils/mouse.test.ts (17 tests) 87ms
β src/ui/hooks/useConsoleMessages.test.tsx (7 tests) 200ms
β src/utils/sandboxUtils.test.ts (17 tests) 108ms
β src/utils/hookUtils.test.ts (8 tests) 12ms
β src/ui/components/AnsiOutput.test.tsx (14 tests) 457ms
β src/ui/components/StatusDisplay.test.tsx (7 tests) 399ms
β src/ui/utils/updateCheck.test.ts (10 tests) 11ms
β src/ui/hooks/useTerminalTheme.test.tsx (7 tests) 80ms
β src/ui/components/FolderTrustDialog.test.tsx (9 tests) 1638ms
β FolderTrustDialog > should render the dialog with title and description 388ms
β FolderTrustDialog > directory display > should correctly display the parent folder name for a nested directory 480ms
β src/ui/components/messages/Todo.test.tsx (14 tests) 776ms
β src/ui/components/ToastDisplay.test.tsx (16 tests) 118ms
β src/utils/userStartupWarnings.test.ts (7 tests) 13ms
β src/commands/skills/enable.test.ts (4 tests) 45ms
β src/ui/components/EditorSettingsDialog.test.tsx (5 tests) 593ms
β src/ui/components/views/ExtensionsList.test.tsx (11 tests) 131ms
β src/config/keyBindings.test.ts (6 tests) 46ms
β src/commands/skills/install.test.ts (6 tests) 11ms
β src/commands/skills/list.test.ts (5 tests) 76ms
β src/config/settings_validation_warning.test.ts (3 tests) 19ms
β src/utils/commands.test.ts (12 tests) 7ms
β src/ui/components/UserIdentity.test.tsx (5 tests) 120ms
β src/ui/components/Header.test.tsx (7 tests) 258ms
β src/ui/commands/statsCommand.test.ts (4 tests) 97ms
β src/ui/hooks/useFlickerDetector.test.ts (6 tests) 137ms
β src/ui/layouts/DefaultAppLayout.test.tsx (3 tests) 201ms
β src/config/extension-manager-agents.test.ts (2 tests) 600ms
β ExtensionManager agents loading > should load agents from an extension 349ms
β src/ui/hooks/useFocus.test.tsx (6 tests) 125ms
β src/ui/components/shared/ExpandableText.test.tsx (7 tests) 272ms
β src/ui/components/shared/EnumSelector.test.tsx (9 tests) 557ms
β src/ui/commands/authCommand.test.ts (9 tests) 165ms
β src/ui/auth/ApiAuthDialog.test.tsx (6 tests) 353ms
β src/ui/commands/compressCommand.test.ts (5 tests) 132ms
β src/utils/readStdin.test.ts (6 tests) 146ms
β src/commands/skills/disable.test.ts (4 tests) 23ms
β src/utils/activityLogger.test.ts (6 tests) 9ms
β src/core/initializer.test.ts (5 tests) 69ms
β src/ui/hooks/useTimer.test.tsx (8 tests) 174ms
β src/ui/privacy/CloudFreePrivacyNotice.test.tsx (9 tests) 262ms
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/ui/commands/policiesCommand.test.ts (4 tests) 189ms
β src/commands/extensions/validate.test.ts (5 tests) 393ms
β src/ui/components/ConfigInitDisplay.test.tsx (4 tests) 136ms
β src/ui/hooks/usePrivacySettings.test.tsx (4 tests) 188ms
β src/ui/commands/permissionsCommand.test.ts (7 tests) 63ms
β src/ui/commands/clearCommand.test.ts (2 tests) 40ms
β src/ui/hooks/useRewind.test.ts (5 tests) 173ms
β src/ui/components/messages/ToolMessageFocusHint.test.tsx (5 tests) 148ms
β src/ui/hooks/useTurnActivityMonitor.test.ts (4 tests) 238ms
β src/config/extensions/variables.test.ts (10 tests) 76ms
β src/ui/components/messages/ToolConfirmationMessageOverflow.test.tsx (1 test) 166ms
β src/ui/commands/toolsCommand.test.ts (4 tests) 33ms
β src/ui/hooks/useAnimatedScrollbar.test.tsx (7 tests) 51ms
β src/ui/components/views/SkillsList.test.tsx (6 tests) 130ms
β src/ui/components/GradientRegression.test.tsx (5 tests) 950ms
β Gradient Crash Regression Tests > should not crash when theme.ui.gradient is empty 593ms
β src/utils/dialogScopeUtils.test.ts (4 tests) 32ms
β src/utils/cleanup.test.ts (8 tests) 36ms
β src/ui/commands/planCommand.test.ts (3 tests) 60ms
stdout | src/ui/hooks/useAtCompletion_agents.test.ts > useAtCompletion with Agents > should include agent suggestions
Ignore file not found: /tmp/gemini-cli-test-2LRqVA/.geminiignore, continue without it.
stdout | src/ui/hooks/useAtCompletion_agents.test.ts > useAtCompletion with Agents > should filter agent suggestions
Ignore file not found: /tmp/gemini-cli-test-9iGrSL/.geminiignore, continue without it.
β src/ui/hooks/useAtCompletion_agents.test.ts (2 tests) 236ms
β src/ui/commands/initCommand.test.ts (3 tests) 109ms
β src/ui/components/ContextSummaryDisplay.test.tsx (4 tests) 66ms
β src/ui/hooks/useSnowfall.test.tsx (5 tests) 232ms
β src/zed-integration/fileSystemService.test.ts (4 tests) 16ms
β src/config/auth.test.ts (8 tests) 10ms
β src/commands/extensions.test.tsx (3 tests) 21ms
β src/ui/utils/textOutput.test.ts (10 tests) 40ms
β src/ui/components/ConsentPrompt.test.tsx (5 tests) 405ms
β src/ui/hooks/useShellInactivityStatus.test.ts (4 tests) 208ms
β src/ui/components/SuggestionsDisplay.test.tsx (6 tests) 279ms
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.
β src/config/extensions/storage.test.ts (5 tests) 54ms
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/ui/hooks/useBanner.test.ts (5 tests) 145ms
β src/commands/extensions/new.test.ts (4 tests) 372ms
β src/ui/components/IdeTrustChangeDialog.test.tsx (6 tests) 206ms
β src/ui/hooks/useMcpStatus.test.tsx (4 tests) 40ms
β src/ui/commands/docsCommand.test.ts (3 tests) 71ms
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) 133ms
β src/ui/utils/displayUtils.test.ts (8 tests) 9ms
β src/ui/components/LogoutConfirmationDialog.test.tsx (5 tests) 114ms
β src/test-utils/render.test.tsx (6 tests) 48ms
β src/ui/auth/AuthInProgress.test.tsx (5 tests) 472ms
β AuthInProgress > renders initial state with spinner 343ms
β src/utils/persistentState.test.ts (5 tests) 12ms
β src/ui/hooks/useBatchedScroll.test.ts (7 tests) 208ms
β src/commands/skills/uninstall.test.ts (5 tests) 31ms
β src/ui/commands/terminalSetupCommand.test.ts (5 tests) 47ms
β src/utils/readStdin_safety.test.ts (2 tests) 61ms
β src/ui/auth/LoginWithGoogleRestartDialog.test.tsx (4 tests) 238ms
β src/utils/startupWarnings.test.ts (4 tests) 6ms
β src/ui/components/QueuedMessageDisplay.test.tsx (5 tests) 83ms
β src/utils/jsonoutput.test.ts (15 tests) 16ms
β src/commands/mcp.test.ts (3 tests) 68ms
β src/ui/components/shared/DescriptiveRadioButtonSelect.test.tsx (2 tests) 265ms
β src/ui/components/messages/ToolMessageRawMarkdown.test.tsx (6 tests) 707ms
β - Raw Markdown Display Snapshots > renders with renderMarkdown=true, useAlternateBuffer=false '(default, regular buffer)' 471ms
β src/ui/components/RewindConfirmation.test.tsx (4 tests) 712ms
β RewindConfirmation > renders correctly with stats 365ms
β src/ui/components/shared/HalfLinePaddedBox.test.tsx (4 tests) 306ms
β src/ui/contexts/TerminalContext.test.tsx (2 tests) 63ms
β― src/ui/components/shared/performance.test.ts (3 tests | 1 failed) 6042ms
β text-buffer performance > should handle pasting large amounts of text efficiently 169ms
Γ text-buffer performance > should handle character-by-character insertion in a large buffer efficiently 5857ms
β expected 5058 to be less than 5000
β text-buffer performance > should highlight many lines efficiently 14ms
β src/ui/hooks/vim-passthrough.test.tsx (4 tests) 95ms
β src/ui/hooks/useMemoryMonitor.test.tsx (3 tests) 174ms
β src/core/auth.test.ts (4 tests) 9ms
β src/ui/components/messages/ToolResultDisplayOverflow.test.tsx (1 test) 616ms
β ToolResultDisplay Overflow > should display "press ctrl-o" hint when content overflows in ToolGroupMessage 614ms
β src/ui/hooks/useMouseClick.test.ts (2 tests) 21ms
β src/ui/components/ShowMoreLines.test.tsx (5 tests) 277ms
β src/ui/components/SessionSummaryDisplay.test.tsx (1 test) 519ms
β > renders the summary display with a title 518ms
β src/ui/components/QuotaDisplay.test.tsx (9 tests) 286ms
β src/ui/components/AboutBox.test.tsx (6 tests) 463ms
β src/ui/components/Checklist.test.tsx (5 tests) 126ms
β src/ui/utils/markdownUtilities.test.ts (7 tests) 32ms
β src/ui/components/DetailedMessagesDisplay.test.tsx (3 tests) 191ms
β src/ui/utils/clipboardUtils.windows.test.ts (1 test) 80ms
β src/ui/hooks/useMouse.test.ts (4 tests) 110ms
β src/commands/skills/link.test.ts (3 tests) 41ms
β src/ui/hooks/useReactToolScheduler.test.ts (1 test) 150ms
β src/ui/privacy/PrivacyNotice.test.tsx (4 tests) 95ms
β src/commands/skills.test.tsx (3 tests) 8ms
β src/test-utils/mockCommandContext.test.ts (3 tests) 103ms
β src/ui/components/Help.test.tsx (3 tests) 327ms
β src/ui/components/messages/ThinkingMessage.test.tsx (6 tests) 79ms
β src/ui/components/QuittingDisplay.test.tsx (2 tests) 111ms
β src/ui/utils/TableRenderer.test.tsx (2 tests) 304ms
β src/ui/utils/input.test.ts (6 tests) 11ms
β src/ui/components/Table.test.tsx (3 tests) 82ms
β src/ui/components/ExitWarning.test.tsx (4 tests) 145ms
β src/ui/utils/keybindingUtils.test.ts (5 tests) 12ms
β src/ui/components/BubblingRegression.test.tsx (1 test) 329ms
β Key Bubbling Regression > does not navigate when pressing "j" or "k" in a focused text input 328ms
β src/ui/components/ApprovalModeIndicator.test.tsx (6 tests) 94ms
β src/ui/utils/CodeColorizer.test.tsx (1 test) 169ms
β src/zed-integration/acpErrors.test.ts (7 tests) 9ms
β src/ui/commands/modelCommand.test.ts (3 tests) 83ms
β src/core/theme.test.ts (3 tests) 40ms
β src/ui/components/views/ToolsList.test.tsx (3 tests) 336ms
β src/ui/components/messages/UserMessage.test.tsx (4 tests) 414ms
β UserMessage > renders normal user message with correct prefix 388ms
β src/ui/components/ContextUsageDisplay.test.tsx (3 tests) 224ms
β src/ui/components/HookStatusDisplay.test.tsx (4 tests) 155ms
β src/ui/components/ChecklistItem.test.tsx (6 tests) 157ms
β src/ui/components/NewAgentsNotification.test.tsx (2 tests) 537ms
β NewAgentsNotification > renders agent list 402ms
β src/services/prompt-processors/argumentProcessor.test.ts (2 tests) 163ms
β src/ui/commands/helpCommand.test.ts (2 tests) 54ms
β src/ui/commands/quitCommand.test.ts (1 test) 139ms
β src/ui/components/messages/GeminiMessage.test.tsx (4 tests) 284ms
β src/ui/components/views/ChatList.test.tsx (3 tests) 234ms
β src/ui/components/MemoryUsageDisplay.test.tsx (2 tests) 256ms
β src/ui/components/messages/RedirectionConfirmation.test.tsx (1 test) 779ms
β ToolConfirmationMessage Redirection > should display redirection warning and tip for redirected commands 540ms
β src/ui/utils/ui-sizing.test.ts (4 tests) 12ms
β src/ui/hooks/useTips.test.ts (3 tests) 168ms
β src/ui/components/AdminSettingsChangedDialog.test.tsx (4 tests) 194ms
β src/ui/components/ShortcutsHelp.test.tsx (4 tests) 413ms
β src/ui/commands/privacyCommand.test.ts (2 tests) 126ms
β src/ui/hooks/useModelCommand.test.tsx (3 tests) 82ms
β src/ui/privacy/CloudPaidPrivacyNotice.test.tsx (2 tests) 223ms
β src/ui/components/LoopDetectionConfirmation.test.tsx (2 tests) 406ms
β LoopDetectionConfirmation > renders correctly 324ms
β src/ui/commands/themeCommand.test.ts (2 tests) 29ms
β src/commands/utils.test.ts (2 tests) 47ms
β src/utils/resolvePath.test.ts (7 tests) 18ms
β src/ui/privacy/GeminiPrivacyNotice.test.tsx (2 tests) 284ms
β src/ui/components/CopyModeWarning.test.tsx (2 tests) 94ms
β src/ui/components/RawMarkdownIndicator.test.tsx (2 tests) 169ms
β src/ui/components/CliSpinner.test.tsx (2 tests) 194ms
β src/ui/commands/settingsCommand.test.ts (2 tests) 107ms
β src/ui/commands/corgiCommand.test.ts (2 tests) 118ms
β src/ui/commands/shellsCommand.test.ts (3 tests) 28ms
β src/ui/components/shared/SectionHeader.test.tsx (3 tests) 230ms
β src/ui/commands/editorCommand.test.ts (2 tests) 48ms
β src/utils/events.test.ts (2 tests) 15ms
β src/config/settingPaths.test.ts (2 tests) 33ms
β src/ui/components/messages/InfoMessage.test.tsx (3 tests) 211ms
β src/ui/components/ConsoleSummaryDisplay.test.tsx (3 tests) 147ms
β src/ui/components/ThemedGradient.test.tsx (1 test) 132ms
β src/ui/components/Banner.test.tsx (3 tests) 193ms
β src/utils/processUtils.test.ts (1 test) 5ms
β src/ui/components/Tips.test.tsx (2 tests) 69ms
β src/ui/components/messages/WarningMessage.test.tsx (2 tests) 62ms
β src/utils/updateEventEmitter.test.ts (1 test) 40ms
β src/utils/math.test.ts (7 tests) 18ms
β src/ui/components/StickyHeader.test.tsx (2 tests) 94ms
β src/ui/components/messages/ErrorMessage.test.tsx (2 tests) 107ms
β src/ui/utils/InlineMarkdownRenderer.test.ts (7 tests) 23ms
β src/ui/components/ShellModeIndicator.test.tsx (1 test) 42ms
β src/ui/components/UpdateNotification.test.tsx (1 test) 43ms
β―β―β―β―β―β―β― 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 5058 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 20:04:04
Duration 214.78s (transform 78.60s, setup 3220.14s, collect 685.65s, tests 150.83s, environment 224ms, prepare 102.73s)
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.5
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.5 test
> vitest run
RUN v3.2.4 /startdir/src/gemini-cli/packages/core
Coverage enabled with v8
β src/utils/memoryImportProcessor.test.ts (25 tests) 229ms
β src/utils/editCorrector.test.ts (42 tests) 108ms
β src/policy/policy-engine.test.ts (73 tests) 227ms
β src/utils/fileUtils.test.ts (86 tests) 250ms
β src/mcp/oauth-provider.test.ts (40 tests) 1531ms
β MCPOAuthProvider > authenticate > should handle invalid callback request 1015ms
β src/services/shellExecutionService.test.ts (53 tests) 1309ms
β src/tools/mcp-tool.test.ts (43 tests) 364ms
β src/core/prompts.test.ts (64 tests) 590ms
β src/tools/ripGrep.test.ts (59 tests | 1 skipped) 3639ms
β RipGrepTool > multi-directory workspace > should search only specified path within workspace directories 340ms
β RipGrepTool > error handling and edge cases > should handle workspace boundary violations 396ms
β RipGrepTool > error handling and edge cases > should handle 'empty directories' gracefully 302ms
β src/hooks/hookRunner.test.ts (24 tests) 232ms
β src/services/modelConfigService.test.ts (31 tests) 11ms
β src/services/sessionSummaryService.test.ts (33 tests) 104ms
β src/code_assist/admin/admin_controls.test.ts (41 tests) 76ms
β src/agents/registry.test.ts (45 tests) 379ms
β src/scheduler/scheduler.test.ts (27 tests) 425ms
β src/tools/edit.test.ts (43 tests) 1068ms
β src/code_assist/oauth2.test.ts (31 tests) 686ms
β src/tools/write-file.test.ts (35 tests) 752ms
β src/telemetry/loggers.test.ts (37 tests) 215ms
β src/core/baseLlmClient.test.ts (29 tests) 245ms
β src/tools/mcp-client.test.ts (59 tests) 1617ms
β connectToMcpServer with OAuth > should discover oauth config if not in www-authenticate header 430ms
β src/core/coreToolScheduler.test.ts (22 tests) 1208ms
β src/utils/memoryDiscovery.test.ts (30 tests) 2020ms
β src/agents/local-executor.test.ts (37 tests) 283ms
β src/utils/editor.test.ts (140 tests) 194ms
β src/policy/config.test.ts (21 tests) 13805ms
β createPolicyEngineConfig > should filter out insecure system policy directories 2314ms
β createPolicyEngineConfig > should return ASK_USER for write tools and ALLOW for read-only tools by default 695ms
β createPolicyEngineConfig > should deny tools from excluded MCP servers 327ms
β createPolicyEngineConfig > should allow tools from trusted MCP servers 380ms
β createPolicyEngineConfig > should handle multiple MCP server configurations together 406ms
β createPolicyEngineConfig > should allow all tools in YOLO mode 460ms
β createPolicyEngineConfig > should allow edit tool in AUTO_EDIT mode 533ms
β createPolicyEngineConfig > should prioritize exclude over allow 684ms
β createPolicyEngineConfig > should prioritize specific tool allows over MCP server excludes 773ms
β createPolicyEngineConfig > should handle complex priority scenarios correctly 439ms
β createPolicyEngineConfig > should handle MCP servers with undefined trust property 669ms
β createPolicyEngineConfig > should have YOLO allow-all rule beat write tool rules in YOLO mode 731ms
β createPolicyEngineConfig > should support argsPattern in policy rules 746ms
β createPolicyEngineConfig > should load safety_checker configuration from TOML 534ms
β createPolicyEngineConfig > should reject invalid in-process checker names 526ms
β createPolicyEngineConfig > should have default ASK_USER rule for discovered tools 1447ms
β createPolicyEngineConfig > should normalize legacy "ShellTool" alias to "run_shell_command" 1390ms
β src/services/loopDetectionService.test.ts (48 tests) 633ms
β src/tools/read-many-files.test.ts (31 tests) 703ms
β src/telemetry/clearcut-logger/clearcut-logger.test.ts (54 tests) 1377ms
β src/utils/googleQuotaErrors.test.ts (25 tests) 54ms
β src/config/config.test.ts (143 tests) 3782ms
β Server Config (config.ts) > initialize > should not throw an error if checkpointing is disabled and GitService fails 366ms
β src/tools/shell.test.ts (40 tests | 1 skipped) 1088ms
β src/hooks/hookRegistry.test.ts (24 tests) 81ms
β src/telemetry/memory-monitor.test.ts (31 tests) 166ms
β src/core/client.test.ts (72 tests | 1 skipped) 3833ms
β src/utils/generateContentResponseUtilities.test.ts (48 tests) 19ms
β src/ide/ide-client.test.ts (26 tests) 205ms
β src/ide/ide-connection-utils.test.ts (35 tests | 1 skipped) 141ms
β src/tools/grep.test.ts (26 tests) 499ms
β src/utils/paths.test.ts (94 tests | 17 skipped) 15ms
β src/services/chatCompressionService.test.ts (26 tests) 380ms
β src/tools/web-fetch.test.ts (31 tests) 207ms
β src/utils/workspaceContext.test.ts (38 tests) 87ms
β src/scheduler/state-manager.test.ts (29 tests) 105ms
β src/core/turn.test.ts (22 tests) 33ms
β src/services/fileDiscoveryService.test.ts (34 tests) 248ms
β src/policy/shell-safety.test.ts (23 tests) 70ms
β src/utils/shell-utils.test.ts (57 tests | 1 skipped) 561ms
β src/utils/systemEncoding.test.ts (38 tests) 130ms
β src/hooks/hookEventHandler.test.ts (14 tests) 80ms
β src/core/geminiChat.test.ts (48 tests) 7787ms
β GeminiChat > sendMessageStream > should fail if the stream ends with an empty part and has no finishReason 507ms
β GeminiChat > sendMessageStream > should throw an error when a tool call is followed by an empty stream response 525ms
β GeminiChat > sendMessageStream > should throw InvalidStreamError when no tool call and no finish reason 506ms
β GeminiChat > sendMessageStream > should throw InvalidStreamError when no tool call and empty response text 546ms
β GeminiChat > sendMessageStream > should throw InvalidStreamError when finishReason is MALFORMED_FUNCTION_CALL 507ms
β GeminiChat > sendMessageStream > should retry when finishReason is MALFORMED_FUNCTION_CALL 529ms
β GeminiChat > sendMessageStream with retries > should yield a RETRY event when an invalid stream is encountered 515ms
β GeminiChat > sendMessageStream with retries > should retry on invalid content, succeed, and report metrics 517ms
β GeminiChat > sendMessageStream with retries > should set temperature to 1 on retry 516ms
β GeminiChat > sendMessageStream with retries > should fail after all retries on persistent invalid content and report metrics 520ms
β GeminiChat > should correctly retry and append to an existing history mid-conversation 540ms
β GeminiChat > should retry if the model returns a completely empty stream (no chunks) 561ms
β GeminiChat > should discard valid partial content from a failed attempt upon retry 513ms
β src/policy/toml-loader.test.ts (29 tests) 337ms
β src/utils/pathReader.test.ts (18 tests) 304ms
β src/output/stream-json-formatter.test.ts (20 tests) 60ms
β src/mcp/oauth-token-storage.test.ts (28 tests) 41ms
β src/mcp/oauth-utils.test.ts (32 tests) 79ms
β src/mcp/token-storage/keychain-token-storage.test.ts (29 tests) 1049ms
β src/core/logger.test.ts (39 tests) 195ms
β src/utils/googleErrors.test.ts (13 tests) 8ms
β src/utils/retry.test.ts (34 tests) 167ms
β src/tools/tool-registry.test.ts (21 tests) 304ms
β src/code_assist/converter.test.ts (25 tests) 47ms
β src/services/chatRecordingService.test.ts (23 tests) 226ms
β src/agents/auth-provider/factory.test.ts (25 tests) 20ms
β src/hooks/hookAggregator.test.ts (10 tests) 27ms
β src/services/toolOutputMaskingService.test.ts (11 tests) 97ms
β src/hooks/types.test.ts (35 tests) 80ms
β src/tools/read-file.test.ts (32 tests) 443ms
β src/telemetry/uiTelemetry.test.ts (19 tests) 127ms
β src/scheduler/confirmation.test.ts (9 tests) 135ms
β src/routing/strategies/numericalClassifierStrategy.test.ts (22 tests) 31ms
β src/tools/ls.test.ts (21 tests) 364ms
β src/ide/ideContext.test.ts (23 tests) 13ms
β src/tools/memoryTool.test.ts (15 tests) 255ms
β src/code_assist/setup.test.ts (23 tests) 50ms
β src/tools/ask-user.test.ts (22 tests) 268ms
β src/scheduler/policy.test.ts (20 tests) 150ms
β src/tools/modifiable-tool.test.ts (12 tests) 44ms
β src/code_assist/server.test.ts (22 tests) 193ms
β src/hooks/hookPlanner.test.ts (10 tests) 27ms
β src/services/gitService.test.ts (19 tests) 162ms
β src/core/contentGenerator.test.ts (20 tests) 94ms
β src/telemetry/gcp-exporters.test.ts (18 tests) 154ms
β src/utils/userAccountManager.test.ts (23 tests) 83ms
β src/telemetry/sanitize.test.ts (18 tests) 89ms
β src/tools/glob.test.ts (37 tests) 4425ms
β src/tools/exit-plan-mode.test.ts (22 tests) 319ms
β src/utils/getFolderStructure.test.ts (15 tests) 209ms
β src/utils/partUtils.test.ts (37 tests) 92ms
β src/utils/gitIgnoreParser.test.ts (25 tests) 251ms
β src/utils/events.test.ts (20 tests) 734ms
β CoreEventEmitter > ConsentRequest Event > should respect the backlog size limit for consent requests 559ms
β src/config/models.test.ts (43 tests) 26ms
β src/utils/bfsFileSearch.test.ts (16 tests) 179ms
β src/utils/ignorePatterns.test.ts (28 tests) 57ms
β src/services/environmentSanitization.test.ts (18 tests) 12ms
β src/config/projectRegistry.test.ts (14 tests) 110ms
β src/utils/checkpointUtils.test.ts (15 tests) 122ms
β src/agents/agentLoader.test.ts (18 tests) 337ms
β src/safety/checker-runner.test.ts (9 tests) 40ms
β src/output/json-formatter.test.ts (17 tests) 20ms
β src/code_assist/oauth-credential-storage.test.ts (16 tests) 40ms
β src/telemetry/activity-monitor.test.ts (22 tests) 80ms
β src/telemetry/semantic.test.ts (21 tests) 67ms
β src/agents/a2a-client-manager.test.ts (18 tests) 114ms
β src/mcp/token-storage/file-token-storage.test.ts (16 tests) 845ms
β src/availability/policyHelpers.test.ts (16 tests) 12ms
β src/ide/ide-installer.test.ts (17 tests) 71ms
(node:12480) 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:12480) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 SIGINT listeners added to [process]. MaxListeners is 10. Use emitter.setMaxListeners() to increase limit
β src/telemetry/sdk.test.ts (16 tests) 284ms
β src/utils/tokenCalculation.test.ts (15 tests) 65ms
β src/agents/remote-invocation.test.ts (10 tests) 64ms
β src/core/geminiChat_network_retry.test.ts (7 tests) 2774ms
β GeminiChat Network Retries > should retry when a 503 ApiError occurs during stream iteration 702ms
β GeminiChat Network Retries > should retry on generic network error if retryFetchErrors is true 524ms
β GeminiChat Network Retries > should retry on SSL error during connection phase (ERR_SSL_SSLV3_ALERT_BAD_RECORD_MAC) 508ms
β GeminiChat Network Retries > should retry on ECONNRESET error during connection phase 505ms
β GeminiChat Network Retries > should retry on SSL error during stream iteration (mid-stream failure) 513ms
β src/services/modelConfig.integration.test.ts (10 tests) 6ms
β src/skills/skillLoader.test.ts (14 tests) 252ms
β src/safety/built-in.test.ts (14 tests) 219ms
β src/ide/detect-ide.test.ts (30 tests) 47ms
β src/telemetry/rate-limiter.test.ts (24 tests) 71ms
β src/mcp/token-storage/hybrid-token-storage.test.ts (11 tests) 48ms
β src/fallback/handler.test.ts (14 tests) 36ms
β src/skills/skillManager.test.ts (9 tests) 321ms
β src/scheduler/tool-modifier.test.ts (6 tests) 62ms
β src/tools/mcp-client-manager.test.ts (17 tests) 55ms
β src/utils/ignoreFileParser.test.ts (19 tests) 204ms
β src/utils/secure-browser-launcher.test.ts (14 tests) 86ms
β src/routing/strategies/classifierStrategy.test.ts (13 tests) 67ms
β src/tools/message-bus-integration.test.ts (6 tests) 67ms
β src/config/storage.test.ts (16 tests) 26ms
β src/code_assist/telemetry.test.ts (16 tests) 27ms
β src/hooks/hookSystem.test.ts (8 tests) 230ms
β src/confirmation-bus/message-bus.test.ts (10 tests) 61ms
β src/utils/llm-edit-fixer.test.ts (8 tests) 31ms
β src/utils/terminalSerializer.test.ts (17 tests) 341ms
β src/utils/errorReporting.test.ts (6 tests) 222ms
β src/utils/channel.test.ts (22 tests) 34ms
β src/mcp/google-auth-provider.test.ts (15 tests) 151ms
β src/telemetry/startupProfiler.test.ts (23 tests) 239ms
β src/telemetry/high-water-mark-tracker.test.ts (18 tests) 72ms
β src/commands/memory.test.ts (12 tests) 54ms
β src/hooks/hookTranslator.test.ts (10 tests) 30ms
β src/agents/local-invocation.test.ts (11 tests) 56ms
β src/tools/tools.test.ts (11 tests) 37ms
β src/routing/strategies/compositeStrategy.test.ts (6 tests) 66ms
β src/policy/persistence.test.ts (5 tests) 115ms
β src/ide/process-utils.test.ts (8 tests) 36ms
β src/commands/restore.test.ts (6 tests) 40ms
β src/utils/schemaValidator.test.ts (12 tests) 319ms
β src/services/contextManager.test.ts (6 tests) 112ms
β src/utils/apiConversionUtils.test.ts (7 tests) 16ms
β src/utils/security.test.ts (9 tests) 48ms
β src/tools/diffOptions.test.ts (10 tests) 17ms
β src/core/fakeContentGenerator.test.ts (7 tests) 53ms
β src/core/loggingContentGenerator.test.ts (11 tests) 137ms
β src/mcp/sa-impersonation-provider.test.ts (8 tests) 88ms
β src/tools/activate-skill.test.ts (7 tests) 199ms
β src/utils/environmentContext.test.ts (6 tests) 77ms
β src/tools/enter-plan-mode.test.ts (8 tests) 185ms
β src/utils/errors.test.ts (18 tests) 38ms
β src/utils/nextSpeakerChecker.test.ts (10 tests) 120ms
β src/hooks/trustedHooks.test.ts (7 tests) 10ms
β src/skills/skillManagerAlias.test.ts (2 tests) 56ms
β src/tools/line-endings.test.ts (5 tests) 254ms
β src/agents/auth-provider/base-provider.test.ts (10 tests) 13ms
β src/scheduler/tool-executor.test.ts (5 tests) 214ms
β src/tools/web-search.test.ts (9 tests) 165ms
β src/utils/headless.test.ts (14 tests) 4ms
β src/utils/extensionLoader.test.ts (9 tests | 1 skipped) 16ms
β src/code_assist/experiments/experiments_local.test.ts (5 tests) 401ms
β src/agents/a2aUtils.test.ts (9 tests) 17ms
β src/utils/summarizer.test.ts (8 tests) 128ms
β src/core/prompts-substitution.test.ts (6 tests) 45ms
β src/telemetry/activity-detector.test.ts (13 tests) 8ms
β src/mcp/token-storage/base-token-storage.test.ts (12 tests) 8ms
β src/routing/strategies/fallbackStrategy.test.ts (5 tests) 11ms
β src/core/recordingContentGenerator.test.ts (4 tests) 14ms
β src/availability/modelAvailabilityService.test.ts (9 tests) 6ms
β src/agents/utils.test.ts (12 tests) 6ms
β src/core/coreToolHookTriggers.test.ts (6 tests) 28ms
β src/policy/utils.test.ts (13 tests) 21ms
β src/tools/tool-names.test.ts (9 tests) 37ms
β src/code_assist/experiments/client_metadata.test.ts (12 tests) 572ms
β src/tools/write-todos.test.ts (9 tests) 95ms
β src/tools/base-tool-invocation.test.ts (2 tests) 47ms
β src/code_assist/experiments/experiments.test.ts (4 tests) 190ms
β src/utils/filesearch/crawlCache.test.ts (9 tests) 20ms
β src/services/sessionSummaryUtils.test.ts (10 tests) 52ms
β src/utils/process-utils.test.ts (7 tests) 47ms
β src/code_assist/admin/mcpUtils.test.ts (6 tests) 7ms
β src/telemetry/semantic.truncation.test.ts (4 tests) 24ms
β src/tools/xcode-mcp-fix-transport.test.ts (2 tests) 4ms
β src/prompts/prompt-registry.test.ts (7 tests) 48ms
β src/services/modelConfig.golden.test.ts (2 tests) 25ms
β src/utils/pathCorrector.test.ts (4 tests) 52ms
β src/utils/textUtils.test.ts (17 tests) 62ms
β src/utils/installationManager.test.ts (4 tests) 35ms
β src/tools/confirmation-policy.test.ts (6 tests) 423ms
β Tool Confirmation Policy Updates > 'EditTool' policy updates > should handle 'proceed_always' correctly 359ms
β src/routing/strategies/defaultStrategy.test.ts (4 tests) 9ms
β src/config/storageMigration.test.ts (5 tests) 60ms
β src/availability/policyCatalog.test.ts (10 tests) 11ms
β src/utils/delay.test.ts (7 tests) 44ms
β src/telemetry/config.test.ts (14 tests) 14ms
β src/config/memory.test.ts (10 tests) 15ms
β src/utils/debugLogger.test.ts (6 tests) 13ms
β src/agents/acknowledgedAgents.test.ts (4 tests) 50ms
β src/utils/fileDiffUtils.test.ts (7 tests) 5ms
β src/utils/planUtils.test.ts (7 tests) 51ms
β src/policy/policy-updater.test.ts (5 tests) 88ms
β src/utils/authConsent.test.ts (3 tests) 20ms
β src/agents/subagent-tool-wrapper.test.ts (6 tests) 78ms
β src/utils/customHeaderUtils.test.ts (11 tests) 18ms
β src/availability/fallbackIntegration.test.ts (2 tests) 6ms
β src/utils/thoughtUtils.test.ts (11 tests) 34ms
β src/core/apiKeyCredentialStorage.test.ts (7 tests) 42ms
β src/code_assist/codeAssist.test.ts (7 tests) 35ms
β src/routing/modelRouterService.test.ts (5 tests) 125ms
β src/utils/safeJsonStringify.test.ts (8 tests) 6ms
β src/routing/strategies/overrideStrategy.test.ts (4 tests) 14ms
β src/prompts/promptProvider.test.ts (2 tests) 8ms
β src/resources/resource-registry.test.ts (4 tests) 37ms
β src/agents/agent-scheduler.test.ts (1 test) 50ms
β src/utils/deadlineTimer.test.ts (5 tests) 41ms
β src/tools/get-internal-docs.test.ts (4 tests) 395ms
β GetInternalDocsTool (Integration) > should find the documentation root and list files 348ms
β src/utils/toolCallContext.test.ts (4 tests) 20ms
β src/tools/definitions/resolver.test.ts (4 tests) 7ms
β src/utils/package.test.ts (4 tests) 29ms
working stdoutworking stderr β src/utils/stdio.test.ts (2 tests) 44ms
β src/agents/cli-help-agent.test.ts (5 tests) 12ms
β src/tools/definitions/coreToolsModelSnapshots.test.ts (12 tests) 20ms
β src/safety/context-builder.test.ts (3 tests) 7ms
β src/utils/filesearch/result-cache.test.ts (3 tests) 4ms
β src/agents/registry_acknowledgement.test.ts (4 tests) 34ms
β src/services/fileSystemService.test.ts (3 tests) 15ms
β src/prompts/mcp-prompts.test.ts (2 tests) 7ms
β src/safety/registry.test.ts (4 tests) 13ms
β src/core/tokenLimits.test.ts (5 tests) 4ms
β src/utils/checks.test.ts (3 tests) 11ms
β src/utils/version.test.ts (3 tests) 14ms
β src/telemetry/telemetry-utils.test.ts (6 tests) 15ms
β src/utils/formatters.test.ts (4 tests) 8ms
β src/utils/shell-utils.integration.test.ts (3 tests) 371ms
β src/commands/extensions.test.ts (1 test) 15ms
β src/index.test.ts (1 test) 3ms
β src/commands/init.test.ts (2 tests) 15ms
β src/utils/flashFallback.test.ts (4 tests) 26ms
β src/agents/subagent-tool.test.ts (3 tests) 57ms
β src/utils/errorParsing.test.ts (10 tests) 14ms
β src/utils/tool-utils.test.ts (9 tests) 4ms
β src/utils/filesearch/ignore.test.ts (12 tests) 38ms
β src/agents/codebase-investigator.test.ts (4 tests) 7ms
β src/utils/filesearch/crawler.test.ts (19 tests) 204ms
β src/utils/filesearch/fileSearch.test.ts (28 tests) 303ms
β src/scheduler/scheduler_waiting_callback.test.ts (1 test) 38ms
β src/config/flashFallback.test.ts (3 tests) 52ms
β src/telemetry/telemetry.test.ts (2 tests) 33ms
β src/agents/generalist-agent.test.ts (1 test) 8ms
β src/telemetry/metrics.test.ts (70 tests) 60900ms
β Telemetry Metrics > recordFlickerFrame > does not record metrics if not initialized 8457ms
β Telemetry Metrics > recordFlickerFrame > records a flicker frame event when initialized 5171ms
β Telemetry Metrics > recordExitFail > does not record metrics if not initialized 5559ms
β Telemetry Metrics > recordExitFail > records a exit fail event when initialized 7229ms
β Telemetry Metrics > recordSlowRender > does not record metrics if not initialized 6687ms
β Telemetry Metrics > recordSlowRender > records a slow render event when initialized 5939ms
β Telemetry Metrics > recordPlanExecution > does not record metrics if not initialized 5549ms
β Telemetry Metrics > recordPlanExecution > records a plan execution event when initialized 4122ms
β Telemetry Metrics > initializeMetrics > should apply common attributes including email 1938ms
β Telemetry Metrics > recordChatCompressionMetrics > does not record metrics if not initialized 652ms
Test Files 254 passed (254)
Tests 4680 passed | 23 skipped (4703)
Start at 20:07:58
Duration 81.01s (transform 88.48s, setup 41.33s, collect 1015.73s, tests 142.53s, environment 124ms, prepare 72.06s)
JUNIT report written to /startdir/src/gemini-cli/packages/core/junit.xml
% Coverage report from v8
> gemini-cli-vscode-ide-companion@0.29.5 test
> vitest run
RUN v3.2.4 /startdir/src/gemini-cli/packages/vscode-ide-companion
β src/open-files-manager.test.ts (17 tests) 24ms
β src/ide-server.test.ts (13 tests | 1 skipped) 151ms
β src/extension.test.ts (11 tests) 70ms
Test Files 3 passed (3)
Tests 40 passed | 1 skipped (41)
Start at 20:09:23
Duration 8.04s (transform 3.90s, setup 0ms, collect 14.42s, tests 246ms, environment 1ms, prepare 763ms)
==> ERROR: A failure occurred in check().
Aborting...
==> ERROR: Build failed, check /home/alhp/workspace/chroot/build_8296c019-cf77-46e5-894a-fc52b3d982c7/build