Add Kagi search support with encrypted private session links#1434
Merged
Jinwoo-H merged 5 commits intostablyai:mainfrom May 7, 2026
Merged
Add Kagi search support with encrypted private session links#1434Jinwoo-H merged 5 commits intostablyai:mainfrom
Jinwoo-H merged 5 commits intostablyai:mainfrom
Conversation
# Conflicts: # src/renderer/src/store/slices/ui.test.ts # src/renderer/src/store/slices/ui.ts
- redact in setBrowserPageUrl normalizeUrl so CDP nav-update IPC cannot land tokens in BrowserPage.url (persisted to disk) - redact pageUrl in setupGuestContextMenu before the context-menu IPC - redact validatedUrl in sendGuestLoadFailure - redact in popup shell.openExternal for target=_blank popups - redact addressBarValue in submitAddressBar and chrome-error polling - tighten normalizeKagiSessionLink (reject user-info/port, accept trailing slash, collapse duplicate token via set) - align redactKagiSessionToken to also match /search/ trailing slash - regression tests: setBrowserPageUrl redaction at slice boundary plus new normalize/redact cases Co-authored-by: Orca <help@stably.ai>
Contributor
|
Thanks for the feature! Pushed a few tweaks before merging:
Heads-up on one user-visible behavior shift these tweaks introduce: the Retry button on a failed Kagi page navigates to the redacted URL (no token), so a Kagi load failure needs to be re-submitted from the address bar to reattach the session link. The alternative is persisting the token in loadError.validatedUrl, which defeats the point. Worth a one-liner in the docs if Kagi ends up with one. |
Contributor
Author
|
@Jinwoo-H no problem, been loving Orca with the addition of the app! |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
tokenparams from browser display, history, external-open URLs, and persisted browser tab state.safeStorage, matching the existingopencodeSessionCookiepersistence pattern.
Screenshots / Recordings
Testing
pnpm lintpnpm typecheckpnpm exec vitest run --config config/vitest.config.ts src/shared/browser-url.test.ts src/renderer/src/store/slices/ui.test.ts src/renderer/src/store/slices/browser.test.ts src/main/persistence.test.tspnpm testpnpm buildNotes:
pnpm lintpasses with existing unrelated React hooks warnings in GitHub project components. Fullpnpm testcurrently showsbroad infrastructure failures across daemon/orchestration/git/runtime suites in this local environment before reaching completion.
Cross-Platform Review
This change is URL/settings/persistence logic only. It does not introduce platform-specific keyboard shortcuts, labels, filesystem
paths, or shell behavior. The feature should behave consistently on macOS, Linux, Windows, and SSH-backed workspaces.
Security Review
Kagi private session links contain bearer-style account tokens. The setting is masked in UI, validated to Kagi search session links,
redacted from display/history/tab persistence, and encrypted at rest with Electron
safeStoragebefore being written toorca- data.json.If
safeStorage.isEncryptionAvailable()is false, Orca falls back to plaintext using the existing persistence helper behavior,matching current handling for
opencodeSessionCookie.