{
  "tools": [
    {
      "type": "function",
      "function": {
        "name": "view",
        "description": "View a file or directory. For files, optionally search within the file using a regex pattern or limit to a line range. Exclude the 'electron' folder by default unless explicitly requested.",
        "parameters": {
          "type": "object",
          "properties": {
            "type": {
              "type": "string",
              "enum": ["file", "directory"],
              "description": "Whether to view a single file or a directory listing (up to 2 levels)."
            },
            "path": {
              "type": "string",
              "description": "Path relative to the repository root."
            },
            "view_range": {
              "type": "array",
              "items": { "type": "integer" },
              "minItems": 2,
              "maxItems": 2,
              "description": "Optional [start_line, end_line] 1-based inclusive range for files."
            },
            "search_query_regex": {
              "type": "string",
              "description": "Optional regex to search within file content (single-line regex)."
            },
            "case_sensitive": {
              "type": "boolean",
              "default": false,
              "description": "Whether the regex search is case-sensitive."
            },
            "context_lines_before": {
              "type": "integer",
              "default": 5,
              "description": "Lines of context to include before each regex match."
            },
            "context_lines_after": {
              "type": "integer",
              "default": 5,
              "description": "Lines of context to include after each regex match."
            }
          },
          "required": ["type", "path"],
          "additionalProperties": false
        }
      }
    },
    {
      "type": "function",
      "function": {
        "name": "grep-search",
        "description": "Search across multiple files/directories or the whole codebase. Use for finding text/symbols across many files. Excludes 'electron/**' by default unless explicitly overridden.",
        "parameters": {
          "type": "object",
          "properties": {
            "query": {
              "type": "string",
              "description": "Text or regex to search for."
            },
            "paths": {
              "type": "array",
              "items": { "type": "string" },
              "description": "Optional list of directories or files to limit the search scope."
            },
            "include_globs": {
              "type": "array",
              "items": { "type": "string" },
              "description": "Optional glob patterns to include (e.g., 'src/**/*.ts')."
            },
            "exclude_globs": {
              "type": "array",
              "items": { "type": "string" },
              "default": ["electron/**"],
              "description": "Optional glob patterns to exclude. Defaults to excluding the 'electron' folder."
            },
            "case_sensitive": {
              "type": "boolean",
              "default": false,
              "description": "Case sensitivity for the search."
            },
            "context_lines_before": {
              "type": "integer",
              "default": 5,
              "description": "Lines of context before each match."
            },
            "context_lines_after": {
              "type": "integer",
              "default": 5,
              "description": "Lines of context after each match."
            },
            "max_results": {
              "type": "integer",
              "default": 5000,
              "description": "Limit the number of matches returned."
            }
          },
          "required": ["query"],
          "additionalProperties": false
        }
      }
    },
    {
      "type": "function",
      "function": {
        "name": "codebase-retrieval",
        "description": "High-level retrieval across the current codebase to locate relevant files, classes, functions, or patterns when you don't know where to look.",
        "parameters": {
          "type": "object",
          "properties": {
            "information_request": {
              "type": "string",
              "description": "Natural-language description of what you need to find."
            }
          },
          "required": ["information_request"],
          "additionalProperties": false
        }
      }
    },
    {
      "type": "function",
      "function": {
        "name": "git-commit-retrieval",
        "description": "Use the repository’s commit history to find how similar changes were made in the past or why changes happened.",
        "parameters": {
          "type": "object",
          "properties": {
            "information_request": {
              "type": "string",
              "description": "Question about past changes (e.g., how/why a feature was implemented)."
            }
          },
          "required": ["information_request"],
          "additionalProperties": false
        }
      }
    },
    {
      "type": "function",
      "function": {
        "name": "str-replace-editor",
        "description": "Edit existing files safely. Use 'str_replace' for in-place replacements with explicit line ranges, or 'insert' to insert new content at a specific line.",
        "parameters": {
          "type": "object",
          "properties": {
            "command": {
              "type": "string",
              "enum": ["str_replace", "insert"],
              "description": "Edit mode: 'str_replace' or 'insert'."
            },
            "path": {
              "type": "string",
              "description": "Path of the file to edit, relative to repo root."
            },
            "instruction_reminder": {
              "type": "string",
              "description": "Must be exactly: 'ALWAYS BREAK DOWN EDITS INTO SMALLER CHUNKS OF AT MOST 150 LINES EACH.'"
            },
            "insert_line_1": {
              "type": "integer",
              "description": "For 'insert': 1-based line number after which to insert. Use 0 to insert at the very beginning."
            },
            "new_str_1": {
              "type": "string",
              "description": "For 'str_replace' and 'insert': the new content."
            },
            "old_str_1": {
              "type": "string",
              "description": "For 'str_replace': the exact original text to replace (must match exactly, including whitespace)."
            },
            "old_str_start_line_number_1": {
              "type": "integer",
              "description": "For 'str_replace': 1-based start line of old_str_1."
            },
            "old_str_end_line_number_1": {
              "type": "integer",
              "description": "For 'str_replace': 1-based end line of old_str_1 (inclusive)."
            }
          },
          "required": ["command", "path", "instruction_reminder"],
          "additionalProperties": false
        }
      }
    },
    {
      "type": "function",
      "function": {
        "name": "save-file",
        "description": "Create a new file. Does not modify existing files.",
        "parameters": {
          "type": "object",
          "properties": {
            "instructions_reminder": {
              "type": "string",
              "description": "Must be exactly: 'LIMIT THE FILE CONTENT TO AT MOST 300 LINES. IF MORE CONTENT NEEDS TO BE ADDED USE THE str-replace-editor TOOL TO EDIT THE FILE AFTER IT HAS BEEN CREATED.'"
            },
            "path": {
              "type": "string",
              "description": "Path for the new file, relative to repo root."
            },
            "file_content": {
              "type": "string",
              "description": "Content to write into the new file."
            },
            "add_last_line_newline": {
              "type": "boolean",
              "default": true,
              "description": "Whether to ensure a trailing newline."
            }
          },
          "required": ["instructions_reminder", "path", "file_content"],
          "additionalProperties": false
        }
      }
    },
    {
      "type": "function",
      "function": {
        "name": "remove-files",
        "description": "Delete files from the workspace in a reversible way.",
        "parameters": {
          "type": "object",
          "properties": {
            "file_paths": {
              "type": "array",
              "items": { "type": "string" },
              "description": "List of file paths to remove, relative to repo root."
            }
          },
          "required": ["file_paths"],
          "additionalProperties": false
        }
      }
    },

    {
      "type": "function",
      "function": {
        "name": "launch-process",
        "description": "Run a shell command. Use wait=true for short commands. OS is win32; shell is 'bash'.",
        "parameters": {
          "type": "object",
          "properties": {
            "command": { "type": "string", "description": "The shell command to execute." },
            "wait": { "type": "boolean", "description": "Whether to wait for the process to complete." },
            "max_wait_seconds": { "type": "integer", "description": "Timeout in seconds when wait=true." },
            "cwd": { "type": "string", "description": "Absolute working directory for the command." }
          },
          "required": ["command", "wait", "max_wait_seconds", "cwd"],
          "additionalProperties": false
        }
      }
    },
    { "type": "function", "function": {
      "name": "read-process",
      "description": "Read output from a previously launched process.",
      "parameters": {
        "type": "object",
        "properties": {
          "terminal_id": { "type": "integer", "description": "Target terminal ID." },
          "wait": { "type": "boolean", "description": "Whether to wait for completion." },
          "max_wait_seconds": { "type": "integer", "description": "Timeout when wait=true." }
        },
        "required": ["terminal_id", "wait", "max_wait_seconds"],
        "additionalProperties": false
      }
    }},
    { "type": "function", "function": {
      "name": "write-process",
      "description": "Write input to a running process’s stdin.",
      "parameters": {
        "type": "object",
        "properties": {
          "terminal_id": { "type": "integer", "description": "Target terminal ID." },
          "input_text": { "type": "string", "description": "Text to write to stdin." }
        },
        "required": ["terminal_id", "input_text"],
        "additionalProperties": false
      }
    }},
    { "type": "function", "function": {
      "name": "kill-process",
      "description": "Kill a running process by terminal ID.",
      "parameters": {
        "type": "object",
        "properties": {
          "terminal_id": { "type": "integer", "description": "Target terminal ID." }
        },
        "required": ["terminal_id"],
        "additionalProperties": false
      }
    }},
    { "type": "function", "function": {
      "name": "list-processes",
      "description": "List all known terminals created with the launch-process tool.",
      "parameters": { "type": "object", "properties": {}, "additionalProperties": false }
    }},

    {
      "type": "function",
      "function": {
        "name": "diagnostics",
        "description": "Return IDE issues (errors, warnings, etc.) for specified files.",
        "parameters": {
          "type": "object",
          "properties": {
            "paths": {
              "type": "array",
              "items": { "type": "string" },
              "description": "List of file paths to get issues for."
            }
          },
          "required": ["paths"],
          "additionalProperties": false
        }
      }
    },
    {
      "type": "function",
      "function": {
        "name": "read-terminal",
        "description": "Read the visible output from the active or most-recently used VSCode terminal.",
        "parameters": {
          "type": "object",
          "properties": {
            "only_selected": {
              "type": "boolean",
              "description": "Whether to read only the selected text."
            }
          },
          "additionalProperties": false
        }
      }
    },

    {
      "type": "function",
      "function": {
        "name": "open-browser",
        "description": "Open a URL in the default browser.",
        "parameters": {
          "type": "object",
          "properties": {
            "url": { "type": "string", "description": "URL to open." }
          },
          "required": ["url"],
          "additionalProperties": false
        }
      }
    },

    {
      "type": "function",
      "function": {
        "name": "web-search",
        "description": "Search the web using Google Custom Search API.",
        "parameters": {
          "type": "object",
          "properties": {
            "query": { "type": "string", "description": "Search query." },
            "num_results": {
              "type": "integer",
              "minimum": 1,
              "maximum": 10,
              "default": 5,
              "description": "Number of results to return (1–10)."
            }
          },
          "required": ["query"],
          "additionalProperties": false
        }
      }
    },
    {
      "type": "function",
      "function": {
        "name": "web-fetch",
        "description": "Fetch a webpage and return its content in Markdown format.",
        "parameters": {
          "type": "object",
          "properties": {
            "url": { "type": "string", "description": "URL to fetch." }
          },
          "required": ["url"],
          "additionalProperties": false
        }
      }
    },

    {
      "type": "function",
      "function": {
        "name": "view-range-untruncated",
        "description": "View a specific line range from previously truncated content by reference ID.",
        "parameters": {
          "type": "object",
          "properties": {
            "reference_id": { "type": "string", "description": "Reference ID from truncation footer." },
            "start_line": { "type": "integer", "description": "1-based inclusive start line." },
            "end_line": { "type": "integer", "description": "1-based inclusive end line." }
          },
          "required": ["reference_id", "start_line", "end_line"],
          "additionalProperties": false
        }
      }
    },
    {
      "type": "function",
      "function": {
        "name": "search-untruncated",
        "description": "Search within previously untruncated content by reference ID.",
        "parameters": {
          "type": "object",
          "properties": {
            "reference_id": { "type": "string", "description": "Reference ID from truncation footer." },
            "search_term": { "type": "string", "description": "Text to search for." },
            "context_lines": { "type": "integer", "default": 2, "description": "Context lines around matches." }
          },
          "required": ["reference_id", "search_term"],
          "additionalProperties": false
        }
      }
    },

    {
      "type": "function",
      "function": {
        "name": "view_tasklist",
        "description": "View the current task list for the conversation.",
        "parameters": { "type": "object", "properties": {}, "additionalProperties": false }
      }
    },
    {
      "type": "function",
      "function": {
        "name": "add_tasks",
        "description": "Add one or more new tasks (and optional subtasks) to the task list.",
        "parameters": {
          "type": "object",
          "properties": {
            "tasks": {
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "name": { "type": "string" },
                  "description": { "type": "string" },
                  "parent_task_id": { "type": "string" },
                  "after_task_id": { "type": "string" },
                  "state": {
                    "type": "string",
                    "enum": ["NOT_STARTED", "IN_PROGRESS", "CANCELLED", "COMPLETE"]
                  }
                },
                "required": ["name", "description"],
                "additionalProperties": false
              }
            }
          },
          "required": ["tasks"],
          "additionalProperties": false
        }
      }
    },
    {
      "type": "function",
      "function": {
        "name": "update_tasks",
        "description": "Update one or more tasks' properties (state, name, description). Prefer batch updates.",
        "parameters": {
          "type": "object",
          "properties": {
            "tasks": {
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "task_id": { "type": "string" },
                  "state": {
                    "type": "string",
                    "enum": ["NOT_STARTED", "IN_PROGRESS", "CANCELLED", "COMPLETE"]
                  },
                  "name": { "type": "string" },
                  "description": { "type": "string" }
                },
                "required": ["task_id"],
                "additionalProperties": false
              }
            }
          },
          "required": ["tasks"],
          "additionalProperties": false
        }
      }
    },
    {
      "type": "function",
      "function": {
        "name": "reorganize_tasklist",
        "description": "Major restructuring of the task list using a full markdown representation.",
        "parameters": {
          "type": "object",
          "properties": {
            "markdown": { "type": "string", "description": "Full task list in markdown with exactly one root task." }
          },
          "required": ["markdown"],
          "additionalProperties": false
        }
      }
    },

    {
      "type": "function",
      "function": {
        "name": "remember",
        "description": "Store long-term memory that can be useful in future interactions.",
        "parameters": {
          "type": "object",
          "properties": {
            "memory": { "type": "string", "description": "One concise sentence to remember." }
          },
          "required": ["memory"],
          "additionalProperties": false
        }
      }
    },

    {
      "type": "function",
      "function": {
        "name": "render-mermaid",
        "description": "Render a Mermaid diagram from the provided definition.",
        "parameters": {
          "type": "object",
          "properties": {
            "diagram_definition": { "type": "string", "description": "Mermaid definition code." },
            "title": { "type": "string", "description": "Optional title for the diagram." }
          },
          "required": ["diagram_definition"],
          "additionalProperties": false
        }
      }
    }
  ]
}
