Skip to content

feat(canvas): include displayName/identityColor/avatar per agent in cloud push#1321

Merged
itskai-dev merged 1 commit into
mainfrom
claude/canvas-state-identity-fields
May 3, 2026
Merged

feat(canvas): include displayName/identityColor/avatar per agent in cloud push#1321
itskai-dev merged 1 commit into
mainfrom
claude/canvas-state-identity-fields

Conversation

@itskai-dev

Copy link
Copy Markdown
Collaborator

Summary

Identity coverage seam (audit-driven, kai+link greenlit). The node was projecting per-agent presence into /api/hosts/:hostId/canvas POST as {state, task} only — dropping displayName (TEAM-ROLES.yaml), identityColor (agent_config.settings.identityColor), and avatar (TEAM-ROLES or agent_config.settings.avatar) at the wire even though node already has them.

Cloud frontend already trusts payload-supplied identity over hardcoded fallbacks (apps/web/src/components/agents-panel/AgentsPanel.tsx:60,77, agent-detail/AgentDetailPanel.tsx:797,1087, app/presence/agent-field.tsx:219, app/presence/agent-detail-panel.tsx:50, presence/canvas/visuals/ghost-trails.tsx:97, …/thought-arcs.tsx:75); cloud GET passes payload through unchanged via ...payload spread (host-canvas-state-routes.ts:150). So this single-function widen lights up identity end-to-end without any cloud or schema change.

Constraints honored per kai's lane lock:

  • node only, one function (pushCanvasStateToCloud in src/server.ts:13103)
  • 3 fields only — displayName, identityColor, avatar
  • no watchdog special-casing
  • no TEAM-ROLES / agent-config write-path changes
  • no cloud or frontend edits
  • no schema migrations

Unclaimed agents emit only {state, task} exactly as before — cloud's AGENT_COLORS and agentDisplayName() fallbacks remain authoritative for them.

Test plan

  • Type-check clean (npx tsc --noEmit)
  • Full vitest suite: 2625 passed / 7 skipped / 0 fail (243 files)
  • After merge: roll canonical (rn-34faba44-wlgkeq) to new image
  • Prove one non-watchdog agent renders truthful identity end-to-end on canvas; report which fields lit up and for which agent

🤖 Generated with Claude Code

…loud push (task-1777140469973-770cy4yma)

Identity coverage seam: enrich each per-agent entry in pushCanvasStateToCloud
with the agent's claimed identity (TEAM-ROLES.yaml displayName + avatar,
agent_config.settings.identityColor + avatar). Cloud frontend already trusts
these payload fields and falls back to AGENT_COLORS / agentDisplayName when
absent — so unclaimed agents are unaffected. Single-function widen, no schema
or cloud changes.

task-1777140469973-770cy4yma

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@itskai-dev
itskai-dev force-pushed the claude/canvas-state-identity-fields branch from d649e65 to f0a854c Compare May 3, 2026 14:40
@itskai-dev
itskai-dev merged commit 0d592f7 into main May 3, 2026
11 checks passed
@itskai-dev
itskai-dev deleted the claude/canvas-state-identity-fields branch May 3, 2026 14:42
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