Files
LocalAI/addons/web/manifest.json
T
Ettore Di Giacinto 1834d4fd72 refactor(addons): make manifest api 2 the only version
No release ever shipped add-ons, so there is no installed base on api 1.
The manifest must now declare api {"min": 2, "max": 2}; a manifest with
api 1, no api or a wider range is refused with a message that names the
range.

Every field that was gated on api 2 is now part of the contract, so the
Min*API constants and their gates are gone, and so are HostAPIMin and
the apiMin host field. Three older-manifest shims go with them: the
resource listing the host implied for one add-on, the legacyArgs hint
for arguments an older version of a tool took, and the tests that
checked the gates. All shipped manifests and the test fixtures declare
api 2.

Assisted-by: Claude:claude-sonnet-5-5 go test
2026-11-03 16:15:07 +00:00

238 lines
6.4 KiB
JSON

{
"api": {
"max": 2,
"min": 2
},
"arch": "amd64",
"capabilities": {
"hostOperations": {
"optional": [
"workspace.admin"
]
},
"toolDefinitions": [
{
"name": "search",
"description": "Search the web. Returns up to 10 results with title, URL and snippet. Use web_fetch to read a result.",
"kind": "read",
"inputSchema": {
"additionalProperties": false,
"properties": {
"freshness": {
"description": "Only results from this recent period.",
"enum": [
"day",
"week",
"month",
"year"
],
"type": "string"
},
"maxResults": {
"description": "How many results (default 5).",
"maximum": 10,
"minimum": 1,
"type": "integer"
},
"query": {
"description": "What to search for.",
"maxLength": 400,
"type": "string"
},
"site": {
"description": "Only results from this host, for example docs.python.org.",
"type": "string"
}
},
"required": [
"query"
],
"type": "object"
},
"shadows": "web_search"
},
{
"name": "fetch",
"description": "Read a public web page or file by URL (http or https), PDF included. Returns its main text as Markdown. Long pages are cut; the end says how much is left.",
"kind": "read",
"inputSchema": {
"additionalProperties": false,
"properties": {
"format": {
"description": "markdown (default) keeps headings, links and tables; text is plain.",
"enum": [
"markdown",
"text"
],
"type": "string"
},
"maxChars": {
"description": "Most characters to return (default 20000).",
"maximum": 100000,
"minimum": 100,
"type": "integer"
},
"url": {
"description": "The http or https address to read.",
"type": "string"
}
},
"required": [
"url"
],
"type": "object"
},
"shadows": "web_fetch"
},
{
"name": "status",
"description": "Say which search providers serve now. An administrator also gets the settings, without the keys. The Settings page calls it; no model does.",
"kind": "read",
"inputSchema": {
"additionalProperties": false,
"properties": {},
"type": "object"
},
"uiOnly": true
},
{
"name": "set-settings",
"description": "Save the search providers, their order and their keys. Administrators only. The Settings page calls it; no model does.",
"kind": "read",
"inputSchema": {
"additionalProperties": false,
"properties": {
"clear": {
"description": "Remove the saved key of these providers.",
"items": {
"enum": [
"brave",
"tavily",
"google"
],
"type": "string"
},
"maxItems": 3,
"type": "array"
},
"googleEngine": {
"description": "The Programmable Search Engine ID (cx).",
"maxLength": 128,
"type": "string"
},
"keys": {
"additionalProperties": false,
"description": "A new key for each named provider. An empty value keeps the saved key.",
"properties": {
"brave": {
"maxLength": 256,
"type": "string"
},
"google": {
"maxLength": 256,
"type": "string"
},
"tavily": {
"maxLength": 256,
"type": "string"
}
},
"type": "object"
},
"order": {
"description": "The providers to try, first to last.",
"items": {
"enum": [
"brave",
"tavily",
"google",
"searxng",
"duckduckgo"
],
"type": "string"
},
"maxItems": 5,
"type": "array"
},
"searxngUrl": {
"description": "The address of a SearXNG instance.",
"maxLength": 2048,
"type": "string"
}
},
"type": "object"
},
"uiOnly": true
},
{
"name": "test-search",
"description": "Run one search with each provider of the order and say which answer. Administrators only. The Settings page calls it; no model does.",
"kind": "read",
"inputSchema": {
"additionalProperties": false,
"properties": {
"query": {
"description": "What to search for. Default LocalAI.",
"maxLength": 400,
"type": "string"
}
},
"type": "object"
},
"uiOnly": true
}
],
"tools": [
"search",
"fetch",
"status",
"set-settings",
"test-search"
],
"ui": {
"controls": [
"tool-providers"
],
"css": [
"ui/web.css"
],
"description": "Search the web from your chats with Brave Search, Tavily or Google, and read PDF files on the web.",
"entry": "ui/web.js",
"icon": "ui/icon.png",
"mainPage": "web",
"pages": [
"web"
],
"sdk": {
"max": 2,
"min": 2
},
"slots": [
{
"component": "WebSettings",
"id": "settings",
"slot": "settings.sections"
}
],
"title": "Web"
}
},
"dataFormat": {
"max": 1,
"min": 1
},
"executable": "web",
"host": {
"max": 1,
"min": 1
},
"id": "web",
"os": "linux",
"protocol": {
"max": 1,
"min": 1
},
"schemaVersion": 1,
"version": "0.1.0"
}