package tools import ( "encoding/json" plugin "git.hangman-lab.top/hzhang/Plexum-sdk-go/plugin" ) // allContracts is the static manifest list of all agent-facing tools. // install.sh reads this via a Go-build introspection step? No — we'd // need a separate emit-manifest binary. For now, install.sh has the // same JSON inline (keep in sync; trivially small). Future refinement // could auto-emit. var allContracts = []plugin.ToolContract{ { Name: "send", Description: "Outbound channel reply — host calls this after an inbound dispatch (agent-side calls usually prefer `fabric-send-message`).", InputSchema: json.RawMessage(`{ "type": "object", "properties": { "channel_name": {"type": "string"}, "session_id": {"type": "string"}, "message": {"type": "string"} }, "required": ["channel_name", "message"] }`), }, { Name: "fabric-send-message", Description: "Post a normal message to a Fabric channel as the bound agent. guild_node_id defaults to the agent's first guild when omitted.", InputSchema: json.RawMessage(`{ "type": "object", "properties": { "agent_id": {"type": "string"}, "guild_node_id": {"type": "string"}, "channel_id": {"type": "string"}, "content": {"type": "string"} }, "required": ["agent_id", "channel_id", "content"] }`), }, { Name: "fabric-send-sys-msg", Description: "Post a system-kind message to a channel (not subject to turn engine / wakeup).", InputSchema: json.RawMessage(`{ "type": "object", "properties": { "agent_id": {"type": "string"}, "guild_node_id": {"type": "string"}, "channel_id": {"type": "string"}, "content": {"type": "string"} }, "required": ["agent_id", "guild_node_id", "channel_id", "content"] }`), }, { Name: "fabric-channel-list", Description: "List channels visible to the agent in a guild (public + member channels).", InputSchema: json.RawMessage(`{ "type": "object", "properties": { "agent_id": {"type": "string"}, "guild_node_id": {"type": "string"} }, "required": ["agent_id", "guild_node_id"] }`), }, { Name: "fabric-guild-list", Description: "List the guilds the agent belongs to (nodes + endpoints).", InputSchema: json.RawMessage(`{ "type": "object", "properties": { "agent_id": {"type": "string"} }, "required": ["agent_id"] }`), }, { Name: "fabric-message-history", Description: "Paginate channel messages by seq. seq_from/seq_to/limit are optional (server caps limit at 200).", InputSchema: json.RawMessage(`{ "type": "object", "properties": { "agent_id": {"type": "string"}, "guild_node_id": {"type": "string"}, "channel_id": {"type": "string"}, "seq_from": {"type": "integer"}, "seq_to": {"type": "integer"}, "limit": {"type": "integer"} }, "required": ["agent_id", "guild_node_id", "channel_id"] }`), }, { Name: "fabric-channel-set-purpose", Description: "Update the channel's free-form purpose text.", InputSchema: json.RawMessage(`{ "type": "object", "properties": { "agent_id": {"type": "string"}, "guild_node_id": {"type": "string"}, "channel_id": {"type": "string"}, "purpose": {"type": "string"} }, "required": ["agent_id", "guild_node_id", "channel_id", "purpose"] }`), }, { Name: "fabric-channel", Description: "Fetch metadata + member list for a specific channel.", InputSchema: json.RawMessage(`{ "type": "object", "properties": { "agent_id": {"type": "string"}, "guild_node_id": {"type": "string"}, "channel_id": {"type": "string"} }, "required": ["agent_id", "guild_node_id", "channel_id"] }`), }, { Name: "fabric-canvas", Description: "Read or write the channel's pinned canvas doc. op: get|share|update|remove. share/update need title+format+source.", InputSchema: json.RawMessage(`{ "type": "object", "properties": { "agent_id": {"type": "string"}, "guild_node_id": {"type": "string"}, "channel_id": {"type": "string"}, "op": {"type": "string", "enum": ["get","share","update","remove"]}, "title": {"type": "string"}, "format": {"type": "string", "enum": ["md","html","text"]}, "source": {"type": "string"} }, "required": ["agent_id", "guild_node_id", "channel_id", "op"] }`), }, }