package ai import "encoding/json" // CopilotTools defines all tools available to the AI copilot. var CopilotTools = []Tool{ // ── SSH Terminal Tools ──────────────────────────────────────── { Name: "terminal_write", Description: "Type text into an active SSH terminal session. Use this to execute commands by including a trailing newline character.", InputSchema: json.RawMessage(`{ "type": "object", "properties": { "sessionId": {"type": "string", "description": "The SSH session ID"}, "text": {"type": "string", "description": "Text to type into the terminal (include \\n for Enter)"} }, "required": ["sessionId", "text"] }`), }, { Name: "terminal_read", Description: "Read recent output from an SSH terminal session. Returns the last N lines from the terminal buffer.", InputSchema: json.RawMessage(`{ "type": "object", "properties": { "sessionId": {"type": "string", "description": "The SSH session ID"}, "lines": {"type": "integer", "description": "Number of recent lines to return (default 50)", "default": 50} }, "required": ["sessionId"] }`), }, { Name: "terminal_cwd", Description: "Get the current working directory of an SSH terminal session by executing pwd.", InputSchema: json.RawMessage(`{ "type": "object", "properties": { "sessionId": {"type": "string", "description": "The SSH session ID"} }, "required": ["sessionId"] }`), }, // ── SFTP Tools ─────────────────────────────────────────────── { Name: "sftp_list", Description: "List files and directories at a remote path via SFTP.", InputSchema: json.RawMessage(`{ "type": "object", "properties": { "sessionId": {"type": "string", "description": "The SSH/SFTP session ID"}, "path": {"type": "string", "description": "Remote directory path to list"} }, "required": ["sessionId", "path"] }`), }, { Name: "sftp_read", Description: "Read the contents of a remote file via SFTP. Limited to files under 5MB.", InputSchema: json.RawMessage(`{ "type": "object", "properties": { "sessionId": {"type": "string", "description": "The SSH/SFTP session ID"}, "path": {"type": "string", "description": "Remote file path to read"} }, "required": ["sessionId", "path"] }`), }, { Name: "sftp_write", Description: "Write content to a remote file via SFTP. Creates or overwrites the file.", InputSchema: json.RawMessage(`{ "type": "object", "properties": { "sessionId": {"type": "string", "description": "The SSH/SFTP session ID"}, "path": {"type": "string", "description": "Remote file path to write"}, "content": {"type": "string", "description": "File content to write"} }, "required": ["sessionId", "path", "content"] }`), }, // ── RDP Tools ──────────────────────────────────────────────── { Name: "rdp_screenshot", Description: "Capture a screenshot of the current RDP desktop. Returns a base64 JPEG image.", InputSchema: json.RawMessage(`{ "type": "object", "properties": { "sessionId": {"type": "string", "description": "The RDP session ID"} }, "required": ["sessionId"] }`), }, { Name: "rdp_click", Description: "Click at a specific position on the RDP desktop.", InputSchema: json.RawMessage(`{ "type": "object", "properties": { "sessionId": {"type": "string", "description": "The RDP session ID"}, "x": {"type": "integer", "description": "X coordinate in pixels"}, "y": {"type": "integer", "description": "Y coordinate in pixels"}, "button": {"type": "string", "enum": ["left", "right", "middle"], "default": "left", "description": "Mouse button to click"} }, "required": ["sessionId", "x", "y"] }`), }, { Name: "rdp_doubleclick", Description: "Double-click at a specific position on the RDP desktop.", InputSchema: json.RawMessage(`{ "type": "object", "properties": { "sessionId": {"type": "string", "description": "The RDP session ID"}, "x": {"type": "integer", "description": "X coordinate in pixels"}, "y": {"type": "integer", "description": "Y coordinate in pixels"} }, "required": ["sessionId", "x", "y"] }`), }, { Name: "rdp_type", Description: "Type text into the focused element on the RDP desktop. Uses clipboard paste for reliability.", InputSchema: json.RawMessage(`{ "type": "object", "properties": { "sessionId": {"type": "string", "description": "The RDP session ID"}, "text": {"type": "string", "description": "Text to type"} }, "required": ["sessionId", "text"] }`), }, { Name: "rdp_keypress", Description: "Press a key or key combination on the RDP desktop (e.g., 'Enter', 'Tab', 'Ctrl+C').", InputSchema: json.RawMessage(`{ "type": "object", "properties": { "sessionId": {"type": "string", "description": "The RDP session ID"}, "key": {"type": "string", "description": "Key name or combination (e.g., 'Enter', 'Ctrl+C', 'Alt+F4')"} }, "required": ["sessionId", "key"] }`), }, { Name: "rdp_scroll", Description: "Scroll the mouse wheel at a position on the RDP desktop.", InputSchema: json.RawMessage(`{ "type": "object", "properties": { "sessionId": {"type": "string", "description": "The RDP session ID"}, "x": {"type": "integer", "description": "X coordinate in pixels"}, "y": {"type": "integer", "description": "Y coordinate in pixels"}, "direction": {"type": "string", "enum": ["up", "down"], "description": "Scroll direction"}, "clicks": {"type": "integer", "description": "Number of scroll clicks (default 3)", "default": 3} }, "required": ["sessionId", "x", "y", "direction"] }`), }, { Name: "rdp_move", Description: "Move the mouse cursor to a position on the RDP desktop without clicking.", InputSchema: json.RawMessage(`{ "type": "object", "properties": { "sessionId": {"type": "string", "description": "The RDP session ID"}, "x": {"type": "integer", "description": "X coordinate in pixels"}, "y": {"type": "integer", "description": "Y coordinate in pixels"} }, "required": ["sessionId", "x", "y"] }`), }, // ── Session Management Tools ───────────────────────────────── { Name: "list_sessions", Description: "List all active SSH and RDP sessions with their IDs, connection info, and state.", InputSchema: json.RawMessage(`{ "type": "object", "properties": {}, "required": [] }`), }, { Name: "connect_ssh", Description: "Open a new SSH connection to a saved connection by its ID.", InputSchema: json.RawMessage(`{ "type": "object", "properties": { "connectionId": {"type": "integer", "description": "The saved connection ID from the connection manager"} }, "required": ["connectionId"] }`), }, { Name: "disconnect", Description: "Disconnect an active session.", InputSchema: json.RawMessage(`{ "type": "object", "properties": { "sessionId": {"type": "string", "description": "The session ID to disconnect"} }, "required": ["sessionId"] }`), }, }