agentIdentity.test.ts 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. import { describe, expect, it } from 'vitest'
  2. import {
  3. YAOYAO_AGENT_IDENTITY_NAMESPACE,
  4. agentIdentityFromProfile,
  5. decodeAgentMascotAvatar,
  6. defaultAgentIdentity,
  7. encodeAgentAvatar,
  8. } from '../../src/shared/agentIdentity'
  9. describe('Yaoyao agent identity', () => {
  10. it('inherits the legacy Bots title once but never its avatar asset', () => {
  11. const identity = agentIdentityFromProfile({
  12. name: 'default',
  13. ui_meta: { 'hermes-bots': { title: '竹儿' } },
  14. })
  15. expect(identity.displayName).toBe('竹儿')
  16. expect(identity.avatarMode).toBe('mascot')
  17. expect(encodeAgentAvatar(identity)).toMatch(/^yaoyao-mascot:v1:/)
  18. })
  19. it('reads the independent Yaoyao namespace ahead of legacy data', () => {
  20. const identity = agentIdentityFromProfile({
  21. name: 'researcher',
  22. ui_meta: {
  23. 'hermes-bots': { title: '旧名称' },
  24. [YAOYAO_AGENT_IDENTITY_NAMESPACE]: {
  25. version: 1,
  26. display_name: '新名称',
  27. avatar_mode: 'mascot',
  28. shape: 'triangle',
  29. color: '#0ea5c6',
  30. expression: 'curious',
  31. },
  32. },
  33. })
  34. expect(identity.displayName).toBe('新名称')
  35. expect(decodeAgentMascotAvatar(encodeAgentAvatar(identity))).toEqual({
  36. shape: 'triangle', color: '#0ea5c6', expression: 'curious',
  37. })
  38. })
  39. it('derives the same default shape and color for the same profile', () => {
  40. expect(defaultAgentIdentity('designer')).toEqual(defaultAgentIdentity('designer'))
  41. expect(defaultAgentIdentity('designer')).not.toEqual(defaultAgentIdentity('reviewer'))
  42. })
  43. })