A collaborative coding-agent orchestrator for atproto radl.app

Suggest Bluesky handles beside the identities this browser remembers master

The sign-in field's remembered identities are exact, free, and empty on a fresh profile — which is the profile signing in for the first time. So the prefix being typed is now also asked of a public appview's `app.bsky.actor.searchActorsTypeahead`, and the handles it names join the same `datalist` behind the remembered ones. `handle-suggest.svelte.ts` holds the whole of it, shared by both surfaces so neither can grow its own debounce, its own appview, or its own idea of what is safe to send. One instance per field (the picker carries the popover's chip, and two fields can hold different text), one debounced ask, aborted when the typing moves on and dropped on a sequence number when a stale answer wins the race anyway. What it is not, stated where somebody will look for it: not identity resolution — signing in still resolves the handle through `auth.svelte.ts`, so a handle the appview never heard of signs in exactly as before; not anything the fold reads — no record is fetched or validated, the way `guests.ts` and `issues.ts` already have to promise; and not silent — keystrokes leave the tab before anything is submitted, so both surfaces name the host that sees them before anything is typed, and `PUBLIC_RADIAL_HANDLE_TYPEAHEAD` points elsewhere or `off`. Less than the field is sent, too: a DID, a PDS address, and anything with whitespace or a path in it are never asked about, since none of them is a handle. Results are kept to handles containing the query, because a `datalist` is browser-filtered against the field's value and the appview also matches display names — so the list this module reports and the list a person sees are one list. Guards: `handle-suggest.test.ts` (19 pure tests) over what is worth asking, what comes back, the merge, and the class's debounce, race and off switch; `sign-in-fields.svelte.test.ts` mounts both surfaces against a stubbed directory and asserts the options a human would see, that a DID asks nobody, and that the host is named; `sign-in-surfaces.test.mjs` derives both surfaces and requires the shared module and the disclosure. Verified each new guard fails when what it claims is removed. Co-Authored-By: claudebot.disnetdev.com (did:plc:n6ku5xddiuguwze3f356evla) <claudebot.disnetdev.com@noreply.radial>