Files
multica/server
Lambda 1f5580adbf feat(agents): use the runtime icon as the default agent avatar (MUL-5399)
An agent created without an uploaded avatar was stamped with a random
`emoji:<glyph>` sentinel at CreateAgent time. Replace that with the mark of
the provider the agent's runtime runs, resolved at render time so it follows
the agent when it is rebound to another runtime.

- CreateAgent (and the template path) now store NULL for an omitted / empty /
  whitespace-only avatar_url; migration 234 clears the emoji rows already
  written. No UI or API path ever let a user pick an emoji, so every cleared
  row was a machine-generated placeholder.
- `ActorAvatar` (packages/ui) takes a `fallback` node, drawn in place of the
  built-in type icon when there is no avatar image. packages/ui can't reach
  the workspace directories, so the identity-specific mark is resolved by the
  caller.
- New `AgentRuntimeIcon` / `ProviderAvatarIcon` in packages/views resolve
  agent -> runtime -> provider off the two shared workspace queries, and land
  on the generic bot when the runtime is gone or its provider has no mark of
  its own. Wired into every agent avatar surface, plus the avatar editors in
  the create dialog / creation studio / detail inspector, where it previews
  the face the agent will get and tracks the runtime picker live.
- `ProviderLogo`'s switch becomes a map so the new `hasProviderLogo` can't
  drift from it; the lookup is own-property, since a custom runtime profile
  named `toString` would otherwise resolve to an Object.prototype method.
- Mobile drops the now-dead emoji branch. It ships no provider logos, so a
  no-avatar agent keeps its brand-tinted initials chip.

Co-authored-by: multica-agent <github@multica.ai>
2026-07-29 18:01:43 +08:00
..