d94ed2e630
V-633 gave tools spoken aliases, so a Russian act reaches a tool. It resolves the verb only: the rest of the sentence became argv. "перезагрузи роутер" ran as systemctl restart роутер, which is a real tool, a real word and a target that cannot exist on this box. She then reported systemctl's own confusion as if she had tried something sensible, and on a destructive row she spent a confirm turn on it first. The executor now refuses, ahead of the confirm gate, and names the word it could not place. The check is the script and not a word list: a unit, a container, a host and a path are ASCII here, so a Cyrillic argv element means the alias match swallowed the verb and handed on the next word. Process rows only. An MCP argument is not a target — a task title is Russian and always was — and a house row drops the spoken args already. It does not try to guess the right target. Identity is Nexus's, and a target Nexus resolves reaches Hexis through handleHexisAct before this executor is asked.
158 lines
6.7 KiB
JSON
158 lines
6.7 KiB
JSON
{
|
|
"schema_version": 1,
|
|
"name": "russian act and smart-home replies v1",
|
|
"notes": [
|
|
"What she says when a capability ran, refused, or could not be reached. Edit the wording here, no Go changes needed.",
|
|
"Rules: she is feminine about herself, he is a man addressed as ты. Never вы/вас/ваш, never он/его about him. No pet names.",
|
|
"\"it ran\", \"it was refused\", \"a service is down\" and \"I could not work out what you meant\" are four different truths. They keep four entries, because one variant set would let a failure report itself as a success.",
|
|
"She says what he would say. No schema words out loud: not «сущность», not «экосистема», not a capability id, not a config key. She is talking about a lamp or a server.",
|
|
"A service that is down or refusing is named. \"не отвечает\" with no subject tells him nothing he can act on, and Nexus, Praxis and Hexis fail independently.",
|
|
"Placeholders: {name} an entity or capability the caller resolved, {name_entity} the entity an act runs against when {name} is already the capability, {out} the command's own output, {items} a joined list, {count} a number, {word} the counted noun in the form {count} needs. Entity names and capability ids are interpolated Go-side.",
|
|
"A count never carries a hardcoded noun. Russian inflects it — 1 устройство, 2 устройства, 5 устройств — so the number goes in {count} and the noun comes from the Go helper through {word}.",
|
|
"An entry that only exists to read a list back must never be reached with an empty list. The caller routes an empty list to the matching _none entry, because a single-variant placeholder-only line has no shorter wording to fall back to.",
|
|
"fixed: true means exactly one variant and no picking. Used where the wording carries an instruction he has to act on — a confirmation, a pointer at /tools — and for the lines that report an act as done, because a success report that reworded itself is harder to trust and harder to test."
|
|
],
|
|
"entries": {
|
|
"act_done": {
|
|
"fixed": true,
|
|
"variants": ["готово."]
|
|
},
|
|
"act_done_out": {
|
|
"variants": ["готово: {out}", "сделала: {out}"]
|
|
},
|
|
"act_done_entity": {
|
|
"fixed": true,
|
|
"variants": ["готово: {name}."]
|
|
},
|
|
"act_confirm": {
|
|
"fixed": true,
|
|
"variants": ["выполнить «{name}»? да или нет."]
|
|
},
|
|
"act_confirm_entity": {
|
|
"fixed": true,
|
|
"variants": ["выполнить «{name}» для {name_entity}? да или нет."]
|
|
},
|
|
"act_which": {
|
|
"fixed": true,
|
|
"variants": ["какую команду для {name}: {items}?"]
|
|
},
|
|
"act_fail": {
|
|
"fixed": true,
|
|
"variants": ["не получилось выполнить команду."]
|
|
},
|
|
"act_fail_out": {
|
|
"fixed": true,
|
|
"variants": ["не получилось выполнить команду: {out}"]
|
|
},
|
|
"act_fail_entity": {
|
|
"fixed": true,
|
|
"variants": ["не получилось выполнить команду для {name}."]
|
|
},
|
|
"act_server_down": {
|
|
"fixed": true,
|
|
"variants": ["инструмент есть, но сервер не подключён."]
|
|
},
|
|
"act_withdrawn": {
|
|
"fixed": true,
|
|
"variants": ["сервер больше не отдаёт этот инструмент — сняла его с разрешённых, посмотри /tools."]
|
|
},
|
|
"act_needs_args": {
|
|
"fixed": true,
|
|
"variants": ["тут нужны аргументы, из голоса не соберу. угадывать не буду."]
|
|
},
|
|
"act_unknown_target": {
|
|
"fixed": true,
|
|
"variants": ["«{name}» — не знаю такой цели. назови её как в системе."]
|
|
},
|
|
"act_needs_authed_surface": {
|
|
"fixed": true,
|
|
"variants": ["это из голоса не выполню — после него ничего не вернуть. запусти сам."]
|
|
},
|
|
"eco_denied": {
|
|
"fixed": true,
|
|
"variants": ["{name} отклоняет доступ, проверь токен."]
|
|
},
|
|
"eco_down": {
|
|
"fixed": true,
|
|
"variants": ["{name} не отвечает, попробуй ещё раз."]
|
|
},
|
|
"eco_ambiguous": {
|
|
"fixed": true,
|
|
"variants": ["что именно: {items}?"]
|
|
},
|
|
"eco_unknown_entity": {
|
|
"variants": ["не знаю, что это.", "такого у меня нет."]
|
|
},
|
|
"eco_no_nexus": {
|
|
"fixed": true,
|
|
"variants": ["не с чем связать — Nexus не настроен."]
|
|
},
|
|
"eco_about_what": {
|
|
"fixed": true,
|
|
"variants": ["про что именно?"]
|
|
},
|
|
"eco_recall": {
|
|
"fixed": true,
|
|
"variants": ["я помню: {items}"]
|
|
},
|
|
"attention_none": {
|
|
"fixed": true,
|
|
"variants": ["ничего не требует внимания."]
|
|
},
|
|
"attention_list": {
|
|
"fixed": true,
|
|
"variants": ["требует внимания: {items}"]
|
|
},
|
|
"attention_fail": {
|
|
"fixed": true,
|
|
"variants": ["не могу сейчас узнать, что требует внимания."]
|
|
},
|
|
"attention_none_entity": {
|
|
"variants": ["по «{name}» ничего нет.", "по «{name}» пока пусто."]
|
|
},
|
|
"attention_list_entity": {
|
|
"fixed": true,
|
|
"variants": ["по «{name}»: {items}"]
|
|
},
|
|
"attention_fail_entity": {
|
|
"fixed": true,
|
|
"variants": ["не могу сейчас узнать, что требует внимания по «{name}»."]
|
|
},
|
|
"attention_degraded": {
|
|
"fixed": true,
|
|
"variants": ["за всё не отвечу — источники молчат: {items}."]
|
|
},
|
|
"attention_no_sources": {
|
|
"fixed": true,
|
|
"variants": ["мне пока нечего смотреть — у Praxis нет источников."]
|
|
},
|
|
"changes_none": {
|
|
"fixed": true,
|
|
"variants": ["изменений нет."]
|
|
},
|
|
"changes_list": {
|
|
"fixed": true,
|
|
"variants": ["изменения: {items}"]
|
|
},
|
|
"changes_fail": {
|
|
"fixed": true,
|
|
"variants": ["не могу сейчас узнать об изменениях."]
|
|
},
|
|
"home_unreachable": {
|
|
"variants": ["дом не отвечает.", "не достучалась до дома."]
|
|
},
|
|
"home_empty": {
|
|
"fixed": true,
|
|
"variants": ["дом ничего не отдаёт."]
|
|
},
|
|
"home_on": {
|
|
"fixed": true,
|
|
"variants": ["включено: {items}"]
|
|
},
|
|
"home_dark": {
|
|
"fixed": true,
|
|
"variants": ["не отвечают: {count} {word}."]
|
|
}
|
|
}
|
|
}
|