Files
orca/config/knip.json
T
Kelvin Amoaba d8fb85f7bc feat(browser): save and fill passwords in Orca's browser (#33994)
* feat(browser): save and fill passwords in Orca's browser (experimental)

Off by default under Settings > Experimental > Saved passwords.

* fix(browser): secure saved passwords and fix login lifecycles

* fix(browser): keep the guest preload self-contained so saved passwords load

The shared uuid import split into a chunk the sandboxed preload can't require, so the
whole preload failed on every page. Element tokens now come from crypto.getRandomValues.

* fix(browser): fill a saved login on mouse press so clicking a row works

Pressing Orca's UI blurs the page field, which closed the list before the click landed.

* feat(browser): manage saved passwords from a Passwords section in Settings › Browser

Replaces the Manage passwords dialog with an inline section: save and Touch ID
switches, import menu, a searchable list grouped by site with last-used times and
hover actions in a capped scroll box, delete confirmations, and an Add/Edit dialog.

* feat(browser): turn saved passwords on for everyone instead of behind Experimental

Drops the experimental flag, its Experimental toggle and the badge; the Passwords section in
Settings › Browser now shows on desktop for the local host without opting in. With no toggle,
the guest disable message and the apply-to-open-pages step had nothing left to trigger them.

* fix(browser): refuse protected password actions when Touch ID is set up but unavailable, and keep fills on the matched page

Touch ID lockout or a closed lid made canPromptTouchID() false, which counted as a Mac without
Touch ID, so show, copy and protected fill went through unchecked. Enrollment from bioutil now
tells the two apart. A fill also kept no hold on the page across the Touch ID prompt, so a page
that navigated meanwhile got the password; it now goes only to the frame and origin it was matched for.

* fix(browser): keep a browser profile when its saved logins can't be deleted

Profile deletion removed the profile first and only logged a failed vault delete, so the
encrypted vault could stay on disk with nothing left to retry it. The vault now goes first,
and the profile stays (deletion reports failure) when it can't.
2026-11-05 02:08:08 +00:00

75 lines
3.3 KiB
JSON

{
"$schema": "https://unpkg.com/knip@5/schema.json",
"entry": [
"src/main/index.ts",
"src/preload/index.ts",
"src/preload/browser-guest.ts",
"src/main/daemon/daemon-entry.ts",
"src/main/plugins/workers/plugin-host-entry.ts",
"src/main/computer/computer-sidecar.ts",
"src/main/speech/stt-worker.ts",
"src/main/warp-themes/warp-theme-parser-worker.ts",
"src/main/foreign-sqlite-readers/foreign-sqlite-reader-entry.ts",
"src/main/ports/port-scan-command-worker-entry.ts",
"src/main/plugins/panels/plugin-source-transpile-worker-entry.ts",
"src/main/worker-thread-child-process/worker-thread-child-process-entry.ts",
"src/main/ipc/filesystem/watcher-process/parcel-watcher-process-entry.ts",
"src/main/hang-watchdog/main-thread-hang-watchdog-entry.ts",
"src/main/agent-hooks/managed-agent-hook-controls.ts",
"src/main/claude-accounts/keychain.ts",
"src/renderer/src/main.tsx",
"src/renderer/src/popout.tsx",
"src/renderer/src/web/main.tsx",
"src/renderer/src/component-fixtures/component-fixture-explorer.tsx",
"src/renderer/src/**/*.fixture.tsx",
"src/renderer/src/**/*.worker.ts",
"src/cli/index.ts",
"src/wsl-guest/wsl-agent-hook-relay.ts",
"config/scripts/**/*.{mjs,cjs,js,ts}",
"config/build-plugins/**/*.ts",
"electron.vite.config.ts",
"vite.web.config.ts",
"config/vitest.config.ts",
"config/i18next.config.ts",
"config/electron-builder.config.cjs",
"config/oxlint-plugins/**/*.{js,mjs,ts}",
"tests/**/*.{ts,tsx,mjs}",
"**/*.test.{ts,tsx,mjs}",
"src/preload/doc-preview-link.ts",
"src/preload/plugin-frame-guest.ts",
"src/main/plugins/testing/plugin-test-hooks.ts",
"src/main/plugins/testing/plugin-test-register.ts",
"src/main/ai-vault/scan-service/session-scanner-service-entry.ts",
"src/main/native-chat/wsl-transcript-fs-process-entry.ts",
"src/main/usage/usage-scan-worker-entry.ts",
"src/main/workspaces/space-analysis/workspace-space-scan-worker-entry.ts",
"src/main/claude-accounts/claude-profile-setup-worker-entry.ts",
"src/main/persistence/profile-state/profile-state-backup-worker-entry.ts",
"src/main/persistence/profile-state/profile-state-writer-worker-entry.ts",
"src/main/orcad/orcad-local-serve-selection-entry.ts",
"src/main/orcad/launcher.ts",
"src/main/claude-accounts/claude-profile-wsl-entry.ts",
"src/main/ai-vault/scanners/opencode/reader-transport/session-scanner-opencode-sqlite-process-entry.ts",
"src/wsl-guest/wsl-browser-network-relay.ts",
"src/renderer/src/space.tsx",
"src/**/*.bench.ts",
"src/**/*-electron-fixture.ts",
"src/**/*-test-fixture.ts",
"src/**/*.test-fixture.{ts,tsx}",
"src/main/runtime/rpc/rpc-params-type-parity.ts",
"src/main/runtime/rpc/methods/ui-state-schema-parity-checks.ts",
"src/renderer/src/components/editor/monaco-internal-test-module-types.ts",
"mobile/**/*.{ts,tsx}",
"cloud/**/*.{ts,tsx,mjs}"
],
"project": [
"src/**/*.{ts,tsx}",
"config/scripts/**/*.{mjs,cjs,js,ts}",
"config/build-plugins/**/*.ts"
],
"ignore": ["mobile/**", "out/**", "dist/**", "node_modules/**", "resources/**"],
"ignoreDependencies": ["electron", "@types/*"],
"ignoreExportsUsedInFile": true,
"includeEntryExports": false
}