{
	"$schema": "https://plugin.delivery/schema.json",
	"identifier": "three-ws",
	"version": "1.0.0",
	"author": "three.ws",
	"homepage": "https://three.ws/",
	"type": "standalone",
	"meta": {
		"title": "three.ws — Embodied Avatar",
		"description": "Give your SperaxOS agent a body. Renders a rigged 3D avatar in the chat that speaks, gestures, and reflects emotion in real time — bound to an on-chain ERC-8004 identity.",
		"avatar": "https://three.ws/sperax/icon-256.svg",
		"tags": ["3d", "avatar", "embodied-agent", "erc-8004", "defi"]
	},
	"ui": {
		"url": "https://three.ws/sperax/iframe/",
		"height": 480,
		"mode": "iframe"
	},
	"settings": {
		"type": "object",
		"required": ["agentId"],
		"properties": {
			"agentId": {
				"type": "string",
				"title": "Agent ID",
				"description": "A three.ws agent ID (UUID) or @handle. Copy it from your dashboard at https://three.ws/dashboard. The avatar binds to this identity when the panel opens."
			}
		}
	},
	"api": [
		{
			"url": "https://three.ws/api/chat-plugin/render-agent",
			"name": "render_agent",
			"description": "Mount or swap the 3D avatar to a specific three.ws agent. Call this first if the avatar has not been bound yet, or to switch to a different agent mid-conversation.",
			"parameters": {
				"type": "object",
				"properties": {
					"agentId": {
						"type": "string",
						"description": "The three.ws agent ID (UUID) or @handle to render in the panel."
					}
				},
				"required": ["agentId"]
			}
		},
		{
			"url": "https://three.ws/api/chat-plugin/speak",
			"name": "speak",
			"description": "Make the embodied avatar speak a line out loud with emotional valence. Use for greetings, narrating an action you just took, or reacting to the user.",
			"parameters": {
				"type": "object",
				"properties": {
					"text": {
						"type": "string",
						"description": "The line for the avatar to speak aloud."
					},
					"sentiment": {
						"type": "number",
						"description": "Emotional valence in [-1, 1]. Negative leans concerned, positive leans celebratory. Defaults to neutral (0).",
						"minimum": -1,
						"maximum": 1
					}
				},
				"required": ["text"]
			}
		},
		{
			"url": "https://three.ws/api/chat-plugin/gesture",
			"name": "gesture",
			"description": "Play a named physical gesture on the avatar to punctuate a message.",
			"parameters": {
				"type": "object",
				"properties": {
					"name": {
						"type": "string",
						"description": "Which gesture to play.",
						"enum": ["wave", "nod", "point", "shrug"]
					},
					"duration": {
						"type": "number",
						"description": "Optional gesture duration in seconds."
					}
				},
				"required": ["name"]
			}
		},
		{
			"url": "https://three.ws/api/chat-plugin/emote",
			"name": "emote",
			"description": "Inject an emotion into the avatar's continuous Empathy Layer blend so its body language reflects the moment — e.g. concern as a position nears liquidation, celebration when a yield target is hit.",
			"parameters": {
				"type": "object",
				"properties": {
					"trigger": {
						"type": "string",
						"description": "The emotion to blend in.",
						"enum": ["concern", "celebration", "patience", "curiosity", "empathy"]
					},
					"weight": {
						"type": "number",
						"description": "Blend weight in [0, 1]. Defaults to 1.",
						"minimum": 0,
						"maximum": 1
					}
				},
				"required": ["trigger"]
			}
		}
	],
	"systemRole": "You have an embodied 3D avatar visible in the SperaxOS chat panel. It conveys emotion in real time through a continuous Empathy Layer blend. Call render_agent first to bind it to a specific agent (skip if an Agent ID is already configured in settings), speak to give it a voice with emotional valence, gesture for physical punctuation, and emote to shift its body language to match what is happening on-chain. Prefer a brief gesture or emote alongside substantive replies so the avatar feels alive."
}
