Files
LocalAI/addons/slack/manifest.json
T
Ettore Di Giacinto 7df9b263ed feat(addons): carry translated text in the manifest and the library
The manifest said its text in English only. An add-on can now translate
what the host shows to people, and the library list shows it before the
add-on is installed.

The title and the description use the language maps of ui.title and
ui.description, which every host already reads. A new optional field,
i18n, translates the connector kinds by language tag. It stays under api
2 and its set of fields is closed: the title and the description of a
declared kind, and only where the English kind has them. Tool
descriptions, schemas and skills are for the model and stay English.
Tags follow the language map rule (at most 16, no English), each string
has the limit of its English field, all translated text has at most
12 000 characters, and markup, control characters and direction
overrides are refused. A host that does not know the field refuses the
manifest, as it refuses any unknown field. The field is part of the
manifest, so the package digest and the signature cover it.

The catalog generator copies the translated title and description of
the manifest into each library entry (ui.titles, ui.descriptions), the
host validates them like the manifest values, and a library search
matches the English and the translated text. The apps list and the
connector kinds return the text of every language and, when the request
names a language (lang, else Accept-Language), the resolved text beside
the English fields: language, localizedTitle and localizedDescription.
No existing field changes.

Every add-on on master now has its title and description in Italian,
German, Spanish, French, Brazilian Portuguese, Simplified Chinese,
Korean and Indonesian, and the chat connectors carry their kind text in
the same languages. The packaging tests require that, and that a
translation has the fields of the English text it translates. The names
of the add-ons that provide a role are matched in their English title
only: a translation is often an ordinary word of its language.

Assisted-by: Claude:claude-sonnet-5-5 go
2026-11-04 17:46:53 +00:00

88 lines
4.4 KiB
JSON

{
"schemaVersion": 1,
"id": "slack",
"version": "0.1.0",
"executable": "slack",
"os": "linux",
"arch": "amd64",
"host": { "min": 1, "max": 1 },
"api": {"min": 2, "max": 2},
"protocol": { "min": 1, "max": 1 },
"dataFormat": { "min": 1, "max": 1 },
"capabilities": {
"hostOperations": {
"optional": ["connector.file.get", "connector.file.put"]
},
"connector": {
"kinds": [
{
"id": "slack",
"title": "Slack",
"description": "Talk to one of your saved agents from Slack, in direct messages and in channel threads.",
"senderHint": "A user ID (U...), a channel ID (C...) or an @name",
"delivery": "pull",
"files": {
"receive": { "maxBytes": 1073741824 },
"send": { "maxBytes": 1073741824 }
},
"page": "apps",
"history": { "thread": true, "maxMessages": 30 },
"options": [
{
"id": "followThreads",
"title": "Threads the bot follows",
"description": "Whether the bot answers replies in a thread without a new mention.",
"default": "own",
"values": [
{ "id": "own", "title": "Only threads it started" },
{ "id": "any", "title": "Any thread it was mentioned in" },
{ "id": "never", "title": "None: always ask with a mention" }
]
}
]
}
]
},
"ui": {
"entry": "ui/slack.js",
"css": ["ui/slack.css"],
"sdk": { "min": 2, "max": 2 },
"pages": ["apps"],
"mainPage": "apps",
"icon": "ui/icon.png",
"title": {
"en": "Slack",
"it": "Slack",
"de": "Slack",
"es": "Slack",
"fr": "Slack",
"pt-BR": "Slack",
"zh-CN": "Slack",
"ko": "Slack",
"id": "Slack"
},
"description": {
"en": "Bind a Slack app to one of your saved agents, so people can talk to it from Slack.",
"it": "Collega un'app Slack a uno dei tuoi agenti salvati, così le persone possono parlarci da Slack.",
"de": "Verbinden Sie eine Slack-App mit einem Ihrer gespeicherten Agenten, damit andere über Slack mit ihm sprechen können.",
"es": "Vincula una aplicación de Slack a uno de tus agentes guardados para que la gente pueda hablar con él desde Slack.",
"fr": "Associez une application Slack à l'un de vos agents enregistrés pour que les gens puissent lui parler depuis Slack.",
"pt-BR": "Vincule um app do Slack a um dos seus agentes salvos para que as pessoas possam conversar com ele pelo Slack.",
"zh-CN": "将 Slack 应用绑定到你保存的某个智能体,让大家可以在 Slack 中与它对话。",
"ko": "저장한 에이전트 중 하나에 Slack 앱을 연결하여 사람들이 Slack에서 대화할 수 있게 합니다.",
"id": "Hubungkan aplikasi Slack ke salah satu agen tersimpan Anda agar orang dapat mengobrol dengannya dari Slack."
}
}
},
"i18n": {
"it": {"kinds": {"slack": {"title": "Slack", "description": "Parla con uno dei tuoi agenti salvati da Slack, nei messaggi diretti e nei thread dei canali."}}},
"de": {"kinds": {"slack": {"title": "Slack", "description": "Sprechen Sie über Slack mit einem Ihrer gespeicherten Agenten, in Direktnachrichten und in Kanal-Threads."}}},
"es": {"kinds": {"slack": {"title": "Slack", "description": "Habla con uno de tus agentes guardados desde Slack, en mensajes directos y en hilos de canales."}}},
"fr": {"kinds": {"slack": {"title": "Slack", "description": "Parlez à l'un de vos agents enregistrés depuis Slack, en messages privés et dans les fils des canaux."}}},
"pt-BR": {"kinds": {"slack": {"title": "Slack", "description": "Converse com um dos seus agentes salvos pelo Slack, em mensagens diretas e em threads de canais."}}},
"zh-CN": {"kinds": {"slack": {"title": "Slack", "description": "在 Slack 中与你保存的某个智能体对话,支持私信和频道线程。"}}},
"ko": {"kinds": {"slack": {"title": "Slack", "description": "Slack에서 저장한 에이전트 중 하나와 대화합니다. 다이렉트 메시지와 채널 스레드에서 사용할 수 있습니다."}}},
"id": {"kinds": {"slack": {"title": "Slack", "description": "Berbicara dengan salah satu agen tersimpan Anda dari Slack, lewat pesan langsung dan di utas kanal."}}}
}
}