Skip to content

feat: agent sign-in, file memory, entrances, survive-close, import - #128

Merged
its-janghoon merged 34 commits into
developfrom
feat/agent-parity
Oct 19, 2026
Merged

its-janghoon merged 34 commits into
developfrom
feat/agent-parity

Conversation

@its-janghoon

Copy link
Copy Markdown
Member

What's done

  • Agent sign-in (CAP-9): login tool fills from the profile's own password store through the browser's agent-login service. The model sees only the outcome and the username. Policy Always / While unlocked (default) / Never, per-site overrides, OS re-auth unlock window, audit trail, Settings > Passwords and the agent.
  • Memory (CAP-19): markdown files under the profile (episodic, sites, people, projects, USER.md, MEMORY.md). Hidden extraction run after each task, daily consolidation routine, snapshots with revert, retention, optional visited-page input. Settings > Memory.
  • Entrances (CAP-3, CAP-5): > agent mode in the address bar with a chip; quick window on Ctrl/Cmd+Shift+Space with a setting.
  • Tasks survive the window closing (CAP-4): process + profile keep-alives, OS notifications, guard-mode confirmation before send/post/pay/delete clicks, Ultrabrowse wired to the engine's top effort. Providers and subscriptions UI sourced from the engine (SUB-1..4).
  • Skill arming context (CAP-1/2): completion requests carry redrob_context.page_url/page_title for the engine (redrob-code v0.9.0).
  • Import (ONB-4/5): Firefox and Safari, per-item progress and Cancel.

What's not done

  • login is not on the app bridge yet (the bridge drives tabs over CDP and cannot reach the password manager).
  • Unlock and resume are offered from Settings only; there is no task view in the extension that reads TaskStore yet.
  • Firefox/Safari import not proved on a real profile.
  • Quick window holds no keep-alive of its own.

What to review

  • sources/chrome/browser/redrob/credential_tools.cc, task_store.cc (tool dispatch, memory runs, keep-alives).
  • Histogram ids: memory 2067-2071, run 2100-2107, vault 2200-2208, entry 2300-2303.

Intentions

Built once: official release build (out/release, chrome target) green; launched once on the main display with the CI flags, no FATAL / Check failed, agent server present.

…words

The onboarding import handler gains a browserosOnboardingCancelImport
message that stops a running import through ExternalProcessImporterHost::
Cancel() and reports a new "cancelled" status (items already finished stay
in the profile).

Firefox and Safari are detected by the importer list already; this makes the
step honest about them: saved passwords are dropped from the offered items
for Firefox, Safari and Chromium-family sources, and each source now carries
"kind" and "passwordsViaCsv" so the page can point at the export-a-CSV route.
…arm (CAP-1, CAP-2)

Every built-in-engine completion request now carries redrob_context.page_url and
page_title: the agent's own tab once it has opened one, else the http(s) tab the
user was on when the task started. Not sent to a user's own provider. Capability
map rows for skills, auto-arming and the skill writer point at the engine.
The import step now shows one progress bar per item type under the overall
bar (done / copying / waiting, from the importer's item start and end
callbacks) and a Cancel button that sends browserosOnboardingCancelImport;
a cancelled import returns to the picker with a note that anything already
copied stays.

Sources that do not hand over saved passwords (Firefox, Safari,
Chromium-family) get a row explaining the CSV export route, with a button
opening the password manager. redrobPrivate's import path drops the Firefox
password bit the same way. Strings in l10n/extension/70-onboarding.tsv;
CAPABILITY-MAP rows for ONB-4 and ONB-5 updated.
Adds credential_tools: the agent signs in through the browser's own agent-login
service (match on the tab's committed origin, fill through the password manager
driver), so the password never reaches the tool result or the engine. The model
sees a username and an outcome only.

Policy (always / while unlocked / never, default while unlocked), unlock window,
per-site list and a 500-record audit trail live in redrob prefs. A locked store
or a one-time code / CAPTCHA parks the task in kBlockedOnPolicy until the user
acts; ask_user_to_verify hands verification prompts back to the person.
…account plumbing (CAP-4, SUB-1..4)

TaskStore holds a process and profile keep-alive while a task is unfinished
(pref redrob.tasks.keep_running_after_close, default on), opens a minimized
window for agent tabs when none is left, and raises OS notifications for a
finished task with no user window and for a guard-mode confirmation, with
Allow/Decline buttons. Guard-mode clicks that send, post, pay or delete stop
the task in kBlockedOnPolicy until answered. Ultrabrowse gets a 96-round
budget, no idle stop, and the engine's highest reasoning effort.

SidecarClient keeps the engine's data in the profile so sign-ins persist, and
gains a generic engine request used for the provider list, OAuth sign-in and
API keys stored by the engine.
Typing "> " or pressing Tab on the agent row puts the address bar in agent
mode: the row becomes the default match, a "Redrob" chip takes the page
icon slot, and Enter opens the agent chat with the current tab attached.

The row now opens the same #/home/chat route the new tab uses (via
redrob::OpenAgentChat) instead of a TaskStore task no surface lists, and
the delegating action client forwards the hook (it silently did nothing).
Nine functions at the end of the interface: read the settings tree (policy,
unlock window, per-site list, audit trail, waiting tasks), set the policy and
the window, edit the per-site list, unlock (OS re-auth modal to the page),
lock, resume a task after the user finished a verification, clear history.
Histogram values 2067-2075 appended to the rule and the patch.
A settings page for agent sign-in: the policy (always / while unlocked /
never), the unlock window and lock state with Unlock now, tasks waiting for
the user (unlock and continue, or I have finished), the per-site allow/block
list, the AI sign-in history table, and a button to the password manager,
where the store itself, import and export already live.
Adds docs/CREDENTIALS.md and moves the capability map row for a credential
vault to partial with what exists. Also includes the two login-service
interface headers credential_tools.cc returns null unique_ptrs of.
Ctrl/Cmd+Shift+Space opens a frameless always-on-top window (Views,
chrome/browser/ui/views/redrob) hosting the agent extension's #/quick
page (chrome://redrob/quick): one input and recent tasks. Enter calls
redrobPrivate.startQuickTask, which opens the same chat route the new tab
and the address bar use in the last active window; Esc closes.

The shortcut is a preset pref (redrob.quick_window.shortcut) with a
settings row in Customize; registered via ui::GlobalAcceleratorListener,
or offered to the desktop portal where it owns shortcuts.
PruneStaleCommands drops a binding whose callback reports itself
cancelled; a lambda holding a WeakPtr never does. Bind the method to
the WeakPtr instead.
…ent-parity

# Conflicts:
#	sources/chrome/browser/redrob/task_store.cc
#	sources/chrome/browser/redrob/task_store.h
…-parity

# Conflicts:
#	agent/packages/i18n/src/messages.generated.ts
#	rewrite/extensions/browser/extension_function_histogram_value.h.yaml
#	sources/chrome/browser/extensions/api/redrob_private/redrob_private_api.cc
#	sources/chrome/browser/extensions/api/redrob_private/redrob_private_api.h
#	sources/chrome/browser/redrob/task_store.cc
#	sources/chrome/browser/redrob/task_store.h
#	sources/chrome/common/extensions/api/redrob_private.idl
#	vendor/browseros/chromium_patches/extensions/browser/extension_function_histogram_value.h
…nt-parity

# Conflicts:
#	agent/apps/app/components/sidebar/SettingsSidebar.tsx
#	agent/apps/app/entrypoints/app/App.tsx
#	docs/CAPABILITY-MAP.md
#	rewrite/extensions/browser/extension_function_histogram_value.h.yaml
#	sources/chrome/browser/extensions/api/redrob_private/redrob_private_api.cc
#	sources/chrome/browser/extensions/api/redrob_private/redrob_private_api.h
#	sources/chrome/browser/redrob/BUILD.gn
#	sources/chrome/browser/redrob/redrob_prefs.cc
#	sources/chrome/browser/redrob/redrob_prefs.h
#	sources/chrome/browser/redrob/resources/redrob_localized_strings.h
#	sources/chrome/browser/redrob/resources/redrob_strings.grd
#	sources/chrome/browser/redrob/resources/translations/redrob_strings_ko.xtb
#	sources/chrome/browser/redrob/task_store.cc
#	sources/chrome/browser/redrob/task_store.h
#	sources/chrome/common/extensions/api/redrob_private.idl
#	vendor/browseros/chromium_patches/extensions/browser/extension_function_histogram_value.h
…nt-parity

# Conflicts:
#	agent/packages/i18n/src/messages.generated.ts
#	rewrite/extensions/browser/extension_function_histogram_value.h.yaml
#	sources/chrome/browser/extensions/api/redrob_private/redrob_private_api.cc
#	sources/chrome/browser/extensions/api/redrob_private/redrob_private_api.h
#	sources/chrome/browser/redrob/BUILD.gn
#	sources/chrome/browser/redrob/redrob_prefs.cc
#	sources/chrome/browser/redrob/redrob_prefs.h
#	sources/chrome/browser/redrob/resources/redrob_localized_strings.h
#	sources/chrome/browser/redrob/resources/redrob_strings.grd
#	sources/chrome/browser/redrob/resources/translations/redrob_strings_ko.xtb
#	sources/chrome/common/extensions/api/redrob_private.idl
#	sources/manifest
#	vendor/browseros/chromium_patches/extensions/browser/extension_function_histogram_value.h
@its-janghoon
its-janghoon merged commit 1c356c9 into develop Oct 19, 2026
5 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant