strom-research 1.12.1 → 1.13.0-beta.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (57) hide show
  1. package/README.md +29 -0
  2. package/assets/lang/cs.json +75 -11
  3. package/assets/lang/de.json +75 -11
  4. package/assets/method/recording.md +5 -1
  5. package/assets/plugins/connectors/DISCOVERY.md +5 -0
  6. package/assets/plugins/connectors/README.md +7 -2
  7. package/dist/cli/backups.js +79 -0
  8. package/dist/cli/context.js +90 -4
  9. package/dist/cli/execute.js +14 -6
  10. package/dist/cli/format.js +33 -0
  11. package/dist/cli/help.js +1 -1
  12. package/dist/cli/main.js +67 -9
  13. package/dist/cli/menu-links.js +6 -3
  14. package/dist/cli/menu.js +23 -4
  15. package/dist/cli/registry.js +2 -2
  16. package/dist/cli/ui.js +75 -11
  17. package/dist/cli/wizard.js +31 -13
  18. package/dist/commands/analysis.js +1 -1
  19. package/dist/commands/browse.js +1 -1
  20. package/dist/commands/connectors.js +7 -4
  21. package/dist/commands/guide.js +2 -1
  22. package/dist/commands/links.js +19 -8
  23. package/dist/commands/output.js +3 -2
  24. package/dist/commands/people.js +22 -7
  25. package/dist/commands/session.js +1 -0
  26. package/dist/commands/setup.js +229 -50
  27. package/dist/commands/start.js +34 -13
  28. package/dist/commands/sync.js +22 -16
  29. package/dist/commands/trees.js +5 -0
  30. package/dist/core/actions.js +57 -14
  31. package/dist/core/appbrowser.js +32 -18
  32. package/dist/core/backup.js +244 -0
  33. package/dist/core/chromium.js +5 -4
  34. package/dist/core/config.js +5 -4
  35. package/dist/core/connector.js +63 -9
  36. package/dist/core/deps.js +3 -2
  37. package/dist/core/errors.js +5 -0
  38. package/dist/core/import.js +41 -4
  39. package/dist/core/links.js +64 -40
  40. package/dist/core/live.js +51 -9
  41. package/dist/core/material.js +66 -0
  42. package/dist/core/migrate.js +5 -1
  43. package/dist/core/overview.js +2 -1
  44. package/dist/core/paths.js +45 -2
  45. package/dist/core/people.js +103 -7
  46. package/dist/core/phrases.js +11 -2
  47. package/dist/core/relocate.js +9 -3
  48. package/dist/core/self.js +81 -2
  49. package/dist/core/stromapp.js +159 -24
  50. package/dist/core/sync.js +170 -5
  51. package/dist/core/tree.js +27 -2
  52. package/dist/core/uninstall.js +160 -22
  53. package/dist/core/update.js +157 -36
  54. package/dist/core/validate.js +3 -0
  55. package/dist/gedcom/export.js +20 -3
  56. package/dist/gedcom/validate.js +2 -1
  57. package/package.json +5 -1
package/README.md CHANGED
@@ -152,6 +152,35 @@ npm run release # release/: strom-app.tar.gz, SHASUMS256.t
152
152
 
153
153
  Zero runtime dependencies: TypeScript on Node's built-ins, and git.
154
154
 
155
+ ## A second strom beside the first
156
+
157
+ For testers and developers: another version of strom, e.g. to try one, next to
158
+ the one you use — with its own command, program folder, settings and research
159
+ folder, so the two never share data.
160
+
161
+ ```bash
162
+ curl -fsSL https://raw.githubusercontent.com/ACiDekCZ/strom-research/main/install/install.sh | \
163
+ STROM_ISOLATED=1 STROM_INSTALL_DIR="$HOME/strom-try" STROM_CONFIG_DIR="$HOME/.config/strom-try" \
164
+ STROM_COMMAND=strom-try sh
165
+ ```
166
+
167
+ Windows (PowerShell):
168
+ `$env:STROM_ISOLATED='1'; $env:STROM_INSTALL_DIR="$env:LOCALAPPDATA\Programs\Strom-try"; $env:STROM_CONFIG_DIR="$env:APPDATA\strom-try"; $env:STROM_COMMAND='strom-try'; irm https://raw.githubusercontent.com/ACiDekCZ/strom-research/main/install/install.ps1 | iex`
169
+
170
+ - `STROM_ISOLATED=1` with `STROM_INSTALL_DIR` and `STROM_CONFIG_DIR`: the
171
+ program and its settings live in those folders only; it teaches no agent,
172
+ puts no shortcut on the desktop and leaves your `strom` alone.
173
+ - `STROM_COMMAND=strom-<letters and digits>` (optional): the command it starts
174
+ with, next to `strom` (macOS, Linux: `~/.local/bin`; Windows: a `bin` folder
175
+ of its own on your PATH). It never overwrites a command it did not write. Its
176
+ research folder is suggested as `Documents/Strom <name>` (`Strom try`), and
177
+ links from the Strom app can reach it as `strom-research-<name>://` (on your
178
+ yes, as with the first). Without a command it is started by its full path and
179
+ takes no links.
180
+ - To remove it: `strom-try uninstall` — its command, its links, its PATH entry
181
+ and its program folder go; its settings and research stay (delete them by
182
+ hand when not needed), and so does the first strom with everything of it.
183
+
155
184
  ## License
156
185
 
157
186
  Copyright © 2026 Milan Víšek.
@@ -62,6 +62,9 @@
62
62
  "ui.dialog.refused": "Nepovoleno – nic se nezměnilo.",
63
63
  "ui.link.isolated": "Tohle je izolovaná instalace (STROM_ISOLATED): odkazy strom-research:// nezapisuje – zůstávají běžné instalaci stromu.",
64
64
  "ui.doc.isolated": "izolovaná instalace v {folder}",
65
+ "ui.doc.second": "druhá instalace: příkaz {command}, ve složce {folder}, její odkazy {scheme}://",
66
+ "ui.doc.home.regular": "je to i složka běžného stromu: dvě instalace nad jedním výzkumem",
67
+ "ui.doc.home.program": "ve složce programu strom – aktualizace nebo odinstalace by ji mohla vzít; lépe přesunout jinam (strom setup v terminálu ji přesune i s výzkumem)",
65
68
  "ui.doc.knows.isolated": "izolovaná instalace: agenty mimo ni nic neučí",
66
69
  "ui.doc.links.isolated": "izolovaná instalace: odkazy nezapisuje",
67
70
  "ui.doc.app.isolated": "izolovaná instalace: úmyslně se nepoužívá",
@@ -74,6 +77,8 @@
74
77
  "ui.consent.connector.revoke": "Zastavit stahovač „{name}“?",
75
78
  "ui.consent.host": "Povolit automatické stahování z {host}?",
76
79
  "ui.consent.host.revoke": "Zastavit automatické stahování z {host}?",
80
+ "ui.consent.elsewhere.connector": "Spustit stahovač „{name}“? Žádá o to agent mimo složku výzkumu ({cwd}).",
81
+ "ui.consent.elsewhere.run": "Spustit samostatnou práci agenta na výzkumu „{tree}“? Žádá o to agent mimo složku výzkumu ({cwd}); práce stojí peníze.",
77
82
  "ui.consent.connectors.off": "Nechat stahovače běžet bez ptaní předem?",
78
83
  "ui.menu.title": "Strom výzkum {version}",
79
84
  "ui.menu.tree": "Rodokmen: {name} · osob: {persons}",
@@ -89,7 +94,7 @@
89
94
  "ui.menu.trees": "Jiný rodokmen · poslat nebo přijmout",
90
95
  "ui.menu.newtree": "Založit rodokmen · poslat nebo přijmout",
91
96
  "ui.menu.quit": "Konec",
92
- "ui.menu.bye": "Na shledanou. Příště stačí spustit: strom",
97
+ "ui.menu.bye": "Na shledanou. Příště stačí spustit: {strom}",
93
98
  "ui.run.how": "Kolik úkolů? (skončí dřív, když už nebude co dělat; 0 vrátí zpět)",
94
99
  "ui.run.start": "Agent teď pracuje sám. Zastaví ho klávesy Ctrl-C – nic se neztratí.",
95
100
  "ui.waiting.none": "Nic nečeká.",
@@ -113,14 +118,14 @@
113
118
  "ui.setup.git.ok": "✓ Git (historie výzkumu): {version}",
114
119
  "ui.setup.git.missing": "Chybí Git – strom v něm uchovává historii výzkumu, aby se nic neztratilo.",
115
120
  "ui.setup.git.wait": "Dokončit instalaci v okně, které se otevřelo, a pak Enter.",
116
- "ui.setup.git.manual": "Nainstalovat ho příkazem: {command} – a pak znovu spustit strom.",
121
+ "ui.setup.git.manual": "Nainstalovat ho příkazem: {command} – a pak znovu spustit {strom}.",
117
122
  "ui.setup.agent.ok": "✓ AI agent: {name}",
118
123
  "ui.setup.agent.none": "Nenašel jsem žádného AI agenta – strom ho potřebuje: výzkum se dělá s ním.",
119
124
  "ui.setup.agent.install": "Nainstalovat Claude Code hned (doporučeno; je potřeba předplatné Claude)",
120
125
  "ui.setup.agent.guide": "Ukázat, jací agenti jsou (otevře stránku v prohlížeči)",
121
126
  "ui.setup.agent.later": "Později",
122
127
  "ui.setup.agent.login": "Při prvním spuštění agenta přijde přihlášení – otevře se okno prohlížeče.",
123
- "ui.setup.agent.manual": "Nainstalovat AI agenta (jak: {url}) a pak znovu spustit strom.",
128
+ "ui.setup.agent.manual": "Nainstalovat AI agenta (jak: {url}) a pak znovu spustit {strom}.",
124
129
  "ui.setup.model": "Který model má výzkum dělat?",
125
130
  "ui.setup.model.opus": "Opus – nejlépe čte staré rukopisy (doporučeno)",
126
131
  "ui.setup.model.sonnet": "Sonnet – rychlejší; tištěné dokumenty a běžná práce",
@@ -150,6 +155,7 @@
150
155
  "ui.consent.connector.hosts": "Připojí se jen k {hosts} – pomalu, přes omezovač stromu.",
151
156
  "ui.consent.connector.changed": "Jeho kód se od povolení změnil.",
152
157
  "ui.consent.connector.direct": "Pozor: jeho kód se připojuje k síti sám, mimo omezovač stromu.",
158
+ "ui.consent.connector.unfenced": "Pozor: spouští program, který strom neohraničí ({run}) – může číst a měnit všechny soubory tohoto uživatele, spouštět jiné programy a připojit se kamkoli. Po každé změně jeho kódu se dotaz zopakuje.",
153
159
  "ui.consent.connector.terms": "Podmínky užití archivu: {terms}",
154
160
  "ui.consent.host.unblock": "{host} nás odmítl. Povolit znovu – jen pokud archiv řekl, že je to v pořádku?",
155
161
  "ui.menu.otheragent": "Tentokrát mluvit s jiným agentem nebo jinde",
@@ -253,6 +259,8 @@
253
259
  "ui.doc.app": "aplikace Strom",
254
260
  "ui.doc.tree": "tento rodokmen",
255
261
  "ui.doc.innode": "strom {version} v Node {node}",
262
+ "ui.doc.fence": "stahovače v ohrádce",
263
+ "ui.doc.fence.net": "Node {node}: stahovače běží v ohrádce, ale síť jim zavře až Node 25 nebo novější",
256
264
  "ui.doc.oldnode": "Node {node} je příliš starý (potřeba 22.18 nebo novější)",
257
265
  "ui.doc.missing": "chybí",
258
266
  "ui.doc.notsetup": "zatím nenastaveno",
@@ -299,7 +307,7 @@
299
307
  "ui.o.results.offer": "{file} – pro aplikaci Strom, tady zatím nenainstalovanou: nabídni uživateli instalaci z {url} (strom app install ji tam otevře)",
300
308
  "ui.o.results.plain": "{file} – pro jakýkoli program na rodokmeny",
301
309
  "ui.chat.handover": "Výzkum pokračuje ve vlastním rozhovoru: otevřelo se nové okno s agentem {agent} ve složce rodokmenu. Dál se pokračuje tam – tento rozhovor jde zavřít.",
302
- "ui.chat.handover.failed": "Nové okno se tady otevřít nepodařilo. Výzkum jde spustit ručně: v terminálu příkazem strom (nebo zástupcem Strom výzkum na ploše).",
310
+ "ui.chat.handover.failed": "Nové okno se tady otevřít nepodařilo. Výzkum jde spustit ručně: v terminálu příkazem {strom} (nebo zástupcem Strom výzkum na ploše).",
303
311
  "ui.chat.handover.end": "Dál se pokračuje tam – tento rozhovor jde zavřít.",
304
312
  "ui.why.handover": "výzkum patří do vlastního rozhovoru ve složce rodokmenu (jeho pravidla, bez ptaní u každého kroku): tohle ho otevře – řekni uživateli, ať pokračuje tam; tady pokračuj, jen když chce",
305
313
  "ui.app.research": "Otevírám výzkum {name} v aplikaci Strom ({where}): poprvé jako nový rodokmen, příště se tentýž rodokmen aktualizuje.",
@@ -396,7 +404,9 @@
396
404
  "ui.uninstall.npm": "Samotný program (nainstalovaný přes npm): npm uninstall -g strom-research",
397
405
  "ui.uninstall.done": "strom je odinstalovaný. Děkujeme za bádání s ním.",
398
406
  "ui.uninstall.running": "strom z této instalace ještě běží v jiném okně ({list}): zavřít ho – menu, rozhovor, práci agenta – a spustit strom uninstall znovu. Nic se neodebralo.",
399
- "ui.uninstall.later": "zmizí, jakmile se toto okno zavře",
407
+ "ui.uninstall.folderKept": "Složka {folder} zůstává: je v ní, co do ní strom nedal ({what}).",
408
+ "ui.uninstall.later": "zmizí několik sekund po skončení tohoto příkazu",
409
+ "ui.uninstall.skipped": "{path} je v install.json uveden jako spouštěč programu strom, ale spouštěč to není (jiné jméno, nebo leží ve výzkumu) – zůstává.",
400
410
  "ui.menu.update.line": "Vyšla nová verze stromu: {version}.",
401
411
  "ui.menu.update": "Aktualizovat strom na {version}",
402
412
  "ui.doc.update": "nová verze",
@@ -404,7 +414,7 @@
404
414
  "ui.update.unknown": "Nepodařilo se zjistit nejnovější verzi stromu.",
405
415
  "ui.update.current": "strom {version} je nejnovější verze.",
406
416
  "ui.update.available": "Vyšla nová verze: {version} (tato je {current}) – nainstaluje ji strom update.",
407
- "ui.update.npm": "Vyšla nová verze: {version}. strom je tu nainstalovaný přes npm: npm install -g strom-research@latest",
417
+ "ui.update.npm": "Vyšla nová verze: {version}. strom je tu nainstalovaný přes npm: npm install -g strom-research@{tag}",
408
418
  "ui.update.sure": "Aktualizovat strom z {current} na {version}? Výzkumy zůstanou, jak jsou.",
409
419
  "ui.update.later": "Teď ne – kdykoli strom update.",
410
420
  "ui.update.downloading": "Stahuji strom {version}…",
@@ -432,6 +442,19 @@
432
442
  "ui.update.node.sure": "Aktualizovat Node stromu z {from} na {to} (bezpečnostní opravy)?",
433
443
  "ui.update.node.done": "✓ Node je aktualizovaný: {from} → {to}.",
434
444
  "ui.update.bridges": "Živé sledování v aplikaci Strom pokračuje s novou verzí ({n}).",
445
+ "ui.update.npm.channel": "strom je tu nainstalovaný přes npm: npm install -g strom-research@{tag}",
446
+ "ui.update.channel.beta.sure": "Přepnout strom na beta verze: {current} → {version}?",
447
+ "ui.update.channel.stable.sure": "Vrátit strom k vydaným verzím: {current} → {version}?",
448
+ "ui.update.channel.beta.now": "Od teď strom bere beta verze.",
449
+ "ui.update.channel.stable.now": "Od teď strom bere vydané verze.",
450
+ "ui.update.older": "{version} je starší verze než {current}; výzkumy zůstanou, jak jsou.",
451
+ "ui.update.stays": "Výzkumy zůstanou, jak jsou.",
452
+ "ui.doc.beta": "beta verze",
453
+ "ui.doc.backup": "záloha",
454
+ "ui.backup.made": "Záloha před přechodem z {from} na {to}: {path} ({size}).",
455
+ "ui.backup.last": "Poslední záloha (před přechodem z {from} na {to}, {date}): {path}",
456
+ "ui.backup.readme": "Strom výzkum – záloha\n\nVytvořena {date}, před přechodem ze stromu {from} na {to}.\n\nUvnitř:\n- trees: všechny rodokmeny tohoto počítače, každý celou svou složkou i s historií (.git);\n- settings: nastavení stromu s klíči pečetí a přihlášeními, jak byly na tomto počítači.\n\nNení uvnitř: sdílené obrázky (složka shared/media). Každý je tam uložen podle svého obsahu a strom žádný nemaže; každá verze stromu čte tytéž. Vynecháno je i to, co strom vytvoří znovu sám (náhledy skenů, výřezy).\n\nVrácení rodokmenu: zkopírovat jeho složku z trees zpět tam, kde rodokmeny jsou (místo té, která tam je, nebo vedle ní pod jiným jménem), a spustit {strom}: strom ho zkontroluje ({strom} check).",
457
+ "ui.trees.locked": "zamčeno: zapsal strom {by}",
435
458
  "ui.setup.stromapp": "Aplikace Strom (zdarma, v prohlížeči) ukáže výzkum jako rodokmen – u každého zápisu jeho obrázek vyříznutý ze skenu, příběhy předků – a když agent pracuje, sleduje výzkum živě. Používat ji?",
436
459
  "ui.setup.stromapp.install": "Ano – nainstalovat ji teď (otevře se v prohlížeči, strom řekne, kam kliknout)",
437
460
  "ui.setup.stromapp.later": "Ano, ale teď ne",
@@ -631,7 +654,7 @@
631
654
  "ui.help.archive.stats": "Archiv v kostce: osoby, jak jisté jsou údaje, předkové v každé generaci",
632
655
  "ui.help.archive.pack": "Zabalit archiv do jednoho souboru ZIP, aby v něm mohl pokračovat někdo jiný",
633
656
  "ui.help.archive.intake": "Přidat podklady od rodiny: dokumenty, fotky, rodokmen, co je známo",
634
- "ui.help.title": "strom <příkaz> – co člověk se stromem dělá (nebo jen strom: menu)",
657
+ "ui.help.title": "strom <příkaz> – co člověk se stromem dělá (nebo jen {strom}: menu)",
635
658
  "ui.help.more": "Nápověda k jednomu příkazu: strom help <příkaz> --human · všechny příkazy anglicky (co čte agent): strom help",
636
659
  "ui.help.more.archive": "Nápověda k jednomu příkazu: strom help <příkaz> --human",
637
660
  "ui.help.examples": "Příklady:",
@@ -732,6 +755,9 @@
732
755
  "ui.sync.name.new": "{n}. {who}: další jméno — {text}",
733
756
  "ui.sync.name.changed": "{n}. {who}: změněné jméno — {old} → {new}",
734
757
  "ui.sync.do.name.user": "platí úprava z aplikace: osoba se ukazuje pod novým jménem, jméno ze záznamu zůstane vedle něj",
758
+ "ui.sync.name.title": "{n}. {who}: {title} — {old} → {new}",
759
+ "ui.sync.do.title": "doplní se ke jménu s odkazem na strom z aplikace",
760
+ "ui.sync.do.title.user": "platí úprava z aplikace (verze výzkumu zůstane v historii)",
735
761
  "ui.sync.sex.changed": "{n}. {who}: pohlaví {text}",
736
762
  "ui.sync.note.new": "{n}. {who}: poznámka — „{text}“",
737
763
  "ui.sync.source.new": "{n}. pramen: „{text}“",
@@ -981,8 +1007,8 @@
981
1007
  "ui.link.off.done": "Odkazy z aplikace Strom už do výzkumu na tomto počítači nevedou.",
982
1008
  "ui.link.off.failed": "Odkazy z aplikace Strom se z tohoto počítače nepodařilo odebrat.",
983
1009
  "ui.link.which.one": "Tento výzkum je tu vícekrát. Který?",
984
- "ui.link.noterminal.any": "strom nemohl otevřít okno terminálu. Spustit strom (výzkum {name}) a pokračovat z jeho nabídky.",
985
- "ui.link.noterminal.new": "strom nemohl otevřít okno terminálu. Spustit strom a pak to zkusit z aplikace Strom znovu.",
1010
+ "ui.link.noterminal.any": "strom nemohl otevřít okno terminálu. Spustit {strom} (výzkum {name}) a pokračovat z jeho nabídky.",
1011
+ "ui.link.noterminal.new": "strom nemohl otevřít okno terminálu. Spustit {strom} a pak to zkusit z aplikace Strom znovu.",
986
1012
  "ui.link.asks": "Aplikace Strom žádá: {what}\nVýzkum: {name}",
987
1013
  "ui.link.go": "Pokračovat?",
988
1014
  "ui.link.cost": "Agent pracuje na předplatné nebo kredit AI.",
@@ -1304,6 +1330,7 @@
1304
1330
  "ui.home.stays": "Výzkum zůstává ve složce {from}.",
1305
1331
  "ui.home.inside": "{to} je uvnitř složky výzkumu {from} (nebo naopak) – vybrat složku mimo ni.",
1306
1332
  "ui.home.notEmpty": "Ve složce {to} už něco je – výzkum se přesune jen do prázdné nebo nové složky.",
1333
+ "ui.home.program": "{to} leží ve složce programu strom – aktualizace nahrazuje, co tam je; je potřeba složka mimo ni.",
1307
1334
  "ui.home.busy": "V rodokmenu {trees} teď někdo pracuje (agent, samostatná práce nebo živé sledování v aplikaci Strom) – výzkum půjde přesunout, až skončí.",
1308
1335
  "ui.home.failed": "Přesunout se nepodařilo ({reason}) – nic se nezměnilo.",
1309
1336
  "ui.app.notinstalled": "Aplikace Strom na tomto počítači ještě není nainstalovaná. Nainstalovat ji teď jako aplikaci z prohlížeče (zdarma; strom ukáže, kam kliknout)?",
@@ -1375,7 +1402,7 @@
1375
1402
  "ui.unpack.kept": " konektor {name} tu už byl – zůstává ten dosavadní",
1376
1403
  "ui.unpack.left": " prohledané stránky, které v něm nejsou: {n} – až budou potřeba, strom je stáhne z archivu",
1377
1404
  "ui.unpack.adopted": " převzato na tento počítač",
1378
- "ui.unpack.next": "Dál: strom (nabídka) nebo strom chat.",
1405
+ "ui.unpack.next": "Dál: {strom} (nabídka) nebo strom chat.",
1379
1406
  "ui.unpack.same": "tento výzkum už tu je: {root}",
1380
1407
  "ui.unpack.person": "výzkum rozbaluje jen člověk u počítače (přidává konektory)",
1381
1408
  "ui.pack.launch.extract": "Nejdřív rozbalit celý soubor ZIP – ve Windows pravým tlačítkem: Extrahovat vše – a spustit tohle znovu z rozbalené složky.",
@@ -1433,7 +1460,7 @@
1433
1460
  "ui.error.command.unknown": "neznámý příkaz „strom {cmd}“",
1434
1461
  "ui.error.command.unknown.hint": "strom help (všechny příkazy)",
1435
1462
  "ui.error.command.unknown.person": "neznámý příkaz „strom {cmd}“",
1436
- "ui.error.command.unknown.person.hint": "strom help --human – nebo jen strom: menu",
1463
+ "ui.error.command.unknown.person.hint": "strom help --human – nebo jen {strom}: menu",
1437
1464
  "ui.error.option.near": "neznámá volba {opt} u {cmd}",
1438
1465
  "ui.error.option.near.hint": "podobná volba: {near}",
1439
1466
  "ui.conflict.none": "žádné otevřené rozpory",
@@ -1441,6 +1468,8 @@
1441
1468
  "ui.conflict.sex": "pohlaví",
1442
1469
  "ui.conflict.sex.U": "neznámé",
1443
1470
  "ui.conflict.name": "jméno",
1471
+ "ui.conflict.titleBefore": "titul před jménem",
1472
+ "ui.conflict.titleAfter": "titul za jménem",
1444
1473
  "ui.conflict.parents": "rodiče",
1445
1474
  "ui.sync.family.union": "{n}. {who}: svazek – {union}",
1446
1475
  "ui.sync.do.family.union": "převezme se (žádný záznam ho nedokládá)",
@@ -1467,6 +1496,23 @@
1467
1496
  "ui.error.arg.missing": "chybí <{arg}>",
1468
1497
  "ui.error.arg.missing.hint": "strom help {cmd}",
1469
1498
  "ui.error.prefix": "chyba",
1499
+ "ui.error.backup.failed": "Zálohu před přechodem z {from} na {to} se nepodařilo vytvořit: {detail}. Nic se nepřepíná: tento strom neotevře žádný rodokmen k zápisu, dokud záloha nebude hotová.",
1500
+ "ui.error.backup.failed.hint": "Uvolnit místo na disku ({where}) a spustit strom znovu – nebo se vrátit: strom update --channel {back}",
1501
+ "ui.error.backup.failed.update": "Zálohu před přechodem z {from} na {to} se nepodařilo vytvořit: {detail}. Nic se nenainstalovalo.",
1502
+ "ui.error.backup.failed.update.hint": "Uvolnit místo na disku ({where}) a znovu strom update --channel {channel}",
1503
+ "ui.error.folder.in-program": "{folder} leží ve složce programu strom {program} – aktualizace ji nahrazuje a odinstalace odstraňuje, výzkum by šel s ní. Nic se nezměnilo.",
1504
+ "ui.error.folder.in-program.hint": "Zvolit složku mimo ni, například {suggested}",
1505
+ "ui.error.folder.in-program.default.hint": "Zadat složku mimo ni: strom setup --home \"{suggested}\" --yes",
1506
+ "ui.error.update.in-program": "{folder} leží uvnitř {entry}, kterou aktualizace nahrazuje – výzkum by šel s ní. Nic se nenainstalovalo.",
1507
+ "ui.error.update.in-program.hint": "Nejdřív přesunout výzkum ze složky programu strom: strom setup ve vlastním terminálu (otázka na složku ho přesune i s výzkumem), pak znovu strom update",
1508
+ "ui.error.tree.newer": "Tento rodokmen zapsal strom {by}, novější než tento strom {version}. Tento strom ho nechává beze změny.",
1509
+ "ui.error.tree.newer.hint": "Aktualizovat strom: strom update",
1510
+ "ui.error.tree.newer.backup": "Tento rodokmen zapsal strom {by}, novější než tento strom {version}. Tento strom ho nechává beze změny.",
1511
+ "ui.error.tree.newer.backup.hint": "Aktualizovat strom: strom update\nZáloha z doby před přechodem: {backup}",
1512
+ "ui.error.tree.newer.beta": "Tento rodokmen zapsal strom {by}, novější než tento strom {version}. Tento strom ho nechává beze změny.",
1513
+ "ui.error.tree.newer.beta.hint": "Vrátit se k betě: strom update --channel beta – nebo počkat na vydání {release}",
1514
+ "ui.error.tree.newer.beta.backup": "Tento rodokmen zapsal strom {by}, novější než tento strom {version}. Tento strom ho nechává beze změny.",
1515
+ "ui.error.tree.newer.beta.backup.hint": "Vrátit se k betě: strom update --channel beta – nebo počkat na vydání {release}\nZáloha z doby před přechodem: {backup}",
1470
1516
  "log.input.app": "Úpravy poslané z aplikace Strom",
1471
1517
  "log.input.app.undo": "Úpravy z aplikace Strom vráceny",
1472
1518
  "ui.init.created": "Rodokmen „{name}“ založen v {path}",
@@ -1474,6 +1520,22 @@
1474
1520
  "ui.init.lang.detected": "jazyk výzkumu: {lang} ({code}) – podle systému; jiný: strom lang <kód>",
1475
1521
  "ui.init.archive": "archiv: data přicházejí z aplikace Strom (výzkum se zapíná přes strom mode research)",
1476
1522
  "ui.init.next": "dál {command}",
1523
+ "ui.setup.summary": "Strom je nastavený.",
1524
+ "ui.setup.summary.home": "domov",
1525
+ "ui.setup.summary.trees": "rodokmeny",
1526
+ "ui.setup.summary.shared": "sdílená data",
1527
+ "ui.setup.summary.lang": "jazyk",
1528
+ "ui.setup.summary.detected": " – podle systému; jiný jazyk: strom config set lang <kód>",
1529
+ "ui.setup.summary.agent": "agent",
1530
+ "ui.setup.summary.missing": " – zatím není nainstalovaný",
1531
+ "ui.setup.summary.talk": "rozhovor",
1532
+ "ui.setup.summary.app": "v aplikaci {app}",
1533
+ "ui.setup.summary.terminal": "v terminálu (jeho CLI)",
1534
+ "ui.setup.summary.both": " – obojí je tu; rozhoduje uživatel: strom setup --where {where}",
1535
+ "ui.setup.summary.knows": "zná strom",
1536
+ "ui.setup.summary.anywhere": "{agent}, v každé složce",
1537
+ "ui.setup.summary.config": "nastavení",
1538
+ "ui.arg.family-tree-name": "název, např. příjmení rodu",
1477
1539
  "ui.arg.agent": "agent",
1478
1540
  "ui.arg.batch": "dávka",
1479
1541
  "ui.arg.book": "kniha",
@@ -1536,6 +1598,8 @@
1536
1598
  "ui.error.option.is-arg.hint": "{cmd} <{arg}>",
1537
1599
  "ui.error.option.unknown": "neznámá volba {opt} u {cmd}",
1538
1600
  "ui.error.option.unknown.hint": "volby: {options} · strom help {path}",
1601
+ "ui.error.option.unknown.none": "neznámá volba {opt} u {cmd}",
1602
+ "ui.error.option.unknown.none.hint": "{help}",
1539
1603
  "ui.error.option.no-value": "{opt} se píše bez hodnoty",
1540
1604
  "ui.error.option.needs-value": "{opt} potřebuje hodnotu {value}",
1541
1605
  "ui.error.option.needs-value.hint": "strom help {path}",
@@ -62,6 +62,9 @@
62
62
  "ui.dialog.refused": "Nicht erlaubt – nichts wurde geändert.",
63
63
  "ui.link.isolated": "Dies ist eine isolierte Installation (STROM_ISOLATED): sie registriert keine strom-research://-Links – diese bleiben beim eigenen strom.",
64
64
  "ui.doc.isolated": "isolierte Installation in {folder}",
65
+ "ui.doc.second": "zweite Installation: der Befehl {command}, in {folder}, ihre Links {scheme}://",
66
+ "ui.doc.home.regular": "auch der Ordner des regulären strom: zwei Installationen an einer Forschung",
67
+ "ui.doc.home.program": "im Programmordner von strom – ein Update oder die Deinstallation könnte sie mitnehmen; besser woandershin (strom setup im Terminal verschiebt sie mit)",
65
68
  "ui.doc.knows.isolated": "isolierte Installation: den Agenten wird außerhalb nichts beigebracht",
66
69
  "ui.doc.links.isolated": "isolierte Installation: registriert keine Links",
67
70
  "ui.doc.app.isolated": "isolierte Installation: absichtlich nicht verwendet",
@@ -74,6 +77,8 @@
74
77
  "ui.consent.connector.revoke": "Den Downloader „{name}“ stoppen?",
75
78
  "ui.consent.host": "Automatisches Herunterladen von {host} erlauben?",
76
79
  "ui.consent.host.revoke": "Automatisches Herunterladen von {host} stoppen?",
80
+ "ui.consent.elsewhere.connector": "Den Downloader „{name}“ starten? Ein Agent fragt danach von außerhalb des Forschungsordners ({cwd}).",
81
+ "ui.consent.elsewhere.run": "Den Agenten allein an der Forschung „{tree}“ arbeiten lassen? Ein Agent fragt danach von außerhalb des Forschungsordners ({cwd}); die Arbeit kostet Geld.",
77
82
  "ui.consent.connectors.off": "Downloader laufen lassen, ohne vorher zu fragen?",
78
83
  "ui.menu.title": "Strom Ahnenforschung {version}",
79
84
  "ui.menu.tree": "Stammbaum: {name} · Personen: {persons}",
@@ -89,7 +94,7 @@
89
94
  "ui.menu.trees": "Anderer Stammbaum · einen schicken oder empfangen",
90
95
  "ui.menu.newtree": "Stammbaum anlegen · einen schicken oder empfangen",
91
96
  "ui.menu.quit": "Beenden",
92
- "ui.menu.bye": "Auf Wiedersehen. Nächstes Mal genügt: strom",
97
+ "ui.menu.bye": "Auf Wiedersehen. Nächstes Mal genügt: {strom}",
93
98
  "ui.run.how": "Wie viele Aufgaben? (er hört früher auf, wenn es nichts mehr zu tun gibt; 0 geht zurück)",
94
99
  "ui.run.start": "Der Agent arbeitet jetzt allein. Strg-C hält ihn an – nichts geht verloren.",
95
100
  "ui.waiting.none": "Nichts wartet.",
@@ -113,14 +118,14 @@
113
118
  "ui.setup.git.ok": "✓ Git (Verlauf der Forschung): {version}",
114
119
  "ui.setup.git.missing": "Git fehlt – strom bewahrt darin den Verlauf der Forschung auf, damit nichts verloren geht.",
115
120
  "ui.setup.git.wait": "Die Installation im geöffneten Fenster abschließen, dann Enter drücken.",
116
- "ui.setup.git.manual": "Installation mit: {command} – dann strom erneut starten.",
121
+ "ui.setup.git.manual": "Installation mit: {command} – dann {strom} erneut starten.",
117
122
  "ui.setup.agent.ok": "✓ KI-Agent: {name}",
118
123
  "ui.setup.agent.none": "Kein KI-Agent gefunden – strom braucht einen: der Agent führt die Forschung im Gespräch.",
119
124
  "ui.setup.agent.install": "Claude Code jetzt installieren (empfohlen; nötig ist ein Claude-Abonnement)",
120
125
  "ui.setup.agent.guide": "Zeigen, welche Agenten es gibt (öffnet eine Seite im Browser)",
121
126
  "ui.setup.agent.later": "Später",
122
127
  "ui.setup.agent.login": "Beim ersten Start des Agenten ist eine Anmeldung nötig – ein Browserfenster öffnet sich.",
123
- "ui.setup.agent.manual": "Einen KI-Agenten installieren (wie: {url}), dann strom erneut starten.",
128
+ "ui.setup.agent.manual": "Einen KI-Agenten installieren (wie: {url}), dann {strom} erneut starten.",
124
129
  "ui.setup.model": "Welches Modell soll die Forschung machen?",
125
130
  "ui.setup.model.opus": "Opus – liest alte Handschriften am besten (empfohlen)",
126
131
  "ui.setup.model.sonnet": "Sonnet – schneller; gedruckte Dokumente und alltägliche Arbeit",
@@ -150,6 +155,7 @@
150
155
  "ui.consent.connector.hosts": "Er verbindet sich nur mit {hosts} – langsam, über den Begrenzer von strom.",
151
156
  "ui.consent.connector.changed": "Sein Code hat sich seit der Erlaubnis geändert.",
152
157
  "ui.consent.connector.direct": "Achtung: sein Code greift selbst auf das Netz zu, am Begrenzer von strom vorbei.",
158
+ "ui.consent.connector.unfenced": "Achtung: er startet ein Programm, das strom nicht eingrenzt ({run}) – es kann alle Dateien dieses Benutzers lesen und ändern, andere Programme starten und jede Adresse erreichen. Nach jeder Änderung seines Codes wird erneut gefragt.",
153
159
  "ui.consent.connector.terms": "Nutzungsbedingungen des Archivs: {terms}",
154
160
  "ui.consent.host.unblock": "{host} hat uns abgewiesen. Wieder erlauben – nur wenn das Archiv gesagt hat, dass es in Ordnung ist?",
155
161
  "ui.menu.otheragent": "Diesmal mit einem anderen Agenten oder woanders sprechen",
@@ -253,6 +259,8 @@
253
259
  "ui.doc.app": "Strom-App",
254
260
  "ui.doc.tree": "dieser Stammbaum",
255
261
  "ui.doc.innode": "strom {version} in Node {node}",
262
+ "ui.doc.fence": "Downloader eingegrenzt",
263
+ "ui.doc.fence.net": "Node {node}: Downloader laufen eingegrenzt, aber erst Node 25 oder neuer hält sie auch vom Netz fern",
256
264
  "ui.doc.oldnode": "Node {node} ist zu alt (nötig: 22.18 oder neuer)",
257
265
  "ui.doc.missing": "fehlt",
258
266
  "ui.doc.notsetup": "noch nicht eingerichtet",
@@ -299,7 +307,7 @@
299
307
  "ui.o.results.offer": "{file} – für die Strom-App, hier noch nicht installiert: biete dem Benutzer die Installation von {url} an (strom app install öffnet sie dort)",
300
308
  "ui.o.results.plain": "{file} – für jedes Stammbaumprogramm",
301
309
  "ui.chat.handover": "Die Forschung geht in einem eigenen Gespräch weiter: Ein neues Fenster mit {agent} im Ordner des Stammbaums hat sich geöffnet. Dort geht es weiter – dieses Gespräch kann enden.",
302
- "ui.chat.handover.failed": "Ein neues Fenster ließ sich hier nicht öffnen. Die Forschung von Hand starten: strom im Terminal (oder die Verknüpfung Strom Ahnenforschung auf dem Desktop).",
310
+ "ui.chat.handover.failed": "Ein neues Fenster ließ sich hier nicht öffnen. Die Forschung von Hand starten: {strom} im Terminal (oder die Verknüpfung Strom Ahnenforschung auf dem Desktop).",
303
311
  "ui.chat.handover.end": "Dort geht es weiter – dieses Gespräch kann enden.",
304
312
  "ui.why.handover": "die Forschung gehört in ein eigenes Gespräch im Ordner des Stammbaums (seine Regeln, keine Nachfrage bei jedem Schritt): dies öffnet es – sag dem Benutzer, dort weiterzumachen; hier nur, wenn er will",
305
313
  "ui.app.research": "Die Forschung {name} wird in der Strom-App geöffnet ({where}): beim ersten Mal als neuer Stammbaum, danach wird derselbe Stammbaum aktualisiert.",
@@ -396,7 +404,9 @@
396
404
  "ui.uninstall.npm": "Das Programm selbst (mit npm installiert): npm uninstall -g strom-research",
397
405
  "ui.uninstall.done": "strom ist deinstalliert. Danke fürs Forschen mit strom.",
398
406
  "ui.uninstall.running": "strom läuft aus dieser Installation noch in einem anderen Fenster ({list}): es schließen – das Menü, ein Gespräch, eine Arbeit des Agenten – und strom uninstall erneut starten. Nichts wurde entfernt.",
399
- "ui.uninstall.later": "verschwindet, sobald dieses Fenster geschlossen ist",
407
+ "ui.uninstall.folderKept": "Der Ordner {folder} bleibt: darin liegt, was strom nicht hineingelegt hat ({what}).",
408
+ "ui.uninstall.later": "verschwindet wenige Sekunden nach dem Ende dieses Befehls",
409
+ "ui.uninstall.skipped": "{path} steht in install.json als Starter von strom, ist aber keiner (ein anderer Name, oder es liegt in der Forschung) – es bleibt.",
400
410
  "ui.menu.update.line": "Eine neue Version von strom ist da: {version}.",
401
411
  "ui.menu.update": "strom auf {version} aktualisieren",
402
412
  "ui.doc.update": "neue Version",
@@ -404,7 +414,7 @@
404
414
  "ui.update.unknown": "Die neueste Version von strom ließ sich nicht ermitteln.",
405
415
  "ui.update.current": "strom {version} ist die neueste Version.",
406
416
  "ui.update.available": "Eine neue Version ist da: {version} (diese ist {current}) – strom update installiert sie.",
407
- "ui.update.npm": "Eine neue Version ist da: {version}. strom ist hier mit npm installiert: npm install -g strom-research@latest",
417
+ "ui.update.npm": "Eine neue Version ist da: {version}. strom ist hier mit npm installiert: npm install -g strom-research@{tag}",
408
418
  "ui.update.sure": "strom von {current} auf {version} aktualisieren? Die Forschungen bleiben, wie sie sind.",
409
419
  "ui.update.later": "Nicht jetzt – jederzeit strom update.",
410
420
  "ui.update.downloading": "strom {version} wird heruntergeladen…",
@@ -432,6 +442,19 @@
432
442
  "ui.update.node.sure": "strom's Node von {from} auf {to} aktualisieren (Sicherheitskorrekturen)?",
433
443
  "ui.update.node.done": "✓ Node ist aktualisiert: {from} → {to}.",
434
444
  "ui.update.bridges": "Die Live-Ansicht in der Strom-App läuft mit der neuen Version weiter ({n}).",
445
+ "ui.update.npm.channel": "strom ist hier mit npm installiert: npm install -g strom-research@{tag}",
446
+ "ui.update.channel.beta.sure": "strom auf die Beta-Versionen umstellen: {current} → {version}?",
447
+ "ui.update.channel.stable.sure": "strom zu den veröffentlichten Versionen zurückstellen: {current} → {version}?",
448
+ "ui.update.channel.beta.now": "Ab jetzt nimmt strom die Beta-Versionen.",
449
+ "ui.update.channel.stable.now": "Ab jetzt nimmt strom die veröffentlichten Versionen.",
450
+ "ui.update.older": "{version} ist eine ältere Version als {current}; die Forschungen bleiben, wie sie sind.",
451
+ "ui.update.stays": "Die Forschungen bleiben, wie sie sind.",
452
+ "ui.doc.beta": "Beta-Versionen",
453
+ "ui.doc.backup": "Sicherung",
454
+ "ui.backup.made": "Sicherung vor dem Wechsel von {from} auf {to}: {path} ({size}).",
455
+ "ui.backup.last": "Letzte Sicherung (vor dem Wechsel von {from} auf {to}, {date}): {path}",
456
+ "ui.backup.readme": "Strom-Forschung – eine Sicherung\n\nErstellt {date}, vor dem Wechsel von strom {from} auf {to}.\n\nDarin:\n- trees: alle Stammbäume dieses Computers, jeder mit seinem ganzen Ordner samt Verlauf (.git);\n- settings: die Einstellungen von strom mit den Siegelschlüsseln und den Anmeldungen, wie sie auf diesem Computer waren.\n\nNicht darin: die gemeinsamen Bilder (der Ordner shared/media). Jedes liegt dort nach seinem Inhalt, und strom löscht keines; jede Version von strom liest dieselben. Ebenfalls weggelassen: was strom selbst wieder erstellt (Ansichten von Scans, Ausschnitte).\n\nEinen Stammbaum zurückholen: seinen Ordner aus trees dorthin zurückkopieren, wo die Stammbäume liegen (anstelle des vorhandenen oder daneben unter anderem Namen), dann {strom} starten: strom prüft ihn ({strom} check).",
457
+ "ui.trees.locked": "gesperrt: geschrieben von strom {by}",
435
458
  "ui.setup.stromapp": "Die Strom-App (kostenlos, im Browser) zeigt die Forschung als Stammbaum – jeden Eintrag mit seinem Bild aus dem Scan, die Geschichten der Vorfahren – und verfolgt sie live, während der Agent arbeitet. Soll sie verwendet werden?",
436
459
  "ui.setup.stromapp.install": "Ja – jetzt installieren (sie öffnet sich im Browser, strom zeigt, wo zu klicken ist)",
437
460
  "ui.setup.stromapp.later": "Ja, aber nicht jetzt",
@@ -631,7 +654,7 @@
631
654
  "ui.help.archive.stats": "Das Archiv auf einen Blick: Personen, wie sicher die Angaben sind, Vorfahren je Generation",
632
655
  "ui.help.archive.pack": "Das Archiv in eine ZIP-Datei packen, damit jemand anderes weitermachen kann",
633
656
  "ui.help.archive.intake": "Material der Familie hinzufügen: Dokumente, Fotos, einen Stammbaum, eigenes Wissen",
634
- "ui.help.title": "strom <Befehl> – was ein Mensch mit strom tut (oder nur strom: das Menü)",
657
+ "ui.help.title": "strom <Befehl> – was ein Mensch mit strom tut (oder nur {strom}: das Menü)",
635
658
  "ui.help.more": "Hilfe zu einem Befehl: strom help <Befehl> --human · alle Befehle auf Englisch (was ein Agent liest): strom help",
636
659
  "ui.help.more.archive": "Hilfe zu einem Befehl: strom help <Befehl> --human",
637
660
  "ui.help.examples": "Beispiele:",
@@ -732,6 +755,9 @@
732
755
  "ui.sync.name.new": "{n}. {who}: ein weiterer Name — {text}",
733
756
  "ui.sync.name.changed": "{n}. {who}: Name geändert — {old} → {new}",
734
757
  "ui.sync.do.name.user": "Die eigene Änderung gilt: die Person erscheint unter dem neuen Namen, der Name aus dem Eintrag bleibt daneben",
758
+ "ui.sync.name.title": "{n}. {who}: {title} — {old} → {new}",
759
+ "ui.sync.do.title": "wird dem Namen hinzugefügt, mit Verweis auf den eigenen Stammbaum",
760
+ "ui.sync.do.title.user": "Die eigene Änderung gilt (die der Forschung bleibt in ihrer Geschichte)",
735
761
  "ui.sync.sex.changed": "{n}. {who}: Geschlecht {text}",
736
762
  "ui.sync.note.new": "{n}. {who}: eine Notiz — „{text}“",
737
763
  "ui.sync.source.new": "{n}. eine Quelle: „{text}“",
@@ -981,8 +1007,8 @@
981
1007
  "ui.link.off.done": "Links aus der Strom-App führen hier nicht mehr zur Forschung.",
982
1008
  "ui.link.off.failed": "Die Links aus der Strom-App ließen sich von diesem Computer nicht entfernen.",
983
1009
  "ui.link.which.one": "Diese Forschung ist hier mehrmals vorhanden. Welche?",
984
- "ui.link.noterminal.any": "strom konnte kein Terminalfenster öffnen. strom starten (die Forschung {name}) und in seinem Menü weitermachen.",
985
- "ui.link.noterminal.new": "strom konnte kein Terminalfenster öffnen. strom starten und es dann erneut aus der Strom-App versuchen.",
1010
+ "ui.link.noterminal.any": "strom konnte kein Terminalfenster öffnen. {strom} starten (die Forschung {name}) und in seinem Menü weitermachen.",
1011
+ "ui.link.noterminal.new": "strom konnte kein Terminalfenster öffnen. {strom} starten und es dann erneut aus der Strom-App versuchen.",
986
1012
  "ui.link.asks": "Die Strom-App bittet um: {what}\nForschung: {name}",
987
1013
  "ui.link.go": "Fortfahren?",
988
1014
  "ui.link.cost": "Der Agent arbeitet auf das eigene Abonnement oder KI-Guthaben.",
@@ -1304,6 +1330,7 @@
1304
1330
  "ui.home.stays": "Die Forschung bleibt in {from}.",
1305
1331
  "ui.home.inside": "{to} liegt im Ordner der Forschung {from} (oder umgekehrt) – einen Ordner daneben wählen.",
1306
1332
  "ui.home.notEmpty": "In {to} liegt schon etwas – die Forschung zieht nur in einen leeren oder neuen Ordner.",
1333
+ "ui.home.program": "{to} liegt im Programmordner von strom – ein Update ersetzt, was dort liegt; ein Ordner außerhalb ist nötig.",
1307
1334
  "ui.home.busy": "Im Stammbaum {trees} arbeitet gerade jemand (ein Agent, ein Lauf oder die Strom-App live) – die Forschung kann umziehen, wenn das fertig ist.",
1308
1335
  "ui.home.failed": "Das Verschieben ging nicht ({reason}) – nichts wurde geändert.",
1309
1336
  "ui.app.notinstalled": "Die Strom-App ist auf diesem Computer noch nicht installiert. Jetzt als App aus dem Browser installieren (kostenlos; strom zeigt, wo zu klicken ist)?",
@@ -1375,7 +1402,7 @@
1375
1402
  "ui.unpack.kept": " Konnektor {name} war schon da – der vorhandene bleibt",
1376
1403
  "ui.unpack.left": " {n} durchgesehene Seiten sind nicht darin: strom lädt sie aus dem Archiv, wenn sie gebraucht werden",
1377
1404
  "ui.unpack.adopted": " auf diesem Computer übernommen",
1378
- "ui.unpack.next": "Weiter: strom (das Menü) oder strom chat.",
1405
+ "ui.unpack.next": "Weiter: {strom} (das Menü) oder strom chat.",
1379
1406
  "ui.unpack.same": "diese Forschung ist schon da: {root}",
1380
1407
  "ui.unpack.person": "eine Forschung packt nur die Person am Computer aus (sie fügt Konnektoren hinzu)",
1381
1408
  "ui.pack.launch.extract": "Zuerst die ganze ZIP-Datei auspacken – unter Windows mit Rechtsklick: Alle extrahieren – und dies dann im ausgepackten Ordner neu starten.",
@@ -1433,7 +1460,7 @@
1433
1460
  "ui.error.command.unknown": "unbekannter Befehl „strom {cmd}“",
1434
1461
  "ui.error.command.unknown.hint": "strom help (alle Befehle)",
1435
1462
  "ui.error.command.unknown.person": "unbekannter Befehl „strom {cmd}“",
1436
- "ui.error.command.unknown.person.hint": "strom help --human – oder nur strom: das Menü",
1463
+ "ui.error.command.unknown.person.hint": "strom help --human – oder nur {strom}: das Menü",
1437
1464
  "ui.error.option.near": "unbekannte Option {opt} für {cmd}",
1438
1465
  "ui.error.option.near.hint": "ähnliche Option: {near}",
1439
1466
  "ui.conflict.none": "keine offenen Widersprüche",
@@ -1441,6 +1468,8 @@
1441
1468
  "ui.conflict.sex": "Geschlecht",
1442
1469
  "ui.conflict.sex.U": "unbekannt",
1443
1470
  "ui.conflict.name": "Name",
1471
+ "ui.conflict.titleBefore": "Titel vor dem Namen",
1472
+ "ui.conflict.titleAfter": "Titel nach dem Namen",
1444
1473
  "ui.conflict.parents": "Eltern",
1445
1474
  "ui.sync.family.union": "{n}. {who}: Verbindung – {union}",
1446
1475
  "ui.sync.do.family.union": "übernommen (kein Eintrag belegt es)",
@@ -1467,6 +1496,23 @@
1467
1496
  "ui.error.arg.missing": "<{arg}> fehlt",
1468
1497
  "ui.error.arg.missing.hint": "strom help {cmd}",
1469
1498
  "ui.error.prefix": "Fehler",
1499
+ "ui.error.backup.failed": "Die Sicherung vor dem Wechsel von {from} auf {to} ließ sich nicht erstellen: {detail}. Es wird nichts umgestellt: dieses strom öffnet keinen Stammbaum zum Schreiben, bis die Sicherung erstellt ist.",
1500
+ "ui.error.backup.failed.hint": "Platz auf dem Datenträger freimachen ({where}) und strom erneut starten – oder zurück: strom update --channel {back}",
1501
+ "ui.error.backup.failed.update": "Die Sicherung vor dem Wechsel von {from} auf {to} ließ sich nicht erstellen: {detail}. Es wurde nichts installiert.",
1502
+ "ui.error.backup.failed.update.hint": "Platz auf dem Datenträger freimachen ({where}), dann erneut strom update --channel {channel}",
1503
+ "ui.error.folder.in-program": "{folder} liegt im Programmordner von strom {program} – ein Update von strom ersetzt, was dort liegt, und die Deinstallation entfernt es, die Forschung mit. Nichts wurde geändert.",
1504
+ "ui.error.folder.in-program.hint": "Einen Ordner außerhalb wählen, zum Beispiel {suggested}",
1505
+ "ui.error.folder.in-program.default.hint": "Einen Ordner außerhalb angeben: strom setup --home \"{suggested}\" --yes",
1506
+ "ui.error.update.in-program": "{folder} liegt in {entry}, das das Update ersetzt – die Forschung ginge mit. Nichts wurde installiert.",
1507
+ "ui.error.update.in-program.hint": "Zuerst die Forschung aus dem Programmordner von strom verschieben: strom setup in einem eigenen Terminal (die Frage nach dem Ordner verschiebt sie mit), dann erneut strom update",
1508
+ "ui.error.tree.newer": "Diesen Stammbaum hat strom {by} geschrieben, neuer als dieses strom {version}. Dieses strom lässt ihn unverändert.",
1509
+ "ui.error.tree.newer.hint": "strom aktualisieren: strom update",
1510
+ "ui.error.tree.newer.backup": "Diesen Stammbaum hat strom {by} geschrieben, neuer als dieses strom {version}. Dieses strom lässt ihn unverändert.",
1511
+ "ui.error.tree.newer.backup.hint": "strom aktualisieren: strom update\nDie Sicherung vor dem Wechsel: {backup}",
1512
+ "ui.error.tree.newer.beta": "Diesen Stammbaum hat strom {by} geschrieben, neuer als dieses strom {version}. Dieses strom lässt ihn unverändert.",
1513
+ "ui.error.tree.newer.beta.hint": "Zurück zur Beta: strom update --channel beta – oder auf die Veröffentlichung von {release} warten",
1514
+ "ui.error.tree.newer.beta.backup": "Diesen Stammbaum hat strom {by} geschrieben, neuer als dieses strom {version}. Dieses strom lässt ihn unverändert.",
1515
+ "ui.error.tree.newer.beta.backup.hint": "Zurück zur Beta: strom update --channel beta – oder auf die Veröffentlichung von {release} warten\nDie Sicherung vor dem Wechsel: {backup}",
1470
1516
  "log.input.app": "Aus der Strom-App gesendete Änderungen",
1471
1517
  "log.input.app.undo": "Änderungen aus der Strom-App zurückgenommen",
1472
1518
  "ui.init.created": "Stammbaum „{name}“ angelegt in {path}",
@@ -1474,6 +1520,22 @@
1474
1520
  "ui.init.lang.detected": "Sprache der Forschung: {lang} ({code}) – vom System übernommen; eine andere: strom lang <Code>",
1475
1521
  "ui.init.archive": "ein Archiv: die Daten kommen aus der Strom-App (die Forschung wird mit strom mode research eingeschaltet)",
1476
1522
  "ui.init.next": "weiter {command}",
1523
+ "ui.setup.summary": "Strom ist eingerichtet.",
1524
+ "ui.setup.summary.home": "Zuhause",
1525
+ "ui.setup.summary.trees": "Stammbäume",
1526
+ "ui.setup.summary.shared": "gemeinsame Daten",
1527
+ "ui.setup.summary.lang": "Sprache",
1528
+ "ui.setup.summary.detected": " – vom System erkannt; eine andere Sprache: strom config set lang <Code>",
1529
+ "ui.setup.summary.agent": "Agent",
1530
+ "ui.setup.summary.missing": " – noch nicht installiert",
1531
+ "ui.setup.summary.talk": "Gespräch",
1532
+ "ui.setup.summary.app": "in der App {app}",
1533
+ "ui.setup.summary.terminal": "im Terminal (seine CLI)",
1534
+ "ui.setup.summary.both": " – beides ist hier; die Entscheidung liegt beim Benutzer: strom setup --where {where}",
1535
+ "ui.setup.summary.knows": "kennt strom",
1536
+ "ui.setup.summary.anywhere": "{agent}, in jedem Ordner",
1537
+ "ui.setup.summary.config": "Einstellungen",
1538
+ "ui.arg.family-tree-name": "Name, z. B. der Familienname",
1477
1539
  "ui.arg.agent": "Agent",
1478
1540
  "ui.arg.batch": "Stapel",
1479
1541
  "ui.arg.book": "Buch",
@@ -1536,6 +1598,8 @@
1536
1598
  "ui.error.option.is-arg.hint": "{cmd} <{arg}>",
1537
1599
  "ui.error.option.unknown": "unbekannte Option {opt} für {cmd}",
1538
1600
  "ui.error.option.unknown.hint": "Optionen: {options} · strom help {path}",
1601
+ "ui.error.option.unknown.none": "unbekannte Option {opt} für {cmd}",
1602
+ "ui.error.option.unknown.none.hint": "{help}",
1539
1603
  "ui.error.option.no-value": "{opt} hat keinen Wert",
1540
1604
  "ui.error.option.needs-value": "{opt} braucht einen Wert {value}",
1541
1605
  "ui.error.option.needs-value.hint": "strom help {path}",
@@ -25,7 +25,11 @@ without --dry-run. `#name` labels what a line creates, `@name` uses it later.
25
25
  and what the record adds to it: `event edit E… --age husband:27 --age wife:17
26
26
  --house 21 --with "witness:…" --with "officiant:…"` (filling in needs no reason).
27
27
  - The names a record gives go on the person: `name add` (a maiden name completes
28
- "Marie" to "Marie /Svobodová/"; a married name is `--kind married`).
28
+ "Marie" to "Marie /Svobodová/"; a married name is `--kind married`). A title
29
+ written with the name ("Ing.", "MUDr.", "ml.", "jun.") is the name's `--prefix`
30
+ or `--suffix` (`person add`, `name add`, `person edit`), never part of the
31
+ given name or the surname; a rank or office the record states is a fact
32
+ (`TITL`, `OCCU`).
29
33
  - A record that names someone's parents (a grandchild's baptism naming the
30
34
  grandparents) cites the family itself (`family add … --cite`, `cite F…`) and
31
35
  the new people's names (`person add … --cite`) — with `--information
@@ -148,6 +148,11 @@ as well: see step 2.
148
148
  - strom shows each image's size (width × height). It should be the right page
149
149
  and full size, not a thumbnail. Check that the number of images of a book
150
150
  matches the portal.
151
+ - Keep `run` in connector.json as `["node", "connector.ts"]`: then it runs
152
+ fenced in (Node's permission model) and you may change the code without
153
+ asking. Split it into more files of this folder if you like, imported from
154
+ connector.ts. Another program, or a switch of Node's in `run`, needs the
155
+ user's consent after every change.
151
156
  - If strom answers with exit code 4 (consent required), stop and tell the
152
157
  user: they give it in their own terminal after reading the warning
153
158
  (`strom allow connector __NAME__`). You never do that.
@@ -56,6 +56,10 @@ starts with `.` or `_` are ignored (`_old-version/`).
56
56
  - `title`: the archive or portal, as people call it.
57
57
  - `run`: the program and its arguments, started in the connector's folder.
58
58
  `"node"` is the Node that runs strom (it runs TypeScript as it is).
59
+ `"node"` followed only by files of the connector's folder (no switches, no
60
+ `..`, no absolute paths) runs in Node's permission model. Any other program,
61
+ or a switch of Node's, runs only with the user's consent to the code exactly
62
+ as it is, asked again after every change of it.
59
63
  - `hosts`: every host it contacts. `"example.org"` includes its subdomains.
60
64
  strom refuses requests anywhere else, and each host needs the user's consent.
61
65
  - `can`: what it does: any of `find`, `list`, `fetch`, `part`, `locate`.
@@ -384,8 +388,9 @@ with the text round it.
384
388
  A connector runs as soon as it is in the folder. Two things need the user's
385
389
  consent, given in their own terminal (`strom allow connector <name>`, or when
386
390
  they run a test or a fetch themselves, where strom asks right away):
387
- - code that reaches the network itself, past strom: always, and again after
388
- every change of it;
391
+ - a `run` other than `"node"` and files of its folder, or code that seems to
392
+ reach the network itself, past strom: always, and again after every change
393
+ of it;
389
394
  - every connector and each of its hosts, when the user asked to be asked first
390
395
  (`strom config set connectors.consent on`).
391
396